在 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)
)
有没有办法总结使用的措施。我不想为每个方差创建单独的度量。
是的。您可以创建动态度量。
首先创建Revenue
、COGS
、Gross 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()
函数的最后位置即可。
在我的 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)
)
有没有办法总结使用的措施。我不想为每个方差创建单独的度量。
是的。您可以创建动态度量。
首先创建Revenue
、COGS
、Gross 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()
函数的最后位置即可。