其他分享
首页 > 其他分享> > PBI之筛选器函数(二)

PBI之筛选器函数(二)

作者:互联网

  上一节之中已经分享了一些筛选函数的基本用法,本节将会把剩下的筛选函数全部整理完。这样我们离成功就有近了一步,想想都都有点小激动呢。

 

 

   1、FILTER    接受一个表和一个逻辑条件作为参数,返回满足条件的所有行

  语法:

FILTER ( <表>, <布尔表达式> )

  FILTER函数看似很简单,其实要是能把它用好,也是非常牛逼的了,前面给CALCULATE打了个五星,我觉得它就是我第二个要打五星的函数了。可见它的重要性啊。

  它可以返回一个表或者是某几列,不过跟多的时候它是跟CALCULATE联合起来使用的。话不多说,直接上案例了。

 

  我们还是以这个数据来说明,首先我们通过FILTER来返回一个表格试试,大家可以看到上面有湖北和上海两个地方的多天的数据,现在我只想要看上海的数据

 

  原理就是我在业务表这张总表里将省份=“上海"的部分给展示出来了。接下来我们来展示一个它与CALCULATE的联合用法

 

  上面是CALCULATE里面嵌套了两个FILTER来返回7.1日这一天上海的件量的。注意,这里两个FILTER之间是交集的关系,两个必须同时满足true才会返回正确结果。

  2、FILTERS  返回直接应用于参数列的筛选器值组成的表。

  语法:

FILTERS ( <列名> )

  注意了这里返回的是由单列组成的表,表中包含不重复值。它只有一个参数,返回的是一个表。

业务表中有多少个省份 = CALCULATE(countrows(FILTERS('业务表'[省份])))

 

  返回表的案例我就不给大家做展示了,在这里示范了如果计算有多少个省份,同理我们也可以计算有多少天,有多少条记录。。。

  3、HASONEFILTER   如果指定的列有且只有一个直接筛选器,则返回 TRUE;否则,返回 FALSE。

  语法:

HASONEFILTER ( <列名> )

  

  上面已经说了有且只有一个筛选器的时候才会返回TRUE,很显然我们上面案例中对省份字段没有任何筛选器,所以返回了FALSE。

 

  那当我们给省份加了一个筛选器后立马就变成TRUE了,注意了这里只对省份有筛选才行哦,假如是对日期筛选返回的也会是FALSE.

  4、HASONEVALUE     当指定列在当前筛选上下文中只有一个不重复值时,返回 True。

  语法:

HASONEVALUE ( <列名> )

  说人话就是当COUNTROWS(VALUES(列名))=1的时候才返回TRUE,否则返回FALSE。

  

 

 

 

   很显然我们上面表里有上海和湖北两个省份,所以返回了FALSE

  

 

 

  当我们改用只有上海的那张表来计算的话返回的结果就是TRUE了。

  5、ISCROSSFILTERED      检测指定的表或列是否被交叉筛选

ISCROSSFILTERED ( <TableNameOrColumnName> )

  CROSS原本是交集的意思,通过整个函数的字面意思应该是判断是否有交叉筛选。

 

  还是用这个数据来做说明

  

 

  当没有任何筛选的时候返回时FALSE

  当有筛选交集的时候返回TRUE,这个函数跟上面的HASONEFILTER的用法似乎有点类似。

   6、ISFILTERED        检测指定的表或列是否被直接筛选。

  语法:

ISFILTERED ( <TableNameOrColumnName> )

  

 

  当没有筛选的时候显示FALSE

  

 

  当有筛选的时候返回TRUE

  由此可见HASONEFILTER、HASONEVALUE、ISCROSSFILTERED、ISFILTERED其实更准确的说应该都是布尔函数。

  7、RELATED   从关系的一端返回标量值。

  语法:

RELATED ( <列名> )

  其实这个函数跟EXCEL里的Vlookup有异曲同工之妙,都是查找函数,下面以这两个基表做演示

 

 

 

 

  在PBI里建好模型后,可以直接在业务表里将单价表里的单价匹配过来

  

 

  这样似乎看起来比Vlookup还要简单许多,Vlookup已经是一个神一样的存在了,没想到还有比它更厉害的,由此可见人外有人,山外有山啊。

  8、RELATEDTABLE      从关系的多端返回符合要求的所有记录。

  语法:

RELATEDTABLE ( <表名> )

   还是用上面的基表来演示,现在反过来,我要从一端计算多端里的记录条数

 

   业务表里湖北有11条记录,上海有10条记录,浙江没有记录。看到这里,我不由得又想发出一声感慨,PBI实在是太强大了,Excel里那么麻烦才能完成的事,在这里简直就是妙妙钟。

  9、USERELATIONSHIP         指定 DAX 表达式的在计算时所使用的关系。将关系两端的列作为参数可以定义这种关系。

  语法:

USERELATIONSHIP ( <列 1>, <列 2> )

 

   以上面这两个基表做演示,始发省份有上海、湖北,目的省份有上海、湖北、浙江,他们作为进出两个维度来统计的话,件量肯定不一样,那如何实现呢?

 

   业务表里有始发省份和目的省份两个维度,那首先必须要把他们的关系建好,只能一个是实线(原配),一个是虚线(二房),注意了这里的建立关系是个必要条件。

出 = sum('业务表'[件量])
进 = CALCULATE([出],USERELATIONSHIP('业务表'[目的省],'单价表'[省份]))

 

  USERELATIONSHIP在这里相当于是忽略前面实线关系重新给他们定了一次关系,然后再计算。

  好啦!筛选函数就分享这么多啦!可能还有一些没有分享,相信我,那肯定不是最重要的,而且还非常难。在这里就不分享了。能把以上的这些筛选函数都能理解,就能解决至少99%的问题了。

  还是那句话,我举的一些案例都是非常简单的,显示工作中几乎不可能遇见。要想熟练的掌握,还是需要大家多多的去练习。等哪天大家用起它们来如行云流水也就成功了!

  如果有什么问题欢迎大伙来跟我探讨,我也一直在努力学习进步之中!

 

 

 

 

 

  

标签:返回,FALSE,函数,PBI,筛选,省份,TRUE
来源: https://www.cnblogs.com/1304379017dwh/p/14947233.html