一、引言 前面,我們用幾篇文章介紹了DAX中的上下文。關于上下文,還有一個需要注意的問題。在使用 DAX(Data Analysis Expressions)時,我們經(jīng)常需要使用變量幫助我們簡化公式并提高性能。然而,在使用變量時,我們可能會遇到一些問題,例如篩選器上下文不起作用。本文將通過實際示例詳細解釋這個問題,以及為什么會發(fā)生。二、示例
假設我們有一個度量值 "Amount",其公式如下: Amount:=SUMX(Sales, Sales[銷量] * Sales[單價])
據(jù)此,我們又創(chuàng)建了一個度量值,用于計算每個產(chǎn)品的銷售額占總體銷售額的比例: 占比1:= var SalesAmountAll = CALCULATE( [Amount], All('Sales'[產(chǎn)品]) ) return DIVIDE([Amount], SalesAmountAll)
這個公式的目的是計算某個產(chǎn)品的銷售額占所有產(chǎn)品銷售額的比例。它首先計算所有產(chǎn)品的銷售額,然后將單個產(chǎn)品的銷售額與總銷售額相除,得到占比。 其中,
var SalesAmountAll:聲明一個名為 SalesAmountAll 的變量,用于保存所有產(chǎn)品的銷售額。CALCULATE([Amount], All('Sales'[產(chǎn)品])):這行代碼使用 CALCULATE 函數(shù)來計算所有產(chǎn)品的銷售額之和。[Amount] 是要聚合的度量值,即銷售額;All('Sales'[產(chǎn)品]) 是計算中使用的篩選器,它會移除所有關于 'Sales'[產(chǎn)品] 列的上下文篩選器,使得計算得到的是所有產(chǎn)品的銷售額。DIVIDE([Amount], SalesAmountAll):使用 DIVIDE 函數(shù)將單個產(chǎn)品的銷售額([Amount])除以所有產(chǎn)品的銷售額(SalesAmountAll)。這將得到一個百分比,表示該產(chǎn)品的銷售額在所有產(chǎn)品銷售額中的占比。占比2:= var SalesAmount = SUMX( Sales, Sales[銷量] * Sales[單價] ) var SalesAmountAll = CALCULATE( SalesAmount, All('Sales'[產(chǎn)品]) ) return DIVIDE(SalesAmount, SalesAmountAll)
這兩個公式做的事情是一樣的。區(qū)別在于,占比2公式并沒有用到[Amount]度量值,而是使用了相同的公式創(chuàng)建了一個變量:SalesAmount。 但是,這個公式的結(jié)果是錯誤的! 三、變量與篩選器上下文 在 "占比1" 中,我們使用了 "Amount",DAX計算引擎在計算公式時,該度量值可以正確地應用篩選器上下文。然而,在 "占比2" 中,我們使用了變量 "SalesAmount",但是,在計算SalesAmountAll這個變量時,盡管使用了篩選器All(Sales[產(chǎn)品]),但是卻絲毫不起作用。這是因為在 DAX 中,變量的計算是在定義它們的上下文中完成的。也就是說,在定義變量時,它們會計算得到一個固定的值。因此,當我們在后面的公式中使用這個值時,它已經(jīng)不再具有上下文敏感性。所以,再使用任何篩選器都不起作用。
詳細介紹請看視頻
加入E學會,學習更多Excel應用技巧 http://www./portal/learn/class_list
Excel+Power Query+Power Pivot+Power BI Power Excel 知識庫 按照以下方式進入知識庫學習Excel函數(shù) 底部菜單:知識庫->Excel函數(shù)自定義函數(shù) 底部菜單:知識庫->自定義函數(shù) Excel如何做 底部菜單:知識庫->Excel如何做面授培訓 底部菜單:培訓學習->面授培訓 Excel企業(yè)應用 底部菜單:企業(yè)應用 也可以在歷史文章中學習Excel,Power Query,Power Pivot,Power BI,Power Automate各種技巧。
|