PowerBI 实现全动态图表线 - 精雕细节,打造极致

2019-09-23 19:47:17 浏览数 (1)

本文来自多个项目中的实际问题。如果你常用PowerBI,就会发现PowerBI默认的线图有个很严重的缺陷就是无法动态设置均值线或固定值线,只能设置成为一个静态的值。如下:

本文将引导大家一起实现如下高级效果:

甚至:

本文将学习到如下作图高级技巧:

  • 图线位置根据用户选择范围动态变化。
  • 图线本身不显示数据标签。
  • 图线末端显示数据标签。
  • 主数据点显示数据标签。
  • 指标可动态选择。
  • 计算图线使用的全局范围可动态选择。

如果你能直接看懂上述作图要求,就会发现这在PowerBI中是默认不可能完成的任务,再观察上述的效果图,你也会发现这很难完成,因此文本就来完成。

问题重述

为了更清晰该图表的现实意义,这里引述一个问题背景。(感谢Excel120热心战友提供真实场景)

业务背景:公司研发部门需要监控与统计各软件项目开发效率,其指标为软件开发效率(项目总工时/项目规模)。除了查看正常效率范围内的项目,研发对异常项目更为关注。对异常项目的定义为:软件开发效率值高于均值 3倍标准差,或低于均值 3倍标准差的项目。对于这些项目,管理层将进行干预。

需求描述: 制作软件开发效率折线图,其横轴为项目编号,纵轴为软件开发效率。 (1)折线图含辅助线:折线图需增加7条辅助线,分别为均值,均值 1倍, 2倍, 3倍,-1倍,-2倍,-3倍标准差。 (2)支持辅助线动态调整:即筛选条件改变后,项目范围也随着改变,对应的软件开发效率均值、标准差也随着改变,辅助线也随着改变。

图表难点: 当筛选条件改变后,无法做到软件开发效率指标的均值、标准差也随着改变,也就是说,均值,标准差是死的。

数据结构:

可以看出该数据结构非常简单清楚,而就是这样却很难做出想要的图。

问题泛化

为了使得该问题得到更一般的结果,我们将问题抽象成更为动态的需求,包括:

  • 指标可以动态指定。
  • 计算的范围可以动态指定。
  • 图表的辅助线和主体数据应该以简洁的方式给出。

实现方案

实现涉及的表:

结构组织:

简单查看就是:

这里的实际数据是叫做“项目汇总”的已汇总过的数据,而作图就仅仅是针对该数据即可。

PowerBI 工程式结构安排 - MVC模式

利用本案例的机会,这里浅谈一下在PowerBI中如何组织复杂的辅助数据用于作图。

不难发现,为了实现这种复杂的作图效果,需要一些辅助表,这些辅助表完全是为了作图目的存在,它们与业务数据模型没有半毛钱关系。我们称反应主要业务关系的表及关系为【业务数据模型】而仅仅用于辅助作图的表及关系称为【视图数据模型】。

Excel120 将成熟的软件工程学领域概念:MVC应用于此。观察上述方案结构,不难发现从命名方式上,辅助于作图的表被明显标识。

实现只在端点处计算图例

为了实现简洁的表达效果,正常的线不应该显示数据标签而仅仅在端点处显示,实现如下:

思路是:根据辅助的图例数据,判断当前应该绘制的图例,并判断如果位于端点处,则计算图例,否则留空。而对于数据点则正常计算。

这里其实并没有解决对图线的计算,因为根据PowerBI目前的图表设置能力,是无法在一个图中完成的。这里必须使用叠图技巧

叠图技巧的使用

在 PowerBI 中制作很多高级图表效果,都需要用到该技巧,即把两幅图叠放在一起。如下:

叠图的技巧要求对 PowerBI 的默认图表类型和结构非常熟悉,以至于可以脑补出如何配合两幅图而形成统一的效果。因此这是一个很难描述的过程,初学者需要系统性学习 PowerBI 基础才能领悟和运用该技巧。

在本例中,叠图存在一个很大的障碍,那就是:必须确保两幅图有同样的Y轴范围,或者说只有在同样的Y轴尺寸范围下,将两张图叠放在一起才能有效地融为一体。在 PowerBI 中,目前无法动态的设定Y轴的范围也是 PowerBI 亟待改进的问题。

呈现出区域的效果

如果说实现线图是可以的,那么在本案例中可以想象,如果用区块条带来反映区隔是很有意义的,如下:

而区域的条带也是需要动态设置的并在端点接缝处与图例融合为一体。PowerBI 默认也是没有的,这里使用堆积区域图来实现,这样就要动态计算每个区域部分的Y值高度,如下:

这里使用的技巧是:利用 Y 值绝对高度大小来反推在堆积时的高度,而且要注意堆积时的顺序,必须严格的保证这些精细的计算和条带顺序设置是正确的,才能使最终效果严丝合缝。

总结

本文并非是对 PowerBI 普通作图能力的介绍,而是挑战PowerBI默认不可能的实践。该案例除了完成了预期效果,案例的实现在很多地方都体现了 PowerBI 高级DAX的使用技巧,包括:

  • 基础:按列排序
  • 基础:SWITCH TRUE 结构
  • 高级:ALL 与 ALLSELECTED 的区别
  • 高级:构造 DAX 计算表
  • 基础:PowerBI 基础图表
  • 高级:图表的限制与限制破除
  • 高级:业务数据模型 与 视图数据模型

实际内容以本文案例文件为准。本文题材来自战友业务问题,具有很强的通用性和挑战性,如果您也有同时具备通用性和挑战性的 PowerBI 问题,欢迎提供。

——

本文含视频讲解,年度订阅会员自动更新。决定成为 PowerBI 高手的伙伴几乎都是 Excel120 订阅会员,本文又是一个例证。

非订阅会员希望下载案例文件学习,可以分享转发2小时后截图私信获得示例文件。

成为高手,不再犹豫

0 人点赞