1. Filter, KeepFilters
KeepFilters的用法与Filter类似,只不过需要配套Calculate或者CalculateTable函数使用。
函数名称 | 语法结构 | 效率 |
---|---|---|
Filter | Filter( Table, FilterExpression ) | 一般 |
KeepFilters | KeepFilters ( Expression ) | 比Filter快10% |
案例:要求:计算张三的总成绩。
代码语言:javascript复制张三成绩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个函数既可以引用列名也可以引用整张表。
案例:
- 相同性: 不同函数及参数进行筛选后的返回结果。
Filters('表2'[姓名])
Values('表2'[姓名])
Distinct('表2'[姓名])
针对姓名列这3个函数返回的结果都是一样的。返回含空值后的唯一值列。
代码语言:javascript复制Filters('表2'[成绩])
Values('表2'[成绩])
Distinct('表2'[成绩])
针对成绩列这3个函数返回的结果也是一样的。但是此时需要注意的是,这3个函数在取唯一值的时候结果会进行排序。
- 差异性:
i. 返回表的差异 Distinct会删除重复项,Values则不会
代码语言:javascript复制Distinct('表2'[姓名])
Values('表2'[姓名])
Distinct把颜色行的第一行删除了,因为这行和第一行完全重复,所以被删除了。而Values则还是完全保留。 ii. 对应值的差异 Distinct不会显示未匹配的数据,而Values则会把为匹配上的单独作为空白维度显示。
首先把这两个表的学科字段进行关联
因为分类的维度只对应2门学科,英语未对应的学科
代码语言:javascript复制学科成绩values:=Calculate(Sum('表2'[成绩]),Values('表3'[学科]))
学科成绩distinct:=Calculate(Sum('表2'[成绩]),Distinct('表3'[学科]))
学科成绩filters:=Calculate(Sum('表2'[成绩]),Filters('表3'[学科]))
我们可以看到,通过Distinct筛选的结果如果未找到对应的数据则会直接显示空白,在筛选的时候会直接去除;而通过Values和Filters筛选的结果如果未找到对应的数据则会专门在标签里面显示一个空白字段来显示数据。
请点个赞,转发分享给更多的人。