计算Dax中的方差和方差%

时间:2017-10-03 07:23:50

标签: excel powerbi dax

在我的PBIX文件中,我有计算收入,COGS,毛利率等的措施。

Revenue = Sum(Amt)

计算去年收入_YY,COGS_LY和GM_LY的价值的更多指标。

Revenue_LY = CALCULATE (
  [Revenue],
  FILTER (
       ALL ( 'Date' ),
            'Date'[FinYear]= MAX ( 'Date'[FinYear] ) - 1 && 'Date'[FinPeriod] = max('Date'[FinPeriod])
    )
 )

现在我需要每个方面的差异和方差%度量,将数据与去年和预算进行比较。措施的数量太多了。

Revenue_CY-LY = CALCULATE([Revenue],KEEPFILTERS(Versions[VersionCode] = "Act")) - CALCULATE([Revenue_LY],KEEPFILTERS(Versions[VersionCode] = "Act"))

Revenue_CY-LY% = IF([Revenue_CY-LY] < 0, -1, 1) *
                IF(
                    ABS(DIVIDE([Revenue_CY-LY],[Revenue])) > 99.9, 
                        "n/a",
                    ABS(DIVIDE([Revenue_CY-LY],[Revenue])*100)
            )

有没有办法总结所使用的措施。我不想为每个方差创建单独的度量。

1 个答案:

答案 0 :(得分:1)

是。您可以创建动态度量。

首先制作RevenueCOGSGross Margin等措施。

Revenue = SUM([Amt])
COGS = SUM([Cost])
Gross Margin = [Revenue] - [COGS]
...

然后为每个度量创建一个包含一行的表:

My Measures = DATATABLE("My Measure", STRING, {{"Revenue"}, {"COGS"}, {"Gross Margin"}})

这些名称不需要与您的实际测量值保持一致,但它们会被显示出来以使它们呈现出来。

然后在该表上创建一个度量,该度量将与表中的选定行动态相同:

Selected Measure = SWITCH(SELECTEDVALUE('My Measures'[My Measure], BLANK()), "Revenue", [Revenue], "COGS", [COGS], "Gross Margin", [Gross Margin], BLANK())

接下来,您将使用[Selected Measure]作为基础创建所有复杂的时间智能度量:

Dynamic_LY = CALCULATE (
  [Selected Measure],
  FILTER (
      ALL ( 'Date' ),
            'Date'[FinYear]= MAX ( 'Date'[FinYear] ) - 1 && 'Date'[FinPeriod] = max('Date'[FinPeriod])
    )
 )

然后,您可以采用与问题类似的方式执行[Dynamic_CY-LY][Dynamic_CY-LY %],并使用对动态度量的引用替换对[Revenue]度量的引用。

现在,您可以使用'My Measures'[My Measure]列上的切片器动态更改[Dynamic_CY-LY]的每个实例以及其他动态度量,也可以在每个可视化上添加过滤器以过滤{{1} }。

您可能还想拥有'My Measures'[My Measure]的默认值,而不是默认为[Selected Measure];把它放在BLANK()函数的最后位置。