Excel 如何在dax中获取一年的数据历史记录

Excel 如何在dax中获取一年的数据历史记录,excel,mdx,pivot-table,dax,tabular,Excel,Mdx,Pivot Table,Dax,Tabular,这是多维模型的公式,我正试图将MDX公式转换为DAX公式,用于管状模型 IIF(SUM ( [Calendar].[Month].CurrentMember.Lag(11) : [Calendar].[Month].CurrentMember, [Measures].[Qty] ) = 0, 0, SUM ( [Calendar].[Month].CurrentMember.Lag(11) : [Calendar].[Month].CurrentMember, [Measure

这是多维模型的公式,我正试图将MDX公式转换为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]
 ) )
所以我做了这个DAX公式来转换顶部的MDX公式。然而,当我在透视表中选择月份时,它似乎不能正常工作。当我按月份筛选时,这两个公式不匹配。如何解决该问题?

1)创建三个基本度量:

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 )
            )
        )
)
2) 创建计算的度量值以计算上一年(包括当前所选月份)的平均值:

TotalNum := SUM([Num])

TotalQty := SUM([Qty])

Avg := DIVIDE ( [TotalNum], [TotalQty], 0 )
说明:

首先,您不需要那种被零除的繁琐程序,MDX和DAX都有一个divide()函数来隐式处理它

其次,使用DAX,我们的想法是构建一个基本度量值,然后使用CALCULATE()根据需要移动该度量值的上下文—在本例中是时间段


这里我们查看当前选定的月份(表示为
MAX(Calendar[Date])
,不过您可以使用任何聚合函数),然后使用
DATESINPERIOD()
在我们的
日历
表中选择一组日期,表示从T-1年到当前月份的时间段。

感谢您的帮助和解释。但是,如果我有日期键,比如201301,那该怎么办?这篇文章很好,因为我没有意识到
divide
函数甚至存在于
mdx
中!这里有一个很好的参考:@HAIZD只需创建一个计算列,将日期键转换为日期类型的字段。感谢回复评论。因此,我将日期格式更改为YYYY-MM-DD,它允许我进行测量。但是,当我通过excel运行测量时,它会给出“遇到数据值的无效数字表示形式”如果出现该错误,我应该检查什么?该错误意味着您在DatesPeriod或DATESBETWEEN函数中选择的日期之一在日历表中不存在,您必须在日期列中选择现有日期。
AvgLastYear:= CALCULATE ( 
   [Avg] , 
   DATESINPERIOD ( 
       Calendar[Date] , 
       MAX(Calendar[Date]),
       -1, year
   ) 
)