【问题标题】:how to get a year history of data in dax如何在dax中获取数据的一年历史
【发布时间】:2015-09-25 18:24:46
【问题描述】:
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 公式。但是,当我在数据透视表中选择月份时,它似乎无法正常工作。当我按月过滤时,这两个公式不匹配。我该如何解决这个问题?

【问题讨论】:

    标签: excel mdx pivot-table dax tabular


    【解决方案1】:

    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 表中选择一组日期,代表时间期间 T-1 年到当月。

    【讨论】:

    • 感谢您的帮助和解释。但是如果我有像 201301 这样的日期键呢?
    • (upped) 不错的帖子,因为我没有意识到divide 函数甚至存在于mdx 中!这是一个很好的参考:blog.crossjoin.co.uk/2013/07/26/new-mdx-divide-function
    • @HAIZD 只需创建一个计算列,将您的日期键转换为日期类型的字段。
    • 感谢您回复评论。因此,我将日期格式更改为 YYYY-MM-DD,它允许我进行测量。但是,当我通过 excel 运行测量时,它给了我“遇到了数据值的无效数字表示”。如果出现该错误,我应该检查什么?
    • 该错误意味着您在 DATESINPERIOD 或 DATESBETWEEN 函数中选择的日期之一在日历表中不存在,您必须在日期列中选择现有日期。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    相关资源
    最近更新 更多