我有一个简单的表,其中的数据具有以下格式:
category | score | date
cat1 | 3 | 31/3/2019
cat2 | 9 | 31/3/2019 Q1 data
cat3 | 7 | 31/3/2019
...
cat1 | 6 | 30/6/2019
cat2 | 4 | 30/6/2019 Q2 data etc.
cat3 | 1 | 30/6/2019
基本上,我有很多用于季度数据的行(不同类别的分数),其中日期列引用了实际的季度。我有一个图表,其中显示了最近一个季度的值(最新数据),但是我需要一个列来提供上一个季度的得分。我发现了PREVIOUSQUARTER,这看起来很简单,但它会返回空白。
prevQtr = CALCULATE(SUM(data[score]), PREVIOUSQUARTER(data[date]))
有人可以告诉我我在做什么错吗?我尝试创建一个日期表,在该列的第一个日期和最后一个日期之间使用连续的日期,但这没有帮助。其他时间智能功能似乎都没有返回任何东西,所以我想这是通用的东西。我尝试了文档,但没有提及任何限制。我正在寻找的是:
category | score | date | prevQtr
cat1 | 3 | 31/3/2019 |
cat2 | 9 | 31/3/2019 |
cat3 | 7 | 31/3/2019 |
...
cat1 | 6 | 30/6/2019 | 3
cat2 | 4 | 30/6/2019 | 9
cat3 | 1 | 30/6/2019 | 7
谢谢
屏幕截图:
答案 0 :(得分:0)
我建议您仅使用一种措施来实现这一目标,但您的措施:
prevQtr = CALCULATE(SUM(data[score]), PREVIOUSQUARTER(data[date]))
需要引用您的日期表:
prevQtr = CALCULATE(SUM(data[score]), PREVIOUSQUARTER('dateTable'[date]))
此修改应该可以做到。
答案 1 :(得分:0)
好的,这里有三件事。
所以!我的建议是将PrevQtr定义为一种度量,而不是一列,在这种情况下,它将与下面的小型重构一起使用:
PrevQtr =
CALCULATE (
SUM ( 'Data'[Score] ),
PREVIOUSQUARTER ( 'dateTable'[Date] ) // just referencing the date table here
)
如果您必须为此创建一个计算列,并且所有数据都遵循样本中该季度最后一天具有值的模式,那么我认为这是最好的选择:
PrevQtrColumn =
VAR CurrentRowDate = 'Data'[Date]
VAR PriorQuarterEnd = EOMONTH ( CurrentRowDate, -3 )
RETURN
CALCULATE (
SUM ( 'Data'[Score] ),
ALLEXCEPT ( 'Data', 'Data'[Category] ),
'Data'[Date] = PriorQuarterEnd
)
ALLEXCEPT
覆盖了那里的大陷阱。 CALCULATE
将所有行上下文转换为过滤器上下文,因此您的“数据” [Score]值将成为过滤器上下文。 ALLEXCEPT
清除了这一点,仅保留了[Category]。