快捷搜索:  汽车  科技

powerbi 怎么筛选数据求和(PowerBI之DAX神功第1卷第7回)

powerbi 怎么筛选数据求和(PowerBI之DAX神功第1卷第7回)表 = FILTER('Sheet1' AND(AND('Sheet1'[性别]="男" 'Sheet1'[班级]="一班") 'Sheet1'[分数]=80))表 = FILTER('Sheet1' 'Sheet1'[性别]="男" && 'Sheet1'[班级]="一班")Filter函数的作用就是:筛选表图1-7-1表 = FILTER('Sheet1' AND('Sheet1'[性别]="男" 'Sheet1'[班级]="一班"))

《孙兴华讲PowerBI火力全开》笔记 09.聚合函数与迭代函数 <2>迭代函数

讲述了,AverageX、MaxX、MinX、CountX、CountaX、ProductX...它们与Filter函数一样都是行上下文

语法:一张新表=Filter('表名' 筛选条件)

Filter函数: 不仅是表函数,还具有迭代功能(对表逐行扫描进行筛选),说白了就是限制表的行数用的

Filter函数的作用就是:筛选表

例1:图1-7-1如果我只想看男生的数据,请你给我返回一张表

powerbi 怎么筛选数据求和(PowerBI之DAX神功第1卷第7回)(1)

图1-7-1

表 = FILTER('Sheet1' 'Sheet1'[性别]="男")

powerbi 怎么筛选数据求和(PowerBI之DAX神功第1卷第7回)(2)

例2:如图1-7-1我们想多条件筛选,现在要筛选一班的男生

表 = FILTER('Sheet1' AND('Sheet1'[性别]="男" 'Sheet1'[班级]="一班"))

表 = FILTER('Sheet1' 'Sheet1'[性别]="男" && 'Sheet1'[班级]="一班")

powerbi 怎么筛选数据求和(PowerBI之DAX神功第1卷第7回)(3)

例3:如图1-7-1我们使用三个条件筛选,现在要筛选一班,男生,80分

表 = FILTER('Sheet1' AND(AND('Sheet1'[性别]="男" 'Sheet1'[班级]="一班") 'Sheet1'[分数]=80))

表 = FILTER('Sheet1' 'Sheet1'[性别]="男" && 'Sheet1'[班级]="一班" && 'Sheet1'[分数]=80)

powerbi 怎么筛选数据求和(PowerBI之DAX神功第1卷第7回)(4)

如果条件太多,这样的代码并不易读:

现在,我们参照语法,将它写成VAR形式:

powerbi 怎么筛选数据求和(PowerBI之DAX神功第1卷第7回)(5)

一班男生 =

var tb1 = FILTER('Sheet1' 'Sheet1'[性别]="男")

return

FILTER(tb1 'Sheet1'[班级]="一班")

powerbi 怎么筛选数据求和(PowerBI之DAX神功第1卷第7回)(6)

一班男生80分 =

var tb1 = FILTER('Sheet1' 'Sheet1'[性别]="男")

var tb2 =FILTER(tb1 'Sheet1'[班级]="一班")

return

FILTER(tb2 'Sheet1'[分数]=80)

powerbi 怎么筛选数据求和(PowerBI之DAX神功第1卷第7回)(7)

这个嵌套很好理解,逻辑与绝大多数编程相同

变量a = 1

变量b = 变量a 1

变量c = 变量a 变量b

现在变量c是什么?答:变量c=3

powerbi 怎么筛选数据求和(PowerBI之DAX神功第1卷第7回)(8)

<Filter应用> 做筛选条件、缩小表的范围,节省时间,但是方法并不唯一,根据你的需求而定

例4:图1-7-2 统计男生人数

powerbi 怎么筛选数据求和(PowerBI之DAX神功第1卷第7回)(9)

图1-7-2

假设这是100万行数据,我每行扫描一遍,发现是男生就记数,这样是不是很慢?

所以我们需要缩小计算范围,既然是只统计男生人数,那么我们筛选男生的表就可以了

男生人数 = Calculate(Count([性别]) [性别]="男")

