在 Dax 中计算方差和方差百分比

Calculating Variance and Variance% in Dax

在我的 PBIX 文件中,我有计算收入、销货成本、毛利率等的指标

Revenue = Sum(Amt)

计算去年 Revenue_LY、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)
            )

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

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

首先创建RevenueCOGSGross Margin等措施。

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

然后您创建一个 table,每行对应您的每个度量:

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

这些名称不需要与您的实际措施保持一致,但它们会显示出来,因此请让它们出现table。

然后您在 table 上创建一个度量,它将动态地与 table 中的选定行相同:

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] 和其他动态度量的每个实例,或者您可以在每个可视化上添加过滤器以过滤 'My Measures'[My Measure].

您可能还想为 [Selected Measure] 设置一个默认值,而不是默认为 BLANK();只需将其放在 SWITCH() 函数的最后位置即可。