1、FILTER函数接收一张表格并返回一张表格,返回的表格每列与原表格一致,但是会对行进行条件筛选
2、FILTER(<table>,<condition>)
3、理论上可以这么理解FILTER函数:FILTER函数对表格的每一行进行迭代,每一行都与conditon里的条件进行比较,返回布尔值(TRUE/FALSE),TRUE则保留(返回)该行,FALSE则删除(跳过)该行。类似于python:
for row in table:
if row = condition:
return row
else:
pass
4、实际上DAX对于FILTER的内置优化是:将condition里涉及的每列的值以行为单位去重,保留唯一值(类似于选中excel里的A:D列,再进行删除重复值,此时表格里的每一行都是唯一的),只对这些唯一值(行)进行condition条件判断
5、condition条件越多,筛选的颗粒度越细小
6、FILTER可以嵌套FILTER,虽然FILTER默认只接受一个条件参数,但是可以通过&链接符或AND函数来组合筛选条件,以下查询语句返回相同的结果:
FILTER(<table>,AND(<condition1>,<condition2>))
FILTER(<table>,<condition1>&<condition2>)
FILTER(FILTER(<table>,<condition1>),<condition2>)
7、嵌套的FILTER语句,计算是从最里面的FILTER开始,因此,更改条件语序也会相应改变计算顺序,以下面两个语句为例:
FILTER(
FILTER(
<table>,
<condition1>),
<condition2>)
先计算(执行筛选)condition1,后计算(执行筛选)condition2
FILTER(
FILTER(
<table>,
<condition2>),
<condition1>)
先计算(执行筛选)condition2,后计算(执行筛选)condition1
8、合理调整计算(执行筛选)顺序,可以提高dax的计算效率