我有一张这样的桌子:
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)
如何正确处理?
我想要这样的东西
注意:我使用直接查询SQL Server
更新:到目前为止,我已经通过子查询在SQL Server表中添加了Last_Amount
列,也许你们有解决我问题的更好方法
答案 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)