如何获得一年的dax历史数据

IIF(SUM ( [Calendar].[Month].CurrentMember.Lag(11) : [Calendar].[Month].CurrentMember, [Measures].[Qty] ) = 0, 0, SUM ( [Calendar].[Month].CurrentMember.Lag(11) : [Calendar].[Month].CurrentMember, [Measures].[Num] ) / SUM ( [Calendar].[Month].CurrentMember.Lag(11) : [Calendar].[Month].CurrentMember, [Measures].[Qty] ) ) 

这是来自多维模型的公式,我试图将这个MDX公式转换为DAX公式以在pipe状模型中使用。

 12 Month Avg := IF ( CALCULATE ( SUM ( [QTY] ), FILTER ( ALL ( Calendar[Month] ), Calendar[Month] - 11 = ( Calendar[Month] - 11 ) ) ) = 0, BLANK (), CALCULATE ( SUM ( [Num] ), FILTER ( ALL ( Calendar[Month] ), Calendar[Month] - 11 = ( Calendar[Month] - 11 ) ) ) / CALCULATE ( SUM ( [QTY] ), FILTER ( ALL ( Calendar[Month] ), Calendar[Month] - 11 = ( Calendar[Month] - 11 ) ) ) ) 

所以我做了这个DAX公式来转换顶部的MDX公式。 然而,它似乎不能正常工作,当我在数据透视表中select月份。 当我按月过滤时,这两个公式不匹配。 我如何解决这个问题?

1)创build三个基本措施:

 TotalNum := SUM([Num]) TotalQty := SUM([Qty]) Avg := DIVIDE ( [TotalNum], [TotalQty], 0 ) 

2)创build一个计算的度量来计算包括当前选定月份在内的前一年的平均值:

 AvgLastYear:= CALCULATE ( [Avg] , DATESINPERIOD ( Calendar[Date] , MAX(Calendar[Date]), -1, year ) ) 

说明:

首先,你不需要被零点划分,MDX和DAX都有一个DIVIDE()函数来隐式处理。

其次,对于DAX,这个想法是构build一个基本度量,然后使用CALCULATE()来根据需要移动该度量的上下文,在这种情况下是时间段。

在这里,我们正在查看当前选定的月份(表示为MAX(Calendar[Date]) ,尽pipe您可以使用任何聚合函数),然后使用DATESINPERIOD()Calendar表中select代表时间段的一组dateT-1年到当前月份。