PowerBI:根据 DATEDIFF 条件正确聚合度量
PowerBI: Aggregate Measure correctly by condition on DATEDIFF
我有以下 Table:
BaseTable
它表示具有特定类别的进程。
TIMESTAMP 列上还有一个日期 Table。
我想显示一个基于另一个度量的度量,该度量计算所选日期之前的日期差异。
所以首先这是我计算日期差异的方法:
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 结果的 Measure,比如
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
知道如何解决这个问题吗?
谢谢!
所以问题是小计是在完全不同的上下文中计算的,并且因为您的年龄度量是基于 MAX(Workflow[MIN_TIMESTAMP])
的,所以不会考虑可能存在多个过程。
要执行您想要的操作,您需要更改 New
和 Old
度量以对每个进程执行聚合,然后 return 结果。像这样:
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]))
让我知道以下解决方案是否有效
很遗憾,我无法生成您一直在使用的虚拟数据,因此创建了我自己的数据来开发解决方案。
现在根据这些数据我计算了日期的差异并将其作为年龄
现在为了获得像您这样的条件的进程数,我创建了两个公式,结果是:
我在这里遵循的逻辑是,我没有创建度量值,而是创建了列并计算了这些列的总和,这将提供您需要的数据作为这些列的总和。
新列:
New = IF((Sheet1[Age]) > 20, 1,0)
旧列:
Old = IF((Sheet1[Age]) < 20, 1,0)
现在将两个公式都放在“Values”中,并将sum作为聚合。
最终结果是
我有以下 Table:
BaseTable
它表示具有特定类别的进程。
TIMESTAMP 列上还有一个日期 Table。
我想显示一个基于另一个度量的度量,该度量计算所选日期之前的日期差异。
所以首先这是我计算日期差异的方法:
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 结果的 Measure,比如
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
知道如何解决这个问题吗?
谢谢!
所以问题是小计是在完全不同的上下文中计算的,并且因为您的年龄度量是基于 MAX(Workflow[MIN_TIMESTAMP])
的,所以不会考虑可能存在多个过程。
要执行您想要的操作,您需要更改 New
和 Old
度量以对每个进程执行聚合,然后 return 结果。像这样:
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]))
让我知道以下解决方案是否有效
很遗憾,我无法生成您一直在使用的虚拟数据,因此创建了我自己的数据来开发解决方案。
现在根据这些数据我计算了日期的差异并将其作为年龄
现在为了获得像您这样的条件的进程数,我创建了两个公式,结果是:
我在这里遵循的逻辑是,我没有创建度量值,而是创建了列并计算了这些列的总和,这将提供您需要的数据作为这些列的总和。
新列:
New = IF((Sheet1[Age]) > 20, 1,0)
旧列:
Old = IF((Sheet1[Age]) < 20, 1,0)
现在将两个公式都放在“Values”中,并将sum作为聚合。
最终结果是