根据日期返回列中的最新值

时间:2019-09-10 15:39:24

标签: dax powerpivot

我对Power Pivot和DAX度量衡还很陌生,因此这里将为您提供一些帮助!

我有下表:

enter image description here

我正在尝试建立DAX度量,以返回最新的[Universe]值。我尝试将CALCULATEMAXFILTEREARLIER组合使用,但是正努力获得所需的输出,如下所示。

enter image description here

我不一定要在表中显示输出,而是在某种程度上将其输出,因为我想在计算中使用它。

注意,这是我目前的尝试:

Total Universe:=SUM([Universe])

Last Universe Date:=CALCULATE(MAX([Date]),FILTER(tbData,LASTNONBLANK(tbData[Universe],1)))

Last Universe Value:=CALCULATE([Total Universe],FILTER(tbData,tbData[Date]=[Last Universe Date]))

Last Universe Date返回正确的日期,但是Last Universe Value返回“总计”值。

感谢任何帮助/指导。

2 个答案:

答案 0 :(得分:0)

我认为这很简单,除非我缺少任何东西。在您的测量中,测试当前的Universe值是否为空。如果是,请找到该日期之前的最后一个Universe值。伪代码可能看起来像这样:

Universe Value = 
   VAR CurrentDate = MIN('Date')

   RETURN
      IF (ISBLANK(Universe), <Find most recent Universe value less than 'CurrentDate'>, Universe)

如果仅基于日期来查找最后一个日期,则可以使用类似的方法来完成。当然,您可能还想采用其他方法。这是我的第一个念头。

LastDate = TOPN(
       1,
       FILTER(
          ALL('Date'),
          'Date'[Date] < CurrentDate
          )
       ),
       'Date'[Date],
       DESC
    )

如果当前的Universe值为空白,我可能会将其存储在变量中,然后检索与此日期关联的值。

答案 1 :(得分:0)

Total Universe:= SUM ( 'tbData'[Universe] )
Last Universe Value:=
VAR MostRecentDate = MAX ( 'tbData'[Date] )
VAR MostRecentNonBlank =
  CALCULATE (
    MAX ( 'tbData'[Date] ),
    ALL ( 'tbData'[Date], 'tbData'[Year], 'tbData'[Month] ), // you should really pull this out to
                                                             // a date dimension
    'tbData'[Date] <= MostRecentDate,
    NOT ( ISBLANK ( 'tbData'[Universe] ) )
  )
RETURN
  CALCULATE (
    [Total Universe],
    ALL ( 'tbData'[Date], 'tbData'[Year], 'tbData'[Month] ),
    'tbData'[Date] = MostRecentNonBlank
  )

这将在'tbData'[Channel]和'tbData'[CPT]上保留过滤器上下文。如果您不希望这样做,也可以将它们放入ALL中。您最初引用某个度量的FILTER正在执行从FILTER迭代的行上下文到度量评估的过滤器上下文的上下文转换。您可以阅读有关此主题here的更多信息。