Excel 如何在dax中获取一年的数据历史记录
这是多维模型的公式,我正试图将MDX公式转换为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
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
)
)