男生人数 = Calculate(Count([性别]) FILTER('Sheet1' 'Sheet1'[性别]="男"))

男生人数 = Countrows(FILTER('Sheet1' 'Sheet1'[性别]="男"))

三种写法都可以,不要看过《The Definitive Guide to DAX》就跑出来抬扛,没有什么是唯一写法。

powerbi 怎么筛选数据求和(PowerBI之DAX神功第1卷第7回)(10)

刚才我们都是操作一张表格,现在我们多张表操作

powerbi 怎么筛选数据求和(PowerBI之DAX神功第1卷第7回)(11)

powerbi 怎么筛选数据求和(PowerBI之DAX神功第1卷第7回)(12)

给通过英语四级的学生,英语平时成绩 0.1分。【先说新建列】

新成绩1 = if(and(Related('学生表'[四级])="通过" '成绩表'[学科]="英语") '成绩表'[平时成绩] 0.1 BLANK())

powerbi 怎么筛选数据求和(PowerBI之DAX神功第1卷第7回)(13)

新成绩2 = CALCULATE(sumx('成绩表' if(and(Related('学生表'[四级])="通过" '成绩表'[学科]="英语") '成绩表'[平时成绩] 0.1 BLANK())

powerbi 怎么筛选数据求和(PowerBI之DAX神功第1卷第7回)(14)

但是,上面两种方法都是在逐行扫描,判断每一行是否符合条件,如果有100万行,就要判断100万次,为了提升速度,我们可以将符合条件的人从表中筛选出来,对这张筛选后的表进行计算。

新成绩3 = CALCULATE(

var tb1=filter('成绩表' '成绩表'[学科]="英语")

var tb2=filter(tb1 Related('学生表'[四级])="通过")

return

sumx(tb2 '成绩表'[平时成绩] 0.1)

)

powerbi 怎么筛选数据求和(PowerBI之DAX神功第1卷第7回)(15)

【再说度量值】总分 = sum('成绩表'[平时成绩])通过四级人员的成绩 = calculate(sum('成绩表'[平时成绩]) filter('学生表' '学生表'[四级]="通过"))

//这里不用关系函数,filter的筛选条件在自己表中

powerbi 怎么筛选数据求和(PowerBI之DAX神功第1卷第7回)(16)

今天的知识就讲到这里,现在开始打脸

filter('学生表' '学生表'[四级]="通过") 是不是一张表?

那你为什么要问我《火力全开》第7节课:Calculate第二参数为什么可以是一张表?难道我第5课没讲吗?

《孙兴华讲PowerBI火力全开》笔记07 大家抬扛的地方

考生人数= Calculate(CountRows('学生表') '成绩表')

Calculate第二参数可以是一张表你理解不?这节课我们就说到这里。

关于你们的第二个问题:为什么学生表是一端,成绩表是多端,现在多端在筛选器上,而一端在计算器上。下节课咱们就打脸,我一次就讲一件事。

关于Filter配合Calculate等更高级的应用,我们按《The Definitive Guide to DAX》顺序一点一点地讲

powerbi 怎么筛选数据求和(PowerBI之DAX神功第1卷第7回)(17)

注:《火力全开》是我自己通过经验调整的学习顺利,《DAX神功》(DAX原理)是按《The Definitive Guide to DAX》的顺序讲,讲原理必会招来水军的攻击,为了防止他们组团说我讲的顺序乱,所以我就按权威书籍的顺序讲,但是内容肯定不一样哦!

比如《线性代数》,权威书籍都是从行列式开始讲的,其实我更建议从向量开始讲,但是如果真的这么做了,肯定会招来争议。于是我先讲《火力全开》再讲《DAX神功》,有了前面的铺垫后,《DAX神功》就可以按《The Definitive Guide to DAX》的顺序讲了。

就跟有些人不让我用中文变量和中文案例,说我使用中文太LOW了,我跟他们讲道理是没有用的,我只能让他去看以下法律条文的规定,因为法律是权威:

《宪法》第4条第4款

《宪法》第19条第2款和第4款

《国家通用语言文字法》第一章 第4条

猜您喜欢: