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

时间:2016-05-14 06:17:00

标签: ssas powerpivot dax

我有一个数据模型,其中包含一个名为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 个答案:

答案 0 :(得分: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]
)