這篇内容來自昨晚上一個朋友的需求,給了發了一位國外叫Boss的創作者的一個PowerBI的内容,很精彩,很有想法,今天進來複制一份。正好最近沒什麼靈感了,非常感謝這位朋友提供想法,也歡迎大家多提問題、多提供思路。
需求是這樣的,在PowerBI的Matrix表格裡面,如果要填充背景顔色,背景顔色的填充範圍的取值是根據表格所有數值最大值和最小值來确認的,但如果我們想要根據每一列或者每一行的值來呈現各自的顔色就不行了,如下圖↓
在這個表裡面,我們最大值用綠色,最小值用紅色表示,基于全表的數值。如果我們想要分每個季度來标記各個品牌的顔色範圍,就不行了,但是我們可以通過新建一個度量值,自定義漸變顔色來靈活控制我們想要的結果,先看看結果↓
從上圖結果可以看到,我們已經按照季度各自來做漸變背景的,看看倒數兩列,數據差異很大,但是不影響最後一列853仍然是最綠的。下面來講解一下實現方式,耐心看,略微複雜,看懂了可以根據這個規則做很多條件格式背景的創意。
那麼正式開始之前,介紹一下顔色的表示方式,我找了個我的拾色器軟件截圖,裡面還是很完整。有RGB、CMYK、HSV、HLS等等顔色表示方法,如下↓
我們今天使用的是HLSA方法,幾個參數含義如下:
通過這幾個參數的調整,就可以調出所有的顔色了,在PowerBI裡面通過hsla()這個來求顔色值,我們來演示一下,因為是四個參數,我們新建四個可選參數,方法之前說了很多次了,就不重複了,然後根據各個值的範圍,新建一個顔色的度量值,度量值DAX寫法和最後自定義顔色的效果如下↓
hsla colour =
VAR hue = [色相 Value]
VAR saturation = [飽和度 Value]
VAR lightness = [亮度 Value]
VAR alpha = [透明度 Value]
RETURN
"hsla(" & hue &"," &saturation&"%,"&lightness&"%,"&alpha&")"
通過這個演示動圖就可以很清晰的看出效果了,還是很靈活的,也可以根據需求做個用戶自己調顔色的效果。
下面開始進入今天的主題。我們先建立一個表格,行是品牌信息、列是年份和季度,用的是Matrix表格建立的,效果如下↓
然後我們新建一個度量值,度量值的目的是得到每個數值的hsla顔色值,因為需要做行列的限制,我們需要用到表操作,需要新建一個以總金額為聚合值的中間表,需要使用ADDCOLUMNS和SUMMARIZE函數,這兩個之前都介紹過,我們先建個表來看看效果,DAX語句和結果如下↓
Table =
ADDCOLUMNS(
SUMMARIZE(
'模拟銷售數據',
'産品表'[品牌],
'日期表'[年份],
'日期表'[季度]
),
"總金額",[銷售金額(萬)]
)
就是一個按年份、季度、品牌GROUP BY金額的效果,然後我們把這個表作為一個中間表,用一個變量來表示,再加一個ALLSELECTED()函數來取消所有的篩選,再通過MAXX和MINX函數來計算出所有之中的最大值和最小值,目的是通過最大值和最小值求出數據的範圍,以便計算出我們飽和度的值,因為飽和度隻能在0-360之間,而我們隻要紅色到綠色的範圍,就隻需要0-120之間,我們通過簡單的換算把每個數值折算到0-120,DAX語句和返回值如下↓
條件color_hue =
VAR st =
CALCULATETABLE(
ADDCOLUMNS(
SUMMARIZE(
'模拟銷售數據',
'産品表'[品牌],
'日期表'[年份],
'日期表'[季度]
),
"總金額",[銷售金額(萬)]
),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
可以看到,我們色相值已經轉換成功了,和實際金額都是一一對應的,下面就很簡答了,變換一下最後的返回值,變成PowerBI能夠識别的hsla模式,DAX語句和結果如下↓
條件color_hsla =
VAR st =
CALCULATETABLE(
ADDCOLUMNS(
SUMMARIZE(
'模拟銷售數據',
'産品表'[品牌],
'日期表'[年份],
'日期表'[季度]
),
"總金額",[銷售金額(萬)]
),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)"
已經是很标準了,需要說明的是,我們這裡隻有色相是變動值,其他幾個參數我們都固定了,如果你喜歡,也可以設置成可選參數,并且色相也可以在120的基礎上增加或者減少。然後我們把這個度量值設置成背景顔色就可以了,效果如下↓
這個效果适合我們直接使用背景顔色填充效果一樣的,接下來就是自帶的方式無法實現的按行或者列做漸變效果,我們首先按列,DAX語句和效果如下↓
條件color_hsla_brand =
VAR st =
CALCULATETABLE(
ADDCOLUMNS(
SUMMARIZE(
'模拟銷售數據',
'産品表'[品牌],
'日期表'[年份],
'日期表'[季度]
),
"總金額",[銷售金額(萬)]
),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)"
這時我們隻需要在ALLSELECTED()函數裡面加上對應維度的參數就可以了,也可以取消日期的篩選,按品牌來展示,效果如下↓
到此,我們的目的已經達成了,最後我們再完善一下,把幾個參數都做成可選參數,看看最後的效果吧↓
好了,結束了,周末愉快,歡迎互動 ~
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!