汇总不同行的过滤器值

时间:2014-12-03 12:18:48

标签: excel business-intelligence powerpivot dax

我需要计算某些销售订单的总运费。数据集如下:

enter image description here

我遇到的问题是,虽然在计算中每个订单只应考虑一次运费,但在数据集中对每个订单项重复一次,因此运费很简单:

=SUM(MyTable[Shipping]) = 90 // wrong value

但我需要的是:

  • 过滤表格,每个订单只保留1行
  • 总结出货

应该是这样的:

=SUMX(FILTER(MyTable,<filter>),MyTable[Shipping]) = 35 // correct value

但我很难写<filter>。我发现DISTINCT会返回唯一订单ID的列表,但不会返回相应的行。

有没有人知道如何编写过滤器来正确计算出货量?

3 个答案:

答案 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))

对于您的数据:

example

35

当然,如果数据被过滤,您将使用 SUBTOTAL()函数或其他帮助列的变体。

答案 2 :(得分:1)

以与Gary的推荐非常类似的方式,你可以使用(在另一个col-E2中):

=IF(COUNTIF($A$2:A2,A2)>1,D2,0)

这将显示col E本身的交付成本。然后你可以只用SUM(E2:E)来看总成本(35)。