如何在dax中获取一年的数据历史
how to get a year history of data in 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 公式以用于管状模型。
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 月在枢轴 table 时,它似乎无法正常工作。当我按月过滤时,这两个公式不匹配。我该如何解决这个问题?
1) 创建三个基本度量:
TotalNum := SUM([Num])
TotalQty := SUM([Qty])
Avg := DIVIDE ( [TotalNum], [TotalQty], 0 )
2) 创建一个计算度量来计算上一年的平均值,包括当前所选月份:
AvgLastYear:= CALCULATE (
[Avg] ,
DATESINPERIOD (
Calendar[Date] ,
MAX(Calendar[Date]),
-1, year
)
)
解释:
首先,您不需要除以零的冗长代码,MDX 和 DAX 都有一个 DIVIDE() 函数来隐式处理它。
其次,对于 DAX,我们的想法是构建一个基本度量,然后使用 CALCULATE() 根据需要移动该度量的上下文 - 在本例中为时间段。
这里我们查看当前选择的月份(表示为 MAX(Calendar[Date])
,尽管您可以使用任何聚合函数),然后使用 DATESINPERIOD()
在我们的 Calendar
table表示T-1年到当前月份的时间段。
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 公式以用于管状模型。
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 月在枢轴 table 时,它似乎无法正常工作。当我按月过滤时,这两个公式不匹配。我该如何解决这个问题?
1) 创建三个基本度量:
TotalNum := SUM([Num])
TotalQty := SUM([Qty])
Avg := DIVIDE ( [TotalNum], [TotalQty], 0 )
2) 创建一个计算度量来计算上一年的平均值,包括当前所选月份:
AvgLastYear:= CALCULATE (
[Avg] ,
DATESINPERIOD (
Calendar[Date] ,
MAX(Calendar[Date]),
-1, year
)
)
解释:
首先,您不需要除以零的冗长代码,MDX 和 DAX 都有一个 DIVIDE() 函数来隐式处理它。
其次,对于 DAX,我们的想法是构建一个基本度量,然后使用 CALCULATE() 根据需要移动该度量的上下文 - 在本例中为时间段。
这里我们查看当前选择的月份(表示为 MAX(Calendar[Date])
,尽管您可以使用任何聚合函数),然后使用 DATESINPERIOD()
在我们的 Calendar
table表示T-1年到当前月份的时间段。