之前的文章(采悟:连接表的几个DAX函数,一次全掌握)介绍了产品A的客户与产品B的客户的各种交叉关系,其中最常用的应该是找出A和B的共同客户,以便进行产品关联分析。

之前的思路是计算出两个产品的共同客户数,那么能不能选择三个产品呢,当然是可以的,利用上篇文章的思路,把三种产品的客户找出来,然后求三个表的交集就可以了。

但是这种方法是不是显得太笨拙了?如果只是两三个产品的共同客户数,勉强还可以使用,但如果是十几个甚至几十个产品,难道要先计算出几十个产品的客户表,再一个个求交集?

DAX当然不会这么笨,本文就给你看一个优雅的解决方案。


以关联分析中的示例数据为例(采悟:PowerBI分析模型:产品关联度分析),当时是利用一个切片和一个表格上下文的方式,来计算两种产品的共同客户数,

下面这个度量值,可以返回任意产品组合的客户数量,

共同客户数量 =
VAR t1 =
GENERATE(
VALUES('订单表'[客户ID]),
EXCEPT(
VALUES('产品表'[产品名称]),
CALCULATETABLE(VALUES('产品表'[产品名称]))))
VAR t2 = SUMMARIZE(t1,'订单表'[客户ID])
VAR t3 = EXCEPT(VALUES('订单表'[客户ID]),t2)
RETURN COUNTROWS(t3)

来看看它的效果,

任意选择多个产品,都可以自动计算出共同客户的数量,这种方式是不是比之前的要优雅的多呢?

再回头看这个度量值的代码,并不长,比上一篇文章中的代码都要短一些,但其理解难度却比那些要高出几个等级。

其中最重要的一个函数就是GENERATE,它的参数很简单,就是两个表,但是封装了强大的计算逻辑。它的这两个参数表,并不是简单的单独计算出来以后再合并到一起。事实上它的第一个参数表的每一行,为第二个表的表达式提供行上下文,在每一行上分别计算第二个表的表达式。

并且这个度量值中,GENERATE的第二个参数的表表达式,其中又使用了VALUES函数和CALCULATETABLE函数,利用它们对行上下文不同的计算逻辑,来最终返回未购买全部所选商品的客户列表。

如果把GENERATE函数彻底弄懂了,你对DAX的掌握,对上下文的理解都可以提升一大步。

这里你如果实在看不懂,也可以先直接用着,回头再慢慢品味。

我整体上再简单解释一下这个度量值,

VAR定义的第一个表t1是最重要的一环,该表返回的是只有两列的表,客户ID和产品名称,每一行组合全是订单表不存在的组合(把t1逻辑搞懂了,你也就理解了这个度量值);

t2将t1表的客户ID提取出来,含义是至少未购买过其中一个所选商品的客户列表;

t3利用EXCEPT函数,剔除t2的客户,就是所选商品的共同客户列表;

最后利用COUNTROWS函数返回共同客户的数量。

是不是仍然很绕呢,不要指望几句话就能帮你理解这个代码,你需要动手去练习,观察它的输出结果,思考上下文的逻辑,这时可以再看一下这篇文章:如何快速理解一个复杂的DAX?

总结

看起来很长的DAX代码并不一定就很难理解,而短的也不一定就很简单。实现同样的业务逻辑,把DAX写的很长并不算很厉害,而知道如何把代码写短,更需要深厚的内功。

优雅的背后,是长期的积累。

