基于切片器功率bi的先前值的总和量

时间:2018-08-24 03:55:38

标签: sql-server powerbi dax powerbi-desktop

我有一张这样的桌子:

Year        Month       Code     Amount
---------------------------------------   
2017        11           a        7368    
2017        11           b        3542    
2017        12           a        4552    
2017        12           b        7541    
2018         1           a        6352    
2018         1           b        8376    
2018         2           a        1287    
2018         2           b        3625

我根据年和月制作切片器(忽略代码),我想显示这样的金额总和:

  • 如果我在切片器Year 2017 and Month 12上选择,则显示的值是基于2017-11的SUM Amount,而在切片器Year 2018 and Month 1上选择的值应该是基于2017-12的SUM Amount

我已经尝试过用它进行测试,但这是不允许的:

Last Month = CALCULATE(SUM(Table[Amount]); Table[Month] = SELECTEDVALUE(Table[Month]) - 1)

如何正确处理?

我想要这样的东西

https://ibb.co/eGJTce

注意:我使用直接查询SQL Server

更新:到目前为止,我已经通过子查询在SQL Server表中添加了Last_Amount列,也许你们有解决我问题的更好方法

1 个答案:

答案 0 :(得分:0)

CALCULATE语句中的过滤器仅设计为采用不涉及进一步计算的简单语句。有两种可能的补救措施。

1。。在CALCULATE函数中使用变量之前,请先使用变量来计算该月份。

Last Month = 
    VAR PrevMonth = SELECTEDVALUE(Table[Month]) - 1
    RETURN CALCULATE(SUM(Table[Amount]), Table[Month] = PrevMonth)

2。。使用FILTER()功能。这是一个迭代器,可以进行更复杂的过滤。

Last Month = CALCULATE(SUM(Table[Amount]),
                 FILTER(ALL(Table),
                     Table[Month] = SELECTEDVALUE(Table[Month]) - 1))

编辑:由于您使用的是年份和月份,因此1月需要有特殊情况。

Last Month = 
    VAR MonthFilter = MOD(SELECTEDVALUE(Table[Month]) - 2, 12) + 1
    VAR YearFilter = IF(PrevMonth = 12,
                         SELECTEDVALUE(Table[Year]) - 1,
                         SELECTEDVALUE(Table[Year]))
    RETURN CALCULATE(SUM(Table[Amount]),
               Table[Month] = MonthFilter,
               Table[Year] = YearFilter)