通过条件表筛选其他表,Power BI可以这样做

数据分析就是筛选、分组、聚合的过程,关于筛选,可以按一个维度来筛选,也可以按多个维度筛选,还有种常见的方式是,利用几个特定的维度值构成的表,作为条件表来筛选原始表。

也就是说,根据一个表,来筛选另外一个表,在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数据分析的基本功,在此之上,学习更灵活的技巧,不经意间秀一下,更能让人刮目相看。


(0)

相关推荐

  • Excel如何实现表格函数的多条件匹配

    职场中的表格匹配往往是复杂的,前面的技巧大多是单条件的匹配.如果遇到复杂的多条件的两表匹配,有没有好的解决思路呢?希望本例能给职场人士提供一些思路. 案例如图3-115所示,B2:F11数据区域有一张 ...

  • excel技巧:vlookup函数实现多条件匹配

    日常工作中我们有时会用到EXCEL做一些简单的数据处理,比如用VLOOKUP函数做匹配, 但是大多数情况匹配条件并不是唯一的,那么多匹配条件还能不能用vlookup函数呢?答案是YES! 查找了几个解 ...

  • 用DAX做查询,模型中的数据任你取

    小勤:上次说可以通过对逆向连接表编辑DAX公式按需要返回模型中的数据(具体见文章<链接回表,让Power Pivot和Excel的互动更加精彩>),具体是怎么弄的?大海:对的.这个说简单也 ...

  • 既然Power Pivot表间建关系后可直接调数据,还要Lookupvalue这个函数干嘛?

    小勤:在Power Pivot里对两个表建立了关系之后,就可以直接调用相关表的数据了,那还要Related或Lookupvalue这个函数干嘛呢? 大海:这个问题好难回答.不过,举个实际工作中的例子吧 ...

  • Power Pivot里用DAX创建表

    一般来说,我们很少在Power Pivot里用DAX直接创建表,但是,了解这些基础内容,也很有必要. 为了方便直接显示结果,以下操作在Power BI中完成,若在Excel中,可用链接回表或DAX S ...

  • Power BI里的数据透视表怎么长这样?肿么办?

    小勤:Power BI里这个数据透视表怎么设置啊?我放了三个维度到行里,可是怎么只能显示一个维度? 大海:因为Power BI默认可以按维度进行逐层钻取的啊.比如你想看下一层"货主城市&qu ...

  • 要导出所有Power BI数据表?用DAX Studio一键搞定!

    经常有朋友问,想导出Power BI Desktop里已经清洗好的数据表,但做成视觉对象后导出数据量有限制,复制表也很麻烦. 那么,怎么能将PBI里的数据方便地导出来呢?甚至导出其中所有的表数据呢?其 ...

  • Power BI度量值和新建表,到底有什么区别?

    PowerBI中,有三个地方可以使用DAX,分别是度量值.新建列和新建表,这三个功能并成一排摆放在这里,如图所示, 之前的文章中曾介绍了度量值和计算列的异同(收藏 | Power BI计算列和度量值, ...

  • Power BI 辅助表制作方式汇总

    PowerBI业务分析:按排名分组统计 其中第一步就是建立一个分组表,有不少星友问过,怎么在PowerBI中快速方便的建立一个辅助表,这篇文章就介绍几种常用的辅助表制作方式. 就以排名辅助表为例,下面 ...

  • Power BI如何动态展示表?送你两种方法

    日常分析中,我们不仅需要动态的计算一个值,常常还有动态返回表的需求.生成一个表,直接的想到就是利用DAX新建表,但计算表的属性是静态的,它无法与可视化页面上的筛选器交互,所以无法满足动态化的需求. 而 ...

  • 分享一个更实用的Power BI日期表

    那篇文章主要是介绍如何制作日期表,其中的日期表示例相对简单,和日期相关的维度也不够齐全,根据平时分析的需要,以及星友的反馈,这里再分享一个维度更多也更实用的日期表. 本文不再分别用几种方式来制作,免得 ...

  • PQ-综合实战:按条件动态化查询多表数据之1、查询条件动态化入门

    小勤:现在公司有很多数据是分在多个Excel工作簿或工作表里的,能不能设一些动态的查询条件,然后自己输入条件,就提取符合条件的数据到一张表里啊?比如这样: 大海:嗯,这有点儿像一个操作系统的查询功能了 ...

  • PQ-综合实战:按条件动态化查询多表数据之2、多查询条件动态化

    开始之前,我们先看一下最后实现的效果: 小勤:按条件动态化查询汇总多表数据真好用,但怎样添加多个查询条件好呢?比如增加年月条件: 大海:嗯,有了上一次<按条件动态化查询多表数据之1.查询条件动态 ...

  • PQ-综合实战:按条件动态化查询多表数据之3、与Excel数据有效性合体

    小勤:大海,那个按多条件查询的操作真是太好用了,但是,现在每次都得手工输入查询条件,太麻烦了,能不能用选择的方式啊? 大海:当然可以啊,Excel的数据有效性就OK了啊. 小勤:但是怎么从所有表里找到 ...