总结不同行filter上的值
我需要计算一些销售订单的总运输成本。 数据集如下:
我遇到的问题是,虽然计算中每次订单只需考虑一次运输成本,但在数据集中,每个订单商品都会重复运输成本,因此一个简单的重复运输成本是:
=SUM(MyTable[Shipping]) = 90 // wrong value
然而,我需要的是:
- 过滤表格,每个订单只保留1行
- 总结航运
这应该是这样的:
=SUMX(FILTER(MyTable,<filter>),MyTable[Shipping]) = 35 // correct value
但是我正在努力编写<filter>
。 我发现DISTINCT
返回唯一订单ID的列表,但不是它们对应的行。
有没有人有任何想法,我可以写filter来正确计算运输?
Xfunction是非直观的,但非常强大 – 你在正确的路线。
我会用两个办法来处理这个问题,第一个是将运费计算在内,然后除以该订单的行数。 (下半部分的关键是ALL(),它在引用的列上打开上下文,同时保留其他上下文。)
第二个是按顺序迭代这个度量,然后求和结果。
[Allocated Shipping] = SUM ( MyTable[Shipping] ) / CALCULATE ( COUNTROWS ( MyTable ), ALL ( MyTable[Item] ) ) [Iterated Shipping] = SUMX(VALUES(MyTable[Order]), [Allocated Shipping])
最简单的方法是使用Helper列。 在E2中input:
=IF(COUNTIF($A$1:A2,A2)>1,0,1)
并抄下来。 这将识别列A中的唯一值。要汇总这些唯一值,请使用:
=SUMPRODUCT(--(E2:E9=1)*(D2:D9))
为了您的数据:
值为35
当然,如果数据被过滤了,你可以使用SUBTOTAL()函数或者一个辅助列的变体。
与Gary的build议非常类似,您可以使用(在另一个col – E2中):
=IF(COUNTIF($A$2:A2,A2)>1,D2,0)
这将显示col E本身的交货成本。 那么你可以只是SUM(E2:E)来查看总成本(35)。