DAX:计算指标 A 与同级指标 B 的比率(当两者位于同一组时)

DAX: Calculate the ratio of Metric A to a sibling Metric B (when both reside in the same group)

我是一个完整的菜鸟DAXOLAP,所以请原谅任何错误。

故事

基本上,我在 PowerBI Desktop 报告中有一个 Matrix 组件。 在列上,指标 - 在行上:

当我尝试计算(红色百分比)的比率时出现问题:

  1. 指标 B指标 A (B/A)
  2. 指标 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])

你会得到一堆度量,但你只需要使用矩阵中的百分比:

如果有帮助请告诉我。