ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PBI之筛选器函数(二)

2021-12-17 08:33:47  阅读:784  来源: 互联网

标签:返回 FALSE 函数 PBI 筛选 省份 TRUE


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

 

 

   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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有