数据可视化之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 ...
随机推荐
- Docker巨轮的航行之路-基础知识篇
一.什么是Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中 ...
- 非线性规划的Matlab 解法
编写M 文件fun1.m 定义目标函数 function f=fun1(x); % 定义目标函数 f=sum(x.^)+; % .^2是矩阵中的每个元素都求平方.^2是求矩阵的平方或两个相同的矩阵相乘 ...
- # 详细了解HTML5中的form表单
4.规范使用 <form>元素用于组织所有表单部件(也称为控件或字段),负责告诉浏览器把数据提交到哪里,方法是在action属性中提供一个URL.加入你只是想在客户端使用JavaScrip ...
- 关于Ubuntu系统忘记密码的解决方法合集
昨天有台机器的Ubuntu系统密码出了问题,一直提示错误.由于里面的数据比较重要,不建议重装系统,所以百度了一会,最终解决了忘记密码问题.整理了一个大合集分享出来. 第一种:参考教程如下 ...
- C# 什么是泛型 ?以及对泛型各方面的一些知识点的整理
1.1 理解什么是泛型 在.NET 2.0,可以成为革命性壮举的, 就是引入了激动人心的特性——泛型..NET泛型是CLR和高级语言共同支持的一种全新的结构,实现了一种将类型抽象化的通用处理方式.在泛 ...
- Java学习笔记7(IO)
IO(输入输出) IO流按照操作数据的不同,分为字节流和字符流,按照数据传输方向分为输入流和输出流. 字节流 计算机中,所有文件都是以二进制(字节)形式存在,IO流中针对字节的输入输出提供了一系列的流 ...
- Machine Learning Note
[Andrew Ng NIPS2016演讲]<Nuts and Bolts of Applying Deep Learning (Andrew Ng) 中文详解:https://mp.weixi ...
- 解决Mac中anaconda作图中文异常显示的问题
说明 本篇主要针对在MAC系统中Anaconda环境下,matplotlib显示不了中文的问题,提出解决Python绘图时中文显示的方法. 运行环境 macOS Mojave 10.14.6 Pyth ...
- Java容器:HashMap连环炮
本文来源于:https://mp.weixin.qq.com/s/oRx-8XXbgage9Hf97WrDQQ, 公众号:安琪拉的博客 前言 HashMap应该算是Java后端工程师面试的必问题,因为 ...
- Spring Boot 系列
https://www.cnblogs.com/magicalSam/p/7189421.html