Power Pivot 针对表筛选的函数及差异

1. Filter, KeepFilters

KeepFilters的用法与Filter类似,只不过需要配套Calculate或者CalculateTable函数使用。

函数名称 语法结构 效率
Filter Filter( Table, FilterExpression ) 一般
KeepFilters KeepFilters ( Expression ) 比Filter快10%

案例:
要求:计算张三的总成绩。
忽略维度样例数据

张三成绩cal:=Calculate(Sum([成绩]),'表1'[姓名]="张三")
张三成绩Filter:=Calculate(Sum('表1'[成绩]),
                      Filter('表1','表1'[姓名]="张三"))
张三成绩KeepFilters:=Calculate(Sum([成绩]),
                      KeepFilters('表1'[姓名]="张三"))

我们可以看到,Filter和KeepFilters至在[姓名]=”张三”的时候返回,这两种返回的结果都一样,只不过在语法上的写法不同。

2. Values, Distinct, Filters

函数名称 语法结构 返回结果 引用表
Values Values(TableNameOrColumnName) 无对应上的也会显示 不会删除重复
Distinct Distinct(ColumnNameOrTableExpress) 无对应上的不会显示 会删除重复
Filters Filters(ColumnName) 无对应上的也会显示

这3个函数的参数都是可以直接引用列名。但是除了Filters只能引用列名,而其他2个函数既可以引用列名也可以引用整张表。

案例:

values差异案例

  • 相同性:
    不同函数及参数进行筛选后的返回结果。
    Filters('表2'[姓名])
    Values('表2'[姓名])
    Distinct('表2'[姓名])

    姓名返回值

针对姓名列这3个函数返回的结果都是一样的。返回含空值后的唯一值列表。

Filters('表2'[成绩])
Values('表2'[成绩])
Distinct('表2'[成绩])

针对成绩列这3个函数返回的结果也是一样的。但是此时需要注意的是,这3个函数在取唯一值的时候结果会进行排序。

成绩返回值

  • 差异性:

i. 返回表的差异
Distinct会删除重复项,Values则不会

Distinct('表2'[姓名])
Values('表2'[姓名])

Distinct返回表
Values返回表

Distinct把颜色行的第一行删除了,因为这行和第一行完全重复,所以被删除了。而Values则还是完全保留。
ii. 对应值的差异
Distinct不会显示未匹配的数据,而Values则会把为匹配上的单独作为空白维度显示。

首先把这两个表的学科字段进行关联

学科字段关联

因为分类的维度只对应2门学科,英语未对应的学科

学科成绩values:=Calculate(Sum('表2'[成绩]),Values('表3'[学科]))
学科成绩distinct:=Calculate(Sum('表2'[成绩]),Distinct('表3'[学科]))
学科成绩filters:=Calculate(Sum('表2'[成绩]),Filters('表3'[学科]))

Distinct未匹显示空白

我们可以看到,通过Distinct筛选的结果如果未找到对应的数据则会直接显示空白,在筛选的时候会直接去除;而通过Values和Filters筛选的结果如果未找到对应的数据则会专门在标签里面显示一个空白字段来显示数据。