数据可视化之powerBI技巧(五)在Power BI中写出优雅的度量值是什么体验?的更多相关文章

  1. 数据可视化之powerBI技巧(二十四)Power BI初学者刚见的错误,帮你轻松处理

    在学习PowerBI的过程中,尤其是刚接触的时候,不可避免的会遇到各种各样的错误,有时自己怎么检查都没法消除,不解决这个错误又没法进行下一步的工作,经常会搞的自己烦闷无比,不过最后通过自己的苦苦摸索. ...

  2. 数据可视化之powerBI技巧(十一)基于SQL思维的PowerBI DAX实战

    本文来自于PowerBI星球嘉宾天行老师的分享,天行老师不仅DAX使用娴熟,更是精通SQL,下面就来欣赏他利用SQL思维编写DAX解决问题的一个实战案例. 基于SQL思维使用DAX解决实战问题 作者: ...

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

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

  4. 数据可视化之powerBI技巧(二十二)利用这个方法,帮你搞定Power BI"增量刷新"

    Power BI的增量刷新功能现在已经对Pro用户开通,但由于种种限制,很多人依然无法使用无这个功能,所以,每一次刷新,都要彻底更新数据集.这对于量级比较大的数据集来说,着实是一件耗费时间的事情. 拿 ...

  5. 数据可视化之powerBI技巧(十八)Power BI动态技巧:动态显示列和度量值

    今天分享一个可视化小技巧,如何在PowerBI的表格中动态显示需要的列? 就是这样的效果, 也就是根据切片器的筛选,来显示需要的列,做起来很简单,步骤如下: 01 逆透视表 进入Powerquery编 ...

  6. 数据可视化之powerBI技巧(四)使用Power BI制作帕累托图

    各种复杂现象的背后,其实都是受关键的少数因素和普通的大多数因素所影响,把主要精力放在关键的少数因素上,就能达到事半功倍的效果. 这就是大家常说的二八原则,也称为帕累托原则,最早是由意大利经济学家 V. ...

  7. 数据可视化之powerBI技巧(三)这个Power BI技巧很可爱:利用DAX制作时钟

    周末放松一下,给大家分享一个小技巧,仅利用DAX制作一个简易的时钟. 时钟效果如下: 这个时钟的制作只需一个度量值,你信吗? 事实上确实如此,制作步骤介绍如下: 1,新建参数,生成一个数字序列作为小时 ...

  8. 数据可视化之powerBI技巧(二十一)简单三个步骤,轻松管理你的Power BI度量值

    最近碰到几个星友的问题,都是问我之前分享的源文件是如何把度量值分门别类放到不同的文件夹中的,就像这样, 其实在之前的文章中也曾提及过做法,这里再详细说一下制作步骤: 01 | 新建一个空表 点击菜单栏 ...

  9. 数据可视化之powerBI技巧(八)Power BI按多列排序的技巧

    目前PowerBI的表格已经支持多列排序,但是矩阵依然还不支持按多个字段排序,虽然这个需求很普遍,这里利用DAX提供一个变通的实现方式. 模拟数据如下,有两个数据指标: 对类别首先按[指标一]进行排序 ...

随机推荐

  1. 安装Zabbix5.0

    目录 概述 支持的平台 安全相关 支持TimescaleDB agent升级 垂直菜单 部署 安装要求 数据库要求 前端要求 服务端要求 Agent 2 Java gateway 安装 配置镜像源 安 ...

  2. Dubbo——SPI及自适应扩展原理

    文章目录 引言 正文 一.什么是SPI? 1. Java SPI的实现 2. Dubbo SPI实现原理 由配置文件得到的猜想 SPI源码 二.自适应扩展机制 三.Dubbo IOC 总结 引言 Du ...

  3. S7-1200视频教程: S7-1200的功能与特点-跟我做 - 2/112

    S7-1200视频教程: S7-1200的功能与特点-跟我做 - 2/112 观看连接: http://www.elearning.siemens.com.cn/video/Course/201105 ...

  4. C#数据结构与算法系列(十):逆波兰计算器——逆波兰表达式(后缀表达式)

    1.介绍 后缀表达式又称逆波兰表达式,与前缀表达式相似,只是运算符位于操作数之后 2.举例说明 (3+4)*5-6对应的后缀表达式就是3 4 +5 * 6 - 3.示例 输入一个逆波兰表达式(后缀表达 ...

  5. java基础——并发1

    一.并发的定义 并发:对于这个概念一直就是没怎么搞懂,就是感觉特别的生疏,(自己从从字面上理解就是多个东西,一起出发),所以就上网上查了一些资料: 同时拥有两个或多个线程,如果程序在单核处理器上运行, ...

  6. MQ消息队列(2)—— Java消息服务接口(JMS)

    一.理解JMS   1.什么是JMS?         JMS即Java消息服务(Java Message Service)应用程序接口,API是一个消息服务的标准或者说是规范,允许应用程序组件基于J ...

  7. java soket通信总结 bio nio aio的区别和总结

    1 同步 指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪 自己上街买衣服,自己亲自干这件事,别的事干不了. 2 异步 异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作 ...

  8. 阿里巴巴--java多线程的两种实现方式,以及二者的区别

    阿里巴巴面试的时候,昨天问了我java面试的时候实现java多线程的两种方式,以及二者的区别当时只回答了实现线程的两种方式,但是没有回答上二者的区别: java实现多线程有两种方式: 1.继承Thre ...

  9. 关于SPSS Modeler18 提示:用于定义的观测值的字段的值无效

    今天在做实验的时候,按照实验步骤严格设置了参数,当运行节点的时候,一直提示:用于定义的观测值的字段的值无效,如下图 我把我的流文件发给同学,同学的机器上是可以运行的,但是我的不行,不知道什么原因,有知 ...

  10. ASP.NET 开源导入导出库Magicodes.IE 多Sheet导入教程

    多Sheet导入教程 说明 本教程主要说明如何使用Magicodes.IE.Excel完成多个Sheet数据的Excel导入. 要点 多个相同格式的Sheet数据导入 多个不同格式的Sheet数据导入 ...