(一) 定义
在Power Pivot中,在大部分时间里,筛选是作为一个主要的功能运用到各个地方,筛选上下文,行上下文都和筛选相关。
(二) 可能涉及的函数
- Filter 含义:根据条件筛选。
- All 含义:忽略指定的维度条件。
- AllExpect 含义:忽略除保留维度外的其他条件。
- Calculate 含义:根据条件进行计算。大部分的筛选器最终需要与本函数进行组合运算。
(三) 案例分析
数据源:
姓名 | 成绩 | 学科 |
---|---|---|
张三 | 100 | 数学 |
李四 | 90 | 语文 |
王五 | 80 | 英语 |
我们先定义几个公式,看下有什么样的区别:
代码语言:javascript复制求和:=sum([成绩])
求和迭代:=sumx([成绩])
计算求和:=calculate([求和])
固定条件求和:=calculate([求和],'表'[姓名]="张三"))
筛选条件求和:=calculate([求和],filter('表','表'[姓名]="张三"))
忽略条件求和:=calculate([求和],filter(all('表'),'表'[姓名]="张三"))
忽略多条件求和:=calculate([求和],all('表'[姓名]),filter('表'="张三"))
我们先来看下几个计算的差异(数据透视表):
行标签 | 固定条件求和 | 筛选条件求和 | 忽略条件求和 | 忽略多条件求和 |
---|---|---|---|---|
李四 | 100 | 100 | ||
王五 | 100 | 100 | ||
张三 | 100 | 100 | 100 | 100 |
总计 | 100 | 100 | 100 | 100 |
公式 | 差异 |
---|---|
求和 | 不涉及上下文。如果放在计算列里面,则不会进行上下文筛选 |
计算求和 | 涉及上下文 |
迭代求和 | 涉及上下文 |
公式 | 差异 |
---|---|
固定条件求和 | 不涉及上下文 |
筛选条件求和 | 涉及上下文 |
公式 | 差异 |
---|---|
筛选条件求和 | 涉及上下文 |
忽略条件求和 | 在筛选时忽略字段筛选如果全部忽略相当于不涉及上下文,也就和固定条件求和一样 |
忽略多条件求和,因为calculate本身不存在绝对的筛选,所以条件all不产生作用,所以函数all以及allexpect只针对实际筛选函数filter起作用。
那我们来看下Filter和All以及AllExpect之间的联系。我们增加些数据
姓名 | 成绩 | 学科 |
---|---|---|
张三 | 100 | 数学 |
李四 | 90 | 语文 |
王五 | 80 | 英语 |
张三 | 90 | 语文 |
李四 | 80 | 英语 |
忽略全部:=CALCULATE([求和],FILTER(ALL('表'),[姓名]="张三"))
忽略姓名:=CALCULATE([求和],FILTER(all('表'[姓名]),'表'[姓名]="张三"))
忽略学科:=CALCULATE([求和],FILTER(all('表'[学科]),'表'[姓名]="张三"))
忽略姓名除外:=CALCULATE([求和],FILTER(ALLEXCEPT('表','表'[姓名]),'表'[姓名]="张三"))
忽略学科除外:=CALCULATE([求和],FILTER(ALLEXCEPT('表','表'[学科]),'表'[姓名]="张三"))
根据之前的内容,看看其中哪些是错误的?
在使用忽略函数的时候,要根据被筛选filter里面的实际筛选条件来定义,所以忽略学科和忽略学科除外都是错误的。因为filter函数内部没有进行学科的实际筛选。也就不存在忽略的问题。