DAX:计算指标 A 与同级指标 B 的比率(当两者位于同一组时)
DAX: Calculate the ratio of Metric A to a sibling Metric B (when both reside in the same group)
我是一个完整的菜鸟到DAX
和OLAP
,所以请原谅任何错误。
故事
基本上,我在 PowerBI Desktop
报告中有一个 Matrix
组件。
月 在列上,指标 - 在行上:
当我尝试计算(红色百分比)的比率时出现问题:
- 指标 B 到 指标 A (B/A)
- 指标 C 到 指标 B (C/B)
所有指标都在同一个组中。我希望将这些比率单独放置,但是 一个 列。
我可以毫无问题地计算 指标 与总数的比率;我只取 SUM(#)
并除以 总计 :
Total = CALCULATE(SUM('Data'[#]); ALL('Data'[Metric]))
问题
但是我如何获得 指标 X 的 SUM(#)
聚合,稍后我可以用它来计算其他指标的比率?
到目前为止我做了什么
作为步骤之一,我创建了这个 table 以获得 # 的聚合 指标 A:
Table = ADDCOLUMNS(
SUMMARIZE('Data';
'Data'[GroupAndMetric];
'Data'[Year];
'Data'[MonthNo]);
"Count";
CALCULATE(SUM('Data'[#]); 'Data'[GroupAndMetric] = "Group A - Metric A")
)
感谢任何帮助。
可能有(很多)更好的方法来做到这一点,但这是一种方法:
要将指标 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(分子)return 如果主元 table 未过滤为度量 B,则为空白。第二个 CALCULATE(除数)return 为总和指标 A(遵循应用的任何其他过滤器,因此它不会汇总另一个组中的指标 B,例如,只要组在您的数据透视表 table 上)。如果我们查看除 B 以外的任何指标,则整个除法将为空白,因为分子将为空白。最后的 BLANK 表示如果没有度量标准 A(即除以零),那么结果也将是 BLANK。
假设有 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 ()
)
)
)
第一部分说,如果两个度量都不是空白,return 空白(即我不想要一个没有意义的组总数)。然后它遍历每个指标并说如果它不是空白,则显示它。否则,显示空白。由于每个基础度量仅 return 是单个给定指标的值,因此这应该有效。
我认为有一种更简单的方法可以获得您的预期结果,但我假设您的数据与 OP 中发布的数据完全相同。
创建以下度量值以计算每个度量的给定上下文中的先前值和当前值。
[#]
的总和:
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])
你会得到一堆度量,但你只需要使用矩阵中的百分比:
如果有帮助请告诉我。
我是一个完整的菜鸟到DAX
和OLAP
,所以请原谅任何错误。
故事
基本上,我在 PowerBI Desktop
报告中有一个 Matrix
组件。
月 在列上,指标 - 在行上:
当我尝试计算(红色百分比)的比率时出现问题:
- 指标 B 到 指标 A (B/A)
- 指标 C 到 指标 B (C/B)
所有指标都在同一个组中。我希望将这些比率单独放置,但是 一个 列。
我可以毫无问题地计算 指标 与总数的比率;我只取 SUM(#)
并除以 总计 :
Total = CALCULATE(SUM('Data'[#]); ALL('Data'[Metric]))
问题
但是我如何获得 指标 X 的 SUM(#)
聚合,稍后我可以用它来计算其他指标的比率?
到目前为止我做了什么
作为步骤之一,我创建了这个 table 以获得 # 的聚合 指标 A:
Table = ADDCOLUMNS(
SUMMARIZE('Data';
'Data'[GroupAndMetric];
'Data'[Year];
'Data'[MonthNo]);
"Count";
CALCULATE(SUM('Data'[#]); 'Data'[GroupAndMetric] = "Group A - Metric A")
)
感谢任何帮助。
可能有(很多)更好的方法来做到这一点,但这是一种方法:
要将指标 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(分子)return 如果主元 table 未过滤为度量 B,则为空白。第二个 CALCULATE(除数)return 为总和指标 A(遵循应用的任何其他过滤器,因此它不会汇总另一个组中的指标 B,例如,只要组在您的数据透视表 table 上)。如果我们查看除 B 以外的任何指标,则整个除法将为空白,因为分子将为空白。最后的 BLANK 表示如果没有度量标准 A(即除以零),那么结果也将是 BLANK。
假设有 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 ()
)
)
)
第一部分说,如果两个度量都不是空白,return 空白(即我不想要一个没有意义的组总数)。然后它遍历每个指标并说如果它不是空白,则显示它。否则,显示空白。由于每个基础度量仅 return 是单个给定指标的值,因此这应该有效。
我认为有一种更简单的方法可以获得您的预期结果,但我假设您的数据与 OP 中发布的数据完全相同。
创建以下度量值以计算每个度量的给定上下文中的先前值和当前值。
[#]
的总和:
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])
你会得到一堆度量,但你只需要使用矩阵中的百分比:
如果有帮助请告诉我。