185****1226

2020-06-15   阅读量: 1555

PowerBI 数据分析技巧,如何利用条件表筛选数据?

扫码加入数据分析学习群

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

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

18.9871 4 3 关注作者 收藏

评论(0)


暂无数据

推荐课程