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

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

要达到这样的效果,我们首先需要把城市名称和产品名称整合到一起,直接用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作图技巧:动态坐标轴的更多相关文章

  1. 数据可视化基础专题(十三):Matplotlib 基础(五)常用图表(三)环形图、热力图、直方图

    环形图 环形图其实是另一种饼图,使用的还是上面的 pie() 这个方法,这里只需要设置一下参数 wedgeprops 即可. 例子一: import matplotlib.pyplot as plt ...

  2. 数据可视化之powerBI技巧(二)Power BI性能分析器,原来还有这个功能

    ​性能分析器是Power BI前几个月推出的功能,主要用于检测视觉对象和DAX的性能如何,该功能的使用比较简单,首先勾选这个功能, 然后点击开始记录并刷新视觉对象,就可以看出每个元素耗费的时间,如下图 ...

  3. 数据可视化之powerBI技巧(六)在PowerBI中简单的操作,实现复杂的预测分析

    时间序列预测就是利用过去一段时间内的数据来预测未来一段时间内该数据的走势,比如根据过去5年的销售数据进行来年的收入增长预测,根据上个季度的股票走势推测未来一周的股价变化等等. 对于大部分人来说,这是个 ...

  4. 数据可视化之powerBI入门(四)Power BI与PowerQuery、PowerPivot有什么关系

    https://zhuanlan.zhihu.com/p/64146209 Power BI与PowerQuery.PowerPivot有什么关系? 刚开始学习PowerBI的时候,总是能碰到Powe ...

  5. 数据可视化之powerBI入门 (一)认识PowerBI

    来自  https://zhuanlan.zhihu.com/p/64144024 Power BI是什么? Power BI是微软推出的数据分析和可视化工具,我们先来看看微软官方是怎么介绍的: Po ...

  6. 数据可视化之powerBI基础(十二)PowerBI导入Excel数据有哪几种方式?

    https://zhuanlan.zhihu.com/p/64999937 Excel作为使用最频繁.应用最广泛.用户最庞大的数据处理工具,当然也应该是PowerBI最常用的数据获取方式,本文介绍一下 ...

  7. 数据可视化之powerBI基础(十一)Power BI中的数据如何导出到Excel中?

    https://zhuanlan.zhihu.com/p/64415543 把Excel中数据加载到PowerBI中我们都已经熟悉了,但是怎么把在PowerBI中处理好的数据导出到Excel中呢?毕竟 ...

  8. 数据可视化之powerBI基础(六)Power BI的“问答”,你用过吗?

    https://zhuanlan.zhihu.com/p/64412190 ​本文来自星球嘉宾"海艳"的分享,关于Power BI的问答功能以及各项细节,海艳详细为大家逐一介绍,下 ...

  9. 【WaaCaa】一款开源科学作图/数据可视化工具 —— 诞生篇

    作为一个理工男.用过了形形色色能够用于科学作图/数据可视化软件:从大学时做实验课推荐用于分析简单採集数据的 Origin; 毕业论文时用来呈现实验时序信号和离线分析脑电信号的 MATLAB.后面还发现 ...

  10. 数据可视化-gojs插件使用技巧总结

    随着云计算时代的到来,由于Web技术的快速革新以及为了提供高质量的用户体验,数据可视化成为了前端技术发展的一大方向.为了解决这个问题,现如今涌现了很多优秀的第三方的javascript图形库,比如hi ...

随机推荐

  1. 附020.Nginx-ingress部署及使用

    一 手动部署-官网版 1.1 获取资源 [root@master01 ~]# mkdir ingress [root@master01 ~]# cd ingress/ [root@master01 i ...

  2. 一文读懂 Java 异常体系

    写程序的时候,编辑器会提示错误,关键字拼错了,语法不符合规则,不符合泛型:程序编译的时候,编译器会提示错误,检查是否符合 Java 的语法规范,没有通过编译器检查的程序就无法编译,也就无法运行.这些都 ...

  3. springboot整合Mybatis(有xml)

    pom.xml <!-- mybatis 支持 SpringBoot --> <dependency> <groupId>org.mybatis.spring.bo ...

  4. Python进阶——详解元类,metaclass的原理和用法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题第18篇文章,我们来继续聊聊Python当中的元类. 在上上篇文章当中我们介绍了type元类的用法,在上一篇文章当中我 ...

  5. cc22a_demo_c++重载自增自减操作符-代码示范

    cc22a_demo_c++重载自增自减操作符-代码示范 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespa ...

  6. Jmeter工具环境搭建

    Jmeter工具什么 1 多线程框架-支持多并发操作 2 用于对服务器模拟负载 3 支持web,数据库,FTP服务器系统的性能测试 4 开源,可二次定制开发 下载Java JDK 下载地址: http ...

  7. 关于安装Django包的问题

    在Windows的环境下,有些包确实不好安装的,比如reportlab-3.2.0-cp27-none-win32.whl,根据xadmin安装的经验,从这个.whl里把文件夹reportlab解压出 ...

  8. 容器中的Java堆大小调整:快速,轻松

    在上一篇博客中,我们已经看到Java进行了改进,可以根据正在运行的环境(即物理机或容器(码头工人))识别内存.java的最初问题是,它无法弄清楚它是否在容器中运行,并且它曾经为容器运行所在的整个硬件捕 ...

  9. Mysql和Redis数据同步策略

    为什么对缓存只删除不更新 不更新缓存是防止并发更新导致的数据不一致. 所以为了降低数据不一致的概率,不应该更新缓存,而是直接将其删除, 然后等待下次发生cache miss时再把数据库中的数据同步到缓 ...

  10. 慕课网--docker走进第一个javaweb应用

    zh docker镜像就是一系列文件的集合 docker 容器就是一个进程.将docker镜像运行起来就是一个docker容器 docker仓库就是存储docker镜像的 1.docker的安装 do ...