DAX:计算度量标准A与兄弟度量标准B的比率(当两者都驻留在同一组中时)

时间:2017-01-19 19:50:30

标签: excel powerbi powerpivot dax

我是DAXOLAP的完整 noob ,所以请原谅任何错误。

故事

基本上,我在Matrix报告中有PowerBI Desktop个组件。 几个月位于行上的指标列上:

Excel

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

  1. 指标B 指向指标A (B / A)
  2. 指标C 指向指标B (C / B)
  3. 所有指标都位于同一组中。我希望将这些比率作为单独的,但一个列。

    我计算公制比例总计没有问题;我只需要SUM(#)并按度量划分总计

    Total = CALCULATE(SUM('Data'[#]); ALL('Data'[Metric]))
    

    问题

    但是如何获得 Metric X SUM(#)汇总,以后我可以用它来计算其他指标的比率?

    到目前为止我做了什么

    作为我创建此表格的其中一个步骤,为指标A 获取聚合的

    Table = ADDCOLUMNS(
                SUMMARIZE('Data'; 
                          'Data'[GroupAndMetric];
                          'Data'[Year];
                          'Data'[MonthNo]);
                "Count";
                CALCULATE(SUM('Data'[#]); 'Data'[GroupAndMetric] = "Group A - Metric A")
    )
    

    任何帮助表示感谢。

2 个答案:

答案 0 :(得分:1)

我认为有一种更简单的方法来获得预期结果,但我假设您的数据与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])

您将获得一系列度量,但您只需使用矩阵中的%Ratio:

enter image description here

如果有帮助,请告诉我。

答案 1 :(得分:0)

这可能是(更多)更好的方法,但这是一种方式:

执行度量标准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 ()
)

如果数据透视表未被过滤到度量B,则第一个CALCULATE(分子)返回空白。第二个CALCULATE(除数)返回度量A的总和(跟随应用的任何其他过滤器,所以它例如,只要组在您的数据透视表上,就不会总结另一组中的度量标准B)。如果我们查看除B以外的任何指标,则整个除法将为BLANK,因为分子将为空。最终的BLANK说,如果没有度量标准A(即除以零),那么结果也将是BLANK。

假设有两个这样的度量,你可以将它们组合成一个列:

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 ()
    )
)

第一部分说,如果两个指标都不是空白,则返回一个空白(即我不想要一个没有意义的小组总数)。然后,它会遍历每个指标,并说明如果它不是空白,则显示它。否则,显示空白。由于每个基础度量仅返回单个给定度量的值,因此这应该有效。