根据数据画动态表格_销售需求丨表格配色

BOSS:那个谁,那个什么茶?!
白茶:.....(一脸懵)啊?!
BOSS:给我做个图,要求能给图表的数据自动标记颜色!
白茶:热...热力图?!
BOSS:什么玩意热了冷了的,就是表格,数字,打开就能给我标注不同段位的颜色,你滴,明白?!
白茶:(#¥%&*@#)明白!

9bc2def29b91af1f762ce3c9135a57b4.png

最近在和一位小伙伴沟通的时候,遇到一个特殊的需求:

BOSS年龄大了,看不懂可视化插件,就希望能有一个表格,简简单单就行,但是需要让表格自动标记颜色。

白茶当时一合计,这不就是热力图么?只不过要求体现在表格当中。

注:感谢各位大佬指点,受益无穷。
白茶的扣扣群号:772646751​

模拟数据:

f017f58d7411adbe4e99a984a1865e50.png

92f64fc1f99c1ea6fd0ffac3455e145d.png

32156c78478c1c69a1df15ec1ef2a41e.png

这是本期所使用的模拟数据,一份销售明细,一份产品表,一份分店表。

将其导入到PowerBI中,建立日期表:

日期表 =
GENERATE (
    CALENDARAUTO (),
    VAR DA = [Date]
    VAR YEAR =
        FORMAT ( DA, "YY" ) & "年"
    VAR QUARTER =
        "季度" & FORMAT ( DA, "Q" )
    VAR MONTE =
        FORMAT ( DA, "MM" ) & "月"
    VAR DAY =
        DAY ( DA )
    VAR WEEKID =
        WEEKDAY ( DA, 2 )
    VAR YOU =
        YEAR ( DA )
    VAR TOL =
        FORMAT ( DA, "MM" )
    VAR TPO =
        FORMAT ( DA, "DD" )
    VAR YEARR =
        FORMAT ( DA, "YYYYMM" )
    RETURN
        ROW (
            "年度", YEAR,
            "季度", QUARTER,
            "月份", MONTE,
            "日", DAY,
            "年度季度", YEAR & QUARTER,
            "年度月份", YEAR & MONTE,
            "星期", WEEKID,
            "索引", YOU & TOL,
            "年月", VALUE ( YEARR )
        )
)

模型关系如下:

9b7f382140943d097b8379390a4ee2be.png

编写基本的代码:

销售金额:

销售金额 =
SUMX ( '销售明细', '销售明细'[销售数量] * RELATED ( '产品表'[销售价] ) )

销售成本:

销售成本 =
SUMX ( '销售明细', '销售明细'[销售数量] * RELATED ( '产品表'[成本] ) )

利润:

利润 =
[销售金额] - [销售成本]

动态数据:

动态数据 =
SWITCH (
    TRUE (),
    SELECTEDVALUE ( '财务维度'[财务维度] ) = "利润", [利润],
    SELECTEDVALUE ( '财务维度'[财务维度] ) = "销售金额", [销售金额],
    BLANK ()
)

动态数据传送门:

https://zhuanlan.zhihu.com/p/141115145​zhuanlan.zhihu.com

将这些放在可视化面板中,结果如下:

97de479e19596e71a188c1733f53d23d.png

到这里,我们的准备工作完成。

738eebe4e2515e45b29126cad29beea1.png

BOSS的需求是什么?为表格进行配色!

那么配色肯定需要有个依据吧?按照国内BOSS的需求,我们将依据划定为三点:最小值、平均值、最大值。

那么如何求平均值呢?要考虑当前上下文。

eb4b9ef9bb11d381629240f3b7167be8.png

当前上下文,白茶使用了两个表里面的维度,分别是分店表以及日期表。这种情况下需要根据动态数据,在当前条件下计算出平均值,需要考虑两个维度的交叉效果。

提到交叉,小伙伴们想起来什么没?笛卡尔积啊!

编写如下代码:

均值 =
VAR TLL =
    GENERATE ( ALL ( '分店表'[分店名] ), ALL ( '日期表'[月份] ) )
RETURN
    AVERAGEX ( TLL, [动态数据] )

将其放在卡片图中查看:

6132ddb002942fd1f236f68686cda9f8.png

1023871/12/14=6094.47,这个结果很显然是没问题的,稳妥起见,将其放入到表中对比:

78d05ad1aa42c7fd3f049d5f8ac0329c.png

问题来了,仔细看每一行的均值数据,会发现都不一样。

可能有的小伙伴说了,这没啥啊,不是很正常么?

其实到这里已经出问题了,我们需要让这个均值在当前上下文中呈现一个值,只有这样才能进行比较判定。

优化代码:

动态均值 =
VAR TLL =
    CALCULATETABLE (
        ADDCOLUMNS ( SUMMARIZE ( '销售明细', '日期表'[月份], '分店表'[分店名] ), "动态数据", [动态数据] ),
        ALLSELECTED ()
    )
RETURN
    AVERAGEX ( TLL, [动态数据] )

结果:

3047a4b0140134edf2ac2534adc9f68f.png

可以看得出来,这次的结果符合预期。

解释一下代码含义:
首先是利用SUMMARIZE函数构建了一个虚拟表,只有分店和月份维度,这一步的目的是为了构建笛卡尔积,并且不受当前上下文的筛选影响;
利用ADDCOLUMNS函数,为每一个笛卡尔积的结果匹配相关的数据;
利用CALCULATETABLE函数保持虚拟表始终处于被筛选状态;
最后利用AVERAGEX函数进行求平均值。
注:最大值最小值方法是一致的,后面不赘述。

利用上面的代码,求出最大值,最小值,然后编写如下代码:

配色 =
SWITCH (
    TRUE (),
    [动态数据] = [动态最小值], "#003366",
    [动态数据] > [动态最小值]
        && [动态数据] <= [动态均值], "#336699",
    [动态数据] > [动态均值]
        && [动态数据] < [动态最大值], "#99CCFF",
    [动态数据] = [动态最大值], "#0099FF",
    BLANK ()
)

3c65eb9fb7348130fb1eba5bf3325db4.png

选择动态数据,点击条件格式,选择背景色;

2848d8afd8749e9dd387037e447cdf57.png

选择字段值,选择刚才写好的度量值,单击确定。

a2ff1e52aeaf67e0c28e57f6abccfe1a.png

这样就完成了表格的配色,自动标注最大值,最小值,对各阶段的值进行不同配色。

当然,也可以根据个人喜好,调整自己喜欢的颜色。

最后,对于界面啊,切片器什么的等一些细节进行一下优化:

25b9f6b3058a432d09f6914385c780d5.gif

这样,一份热力图表格就新鲜出炉了。

样例传送门丨http://t.cn/A62Cj4U3

738eebe4e2515e45b29126cad29beea1.png

彩蛋:

1、累计排名是哪个可视化插件?

2、阈限计数如何添加?


​1

2

3

4

5

彩蛋解答:

1、Animated Bar Chart Race

3f40f38becfa3a92c2c8a3163b351a7c.png

2、首先点击输入数据,建立合适的字段;

d7dfa87452e304f643363ff7a195cf9d.png

编写如下代码:

计数项目 =
VAR TLL =
    SELECTEDVALUE ( '统计项'[项目] )
VAR TOL =
    CALCULATETABLE (
        ADDCOLUMNS ( SUMMARIZE ( '销售明细', '日期表'[月份], '分店表'[分店名] ), "动态数据", [动态数据] ),
        ALLSELECTED ()
    )
RETURN
    SWITCH (
        TRUE (),
        TLL = "最大值", [动态最大值] & "元",
        TLL = "上限区", CALCULATE ( COUNTROWS ( FILTER ( TOL, [动态数据] > [动态均值] && [动态数据] < [动态最大值] ) ) ) & "个",
        TLL = "均值", FORMAT ( [动态均值], "0" ) & "元",
        TLL = "下限区", CALCULATE ( COUNTROWS ( FILTER ( TOL, [动态数据] < [动态均值] && [动态数据] > [动态最小值] ) ) ) & "个",
        TLL = "最小值", [动态最小值] & "元"
    )

结果:

25e6b76791d8ccee5dd0a5cded8eae81.png
解释:
TLL是为了根据当前上下文而匹配相关的字段值;
TOL原理同之前的求均值代码一样,为了去除来自表格上下文的筛选效果;
利用SWITCH进行判定,不同的字段值执行不同的计算。

小伙伴们❤GET了么?

白茶会不定期的分享一些函数卡片

(文件在知识星球[PowerBI丨需求圈])

3f483e64eca8d1380c8321216f7f858e.png

这里是白茶,一个PowerBI的初学者。

21d55c41695b060065a45d6f8cb521a3.png
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值