PowerBI自定义动态背景颜色

这篇内容来自昨晚上一个朋友的需求,给了发了一位国外叫Boss的创作者的一个PowerBI的内容,很精彩,很有想法,今天进来复制一份。正好最近没什么灵感了,非常感谢这位朋友提供想法,也欢迎大家多提问题、多提供思路。

需求是这样的,在PowerBI的Matrix表格里面,如果要填充背景颜色,背景颜色的填充范围的取值是根据表格所有数值最大值和最小值来确认的,但如果我们想要根据每一列或者每一行的值来呈现各自的颜色就不行了,如下图↓

在这个表里面,我们最大值用绿色,最小值用红色表示,基于全表的数值。如果我们想要分每个季度来标记各个品牌的颜色范围,就不行了,但是我们可以通过新建一个度量值,自定义渐变颜色来灵活控制我们想要的结果,先看看结果↓

从上图结果可以看到,我们已经按照季度各自来做渐变背景的,看看倒数两列,数据差异很大,但是不影响最后一列853仍然是最绿的。下面来讲解一下实现方式,耐心看,略微复杂,看懂了可以根据这个规则做很多条件格式背景的创意。

那么正式开始之前,介绍一下颜色的表示方式,我找了个我的拾色器软件截图,里面还是很完整。有RGB、CMYK、HSV、HLS等等颜色表示方法,如下↓

我们今天使用的是HLSA方法,几个参数含义如下:

  • H 色调,取值范围 0~360。0或360表示红色、120表示绿色、240表示蓝色。

  • S 饱和度,取值范围 0%~100%。值越大,越鲜艳。

  • L 亮度,取值范围 0%~100%。亮度最大时为白色,最小时为黑色。

  • A 透明度,取值范围 0~1。

通过这几个参数的调整,就可以调出所有的颜色了,在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()函数里面加上对应维度的参数就可以了,也可以取消日期的筛选,按品牌来展示,效果如下↓

到此,我们的目的已经达成了,最后我们再完善一下,把几个参数都做成可选参数,看看最后的效果吧↓

** 好了,结束了,周末愉快,欢迎互动 ~**

End

◆ PowerBI_RFM客户关系模型
◆ PowerBI饼图、圈图、旭日图
Excel时间序列预测函数
◆ Python操作MySQL数据库
◆ Python企业微信机器人

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容