DAX從入門到精通?5-3-3 理解上下文轉(zhuǎn)換的順序

按目前我們學(xué)習(xí)的內(nèi)容,我們知道以下兩個(gè)product表的計(jì)算列的區(qū)別:

Product[SumOfUnitPrice] = CALCULATE ( SUM ( Product[Unit
Price] ) )
Product[SumOfAllUnitPrice] = CALCULATE ( SUM ( Product[Unit
Price] ), ALL ( Product ) )

這兩個(gè)都是計(jì)算列,都使用了calculate函數(shù),因此,兩個(gè)都會(huì)發(fā)生上下文轉(zhuǎn)換。

sumofunitprice是只包含當(dāng)前行產(chǎn)品的計(jì)算值,但是,sumofallunitprice呢?直觀看,因?yàn)槭褂昧薬ll(product),你會(huì)期望列中包含了所有的unitprice。的確,結(jié)果是這樣的。但是,如果你仔細(xì)思考下我們之前說(shuō)的規(guī)則,似乎這里又有些問題。

事實(shí)上,all(product)返回了整個(gè)product表,移除了篩選上下文產(chǎn)生的過濾器。但是,同時(shí),上下文的轉(zhuǎn)換會(huì)使得product的篩選條件是只有一個(gè)產(chǎn)品,也就是當(dāng)前行。如果你把兩個(gè)條件用AND連接例來(lái),那么上下文轉(zhuǎn)換的限制更細(xì),所以,結(jié)果就是上下文轉(zhuǎn)換的條件獲勝。但是,為什么結(jié)果卻是全部的產(chǎn)品呢,而不是當(dāng)前的產(chǎn)品。

因?yàn)檫@里對(duì)于上下文轉(zhuǎn)換而產(chǎn)生的篩選上下文,以及由calculate產(chǎn)生的篩選上下文,兩者有先后順序。calculate先執(zhí)行了上下轉(zhuǎn)換,然后才執(zhí)行篩選參數(shù)產(chǎn)生的條件。因此,calculate的條件會(huì)覆蓋由上下文轉(zhuǎn)換而產(chǎn)生的篩選條件。

這個(gè)過程相比于描述,通過使用來(lái)解釋會(huì)更加直觀。事實(shí)上,對(duì)于上面這種情況,只有一種執(zhí)行順序是正確的,對(duì)于結(jié)果,我們要知道為什么,結(jié)果是如何計(jì)算出來(lái)的。最重要的就是:calculate中的篩選條件,會(huì)覆蓋來(lái)自于上下文轉(zhuǎn)換的條件。(換句話說(shuō),就是篩選參數(shù)的條件后執(zhí)行。)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容