首页 文章

在DAX公式中恢复原始过滤器上下文

提问于
浏览
1

我有一个数据模型,其中包含一个名为Transactions(下图)的表,而TranDate是一个日期维度 .

Transactions Table

我有一个措施来计算在数据透视表中可见的第一个日期的期初余额 .

Op Bal First Selected := 
VAR MinDate = CALCULATE ( 
    MIN ( TranDates[Tran Date] ), 
    ALLSELECTED ( TranDates ) 
)
RETURN
CALCULATE (
    SUM ( Transactions[Amount] ),
    FILTER
    (
        ALL ( TranDates ),
        TranDates[Tran Date] < MinDate
    )
)

如果我取消选择Jan-16,我会在下面得到所需的结果:

Pivot

但是,该度量仅适用于Excel 2016而不是Excel 2013,因为Excel 2013中不支持变量 . 如果我使用DAX表达式替换MinDate变量,则度量将返回空白,因为ALLSELECTED将恢复FILTER()中的上下文函数而不是CALCULATE()函数中的上下文(即MinDate是1-Jan而不是1-Feb) .

是否存在可在Excel 2013 / SSAS 2014中使用的等效DAX公式(即不使用变量)?

1 回答

  • 3

    经过大量的试验和错误,这是我定义的措施:

    Op Bal First Selected:=
    MINX
    (
        ADDCOLUMNS (
            ADDCOLUMNS
            (
                SUMMARIZE (
                    ALL(Transactions),
                    Transactions[Tran Date]
                ),
                "MinDate",
                CALCULATE ( 
                    MIN ( Transactions[Tran Date] ),
                    ALLSELECTED()           
                )
            ),
            "Op Bal First Selected Calc",
            CALCULATE (
                SUM ( Transactions[Amount] ),
                FILTER 
                (
                    ALL( Transactions ),
                    Transactions[Tran Date] < [MinDate]
                )
            )               
        ),
        [Op Bal First Selected Calc]
    )
    

    我在内部上下文中使用了ALL(),以便在ALLSELECTED()之外的上下文中保留原始过滤器上下文(即数据透视表选择) .

    如果要将TranDate表用作过滤器,可以按如下方式定义:

    Op Bal First Selected:=
    MINX
    (
        ADDCOLUMNS (
            ADDCOLUMNS
            (
                SUMMARIZE (
                    ALLSELECTED(TranDates),
                    TranDates[Tran Date]
                ),
                "MinDate",
                CALCULATE ( 
                    MIN ( TranDates[Tran Date] )        
                )
            ),
            "Op Bal First Selected Calc",
            CALCULATE (
                SUM ( Transactions[Amount] ),
                FILTER 
                (
                    ALL( TranDates ),
                    TranDates[Tran Date] < [MinDate]
                )
            )               
        ),
        [Op Bal First Selected Calc]
    )
    

相关问题