2016-05-14 40 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

感謝返回和發佈您的解決方案 –