数据可视化之powerBI技巧(十三)PowerBI作图技巧:动态坐标轴

摘要:
创建的坐标轴指标表如下所示:如果新生成的坐标轴指示器表使用指标详细信息与订单表中的产品类别(“客户”[客户城市])建立关系,则测量值首先判断切片器的选择,然后使用TREATAS函数在坐标轴明细表和产品表之间建立虚拟关系,并且坐标轴意外地同时显示城市和产品。HASONEFILTER函数的含义是确定是否存在单个过滤器。如果选择了坐标轴指示器。

之前的文章中介绍了如何制作动态的分析指标,这篇进行文章再介绍一下如何制作动态的坐标轴。

 

假设要分析的数据为销售额,分别从产品和地区两个维度进行分析,要实现的效果是,如果选择的是产品,则坐标轴是各个产品的名称,对应的是各个产品的销售额;如果选择的是地区,则坐标轴为城市,展现的是各个城市的销售额。

 

要达到这样的效果,我们首先需要把城市名称和产品名称整合到一起,直接用DAX来进行整合出一张表,

 

坐标轴指标表 =
VAR table1=SELECTCOLUMNS(ADDCOLUMNS(VALUES('产品'[产品名称]),"指标","产品"),"指标",[指标],"指标明细",[产品名称])
VAR table2=SELECTCOLUMNS(ADDCOLUMNS(VALUES('客户'[客户城市]),"指标","地区"),"指标",[指标],"指标明细",[客户城市])
RETURN UNION(table1,table2)

 

这个度量值主要是ADDCOLUMNS函数与SELECTCOLUMNS函数的密切配合,先用ADDCOLUMNS函数在提取的维度表上添加一列该维度的属性,返回带属性值的表;然后用SELECTCOLUMNS命名字段名,返回两个相同字段名的表,最后用UNION把两个表合并成一张表。

 

根据上一篇文章关于DAX表函数的介绍,ADDCOLUMNS函数与SELECTCOLUMNS都是表函数,它们的第一个参数是表,返回的也是一张表,这是理解这两个函数的关键。

 

创建的坐标轴指标表如下:

 

数据可视化之powerBI技巧(十三)PowerBI作图技巧:动态坐标轴第1张

 

 

 

指标表创建好了,然后用该表中的[指标明细]作为坐标轴,并按[指标]字段做个切片器,这样当选择产品的时候,和产品对应的就是产品类别,地区也同理。

 

把销售额作为值,生成一个柱形图看看是什么样的,

 

 

 

数据可视化之powerBI技巧(十三)PowerBI作图技巧:动态坐标轴第2张

可以看到通过产品和地区的筛选,坐标轴确实动态切换了,但是数据却明显异常,没有按照上下文进行计算,这是什么原因呢?

 

其实看到图中的数据都是汇总数,就很容易想到,刚才生成的坐标轴指标表,没有和订单表建立关系,因为订单表中的地区和城市分属不同的字段,无法同时连接。

 

如果利用指标明细和订单表中的产品类别建立关系,按产品类别作为坐标轴可以正常显示,但是按地区就没法显示数据了,因为地区和订单表没有建立任何关系。

 

 

数据可视化之powerBI技巧(十三)PowerBI作图技巧:动态坐标轴第3张

 

 

为了解决这个问题,这里要用到一个非常重要的函数:TREATAS,它的作用是在两个表之间构建虚拟关系。

 

新建度量值如下:

 

分析数据 =
SWITCH(TRUE(),
SELECTEDVALUE('坐标轴指标表'[指标])="产品",CALCULATE([销售额],TREATAS(VALUES('坐标轴指标表'[指标明细]),'产品'[产品名称])),
SELECTEDVALUE('坐标轴指标表'[指标])="地区",CALCULATE([销售额],TREATAS(VALUES('坐标轴指标表'[指标明细]),'客户'[客户城市]))
)

 

这个度量值先判断切片器的选择,如果选择的是产品,则用TREATAS函数在坐标轴明细表与产品表之间构建虚拟关系,这样[销售额]就可以正常筛选计算了;选择地区的时候亦然。

 

效果如下,

 

 

数据可视化之powerBI技巧(十三)PowerBI作图技巧:动态坐标轴第4张

正是想要的结果。

 

不过当切片器不选择或者多选的时候,又出现问题了,

数据可视化之powerBI技巧(十三)PowerBI作图技巧:动态坐标轴第5张

