数据可视化之DAX篇(十五)Power BI按表筛选的思路
https://zhuanlan.zhihu.com/p/121773967
数据分析就是筛选、分组、聚合的过程,关于筛选,可以按一个维度来筛选,也可以按多个维度筛选,还有种常见的方式是,利用几个特定的维度值构成的表,作为条件表来筛选原始表。
也就是说,根据一个表,来筛选另外一个表,在PowerBI中怎么做,更具体一点,如何用DAX来完成呢?
假设原始数据记录为一张模拟的订单表:

还有一张表,命名为筛选条件表,

根据这个筛选表,来找出订单表中的记录,即找出1月2日产品A和B、以及1月3日产品B的销售记录。
这个问题相当于求两个表的交集,很自然的会想到用表函数
NATURALINNERJOIN来实现,直接用这个函数来新建表测试一下,

你会发现没法正常返回结果,错误提示也很清楚,没有公共联接列。
所以第一步应该先让两个表产生关系,但是两个表之间只能有一个维度的关系,无法同时在两个列上建立关系,那筛选条件是两个维度怎么做呢?
很简单,通过两个维度表建立关系就行了,

然后再用NATURALINNERJOIN就可以正常提取出需要的数据了,

如果觉得前两列是重复的,可以用SELECTCOLUMNS函数来选择结果表中需要的列。
就这个问题继续探索一下,如果筛选条件表和订单表没有建立关系,是否可以实现呢?
也是可以的,在DAX中还有个强大的函数,TREATAS,专门处理没有建立关系的情况,因为它可以在表之间构建虚拟关系,直接进行筛选。
可以将上面构建的数据模型中的关系全部删掉,在没有任何关系,也没有维度表,只有筛选条件表和订单表的情况下,使用TREATAS效果如下:

