前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PowerBI 实现超多系列对比分析 - 下篇 - 方案实现

PowerBI 实现超多系列对比分析 - 下篇 - 方案实现

作者头像
BI佐罗
发布2021-02-09 15:22:08
1.6K0
发布2021-02-09 15:22:08
举报
文章被收录于专栏:PowerBI战友联盟PowerBI战友联盟

前情回顾,在上一篇我们说明了:(动画)

该图表反应了多个系列,且满足特性:

  • 多达 60 个系列的同时显示
  • 端点处的数字显示
  • 颜色的对齐

本文讨论其实现。

业务逻辑

该模型可以反应随着时间的发展,多品牌,多SKU,多地区等表示任何多系列的元素的发展。

表征发展情况的指标称为:发展索引值。

这些内容是先于数据模型而存在的一种打分,可以预先准备,也可以由数据模型计算得到。

我们准备再写一篇文章,来研究索引值的计算。

本文先假设这些索引值已经存在,其结构大致如下:

期初,这些索引值都是100,随着时间的推移,业务的发展,索引值将按照某种业务逻辑变化扩张,这个内容我们后续在下篇文章来讨论。

图表结构设计

由于一开始考虑到的对图表的要求:

  • 多达 60 个系列的同时显示
  • 端点处的数字显示
  • 颜色的对齐

要考虑如何设计图表的显示更加专业。

很多 Power BI 和 DAX 的初学者常犯一个错误,那就是: 企图用一个图的简单默认设置或一个度量值的简单编写就实现在其大脑中模糊的需求。 这是 Power BI 和 DAX 初学者很严重的问题,不但无法实现诉求,还会陷入错误的习惯。

为实现该诉求,图列系列和度量值都要单独设计,更加方便做复杂的控制。

图例的实现

图例的实现如下:

代码语言:javascript
复制
Legend = 
VAR _table_base =
ADDCOLUMNS(
    ADDCOLUMNS(
        SELECTCOLUMNS(
            VALUES( Data[行业名称] ) , "图例" , [行业名称]
        ) ,
        "排序索引" ,
        - [KPI.Index.ByItem.Base]
    ),
    "ToIndex" , [排序索引]
)
VAR _table_index = SELECTCOLUMNS( _table_base , "ToIndex" , [ToIndex] )
RETURN
    ADDCOLUMNS( 
        SUBSTITUTEWITHINDEX( _table_base , "Index" , _table_index , [ToIndex] , ASC ) , 
        "TOP10" , IF( [Index] <= 9 , "Yes" , "No" )
    )

这里的 _table_base 已经可以了,后面的 _table_index 和返回的表对此做了增强处理,加入了编号。

普通实现仅仅用 _table_base 即可,不需要考虑后续部分,后续部分可以参考《DAX实战》中的通用加索引详解。

得到:

先放在这里,先来实现指标的计算,再做整合。

指数的计算

对于索引指标的计算,其逻辑是:

代码语言:javascript
复制
KPI.Index.ByItem.Base = 
LASTNONBLANKVALUE( VALUES( 'Calendar'[Date] ) , CALCULATE( SELECTEDVALUE( Data[指数] ) ) )

这里的计算考虑到:

  • 指数,只有对单个 Item 才有意义。
  • 而多个日期的指数,应该以最后一个指数不为空的日期的指数为准。

所以,这个基础计算已经不是求和的简单聚合模式,而是要考虑元素和日期两个维度来进行计算保护得到正确结果。

进一步增强,考虑到默认显示 TOP 10,可以建立度量值如下:

代码语言:javascript
复制
KPI.Index.ByItem = 
IF( CALCULATE( ISFILTERED( Legend[图例] ) , ALLSELECTED( ) ) ,
    [KPI.Index.ByItem.Base] ,
    IF( SELECTEDVALUE( Legend[TOP10] ) = "Yes" , [KPI.Index.ByItem.Base] )
)

接下来处理图例的元素排序。

图例的排序

图例的元素排序,希望根据最后一个日期的指数进行,在已经制作的图例表中,只要设置按序排列即可,如下:

默认显示

这样,就有了默认显示,如下:

由于用户未作任何选择,根据默认度量值的计算,只会默认显示前 10 名的图例的系列。

60个系列的显示

由于可以点击图例的元素,就可以通过点击图例来控制显示,如下:

用户此时可以选择更多,如下:

此时出现问题:用户选择超过了15个,但系列并未增多,这就是一个 BUG。

解决的方法是:设置系列为显示无数据的项目。结果如下:

该 BUG 就解决了。实际我们也不知道是为什么,这是这个规律。

端点的显示

对于端点的显示,则需要一个叠图的技巧,如下:

其度量值如下:

代码语言:javascript
复制
KPI.Index.ByItem.Point = 
IF( CALCULATE( ISFILTERED( Legend[图例] ) , ALLSELECTED( ) ) ,
    VAR _x = MAXX( ALL( Data[日期] ) , [日期] ) RETURN IF( MAX( 'Calendar'[Date] ) = _x , [KPI.Index.ByItem.Base] ) ,
    IF( SELECTEDVALUE( Legend[TOP10] ) = "Yes" , 
        VAR _x = MAXX( ALL( Data[日期] ) , [日期] ) RETURN IF( MAX( 'Calendar'[Date] ) = _x , [KPI.Index.ByItem.Base] )
    )
)

将两个图合并,就可以得到最终的效果了。

总结

本文给出了实现超多系列折线图对比分析的具体方法,得到:

  • 多达 60 个系列的同时显示
  • 端点处的数字显示
  • 颜色的对齐

这里基于了一个假设就是指数表是提前准备好的。那么如何对一套原始的业务数据给出指数呢?大家可以自己思考尝试。我们会在补充篇,给出通用方法的尝试,并进一步揭示指数表的业务意义。

在订阅了BI佐罗讲授的《BI真经》之《BI进行时》课程区,除了可以下载本文案例,还可以观看视频讲解。

让数据真正成为你的力量

Create value through simple and easy with fun by PowerBI

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PowerBI战友联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 业务逻辑
  • 图表结构设计
  • 图例的实现
  • 指数的计算
  • 图例的排序
  • 默认显示
  • 60个系列的显示
  • 端点的显示
  • 总结
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档