PowerBI:根据 DATEDIFF 上的条件正确聚合度量
Posted
技术标签:
【中文标题】PowerBI:根据 DATEDIFF 上的条件正确聚合度量【英文标题】:PowerBI: Aggregate Measure correctly by condition on DATEDIFF 【发布时间】:2021-12-05 08:26:08 【问题描述】:我有下表:
BaseTable
它表示具有一定类别的进程。
在 TIMESTAMP 列上还有一个日期表。
我想显示一个基于另一个度量的度量,该度量计算所选日期之前的日期差异。
首先这是我计算日期差异的方式:
AGE =
VAR SELECTED_DATE = CALCULATE(MAX(DATUM[Date]), ALLSELECTED(DATUM))
VAR STARTDATE_PROCESS = Calculate(MAX(Workflow[MIN_TIMESTAMP]),DATUM[Date]<=MAX(DATUM[Date]), ALL(DATUM[Date]))
RETURN
DATEDIFF(STARTDATE_PROCESS,SELECTED_DATE,DAY)
现在我想使用一个取决于 AGE 结果的度量,例如
NEW = IF([AGE]<=3,CALCULATE(COUNT(Workflow[PROCESS]),DATUM[Date]<=MAX(DATUM[Date]),ALL(DATUM)))
或
OLD = IF([AGE]>3,CALCULATE(COUNT(Workflow[PROCESS]),DATUM[Date]<=MAX(DATUM[Date]),ALL(DATUM)))
测量 AGE、OLD 和 NEW 与 Base Table 类似:
Measures
如您所见,聚合无法正常工作:
Result_Wrong
但应该是这样的
Result_Correct
知道如何解决这个问题吗?
谢谢!
【问题讨论】:
您的确切报告要求是什么? 想根据我选择的日期显示一个组中有多少进程是旧的或新的。 你已经有了这些,我可以在“结果”图像中看到,如果你的结果图像是错误的,请发布你的最终结果应该是什么样子,在基表图像中也没有带有“年龄”,请更新您的基表图像以及数据集,明天将尝试为您提供解决方案。 酷,谢谢!我已经更新了描述。祝你好运,敬请期待! :) 再更新一次 - 所以这非常详细地描述了我的问题 - 希望对您有所帮助! 【参考方案1】:所以问题在于,小计是在完全不同的上下文中计算的,并且因为您的 Age 度量是基于 MAX(Workflow[MIN_TIMESTAMP])
的,而没有考虑到可能存在多个进程。
要做您想做的事,您需要更改New
和Old
度量以执行每个进程的聚合,然后返回结果。像这样的:
New_agg =
VAR tbl = ADDCOLUMNS(CALCULATETABLE(VALUES(Workflow[Process]), ALL('Date')), "age", [Age], "count_process", CALCULATE(COUNT(Workflow[Process]), ALL('Date')))
RETURN SUMX(tbl, IF([age]<=3, [count_process]))
Demo File
【讨论】:
感谢您的回答,但不幸的是没有结果:( 玩这个公式,这将是一些变化。我注意到我的文件中没有ALL(Datum)
,因为我没有创建日期表,而是使用了固定日期。
玩过但没有成功。我尝试的最后一件事是`New_agg = VAR tbl = SUMMARIZE(Workflow,Workflow[PROCESS], "age", [AGE], "count_process", CALCULATE(COUNT(Workflow[PROCESS]),ALL(DATUM))) RETURN SUMX (tbl, IF([age]
嗨,请尝试更新后的答案。
太棒了,因为我断开了它使用的日期表 NEW2 = VAR tbl = ADDCOLUMNS(CALCULATETABLE(VALUES(Workflow[Process]), ALL('DATUM')), "age", [Age ], "count_process", CALCULATE(COUNT(Workflow[Process]),Workflow[TIMESTAMP]
【参考方案2】:
如果以下解决方案有效,请告诉我
很遗憾,我无法生成您一直在使用的虚拟数据,因此创建了自己的数据来开发解决方案。
现在我根据这些数据计算了日期的差异并将其作为年龄
现在为了获得像你这样的条件的进程计数,我创建了两个公式,结果是:
我在这里遵循的逻辑是,我没有创建度量,而是创建了列并将这些列的总和作为这些列的总和提供了您需要的数据。
新栏目:
New = IF((Sheet1[Age]) > 20, 1,0)
旧栏:
Old = IF((Sheet1[Age]) < 20, 1,0)
现在将两个公式放在“Values”中,并将sum作为聚合。
最终结果是
【讨论】:
您的年龄公式不符合问题的要求以上是关于PowerBI:根据 DATEDIFF 上的条件正确聚合度量的主要内容,如果未能解决你的问题,请参考以下文章