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如果我只想看男生的数据,请你给我返回一张表图1-7-1
表 = FILTER('Sheet1' 'Sheet1'[性别]="男") 例2:如图1-7-1我们想多条件筛选,现在要筛选一班的男生表 = FILTER('Sheet1' AND('Sheet1'[性别]="男" 'Sheet1'[班级]="一班"))
表 = FILTER('Sheet1' 'Sheet1'[性别]="男" && 'Sheet1'[班级]="一班")
例3:如图1-7-1我们使用三个条件筛选,现在要筛选一班,男生,80分表 = FILTER('Sheet1' AND(AND('Sheet1'[性别]="男" 'Sheet1'[班级]="一班") 'Sheet1'[分数]=80))
表 = FILTER('Sheet1' 'Sheet1'[性别]="男" && 'Sheet1'[班级]="一班" && 'Sheet1'[分数]=80)
如果条件太多,这样的代码并不易读:现在,我们参照语法,将它写成VAR形式:
一班男生 =
var tb1 = FILTER('Sheet1' 'Sheet1'[性别]="男")
return
FILTER(tb1 'Sheet1'[班级]="一班")
一班男生80分 =
var tb1 = FILTER('Sheet1' 'Sheet1'[性别]="男")
var tb2 =FILTER(tb1 'Sheet1'[班级]="一班")
return
FILTER(tb2 'Sheet1'[分数]=80)
这个嵌套很好理解,逻辑与绝大多数编程相同
变量a = 1
变量b = 变量a 1
变量c = 变量a 变量b
现在变量c是什么?答:变量c=3
<Filter应用> 做筛选条件、缩小表的范围,节省时间,但是方法并不唯一,根据你的需求而定
例4:图1-7-2 统计男生人数
图1-7-2
假设这是100万行数据,我每行扫描一遍,发现是男生就记数,这样是不是很慢?
所以我们需要缩小计算范围,既然是只统计男生人数,那么我们筛选男生的表就可以了
男生人数 = Calculate(Count([性别]) [性别]="男")
男生人数 = Calculate(Count([性别]) FILTER('Sheet1' 'Sheet1'[性别]="男"))
男生人数 = Countrows(FILTER('Sheet1' 'Sheet1'[性别]="男"))
三种写法都可以,不要看过《The Definitive Guide to DAX》就跑出来抬扛,没有什么是唯一写法。
刚才我们都是操作一张表格,现在我们多张表操作 给通过英语四级的学生,英语平时成绩 0.1分。【先说新建列】新成绩1 = if(and(Related('学生表'[四级])="通过" '成绩表'[学科]="英语") '成绩表'[平时成绩] 0.1 BLANK())
新成绩2 = CALCULATE(sumx('成绩表' if(and(Related('学生表'[四级])="通过" '成绩表'[学科]="英语") '成绩表'[平时成绩] 0.1 BLANK())
但是,上面两种方法都是在逐行扫描,判断每一行是否符合条件,如果有100万行,就要判断100万次,为了提升速度,我们可以将符合条件的人从表中筛选出来,对这张筛选后的表进行计算。
新成绩3 = CALCULATE(
var tb1=filter('成绩表' '成绩表'[学科]="英语")
var tb2=filter(tb1 Related('学生表'[四级])="通过")
return
sumx(tb2 '成绩表'[平时成绩] 0.1)
)
【再说度量值】总分 = sum('成绩表'[平时成绩])通过四级人员的成绩 = calculate(sum('成绩表'[平时成绩]) filter('学生表' '学生表'[四级]="通过"))//这里不用关系函数,filter的筛选条件在自己表中
今天的知识就讲到这里,现在开始打脸filter('学生表' '学生表'[四级]="通过") 是不是一张表?
那你为什么要问我《火力全开》第7节课:Calculate第二参数为什么可以是一张表?难道我第5课没讲吗?
《孙兴华讲PowerBI火力全开》笔记07 大家抬扛的地方
考生人数= Calculate(CountRows('学生表') '成绩表')
Calculate第二参数可以是一张表你理解不?这节课我们就说到这里。
关于你们的第二个问题:为什么学生表是一端,成绩表是多端,现在多端在筛选器上,而一端在计算器上。下节课咱们就打脸,我一次就讲一件事。
关于Filter配合Calculate等更高级的应用,我们按《The Definitive Guide to DAX》顺序一点一点地讲
注:《火力全开》是我自己通过经验调整的学习顺利,《DAX神功》(DAX原理)是按《The Definitive Guide to DAX》的顺序讲,讲原理必会招来水军的攻击,为了防止他们组团说我讲的顺序乱,所以我就按权威书籍的顺序讲,但是内容肯定不一样哦!
比如《线性代数》,权威书籍都是从行列式开始讲的,其实我更建议从向量开始讲,但是如果真的这么做了,肯定会招来争议。于是我先讲《火力全开》再讲《DAX神功》,有了前面的铺垫后,《DAX神功》就可以按《The Definitive Guide to DAX》的顺序讲了。
就跟有些人不让我用中文变量和中文案例,说我使用中文太LOW了,我跟他们讲道理是没有用的,我只能让他去看以下法律条文的规定,因为法律是权威:
《宪法》第4条第4款
《宪法》第19条第2款和第4款
《国家通用语言文字法》第一章 第4条