Power BI 矩阵 - 使用 DAX 减去两个(动态)对应的列

Power BI matrix - Subtract two (dynamic) corresponding columns using DAX

我在下面的 Power BI Desktop 矩阵中有一个度量。

度量值来自单个 table,并且是具有数值的列的总和。

度量为:SUM(Table[列])

第 1 组列:类别

第 2 组列:年份

第 3 组列:Qtr(即 Q)

我有一个场景,我们的客户想要获得类别 A 的 2020 年第一季度 和类别 B 的 2020 年第一季度之间的差异(差异).

新列是 Q1 方差。

以类似的方式,我需要类别 A 的 2020 年第二季度和类别 B 的 2020 年第二季度之间的差异。

如何根据这种情况在矩阵中获取新列,在其中减去年份和季度中的相应列?

以后也可能出现A类可以有B类可能没有的年份的情况。

例如,类别 A 可能有 2018 和 2019,而类别 B 可能有 2017 和 2018.

在这种情况下,我只需要 2018 年季度之间的差异,不需要对 2017 年和 2019 年进行任何计算。

有什么想法吗,使用 DAX?

类别选择通过切片器进行。

有时可能是 A 类和 B 类,有时可能是 B 类和 C 类,它们是从切片器中选择的。

切片器每次总是恰好 2 个类别。

所以,我不能硬编码任何东西。一切都是动态的。

A类可能有2018年和2019年, 而 B 类可能有 2017 年和 2018 年, 而 C 类可能有 2019、2020、2021 等

另外,我可能还要比较相应的月份。假设 A 的 2019 年 1 月将从 B 的 2019 年 1 月减去(类似于季度比较)。

我想我们可能需要使用一些变量来匹配年份,然后移动到季度,然后再移动到月份。

有一个名为 SAMEPERIODLASTYEAR 的函数可以处理时间智能,也许对您有用。

如果您正好有两个不同的类别,您可以使用最大值选择一个,使用最小值选择一个,然后计算两者之间的方差。

Variance =
VAR Cat1 = MAXX ( ALLSELECTED ( Table1 ), Table1[Category] )
VAR Cat2 = MINX ( ALLSELECTED ( Table1 ), Table1[Category] )
VAR Sum1 = CALCULATE ( SUM ( Table1[Column] ), Table1[Category] = Cat1 )
VAR Sum2 = CALCULATE ( SUM ( Table1[Column] ), Table1[Category] = Cat2 )
RETURN
    IF ( ISBLANK ( Sum1 ) || ISBLANK ( Sum2 ), BLANK (), Sum1 - Sum2 )

这会保留年份和 quarter/month 上下文,仅更改类别上下文以进行计算。