【问题标题】:DAX running total + starting valueDAX 运行总计 + 起始值
【发布时间】:2018-10-25 12:24:06
【问题描述】:

我对 DAX 世界还很陌生,但通过滚动浏览,我成功地实现了累积(运行)总计,并沿此结构定义了一个度量:Running_Total_QTY:=CALCULATE(SUM(Reporting[QTY]),FILTER(ALL(Reporting[DATE_R]),Reporting[DATE_R]<=MAX(Reporting[DATE_R])))

对于如下所示的表格:

ID  DATE_R          QTY
A1  5/11/2018 9:00  5
A1  5/11/2018 9:01  10
A1  5/11/2018 9:01  -5
A1  5/11/2018 9:02  50
A1  5/11/2018 9:05  -20
B1  5/11/2018 9:00  3
B1  5/11/2018 9:01  -20
B1  5/11/2018 9:01  4
B1  5/11/2018 9:02  20
B1  5/11/2018 9:03  10

问题是我需要在这个运行总数中添加一个起始数量 - QTY_INIT,我从另一个看起来像这样的表中收到它:

ID1 QTY_INIT
A1  100
B1  200

通过反复试验,我成功地创建了第二个度量来计算平均值(1 个项目!),定义如下:

Average_starting_quantity:=CALCULATE(AVERAGE(Starting_Quantity[QTY_INIT]),FILTER(ALL(Starting_Quantity[ID1]),Starting_Quantity[ID1]=LASTNONBLANK(Reporting[ID],TRUE())))

然后将两个度量相加。

Running_plus_total:=[Running_Total_QTY]+[Average_starting_quantity]

这种方法有效,但是效率很低,速度也很慢(数据集很大)。

如何在不使用“假”平均值(或最大值、最小值等)的情况下直接从第二个表中添加 QTY_INIT?如何优化度量以提高性能?

提前感谢您的帮助。

问候

【问题讨论】:

  • 是否有任何商业原因阻止您将初始值附加到数据集的开头?从那时起,您将所有数据都放在一个表中,这意味着您只需使用 [Running_Total_QTY] 度量即可获得结果。
  • 嗨,马库斯,谢谢。原则上这是最优雅的解决方案,但我宁愿避免附加数据,因为我有更多的分析需要省略初始数量。

标签: dax powerpivot cumulative-sum


【解决方案1】:

用这个代替你的Average_starting_quantity怎么样?

StartingQty = LOOKUPVALUE(Starting_Quantity[QTY_INIT],
                          Starting_Quantity[ID1], MAX(Reporting[ID]))

如果您的表与 IDID1 相关,并且交叉过滤器方向双向,

那么你就可以使用

StartingQty = MAX(Starting_Quantity[QTY_INIT])

因为ID 上的过滤器上下文将流向ID1

【讨论】:

  • 谢谢!你的第一种方法对我有用,但我不得不用 LASTNONBLANK 替换 MAX,因为 Reporting[ID] 是一个返回错误的字符串。(我在 Excel 而不是 Power BI 上运行——以防万一)。第二种方法也适用于调整。在 Excel 中,我似乎无法将交叉过滤器明确定义为双向,但查看此链接 link 我修改了您的建议以使其工作:CALCULATE(MAX(Starting_Quantity[ID1]), CROSSFILTER(Reporting[ID],Starting_Quantity[ID1],Both))
  • 感谢您指出这些差异。我更多地使用 Power BI,它的工作方式确实略有不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多