這篇內(nèi)容來自昨晚上一個(gè)朋友的需求,給了發(fā)了一位國外叫Boss的創(chuàng)作者的一個(gè)PowerBI的內(nèi)容,很精彩,很有想法,今天進(jìn)來復(fù)制一份。正好最近沒什么靈感了,非常感謝這位朋友提供想法,也歡迎大家多提問題、多提供思路。

需求是這樣的,在PowerBI的Matrix表格里面,如果要填充背景顏色,背景顏色的填充范圍的取值是根據(jù)表格所有數(shù)值最大值和最小值來確認(rèn)的,但如果我們想要根據(jù)每一列或者每一行的值來呈現(xiàn)各自的顏色就不行了,如下圖↓

在這個(gè)表里面,我們最大值用綠色,最小值用紅色表示,基于全表的數(shù)值。如果我們想要分每個(gè)季度來標(biāo)記各個(gè)品牌的顏色范圍,就不行了,但是我們可以通過新建一個(gè)度量值,自定義漸變顏色來靈活控制我們想要的結(jié)果,先看看結(jié)果↓

從上圖結(jié)果可以看到,我們已經(jīng)按照季度各自來做漸變背景的,看看倒數(shù)兩列,數(shù)據(jù)差異很大,但是不影響最后一列853仍然是最綠的。下面來講解一下實(shí)現(xiàn)方式,耐心看,略微復(fù)雜,看懂了可以根據(jù)這個(gè)規(guī)則做很多條件格式背景的創(chuàng)意。
那么正式開始之前,介紹一下顏色的表示方式,我找了個(gè)我的拾色器軟件截圖,里面還是很完整。有RGB、CMYK、HSV、HLS等等顏色表示方法,如下↓

我們今天使用的是HLSA方法,幾個(gè)參數(shù)含義如下:
H 色調(diào),取值范圍 0~360。0或360表示紅色、120表示綠色、240表示藍(lán)色。
S 飽和度,取值范圍 0%~100%。值越大,越鮮艷。
L 亮度,取值范圍 0%~100%。亮度最大時(shí)為白色,最小時(shí)為黑色。
A 透明度,取值范圍 0~1。
通過這幾個(gè)參數(shù)的調(diào)整,就可以調(diào)出所有的顏色了,在PowerBI里面通過hsla()這個(gè)來求顏色值,我們來演示一下,因?yàn)槭撬膫€(gè)參數(shù),我們新建四個(gè)可選參數(shù),方法之前說了很多次了,就不重復(fù)了,然后根據(jù)各個(gè)值的范圍,新建一個(gè)顏色的度量值,度量值DAX寫法和最后自定義顏色的效果如下↓
hsla colour =
VAR hue = [色相 Value]
VAR saturation = [飽和度 Value]
VAR lightness = [亮度 Value]
VAR alpha = [透明度 Value]
RETURN
"hsla(" & hue &"," &saturation&"%,"&lightness&"%,"&alpha&")"

通過這個(gè)演示動(dòng)圖就可以很清晰的看出效果了,還是很靈活的,也可以根據(jù)需求做個(gè)用戶自己調(diào)顏色的效果。
下面開始進(jìn)入今天的主題。我們先建立一個(gè)表格,行是品牌信息、列是年份和季度,用的是Matrix表格建立的,效果如下↓

然后我們新建一個(gè)度量值,度量值的目的是得到每個(gè)數(shù)值的hsla顏色值,因?yàn)樾枰鲂辛械南拗?,我們需要用到表操作,需要新建一個(gè)以總金額為聚合值的中間表,需要使用ADDCOLUMNS和SUMMARIZE函數(shù),這兩個(gè)之前都介紹過,我們先建個(gè)表來看看效果,DAX語句和結(jié)果如下↓
Table =
ADDCOLUMNS(
SUMMARIZE(
'模擬銷售數(shù)據(jù)',
'產(chǎn)品表'[品牌],
'日期表'[年份],
'日期表'[季度]
),
"總金額",[銷售金額(萬)]
)

