power bi dax-上一季度价值?

时间:2019-09-12 11:44:11

标签: time powerbi dax

我有一个简单的表,其中的数据具有以下格式:

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

谢谢

屏幕截图:

the chart the data the date table the relationship

2 个答案:

答案 0 :(得分:0)

我建议您仅使用一种措施来实现这一目标,但您的措施:

prevQtr = CALCULATE(SUM(data[score]), PREVIOUSQUARTER(data[date]))

需要引用您的日期表:

prevQtr = CALCULATE(SUM(data[score]), PREVIOUSQUARTER('dateTable'[date]))

此修改应该可以做到。

答案 1 :(得分:0)

好的,这里有三件事。

  1. 您需要参考日期维度日期列以获取内置的时间智能功能。 (请注意,这还意味着您应该仅使用日期维度中的日期字段。在事实中隐藏“数据” [date],以便您不打算使用它。)
  2. 由于要将其添加为计算列,因此您将不得不进行一些额外的上下文操作。
  3. 由于此处的日期维度没有提供任何上下文(您仅位于事实表的行上下文中),因此此处无法有效使用内置的时间智能功能。

所以!我的建议是将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]。