2016-05-14 54 views
1

我有一个数据模型,其中有一个称为事务(下)的表和一个是日期维度的TranDate。在DAX公式中恢复原始过滤器上下文

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 
    ) 
) 

如果我取消一月至16日,我拿到低于预期的结果:

Pivot

然而,这项措施只能在Excel 2016和没有Excel的2013年,是因为变量是不支持Excel 2013.如果我用DAX表达式替换MinDate变量,则该度量将返回空格,因为ALLSELECTED在FILTER()函数中恢复上下文,而不是CALCULATE()函数中的上下文(即MinDate是1-Jan而不是1- 2月)。

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

回答

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] 
) 

我在内的上下文中使用的所有()使原来的过滤器上下文(即透视表选择)的情况下被保留就在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] 
) 
+0

感谢返回和发布您的解决方案 –