坐标轴竟然同时显示了城市和产品,这样的比较显然没有任何意义,我们继续优化。

 

为了避免多选或者不选的问题,这里利用HASONEFILTER函数进行判断,HASONEFILTER函数的含义是判断是否存在单一的筛选器。

 

优化思路是:如果单选坐标轴指标,就是单一的筛选器,按照上面的度量值正常显示;如果不存在筛选器,或者存在多个筛选器,就上报一个错误。

 

分析指标的度量值修改如下,

 

分析数据1 =
IF(HASONEFILTER('坐标轴指标表'[指标]),
SWITCH(TRUE(),
SELECTEDVALUE('坐标轴指标表'[指标])="产品",CALCULATE([销售额],TREATAS(VALUES('坐标轴指标表'[指标明细]),'产品'[产品名称])),
SELECTEDVALUE('坐标轴指标表'[指标])="地区",CALCULATE([销售额],TREATAS(VALUES('坐标轴指标表'[指标明细]),'客户'[客户城市]))
),
ERROR("数据错误,请单选坐标轴指标!")

)

 

 

这样设置以后,效果如下,

 

 

数据可视化之powerBI技巧(十三)PowerBI作图技巧:动态坐标轴第6张

 

 

这里利用ERROR函数故意上报一个错误,并提示报表使用者错误的原因和解决方式,

 

 

数据可视化之powerBI技巧(十三)PowerBI作图技巧:动态坐标轴第7张

 

(现在最新的PowerBI的切片器已经可以设置为强制单选,可以不再拦截错误,这里只是提供一种思路)

至此,充分考虑了各种情况,利用DAX巧妙构建度量值,实现了坐标轴的动态切换。

免责声明:文章转载自《数据可视化之powerBI技巧(十三)PowerBI作图技巧:动态坐标轴》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇并发MyCAT-管理端常用命令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Lodash学习笔记

有多年开发经验的工程师,往往都会有自己的一套工具库,称为utils、helpers等等,这套库一方面是自己的技术积累,另一方面也是对某项技术的扩展,领先于技术规范的制订和实现。 Lodash就是这样的一套工具库,它内部封装了诸多对字符串、数组、对象等常见数据类型的处理函数,其中部分是目前ECMAScript尚未制订的规范,但同时被业界所认可的辅助函数。莫倩...

添加串口和虚拟终端输出帮助调试

在使用IAR开发STM32项目时,使用串口或者是虚拟终端来输出我们想看的信息是一个非常好而且简便的方式。 首先来看看串口怎么实现信息输出。简单来说串口输出信息就是将标准输出重定向到串口,在上位机的超级终端或者串口助手等工具中查看结果。 在使用串口之前要配置串口,这一点是串口应用的基本知识,如果要通过串口输入参数可能还需要使用中断。关于串口配置和终端配置,应...

动态规划法-01背包问题

一 几个概念: 最优化问题:有n个输入,它的解由这n个输入的一个子集组成,这个子集必须满足某些事先给定的条件,这些条件称为约束条件,满足约束条件的解称为问题的可行解。满足约束条件的可行解可能不止一个,为了衡量这些可行解的优劣,事先给出一定的标准,这些标准通常以函数的形式给出,这些标准函数称为目标函数,使目标函数取得极值的可行解成为最优解,这类问题称为最优...

Vue页面加载时,触发某个函数的方法

需要在加载页面的时候调用生成验证码的click事件函数 解决方法如下,利用Vue中的mounted 1 mounted:function(){ 2 this.createcode();//需要触发的函数 3 } 4 //下面是createcode函数 5 createcode(){ 6 var self...

windows下的shellcode剖析浅谈[转自看雪]

标 题: 【原创】windows下的shellcode剖析浅谈作 者:snowdbg时 间: 2009-10-06,11:12链 接: http://bbs.pediy.com/showthread.php?t=99007  今天是中秋节,正好我的文章在今天基本完成,作为中秋礼物送给大家,由于本人水平有限希望大家多多批评指正!学习了好些日子了,思路总是乱...

C++将类的构造函数、析构函数声明为private或者protected的用途

如果将构造函数、析构函数声明为private或者protected,表示不能从类的外部正常调用构造和析构函数了。 这种用法的通常使用的场景如下: 1、如果不想让外面的用户直接构造一个类A的对象,而希望用户只能构造这个类A的子类,那就把这个类A的构造函数、析构函数声明为protected,而将类A子类的构造函数和析构函数声明为public。例如:     c...