如何获得一年的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年到当前月份。