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

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

要达到这样的效果,我们首先需要把城市名称和产品名称整合到一起,直接用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. 2019-02-02 Python学习之多线程

    1.主线程和次线程 若主线程结束则次线程也会结束 如何避免主线程先结束: 结尾处加上 while True: pass e.g. import win32api #引用系统函数 import _thr ...

  2. MDK未添加相应芯片的安装包

    问题: No Algorithm found for: 00000000H - 00000567HErase skipped!Error: Flash Download failed - " ...

  3. Tensorflow中Tensor对象的常用方法(持续更新)

    Tensor是Tensorflow中重要的对象.下面是Tensor的常用方法,后面还会写一篇随笔记录Variable的用法. 1. 生成一个(常)Tensor对象 >>>A = tf ...

  4. VM virtualBox中文版 v6.0.12.133076官方版(64/-虚拟机

    virtualBox中文版 v6.0.12.133076官方版(64/-虚拟机 http://www.onlinedown.net/soft/82464.htm http://8dx.pc6.com/ ...

  5. 2020年最新78道JVM面试题总结(含答案解析和思维导图)

    前言 关于JVM系列面试知识点总结了一个思维导图,分享给大家 1.java中会存在内存泄漏吗,请简单描述. 会.自己实现堆载的数据结构时有可能会出现内存泄露. 2.64 位 JVM 中,int 的长度 ...

  6. 再看rabbitmq的交换器和队列的关系

    最近又要用到rabbitmq,业务上要求服务器只发一次消息,需要多个客户端都去单独消费.但我们知道rabbitmq的机制里,每个队列里的消息只能消费一次,所以客户端要单独消费信息,就必须得每个客户端单 ...

  7. github知名企业开源项目索引

    亚马逊:https://github.com/amzn 饿了么 https://github.com/ElemeFEhttp://lrd.ele.me/腾讯 https://github.com/Te ...

  8. html里输入框和密码框的提示文字怎么弄

    HTML5 新增属性,浏览器版本低于IE8应该不支持 placeholder 属性 placeholder 属性规定用以描述输入字段预期值的提示(样本值或有关格式的简短描述). 该提示会在用户输入值之 ...

  9. 《UNIX环境高级编程》(APUE) 笔记第八章 - 进程控制

    8 - 进程控制 Github 地址 1. 进程标识 每个进程都有一个非负整型表示的 唯一进程 ID .进程 ID 是可复用的(延迟复用算法). ID 为 \(0\) 的进程通常是调度进程,常常被称为 ...

  10. 初探numpy——广播和数组操作函数

    numpy广播(Broadcast) 若数组a,b形状相同,即a.shape==b.shape,那么a+b,a*b的结果就是对应数位的运算 import numpy as np a=np.array( ...