BI技巧丨粒度切換

2021-10-13 13:11:19 字數 2545 閱讀 2965

白茶在很久之前,寫過關於笛卡爾積的兩個函式。

generate函式與crossjoin函式。

傳送門:《笛卡爾積》

那麼這兩個函式之間具體的區別是什麼呢?在實際用途中的區別呢?

本期白茶來解釋一下二者之間的核心點:上下文傳遞問題

在微軟的官方介紹中並未提及兩個函式的區別。

但是從語法上看generate引數只能是兩個,crossjoin引數可以是多個。

但是實際使用上,二者還有乙個核心的關鍵點,就是generate函式可以傳遞第一引數的上下文,而crossjoin函式不能傳遞第一引數上下文。

白茶將通過一組案例資料進行說明:

這是白茶隨機模擬的資料,將其匯入到powerbi中,建立日期表以及模型關係如下:

編寫如下度量值:

genrate =

generate (

,summarize (

'銷售明細',

'銷售明細'[商品名稱],

"index", switch ( [value], "當月", 1, "當季", 2, "當年", 3 ),

"資料",

switch (

[value],

"當月", totalmtd ( sum ( '銷售明細'[銷售數量] ), 'date'[date] ),

"當季", totalqtd ( sum ( '銷售明細'[銷售數量] ), 'date'[date] ),

"當年", totalytd ( sum ( '銷售明細'[銷售數量] ), 'date'[date] )))

)

結果如下:

這段**是什麼意思呢?

1.首先是利用輸入模式,直接輸入了三個時間粒度的標識字段作為第一引數;

2.然後利用summarize函式生成乙個表,新增了「資料列」和「索引列」;

3.summarize函式利用generate函式傳遞第一引數上下文的功能,根據條件判定進行計算。

這樣的話就對「商品名稱」這一列進行了不同時間粒度的彙總。

動態效果如下:

根據切片器的選擇,可以在表中呈現不同時間粒度彙總的結果。

那麼別忘了,還有crossjoin函式呢。

輸入如下**:

crossjoin =

crossjoin (

,summarize (

'銷售明細',

'銷售明細'[商品名稱],

"index", switch ( [value], "當月", 1, "當季", 2, "當年", 3 ),

"資料",

switch (

[value],

"當月", totalmtd ( sum ( '銷售明細'[銷售數量] ), 'date'[date] ),

"當季", totalqtd ( sum ( '銷售明細'[銷售數量] ), 'date'[date] ),

"當年", totalytd ( sum ( '銷售明細'[銷售數量] ), 'date'[date] )))

)

與上面的**對比,二者除了使用函式區別外,沒有任何區別。

結果如下:

結果無法得出,白茶第一次遇到這個問題的時候,思考了很久,感覺即在意料之外,也在情理之中。

首先是generate這個函式本身只有兩個引數,那麼進行上下文傳遞的時候,可以說已經被劃定範圍了,這樣的話雖然**計算的速度慢,但是會有結果。

而crossjoin函式可以有多個引數,如果內部允許上下文傳遞的話,從一參,到二參,到三參等等,會導致迭代的速度變得巨卡無比,甚至無法得出結果。

可以說從效能的角度考慮,微軟在設計crossjoin函式的時候,就已經考慮到這個問題了,因此其不具備內部上下文傳遞的功能。

小夥伴們❤get了麼?

白茶會不定期的分享一些函式卡片

(檔案在知識星球[powerbi丨需求圈])

這裡是白茶,乙個powerbi的初學者。

銷售需求丨切換技巧

小a 白茶兄!白茶兄!在不在?救命啊,兄弟!白茶 一臉迷茫 啊?小a 是這樣的,我遇到了乙個需求問題!某位老闆,想自由切換top3!白茶 額,這個我不是教過你麼?top3通過allselected函式可以實現啊!小a 不是這樣的,這個老闆是個完美主義者!要的是不同維度的top3,並且只能顯示乙個,比...

CSS樣式切換技巧

樣式與資料分離所帶來的不只是符合標準這樣的簡單,樣式既然與資料分離那麼樣式的切換則變得理所當然的了!但是網上這樣的中文教程實在是太少了!所以我收集了一部分中外 已經實現的技術資料整理出來供參考。首先要具備不同內容的 css檔案 最好每個檔案代表一種樣式,或是代表需要作出變動的部分 這裡以三個為例 第...

BI商業智慧型,想說愛你不容易丨科技雲 視角

在大資料概念 氾濫 的今天,bi對於企業的價值越來越明顯,然而大部分的企業還在這條路上探索。bi是英文business intelligence的縮寫,即商業智慧型。商業智慧型一詞最早是由國際知名的it諮詢機構gartner在1996年提出的,指的是用資料倉儲技術 聯機分析處理 資料探勘和資料展現技...