PowerBI指標動態化二三事

  • 2020 年 2 月 13 日
  • 筆記

隨著學習PBI的深入 ,各種操作技能也都逐漸被掌握,那麼指標的動態化是必然會去嘗試的一件事情。

就像這樣:

老闆想看撒就看撒,不用在不同的頁面間切換來切換去的,在一頁報告就可以搞定,是非常高效的,也是衡量你的PBI水平的一項重要指標吧!幾乎可以說,這是你從小白,到入門的必經之路。

簡要介紹一下製作過程:

首先,需要建立一張中間表,可以通過「輸入數據」,和建模tab里的「新建表」 實現

該表需要包含需要轉換的指標名稱

其次,寫一個動態指標切換的度量值

指標動態切換 = SWITCH(TRUE(),  SELECTEDVALUE('指標名稱表'[請選擇需要查看的指標])="銷售額",  [KPI1.銷售額],  SELECTEDVALUE('指標名稱表'[請選擇需要查看的指標])="利潤",  [KPI2.利潤],  SELECTEDVALUE('指標名稱表'[請選擇需要查看的指標])="銷售數量",  [KPI4.銷售數量],  [KPI1.銷售額]  )

簡單解釋一下,當選擇銷售額時,則顯示銷售額,選擇利潤,則顯示利潤,選擇銷售數量則顯示銷售數量,什麼都不選的時候,默認顯示銷售額

直接應用這個動態切換的度量值,再配合「指標名稱」的切換器,就可以完成度量值的自由切換了。

有2個細節:

1個是切片器中選擇項目的排序問題,可以使用按列排序,來進行定義

第2個是圖表的標題切換,也可以使用度量值,進行自定義的設置

動態標題 =  SELECTEDVALUE('指標名稱表'[請選擇需要查看的指標])

隨著你經驗的增加,可能會考慮增加幾個指標的切換,那也沒問題,直接在指標名稱和指標動態切換里做相應的修改就可以了。


很自然的,我們會把有關比率的指標,如利潤率,客戶轉換率也放進來。

**比率類的指標一般設置為百分比的格式 這也是很簡單的,只要依葫蘆畫瓢就可以了。

step1 增加利潤率的選項

setp2 修改度量值,增加利潤率

指標動態切換 = SWITCH(TRUE(),  SELECTEDVALUE('指標名稱表'[請選擇需要查看的指標])="銷售額",  [KPI1.銷售額],  SELECTEDVALUE('指標名稱表'[請選擇需要查看的指標])="利潤",  [KPI2.利潤],  SELECTEDVALUE('指標名稱表'[請選擇需要查看的指標])="銷售數量",  [KPI4.銷售數量],  SELECTEDVALUE('指標名稱表'[請選擇需要查看的指標])="利潤率",  [KPI3.毛利率],  [KPI1.銷售額]  )

這樣就完成了,可是我們看到的是這樣的。

沒事,這應該是數據的類型沒有設置好,也很簡單。把數據類型設置成百分比就可以了,這時問題就來了!

這個指標動態選擇度量值,既包含了銷售額,銷售數量,和利潤率,這時應該如何設置呢?不管了,還是先來嘗試一下吧~

嘗試1,將利潤率指標,設置成百分比格式,然而,並沒有什麼用!

嘗試2,將動態指標設置成百分比,

那就會把銷售額等其他指標也一同設置為百分比格式,這顯然不是我們想要的。

一種無力感瞬間傳遍全身…

嘗試3,使用Format函數將利潤率包裹起來,強行轉換成百分比格式。

SELECTEDVALUE(  '指標名稱表'[請選擇需要查看的指標])="利潤率",  FORMAT([KPI3.毛利率],"0.00%")

結果是這樣的!利潤率顯示不了!

使用format的percent形式呢?

SELECTEDVALUE('指標名稱表'[請選擇需要查看的指標])="利潤率",  FORMAT([KPI3.毛利率],"percent")

結果還是一樣的.

……

wow!

這是什麼鬼,這是可能已經真正感覺到很無助了!

怎麼辦呢?有一個變通的辦法,可以把利潤率X100來顯示,

SELECTEDVALUE('指標名稱表'[請選擇需要查看的指標])="利潤率",  [KPI3.毛利率]*100

這也是沒有辦法啊? 老闆,您就將就著看吧!只要不是太弱智,都能看得懂的!

這一定是個bug!期待微軟下次更新吧!那這背後到底是什麼情況呢,有解決的方案嘛?其實,這個問題到目前為止,真的是無解的,這涉及到DAX中關於數據類型的一些基本原理。


來揭曉答案吧

指標動態切換 = SWITCH(TRUE(),  SELECTEDVALUE('指標名稱表'[請選擇需要查看的指標])="銷售額",  [KPI1.銷售額],  SELECTEDVALUE('指標名稱表'[請選擇需要查看的指標])="利潤",  [KPI2.利潤],  SELECTEDVALUE('指標名稱表'[請選擇需要查看的指標])="銷售數量",  [KPI4.銷售數量],  SELECTEDVALUE('指標名稱表'[請選擇需要查看的指標])="利潤率",  [KPI3.毛利率],  [KPI1.銷售額]  )

當這樣寫的時候,該度量值可以被設置成,數值(小數,百分比,或者整數類型)

當然這取決於我們調用度量值的屬性。當使用FORMAT函數,強行轉換為百分比格式的時候,只是看著是百分比格式而已,其實已經format函數轉換以後,值已經被強行轉成文本格式

來看看format 函數的官方說明

FORMAT(<value>, <format_string>)

看到這個說明,估計你已經明白一多半了,沒錯,公式說明的最後是以string 結尾的,這就說明format 函數返回的是一個文本類型的值

很自然的,文本類型的值,當然無法以圖形的形式展現了!還有一個重要的細節,很容易被大家所忽視,請思考一下,這時該度量值中,既包含了銷售額的數值類型,又包含了經過format 函數轉換後的文本類型的值,那這個度量值現在是什麼類型的呢?

這是一個比較容易被忽視的細節,當有2種以上數據類型時,這個類型就變成了「變體」。說白了就是不確定,當你需要他是男的時候,他就是男的,當你需要她是女的時候,她就是女的,突然想到在量子力學領域很有名的一個定理:

薛定諤的貓

和這隻既生又死的貓一樣,當沒有被選擇的時候,就處於這樣一個既是數值,又是文本的狀態。隨著我們去調用他,就會按照需要來改變其格式。

有點跑題了,這麼說是方便大家更好的理解這個概念!那照這麼說的話,這麼簡單的功能,就真的沒有辦法了嘛?看起來是這樣的,在一個圖形里是沒法實現的,所以之前把值乘以100,來顯示幾乎是個比較好的變通方案了。

還有一個可行的方案是,使用表或矩陣來實現

在表裡,可以被很好的實現。利潤率的」%「顯示的好好的!目前為止,這是比較可行的2個方案,如果大家有更好的解決方案,歡迎溝通交流!

總結:

這樣一個看著很不起眼的設置,其實背後,蘊含著大量資訊,值得我們去思考。

這個設置的難點在於百分比格式只是小數類型的一種而已,與千分位格式設置一起,PBI只提供了菜單介面的設置,而DAX本身除了Format以外的函數,並沒有函數可以提供這樣一種設置。期望在以後的更新中會有解決的方案。