我需要计算某些销售订单的总运费。数据集如下:
我遇到的问题是,虽然在计算中每个订单只应考虑一次运费,但在数据集中对每个订单项重复一次,因此运费很简单:
=SUM(MyTable[Shipping]) = 90 // wrong value
但我需要的是:
应该是这样的:
=SUMX(FILTER(MyTable,<filter>),MyTable[Shipping]) = 35 // correct value
但我很难写<filter>
。我发现DISTINCT
会返回唯一订单ID的列表,但不会返回相应的行。
有没有人知道如何编写过滤器来正确计算出货量?
答案 0 :(得分:2)
X功能不直观但功能非常强大 - 您的选择正确。
我会采用两种方法来解决这个问题,第一种是将运费与实际数量相加并除以该订单的行数。 (后半部分的键是ALL(),它在引用的列上打开上下文,同时保留其他上下文。)
第二个按顺序迭代该度量并对结果求和。
[Allocated Shipping] =
SUM ( MyTable[Shipping] )
/ CALCULATE ( COUNTROWS ( MyTable ), ALL ( MyTable[Item] ) )
[Iterated Shipping] =
SUMX(VALUES(MyTable[Order]), [Allocated Shipping])
答案 1 :(得分:1)
最简单的方法是使用 Helper 列。在 E2 中输入:
=IF(COUNTIF($A$1:A2,A2)>1,0,1)
并复制下来。这将标识 A列中的唯一值。要对这些唯一值求和,请使用:
=SUMPRODUCT(--(E2:E9=1)*(D2:D9))
对于您的数据:
值 35
当然,如果数据被过滤,您将使用 SUBTOTAL()函数或其他帮助列的变体。
答案 2 :(得分:1)
以与Gary的推荐非常类似的方式,你可以使用(在另一个col-E2中):
=IF(COUNTIF($A$2:A2,A2)>1,D2,0)
这将显示col E本身的交付成本。然后你可以只用SUM(E2:E)来看总成本(35)。