数据可视化之powerBI技巧(十三)PowerBI作图技巧:动态坐标轴
之前的文章中介绍了如何制作动态的分析指标,这篇进行文章再介绍一下如何制作动态的坐标轴。
假设要分析的数据为销售额,分别从产品和地区两个维度进行分析,要实现的效果是,如果选择的是产品,则坐标轴是各个产品的名称,对应的是各个产品的销售额;如果选择的是地区,则坐标轴为城市,展现的是各个城市的销售额。
要达到这样的效果,我们首先需要把城市名称和产品名称整合到一起,直接用DAX来进行整合出一张表,
坐标轴指标表 =
VAR table1=SELECTCOLUMNS(ADDCOLUMNS(VALUES('产品'[产品名称]),"指标","产品"),"指标",[指标],"指标明细",[产品名称])
VAR table2=SELECTCOLUMNS(ADDCOLUMNS(VALUES('客户'[客户城市]),"指标","地区"),"指标",[指标],"指标明细",[客户城市])
RETURN UNION(table1,table2)
这个度量值主要是ADDCOLUMNS函数与SELECTCOLUMNS函数的密切配合,先用ADDCOLUMNS函数在提取的维度表上添加一列该维度的属性,返回带属性值的表;然后用SELECTCOLUMNS命名字段名,返回两个相同字段名的表,最后用UNION把两个表合并成一张表。
根据上一篇文章关于DAX表函数的介绍,ADDCOLUMNS函数与SELECTCOLUMNS都是表函数,它们的第一个参数是表,返回的也是一张表,这是理解这两个函数的关键。
创建的坐标轴指标表如下:

指标表创建好了,然后用该表中的[指标明细]作为坐标轴,并按[指标]字段做个切片器,这样当选择产品的时候,和产品对应的就是产品类别,地区也同理。
把销售额作为值,生成一个柱形图看看是什么样的,

可以看到通过产品和地区的筛选,坐标轴确实动态切换了,但是数据却明显异常,没有按照上下文进行计算,这是什么原因呢?
其实看到图中的数据都是汇总数,就很容易想到,刚才生成的坐标轴指标表,没有和订单表建立关系,因为订单表中的地区和城市分属不同的字段,无法同时连接。
如果利用指标明细和订单表中的产品类别建立关系,按产品类别作为坐标轴可以正常显示,但是按地区就没法显示数据了,因为地区和订单表没有建立任何关系。

为了解决这个问题,这里要用到一个非常重要的函数:TREATAS,它的作用是在两个表之间构建虚拟关系。
新建度量值如下:
分析数据 =
SWITCH(TRUE(),
SELECTEDVALUE('坐标轴指标表'[指标])="产品",CALCULATE([销售额],TREATAS(VALUES('坐标轴指标表'[指标明细]),'产品'[产品名称])),
SELECTEDVALUE('坐标轴指标表'[指标])="地区",CALCULATE([销售额],TREATAS(VALUES('坐标轴指标表'[指标明细]),'客户'[客户城市]))
)
这个度量值先判断切片器的选择,如果选择的是产品,则用TREATAS函数在坐标轴明细表与产品表之间构建虚拟关系,这样[销售额]就可以正常筛选计算了;选择地区的时候亦然。
效果如下,

正是想要的结果。
不过当切片器不选择或者多选的时候,又出现问题了,

坐标轴竟然同时显示了城市和产品,这样的比较显然没有任何意义,我们继续优化。
为了避免多选或者不选的问题,这里利用HASONEFILTER函数进行判断,HASONEFILTER函数的含义是判断是否存在单一的筛选器。
优化思路是:如果单选坐标轴指标,就是单一的筛选器,按照上面的度量值正常显示;如果不存在筛选器,或者存在多个筛选器,就上报一个错误。
分析指标的度量值修改如下,
分析数据1 =
IF(HASONEFILTER('坐标轴指标表'[指标]),
SWITCH(TRUE(),
SELECTEDVALUE('坐标轴指标表'[指标])="产品",CALCULATE([销售额],TREATAS(VALUES('坐标轴指标表'[指标明细]),'产品'[产品名称])),
SELECTEDVALUE('坐标轴指标表'[指标])="地区",CALCULATE([销售额],TREATAS(VALUES('坐标轴指标表'[指标明细]),'客户'[客户城市]))
),
ERROR("数据错误,请单选坐标轴指标!"))
这样设置以后,效果如下,

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

