關於度量值的嵌套使用

將計算列作爲參數在度量值中進行嵌套使用是非常常見的一種操作。反過來,在度量值表達式中使用度量值作爲參數也挺常見。不過需要注意的是,當度量值中嵌套度量值時,DAX其實是會將參數度量值轉譯成一個計算列,之後再參與運算。也就是說,爲了避免出現複雜的嵌套引用依賴關係, DAX內部邏輯處理上不允許使用度量值作爲參數傳遞給函數使用,即使用戶在書寫中使用了度量值,DAX在運算上也會將其按照計算列的運算邏輯來進行處理。
例如假設在同一個項目內,某一階段的起始時間是上一階段的結束時間,則根據項目完成時間,可以創建一個計算列來獲得項目起始時間。

Started Date =
IF (
    COUNTROWS (
        FILTER (
            ALL ( TimeLine ),
            TimeLine[Finished Date]
                < MAX ( TimeLine[Finished Date] )
                && TimeLine[Project]
                    = SELECTEDVALUE ( TimeLine[Project] )
        )
    ) = 0,
    DATE ( 2020, 1, 1 ),
    MAXX (
        FILTER (
            ALL ( TimeLine ),
            TimeLine[Finished Date]
                < MAX ( TimeLine[Finished Date] )
                && TimeLine[Project]
                    = SELECTEDVALUE ( TimeLine[Project] )
        ),
        TimeLine[Finished Date]
    )
)

在這裏插入圖片描述
然而,如果單獨創建一個度量值來獲取MAX ( TimeLine[Finished Date] ),之後將其作爲參數帶到Started Date表達式當中進行計算,則無法獲得想要的Started Date值。
在這裏插入圖片描述

導致這個問題的原因在於當度量值Finished_Date_Measure以參數形式被Started Date表達式使用時,DAX會先將這個度量值強制轉換成計算列再代入到表達式中。也就是說,在計算過程中,Finished_Date_Measure被換成了下圖所示的計算列。這就導致FILTER函數的篩選條件實際上是要找尋符合Finished Date< 6/1/2020的數據。由於TimeLine表單中沒有符合該條件的數據,因此Filter返回值爲空,這樣所有的Started Date都是1/1/2020,從而無法獲取想要的計算結果。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章