客户表(包含报价方案)

报价表(不同方案不同计划)

重量数据表

关系图

返回效果,根据重量去计算客户所对应的报价方案来计算运费。(运费计算公式:公斤价格*重量(g)/1000+挂号费)

针对报价表,我们首先要确定实际重量处于报价重量区间哪一部分,适用于哪个报价。
筛选重量所对应的区间。
'重量数据'[重量]>='报价表'[起始重量] &&
'重量数据'[重量]<'报价表'[结束重量]筛选客户对应的方案。
'重量数据'[客户]=Related('客户表'[客户])解释:因为重量数据表和客户表是有关联,客户表是1端,重量数据表是多端,所以如果多端直接引用1端则使用Related。因为重量数据表里面没有客户信息,只有方案信息,所以要通过Related去引用客户表里的对应的客户信息。
以第一个数据,我们把条件代入筛选公式。甲客户,300g。通过Related去关联到甲客户对应的报价方案A,在标价表中去筛选方案A

然后根据重量去寻找哪个区间段。300g小于结束重量,并大于起始重量的只有0-500这个区间。所以我们得出的报价筛选结果如下图。

筛选出报价表后,那就容易计算了,我们需要提取2个字段,一个是公斤价格,一个是挂号费。针对单行的表格,取字段值就可以直接用Values函数。因为Values返回的是表,但是如果是当行单列则返回的是值格式。添加列书写:
var f= Filter('报价表','重量数据'[重量]>='报价表'[起始重量] &&
'重量数据'[重量]<'报价表'[结束重量] &&
Related('客户表'[客户])='重量数据'[客户]
)
return
Calculate(Values('报价表'[公斤价格]),f)*'重量数据'[重量]/1000
+ Calculate(Values('报价表'[挂号费]),f)度量值书写:
SumX('重量数据',
//公斤费计算
Calculate(Values('报价表'[公斤价格]),Filter('报价表','报价表'[起始重量]<='重量数据'[重量] &&
'报价表'[结束重量]>'重量数据'[重量] &&
Related('客户表'[客户])='重量数据'[客户]
)
)*'重量数据'[重量]/1000
//挂号费计算
+ Calculate(Values('报价表'[挂号费]),Filter('报价表','报价表'[起始重量]<='重量数据'[重量] &&
'报价表'[结束重量]>'重量数据'[重量] &&
Related('客户表'[客户])='重量数据'[客户]
)
)
)注意:在度量值中,如果直接使用var变量的话,会出现错误,因为涉及到上下文的原因。
如果觉得有帮助,那麻烦您进行转发,让更多的人能够提高自身的工作效率。