就是一個(gè)按年份、季度、品牌GROUP BY金額的效果,然后我們把這個(gè)表作為一個(gè)中間表,用一個(gè)變量來表示,再加一個(gè)ALLSELECTED()函數(shù)來取消所有的篩選,再通過MAXX和MINX函數(shù)來計(jì)算出所有之中的最大值和最小值,目的是通過最大值和最小值求出數(shù)據(jù)的范圍,以便計(jì)算出我們飽和度的值,因?yàn)轱柡投戎荒茉?-360之間,而我們只要紅色到綠色的范圍,就只需要0-120之間,我們通過簡單的換算把每個(gè)數(shù)值折算到0-120,DAX語句和返回值如下↓
條件color_hue =
VAR st =
CALCULATETABLE(
ADDCOLUMNS(
SUMMARIZE(
'模擬銷售數(shù)據(jù)',
'產(chǎn)品表'[品牌],
'日期表'[年份],
'日期表'[季度]
),
"總金額",[銷售金額(萬)]
),ALLSELECTED()
)
VAR max_value =
MAXX(
st,
[總金額])
VAR min_value =
MINX(
st,
[總金額])
VAR range = max_value - min_value
VAR hue =
ROUND(DIVIDE([銷售金額(萬)] - min_value,range)*120,2)
RETURN
hue

可以看到,我們色相值已經(jīng)轉(zhuǎn)換成功了,和實(shí)際金額都是一一對應(yīng)的,下面就很簡答了,變換一下最后的返回值,變成PowerBI能夠識(shí)別的hsla模式,DAX語句和結(jié)果如下↓
條件color_hsla =
VAR st =
CALCULATETABLE(
ADDCOLUMNS(
SUMMARIZE(
'模擬銷售數(shù)據(jù)',
'產(chǎn)品表'[品牌],
'日期表'[年份],
'日期表'[季度]
),
"總金額",[銷售金額(萬)]
),ALLSELECTED()
)
VAR max_value =
MAXX(
st,
[總金額])
VAR min_value =
MINX(
st,
[總金額])
VAR range = max_value - min_value
VAR hue =
ROUND(DIVIDE([銷售金額(萬)] - min_value,range)*120,0)
RETURN
"hsla("&hue&",90%,75%,1)"

已經(jīng)是很標(biāo)準(zhǔn)了,需要說明的是,我們這里只有色相是變動(dòng)值,其他幾個(gè)參數(shù)我們都固定了,如果你喜歡,也可以設(shè)置成可選參數(shù),并且色相也可以在120的基礎(chǔ)上增加或者減少。然后我們把這個(gè)度量值設(shè)置成背景顏色就可以了,效果如下↓

這個(gè)效果適合我們直接使用背景顏色填充效果一樣的,接下來就是自帶的方式無法實(shí)現(xiàn)的按行或者列做漸變效果,我們首先按列,DAX語句和效果如下↓
條件color_hsla_brand =
VAR st =
CALCULATETABLE(
ADDCOLUMNS(
SUMMARIZE(
'模擬銷售數(shù)據(jù)',
'產(chǎn)品表'[品牌],
'日期表'[年份],
'日期表'[季度]
),
"總金額",[銷售金額(萬)]
),ALLSELECTED('產(chǎn)品表'[品牌])
)
VAR max_value =
MAXX(
st,
[總金額])
VAR min_value =
MINX(
st,
[總金額])
VAR range = max_value - min_value
VAR hue =
ROUND(DIVIDE([銷售金額(萬)] - min_value,range)*120,0)
RETURN
"hsla("&hue&",90%,75%,1)"
這時(shí)我們只需要在ALLSELECTED()函數(shù)里面加上對應(yīng)維度的參數(shù)就可以了,也可以取消日期的篩選,按品牌來展示,效果如下↓

到此,我們的目的已經(jīng)達(dá)成了,最后我們再完善一下,把幾個(gè)參數(shù)都做成可選參數(shù),看看最后的效果吧↓

** 好了,結(jié)束了,周末愉快,歡迎互動(dòng) ~**
End

◆ PowerBI_RFM客戶關(guān)系模型
◆ PowerBI餅圖、圈圖、旭日圖
◆ Excel時(shí)間序列預(yù)測函數(shù)
◆ Python操作MySQL數(shù)據(jù)庫
◆ Python企業(yè)微信機(jī)器人