(现在最新的PowerBI的切片器已经可以设置为强制单选,可以不再拦截错误,这里只是提供一种思路)
至此,充分考虑了各种情况,利用DAX巧妙构建度量值,实现了坐标轴的动态切换。
数据可视化之powerBI技巧(十三)PowerBI作图技巧:动态坐标轴的更多相关文章
- 数据可视化基础专题(十三):Matplotlib 基础(五)常用图表(三)环形图、热力图、直方图
环形图 环形图其实是另一种饼图,使用的还是上面的 pie() 这个方法,这里只需要设置一下参数 wedgeprops 即可. 例子一: import matplotlib.pyplot as plt ...
- 数据可视化之powerBI技巧(二)Power BI性能分析器,原来还有这个功能
性能分析器是Power BI前几个月推出的功能,主要用于检测视觉对象和DAX的性能如何,该功能的使用比较简单,首先勾选这个功能, 然后点击开始记录并刷新视觉对象,就可以看出每个元素耗费的时间,如下图 ...
- 数据可视化之powerBI技巧(六)在PowerBI中简单的操作,实现复杂的预测分析
时间序列预测就是利用过去一段时间内的数据来预测未来一段时间内该数据的走势,比如根据过去5年的销售数据进行来年的收入增长预测,根据上个季度的股票走势推测未来一周的股价变化等等. 对于大部分人来说,这是个 ...
- 数据可视化之powerBI入门(四)Power BI与PowerQuery、PowerPivot有什么关系
https://zhuanlan.zhihu.com/p/64146209 Power BI与PowerQuery.PowerPivot有什么关系? 刚开始学习PowerBI的时候,总是能碰到Powe ...
- 数据可视化之powerBI入门 (一)认识PowerBI
来自 https://zhuanlan.zhihu.com/p/64144024 Power BI是什么? Power BI是微软推出的数据分析和可视化工具,我们先来看看微软官方是怎么介绍的: Po ...
- 数据可视化之powerBI基础(十二)PowerBI导入Excel数据有哪几种方式?
https://zhuanlan.zhihu.com/p/64999937 Excel作为使用最频繁.应用最广泛.用户最庞大的数据处理工具,当然也应该是PowerBI最常用的数据获取方式,本文介绍一下 ...
- 数据可视化之powerBI基础(十一)Power BI中的数据如何导出到Excel中?
https://zhuanlan.zhihu.com/p/64415543 把Excel中数据加载到PowerBI中我们都已经熟悉了,但是怎么把在PowerBI中处理好的数据导出到Excel中呢?毕竟 ...
- 数据可视化之powerBI基础(六)Power BI的“问答”,你用过吗?
https://zhuanlan.zhihu.com/p/64412190 本文来自星球嘉宾"海艳"的分享,关于Power BI的问答功能以及各项细节,海艳详细为大家逐一介绍,下 ...
- 【WaaCaa】一款开源科学作图/数据可视化工具 —— 诞生篇
作为一个理工男.用过了形形色色能够用于科学作图/数据可视化软件:从大学时做实验课推荐用于分析简单採集数据的 Origin; 毕业论文时用来呈现实验时序信号和离线分析脑电信号的 MATLAB.后面还发现 ...
- 数据可视化-gojs插件使用技巧总结
随着云计算时代的到来,由于Web技术的快速革新以及为了提供高质量的用户体验,数据可视化成为了前端技术发展的一大方向.为了解决这个问题,现如今涌现了很多优秀的第三方的javascript图形库,比如hi ...
随机推荐
- <VCC笔记> 关于Assertion
这篇博客开始介绍VCC的用法,先用简单的例子介绍VCC的基本语法,当然面对更复杂的程序时,VCC也是将他简化然后分析的. 1.Assertion #include <vcc.h> int ...
- MySQL的LIKE模糊查询优化
原文链接:https://www.cnblogs.com/whyat/p/10512797.html %xxx%这种方式对于数据量少的时候,我们倒可以随意用,但是数据量大的时候,我们就体验到了查询性能 ...
- matplotlib.pyplot.plot详解
参考资料: https://blog.csdn.net/baidu_41902768/article/details/80686608 之前的随笔也有说过,matplotlib是python中一个非常 ...
- APP——python——自动化环境搭建01
前提:python以及pycharm安装完成. ---------------------------------------------------------------------------- ...
- Eplan PLC连接点模块为什么不显示“路径功能文本”,已解决
Eplan PLC连接点模块为什么不显示“路径功能文本”,已解决 如果“路径功能文本”的文字开头的位置没有对准PLC模块的中心,PLC连接点模块就不会显示.
- vs2017离线包下载获取方法
一.去官网下载所需要的版本的安装包获取程序: https://www.visualstudio.com/zh-hans/downloads/ 三个版本,对应文件名称为: 社区版:vs_Communit ...
- Windows安装C的编译环境
对于java开发者来说安装C的编译环境不是非常熟悉,因此本文对C的安装环境进行介绍以及windows编译Redis和Zookeeper的过程.MinGW主要用于按照gcc.make等环境,cywin用 ...
- 解决:Invalid character found in the request target.The valid characters are defined in RFC 7230 and RF
背景 在将tomcat升级到7.0.81版后,发现系统的有些功能不能使用了,查询日志发现是有些地址直接被tomcat认为存在不合法字符,返回HTTP 400错误响应,错入信息如下: 原因分析 经了解, ...
- 专家解读:利用Angular项目与数据库融合实例
摘要:面对如何在现有的低版本的框架服务上,运行新版本的前端服务问题,华为云前端推出了一种融合方案,该方案能让独立的Angular项目整体运行在低版本的框架服务上,通过各种适配手段,让Angular项目 ...
- 【漏洞三】跨站点脚本(XSS)攻击
[漏洞] 跨站点脚本(XSS)攻击 [原因] 跨站点脚本(也称为xss)是一个漏洞,攻击者可以发送恶意代码(通常在(Javascript的形式)给另一个用户.因为浏览器无法知道脚本是否值得信任,所以它 ...