DAX 从矩阵中的年份或季度中减去固定值

问题描述

需要从 Chrysler 的 Matrix 视觉中的年度和季度聚合中减去设定值。数据为多年按月计算,需要对克莱斯勒仅进行固定调整,每个季度 5 次,每年 15 次,没有总数低于零。

预期结果:

日期 阿斯顿马丁 宝马 克莱斯勒 总计
2020 0 27.36 26.22 53.58
Qtr1 0 0 7.99 7.99
Qtr2 0 17.34 9.15 26.49
Qtr3 0 10.02 0 10.02
第四季度 0 0 7.53 7.53
2021 10.05 51.51 7.32 68.88
Qtr1 0 18.45 0 18.45
Qtr2 0 13.77 0 13.77
Qtr3 10.05 4.44 12.51 27
第四季度 0 14.85 0 14.85
2022 18.14 53.52 4.08 75.74
Qtr1 18.14 17.64 0 35.78
Qtr2 0 21.77 0 21.77
Qtr3 0 7.44 3.73 11.17
第四季度 0 6.67 1.08 7.75
总计 28.19 132.39 37.62 198.2

数据:

id 日期 价值
3 克莱斯勒 7/30/2021 8.88
9 克莱斯勒 9/16/2021 3.16
18 宝马 5/26/2022 5.76
69 克莱斯勒 1/9/2020 6.14
75 宝马 3/20/2021 4.33
84 宝马 6/20/2020 8.97
104 宝马 10/22/2021 4.91
113 阿斯顿马丁 3/5/2022 5.61
119 克莱斯勒 10/22/2022 6.08
139 宝马 9/13/2020 8.33
140 克莱斯勒 8/11/2020 1.55
169 宝马 3/2/2021 6.97
206 宝马 5/13/2021 4.34
244 克莱斯勒 11/10/2020 8.45
247 克莱斯勒 12/18/2020 2.38
284 宝马 2/4/2022 0.73
289 宝马 10/26/2022 2.24
383 阿斯顿马丁 2/21/2022 7.61
400 克莱斯勒 2020/4/5 9.34
402 克莱斯勒 9/11/2022 1.63
403 宝马 2020/5/27 8.37
414 克莱斯勒 8/11/2021 4.93
441 宝马 2/21/2022 9.5
533 克莱斯勒 9/18/2022 7.1
538 宝马 1/28/2021 7.15
556 宝马 6/30/2022 4.61
586 宝马 5/2/2022 1.44
672 宝马 10/16/2022 2.21
734 宝马 2/15/2022 6.74
736 克莱斯勒 6/16/2020 4.81
740 宝马 12/5/2022 2.22
755 宝马 9/14/2021 4.44
766 宝马 4/14/2021 9.43
781 阿斯顿马丁 8/14/2021 6.46
784 克莱斯勒 12/30/2021 4.81
788 宝马 5/17/2022 4.4
815 阿斯顿马丁 8/29/2021 3.59
816 阿斯顿马丁 3/17/2022 4.92
831 宝马 3/24/2022 0.67
835 宝马 11/28/2021 9.94
844 克莱斯勒 8/17/2021 0.54
849 宝马 8/26/2022 7.43
861 宝马 2020/7/24 1.69
885 克莱斯勒 1/11/2022 4.27
911 宝马 7/1/2022 0.01
942 克莱斯勒 12/26/2020 1.7
946 宝马 6/9/2022 5.56
948 克莱斯勒 2020/3/13 6.85

解决方法

假设:您有一个带有 YearQuarter 列的日期表(不一定标记为日期表),一个带有每个组键的 Groups 表,以及表表中的 SumValue 等简单度量。

(Measure on Table table)
SumValue := SUM('Table'[Value])

(Measure on Table table)
CustomChrysler := 
VAR YearQuarterGroup = 
    CROSSJOIN( 
        VALUES( Dates[YearQuarter] ),VALUES( Groups[Group] ) 
        )
VAR Result = 
SUMX(
    YearQuarterGroup,VAR SumVal = [SumValue]
    VAR Amount = IF( Groups[Group] = "Chrysler",SumVal - 5,SumVal )
    VAR AmountGreaterThanZero = IF( Amount < 0,Amount )
    RETURN
    AmountGreaterThanZero
    )
RETURN Result

enter image description here

更新: 哪一个?

enter image description here

CustomChrysler2 := 
VAR YearQuarterGroup = 
    CROSSJOIN( 
        VALUES( Dates[YearQuarter] ),VALUES( Groups[Group] ) 
        )
VAR YearGroup = 
    CROSSJOIN( 
        VALUES( Dates[Year] ),VALUES( Groups[Group] ) 
        )
VAR ResulYearQuarter = 
SUMX(
    YearQuarterGroup,SumVal )
    VAR AmountGreaterthanZero = IF( Amount >= 0,Amount) //BLANK
    //VAR AmountGreaterThanZero = IF( Amount < 0,Amount ) //Zero
    RETURN
    AmountGreaterThanZero
    )
VAR ResultYear = 
SUMX(
    YearGroup,SumVal - 15,Amount ) //Zero
    RETURN
    AmountGreaterThanZero
    )
RETURN 
SWITCH(
    TRUE(),ISINSCOPE(Dates[Quarter]),ResulYearQuarter,ResultYear //ISINSCOPE(Dates[Year]) and Grand Total
    )