直接得出想要的结果,是不是很强大。
TREATAS函数在以前的案例中也使用过,但是没有详细介绍,其实它并不难理解。
DAX函数名称大部分都是用英文单词组合的,TREATAS,是个关系函数,可以理解为TREAT+AS:将xx视同为xx的意思。(具体语法请参考官方文档)
以上面的筛选为例,
--------TREATAS( '筛选条件表', '订单表'[订单日期], '订单表'[产品名称])--------
它就是将“筛选条件表”,视同为订单表中的订单日期列和产品名称列,用订单表中的两列来筛选订单表,当然是能返回正确的结果的。
TREATAS很好用,它可以在不破坏原有数据模型的前提下,根据现实的需要,在公式内部灵活的构建虚拟关系,来进行计算。
但它的灵活性也是有代价的,在虚拟关系下运行的速度比实体关系下要慢很多,当数据量较大时会明显的感觉到。
总结
本文通过一个常见的分析场景,给出两个解决办法,并通过这两种办法,认识了两种关系:实体关系和虚拟关系,虚拟关系的筛选是通过TREATAS函数实现的。
不要因为TREATAS可以不建立关系就能实现筛选,你就忽视建模的作用,在数据模型中建立实体关系总是很必要的。上面第一种方式是DAX数据分析的基本功,在此之上,学习更灵活的技巧,不经意间秀一下,更能让人刮目相看。
数据可视化之DAX篇(十五)Power BI按表筛选的思路的更多相关文章
- 数据可视化之DAX篇(二十一)连接表的几个DAX函数,一次全掌握
https://zhuanlan.zhihu.com/p/67015995 编写DAX代码进行业务分析时,经常会用到表与表之间的连接计算,比如在之前的产品关联分析一文中(如何用Power BI分析产品 ...
- 数据可视化之DAX篇(五) 使用PowerBI的这两个函数,灵活计算各种占比
https://zhuanlan.zhihu.com/p/57861350 计算个体占总体的比例是一个很常见的分析方式,它很简单,就是两个数字相除,但是当需要计算的维度.总体的范围发生动态变化时,如何 ...
- 数据可视化之DAX篇(二十八)Power BI时间序列分析用到的度量值,一次全给你
https://zhuanlan.zhihu.com/p/88528732 在各种经营分析报告中,我们常常会看到YTD,YOY这样的统计指标,这样的数据计算并不难,尤其是在PowerBI中,因为有时间 ...
- 数据可视化之DAX篇(二)Power BI中的度量值和计算列,你搞清楚了吗?
https://zhuanlan.zhihu.com/p/75462046 对于初学者,总是会把度量值和计算列搞混,我也经常碰到这样的问题,有些星友用文章中的代码总是报错,发给我一看,才知道TA把本来 ...
- 数据可视化之DAX篇(十一)Power BI度量值不能作为坐标轴?这个解决思路送给你
https://zhuanlan.zhihu.com/p/79522456 对于PowerBI使用者而言,经常碰到的一个问题是,想把度量值放到坐标轴上,却发现无法实现.尤其是初学者,更是习惯性的想这么 ...
- 数据可视化之DAX篇(一)Power BI时间智能函数如何处理2月29日的?
https://zhuanlan.zhihu.com/p/109964336 今年是闰年,有星友问我,在Power BI中,2月29日的上年同期是怎么计算的? 这是个好问题,正好梳理一下,Power ...
- 数据可视化之DAX篇(十六)如何快速理解一个复杂的DAX?这个方法告诉你
https://zhuanlan.zhihu.com/p/64422393 经常有朋友提出一个问题,然后我给出一个DAX之后,TA又不是很理解,反复多次沟通才能把一个表达式讲清楚.或者TA自己写了一个 ...
- 数据可视化之DAX篇(二十七)半累加度量,在Power BI 中轻松处理
https://zhuanlan.zhihu.com/p/96823622 开始半累加的计算之前,我们先看看什么是累加.半累加以及不可累加数据. 在含有大量行的数据表中,各种数据处理语言,包括DAX ...
- 数据可视化之DAX篇(七) Power BI中用DAX生成的表如何添加索引列?
https://zhuanlan.zhihu.com/p/74732578 来源于知识星球中一个星友的问题,使用DAX在PowerBI中新建了一个表,如何为这个表添加索引列呢? 假如数据模型中只有一 ...
随机推荐
- Win10下Tensorflow的安装
Win10下Tensorflow的安装 1. Tensorflow简介 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张 ...
- @codeforces - 594E@ Cutting the Line
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个字符串 s 与正整数 k.现在你需要进行恰好一次操作: ...
- 封装find_element
因为find_element_by_id,find_element_by_name底层都是用find_element实现元素查找 #!/usr/bin/env python # -*- coding: ...
- UltraEdit常用技巧
Tip 1: Alt+C 列模式可以说最初选择使用这个文本编辑软件,原因很简单,就是因为“她”具有列编辑模式.如果您还不知道什么是列编辑模式的话,我想您应该好好研究一下啦.这是一个超级“赞”的功能.在 ...
- 使用SpringCloud Stream结合rabbitMQ实现消息消费失败重发机制
前言:实际项目中经常遇到消息消费失败了,要进行消息的重发.比如支付消息消费失败后,要分不同时间段进行N次的消息重发提醒. 本文模拟场景 当金额少于100时,消息消费成功 当金额大于100,小于200时 ...
- 在Java虚拟机上班是一种怎样的体验?
228 人赞同了该回答 利益相关,匿了! JVM公司里面线程众多,派系林立,尤其是执行引擎那波人,因为是核心部门,经常diss别的部门. 428 人赞同了该回答 不请自来. 其实在JVM工作没有你们想 ...
- python的常用魔法方法详细总结
构造和初始化 __init__我们很熟悉了,它在对象初始化的时候调用,我们一般将它理解为"构造函数". 实际上, 当我们调用x = SomeClass()的时候调用,__init_ ...
- 如果人生也能存档——C#中的备忘录模式
大家好,老胡又和大家见面了.首先承认今天的博客有点标题党了,人生是没有存档,也没有后悔药的.有存档和后悔药的,那是游戏,不知道这是不是游戏让人格外放松的原因之一. 今天恰逢端午放假,就让我们来试着做一 ...
- CLR垃圾收集器
CLR GC是一种引用跟踪算法,大致步骤如下: 1.暂停进程中所有的线程: 2.标记阶段,遍历堆中的所有对象,标记为删除,然后检查所有活动根,如果有引用对象,就标记那个对象可达,否则不可达: 3.GC ...
- 全栈的自我修养: 001环境搭建 (使用Vue,Spring Boot,Flask,Django 完成Vue前后端分离开发)
全栈的自我修养: 环境搭建 Not all those who wander are lost. 彷徨者并非都迷失方向. Table of Contents @ 目录 前言 环境准备 nodejs v ...