前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PowerBI 动态数据格式 高级版 以及重要通知

PowerBI 动态数据格式 高级版 以及重要通知

作者头像
BI佐罗
发布2020-08-31 16:32:41
6350
发布2020-08-31 16:32:41
举报
文章被收录于专栏:PowerBI战友联盟PowerBI战友联盟

最近有很多内容在研究和更新,但公众号内容,永远是只会迟到,但不会缺席,更会发出很多干货。

今天是来自罗丝钉伙伴的一个真实问题。(罗叔的会员群伙伴,简称螺丝钉,比较善于挤,善于钻)

问题重述

一般我们并不提倡互动式回答问题,非常随意而低效。

熟悉我们的螺丝钉同学们,会认真的把问题整理后发出,那必然会得到专业的回复。

问题如下:

需求:

在一个界面展示不同指标的同比分析结果。

通用的同比分析表:

需要的指标切片器:

  • 销售额/万元
  • 利润/万元
  • 利润率/%

期望达到的展示效果:

1.当指标为销售额或利润时,本期值、上年同期值数据格式为小数,增长率为百分比。

2.当指标为利润率时,本期值、上年同期值数据格式为百分比,这时不能计算同比增长率,而应计算同比增加值,单位为百分点。

问题:采用计算组能解决不同类别指标的动态数据格式问题,但无法解决利润率的同比增加值计算逻辑,因为针对率指标的同比计算公式不一样了。

请教:是否有解决思路和方法?

——

以上就是来自螺丝钉的问题了。那么,这种问题问地就很清楚,老师只能回答:能还是不能了。

而我们必须得能啊。

效果预览

这个是一个很通用和重要的场景,我们先给出结果,如下:

该问题非常有意义,它的精妙之处在于:

  • 销售额的显示,本期和上期是值,而同比增长是%;
  • 利润率的显示,本期和上期是率,而同比增长是值。

这在显示上完全是互斥的需求。

基础知识

这个实现非常重要,为了完成这个,您应该先了解此前的一篇文章:

用计算组实现动态格式

有了这个基础,我们再来看今天的问题。

格式与格式表达式

先来区分两个词语:

格式与格式表达式是不同的,请看:

这叫格式(文本)。

而再请看:

这叫格式表达式。

不难猜到:格式文本是一次性设置;而格式表达式是一个公式,它可以在运行时根据用户的选择来改变格式。所以,我们往往需要借助的是格式表达式的动态计算特性。

技巧

我们需要记住的只有一点:

如果在拖拽或选择切片器后,希望根本不同的选择,显示不同的格式,一定是用格式表达式。

实现-准备

我们先来实现 KPI 选项,如下:

代码语言:javascript
复制
Option.KPI =
SELECTCOLUMNS(
{
    ( "Sales" , "销售" , 1 ),
    ( "Profit" , "利润" , 2 ),
    ( "Volume" , "销量" , 3 ),
    ( "Profit%" , "利润率" , 4 )
} , "KPICode" , [Value1] , "KPIName" , [Value2] , "OrderBy" , [Value3] )

这是很经典的实现,包括选项的三要素:

  • Code: 不变的代码
  • Name: 可以随时根据用户诉求调整的名称文本
  • OrderBy: 用来支持自定义排序

从今天起,您应该将这三要素改为四要素,再加入:

  • Format: 数据格式

更新后,如下:

代码语言:javascript
复制
Option.KPI =
SELECTCOLUMNS(
{
    ( "Sales" , "销售" , 1 , "NUM" ),
    ( "Profit" , "利润" , 2 , "NUM"),
    ( "Volume" , "销量" , 3 , "INT"),
    ( "Profit%" , "利润率" , 4 , "PCT")
} , "KPICode" , [Value1] , "KPIName" , [Value2] , "OrderBy" , [Value3] , "DataType" , [Value4] )

这样更具通用性。

实现-动态格式表达式

对于计算组,可以这样设置:

这样就实现了 AC 的计算逻辑,再来实现格式化逻辑,如下:

对于 AC 可能是:销售额或利润率,所以判断其数据类型,如果是利润率的话,则使用百分比符号,反之全部使用整数格式。

而更复杂的是ΔPY的计算,是这样的:

根据需求,这里面蕴含了两套逻辑,如果是数值型的,计算增长率;如果是比率型的,只计算增长即可,因此,有:

注意,比率型的增长要改为点数。也就是说:例如率增加 1%,其实是增加了 1 个点。所以,1% 要视为 0.01,再进而视作 1 个点。

其对应的格式表达式为:

这与普通的情况正好是相反的。

于是就实现了:

这样,就可以类似的拓展了,可以实现非常多的度量值转换。

完。

再进一步

这个功能已经实现了。以下内容很高阶,初学者可以略过。

但这并非我们的调性。我们还收集到螺丝钉们的问题,如:

计算组和参数表都可以实现类似的效果,只不过用参数表的方法不能实现动态格式而已。

例如:

其度量值写法如下:

从功能来说,我们使用参数表得到了完全一样的结果,但格式并不一致。

那我们就用一个方法来进行破除。

我们现在知道:

  • 计算组可以动态计算格式
  • 参数表结合SWITCH结果也可以做多分支计算

那么自然想到:是否可以让计算组只完成一件事就是格式表达式呢?

答案是肯定的,设置如下:

看不懂不要紧,来看看效果吧先:

可以注意到:这里多出了一个 Format 层,这层就像是一个管道,不带有格式的数值透过这个管道后就可以带有正确的格式来显示了。

用这种技巧和方法,暂时需要这么一层。那这个技巧有什么好处呢,似乎没看出来。

其好处在本例中并不明显,但如果你可以举一反三的话,这个技巧整个开启了一套数据格式通用解决方案,该方案可以:

一站式解决一个PowerBI文件全部格式设置问题。

你没有看错,由于方法太过劲爆,必须独立一篇文章,但读到这里的伙伴在理论上应该可以想到我说的是什么。如果你可以想到,那么证明您的举一反三能力是超强的;没有想到也不要紧,继续关注即可。

总结

本文从实际案例出发,引导并给出了数据格式的高级设置方法并即将开启重磅文章揭示数据格式通用解决方案。敬请留意。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题重述
  • 效果预览
  • 基础知识
  • 格式与格式表达式
  • 技巧
  • 实现-准备
  • 实现-动态格式表达式
  • 再进一步
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档