——PowerBI最難理解的地方是什么?
——白茶覺得是上下文。
日常生活中,學會使用DAX之后,我們已經習慣使用DAX函數來靈活的展示各種業務需要的KPI。
可是在構建函數的過程中,我們經常寫著寫著上下文就會被搞暈。
什么時候清除全部的上下文?什么時候清除部分上下文?擴展表在這里面有什么用?這些都是我們日常使用中需要注意的問題,一個細節疏忽了,就可能導致我們整體的思路崩塌掉。
- 理解什么是擴展表
擴展表理論,說的通俗一點,其實就是維度表與事實表的術語描述。
模型關系中,我們最常使用的模型關系就是“一對多”。(即One To Many)
站在Many這一端,所有的One都是衍生出來的擴展表。
也就是從事實表往回推,所有的維度表其實都是事實表的擴展表。
舉個例子:
在上圖的模型關系中,Model-Factsales、Model-Factstock、Model-Facttask這三張表作為事實表存在,那么其他所有對應的維度表都是這三張事實表的擴展表。
原生列與相關列:
原生列,即事實表與維度表之間的主鍵列。
相關列,事實表中原本不存在的列,可通過主鍵與事實表建立關系的列。
舉個例子:
在上述模型關系中,銷售明細作為事實表存在,產品表和日期表作為維度表存在。
'銷售明細'[商品名稱]——'產品表'[商品名稱]
'銷售明細'[銷售日期]——'日期表'[Date]
上述的四列就是原生列。
'產品表'[銷售價]或者'日期表'[年度月份]
這種事實表原來沒有的,但是可以通過主鍵與事實表建立關系的,即為相關列。
- 擴展表與RELATED函數。
RELATED函數,通常可以作為返回模型關系中的相關列使用。
例如:
事實表中只有銷售數量,我想計算該商品的總銷售金額,即可使用RELATED函數返回維度表中相關的[單價]列。
傳送門:
- 擴展表對于DAX還有什么影響呢?
ALL函數,是我們使用頻率非常高的一個函數,我們經常需要使用ALL來清除整個表的上下文篩選或者某一列的篩選。
ALLEXCEPT函數,可以保留某一列篩選。
嚴格來說,ALL+VALUES與ALLEXCEPT的作用有些時候是差不多的,但是區別點在哪里?
舉個例子:
ALLEXCEPT函數參數可以使用相關列。
如圖所示,這里就使用了[商品名稱]這一相關列。
那么還有哪些點也是需要我們注意的呢?
使用細則:
一般情況下,不要ALL整個事實表
能ALL具體的列,就不要ALL整個表
如果表格列穩定,多個ALL好過ALLEXCEPT
如果表格列經常變動,ALLEXCEPT是最佳選擇
傳送門:
小伙伴們?GET了么?
白茶會不定期的分享一些函數卡片
(文件在知識星球[PowerBI丨需求圈])
這里是白茶,一個PowerBI的初學者。