DAX:计算公制A与兄弟公制B的比率(当两者都位于同一组中时)
我是DAX
和OLAP
的完全noob ,所以请原谅任何错误。
故事
基本上,我在PowerBI Desktop
报告中有一个Matrix
组件。 月份在列上, 度量标准 – 在行上:
当我尝试计算(红色的百分比):
- 公制B到公制A (B / A)
- 公制C到公制B (C / B)
所有指标都位于同一组中。 我希望把这些比例作为一个单独的列,而不是一列。
我没有问题来计算度量比率, 我只是把SUM(#)
除以总数 :
Total = CALCULATE(SUM('Data'[#]); ALL('Data'[Metric]))
题
但是,如何获得Metric X的SUM(#)
聚合,我以后可以使用它来计算其他度量的比率?
到目前为止我所做的
作为我创build此表的一个步骤来获得聚合#为度量标准A :
Table = ADDCOLUMNS( SUMMARIZE('Data'; 'Data'[GroupAndMetric]; 'Data'[Year]; 'Data'[MonthNo]); "Count"; CALCULATE(SUM('Data'[#]); 'Data'[GroupAndMetric] = "Group A - Metric A") )
任何帮助赞赏。
我认为有一个更简单的方法来获得您的预期结果,但我假设您的数据是完全相同的张贴在OP。
创build以下度量来计算每个度量标准的给定上下文中的先前值和当前值。
总和[#]
:
CurrentValue = SUM(Data[#])
当前组
CurrentGroup = FIRSTNONBLANK(Data[Group],0)
当前的度量标准
CurrentMetric = FIRSTNONBLANK(Data[Metric],0)
这个月:
CurrentMonth = FIRSTNONBLANK(Data[Month],0)
这将计算以前的度量标准
PrevMetric = IF ( [CurrentMetric] = "Metric A", BLANK (), IF ( [CurrentMetric] = "Metric B", "Metric A", IF ( [CurrentMetric] = "Metric C", "Metric B", BLANK () ) ) )
计算比率计算所需的以前的度量和#
Previous # Sum = CALCULATE ( SUM ( Data[#] ), FILTER ( ALL ( Data), COUNTROWS ( FILTER ( Data, EARLIER ( Data[Metric] ) = [PrevMetric] && EARLIER ( Data[Group] ) = [CurrentGroup] && EARLIER ( Data[Month] ) = [CurrentMonth] ) ) ) )
最后计算一下比例:
% Ratio = DIVIDE([CurrentValue], [Previous # Sum])
你会得到一堆措施,但你只需要使用matrix中的百分比:
让我知道这是否有帮助。
有可能(很多)更好的方法做到这一点,但这里有一个方法:
要做一个度量B除以度量A(例如):
Metric B to Metric A = DIVIDE ( CALCULATE ( SUM ( Data[#] ), FILTER ( Data, Data[Metric] = "Metric B" ) ), CALCULATE ( SUM ( Data[#] ), ALL ( Data[Metric] ), Data[Metric] = "Metric A" ), BLANK () )
第一个CALCULATE(分子)返回空白,如果数据透视表没有过滤到度量B.第二个CALCULATE(除数)返回度量A的总和(跟随其他应用的filter,所以它不会总结例如,在另一个组中的度量B,只要组在您的数据透视表上)。 如果我们查看除B之外的任何度量标准,则整个分部将是空白的,因为分子将是空白的。 最后一个空白说,如果没有度量A(即除以零),那么结果也将是空白的。
假设2个这样的措施,你可以把它们合并成一个列:
Final Ratio = IF ( NOT ( ISBLANK ( [Metric B to Metric A] ) ) && NOT ( ISBLANK ( [Metric C to Metric B] ) ), BLANK (), IF ( NOT ( ISBLANK ( [Metric B to Metric A] ) ), [Metric B to Metric A], IF ( NOT ( ISBLANK ( [Metric C to Metric B] ) ), [Metric C to Metric B], BLANK () ) )
)
这第一部分说,如果两个措施不是空白,返回一个空白(即我不希望小组总数没有意义)。 然后它通过每个指标,并说如果它不是空白,则显示它。 否则,显示空白。 由于每个基础度量仅返回单个给定度量的值,因此应该起作用。