DAX從入門到精通?5-3-2 上下文轉(zhuǎn)換后,還有多少行是可見的。

上下文轉(zhuǎn)換,把當(dāng)前的行上下文自動轉(zhuǎn)換為等效的篩選上下文。這里我們詳細(xì)說下,行上下文總是只有一個行,而calculate轉(zhuǎn)換后得出的篩選上下文就可有可能包含多個行了,并且calculate的篩選條件也可能影響多個列,這個依據(jù)表結(jié)構(gòu)的不同而定。

如果模型中,對表定義了主鍵,那么calculate建立的篩選上下文只包含主鍵,事實上,這樣的篩選上下文結(jié)果就只有一行,由主鍵唯一的確認(rèn)。還有一個點要提示一下,主鍵的定義方式,不僅可以由表元數(shù)據(jù)定義,也可以在關(guān)系中把表作為目標(biāo)表而定義。兩種方式下,上下文轉(zhuǎn)換只會過濾一個單一的列,因為該列都是唯一值,所以結(jié)果就是只有唯一的一行。

如果表沒有主鍵,那么上下文轉(zhuǎn)換生成的篩選條件會作用于所有的列。這個篩選結(jié)果根據(jù)表結(jié)構(gòu)的不同,可能會包含多個行。這樣如果所有的行都是不同的,那么篩選的結(jié)果就是唯一行,而如果表格里面由相同的行,那么,這些重復(fù)行都會在篩選的結(jié)果里面。.

下面的例子中,分別返回正確和錯誤的結(jié)果。

[Sales Amount] := SUMX ( Sales, Sales[Quantity] * Sales[Unit
Price] )
[Wrong Sales] := SUMX ( Sales, [Sales Amount] )
[Correct Sales] := SUMX ( Sales, Sales[Quantity] * Sales[Unit
Price] )

事實上,wrong sales迭代了整個sales表,對于每一行,sales amount計算所有篩選出來的行。而correct sales計算了表中的每一行。作為結(jié)果,如果sales有多個行相同,wrong sales會返回的結(jié)果會更多。

當(dāng)我們針對的是維度表的時候,這個不是問題,因為維度表中都有個主鍵。這情況下,每行都是唯一的行。但是在事實表中,如果表沒有主鍵,那么你要仔細(xì)考慮一下,是否有重復(fù)的行。否則你可能會返回非預(yù)期的值。

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

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

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