FILTER
返回一个表,用于表示另一个表或表达式的子集。
语法
FILTER(<table>,<filter>)
parameters
术语 | 定义 |
---|---|
表 | 要筛选的表。 table 还可以是生成表的表达式。 |
filter | 要为表的每一行计算的布尔表达式。 例如,[Amount] > 0 或 [Region] = "France" |
返回值
只包含已筛选行的表。
备注
可使用 FILTER 减少表中要使用的行数,并且在计算中仅使用特定数据。 FILTER 不可单独使用,而是用作嵌入到需要表作为参数的其他函数中的函数。
有关使用 FILTER 时的最佳做法,请参阅避免使用 FILTER 作为筛选器参数。
使用 COUNTROWS 而不是 DAX 中的 COUNT
- 在已计算的列或行级安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。
示例
下面的示例通过使用筛选出美国销售额的度量值,然后按日历年和产品类别进行切片,从而创建美国以外地区 Internet 销售额报表。 若要创建此度量值,请使用 Sales Territory 来筛选表 Internet Sales USD,然后在 SUMX 函数中使用筛选后的表。
在此示例中,表达式:
FILTER('InternetSales_USD', RELATED('SalesTerritory'[SalesTerritoryCountry])<>"United States")
返回一个表,该表是 Internet Sales 减去属于美国销售区域的所有行后的子集。 RELATED 函数用于将 Internet Sales 表中的 Territory 键链接到 SalesTerritory 表中的 SalesTerritoryCountry。
下表说明“非美国 Internet 销售额”度量值的概念证明,在下面的代码部分中提供了该度量值的公式。 该表将所有 Internet 销售额与美国以外地区 Internet 销售额进行比较,通过从计算中排除美国销售额来表明筛选表达式是有效的。
要重新创建此表,请将字段 SalesTerritoryCountry 添加到报表或数据透视表的“行标签”区域。
表 1. 比较美国与所有其他地区的总销售额
行标签 | Internet Sales | 非美国 Internet 销售额 |
---|---|---|
澳大利亚 | $4,999,021.84 | $4,999,021.84 |
加拿大 | $1,343,109.10 | $1,343,109.10 |
法国 | $2,490,944.57 | $2,490,944.57 |
德国 | $2,775,195.60 | $2,775,195.60 |
英国 | $5,057,076.55 | $5,057,076.55 |
美国 | $9,389,479.79 | |
总计 | $26,054,827.45 | $16,665,347.67 |
最终的报表显示通过使用“非美国 Internet 销售额”度量值创建数据透视表的结果。 请将字段 CalendarYear 添加到数据透视表的“行标签”区域,然后将字段 ProductCategoryName 添加到“列标签”区域。
表 2. 按产品类别比较美国以外地区销售额
行标签 | Accessories | Bikes | Clothing | 总计 |
---|---|---|---|---|
2005 | $1,526,481.95 | $1,526,481.95 | ||
2006 | $3,554,744.04 | $3,554,744.04 | ||
2007 | $156,480.18 | $5,640,106.05 | $70,142.77 | $5,866,729.00 |
2008 | $228,159.45 | $5,386,558.19 | $102,675.04 | $5,717,392.68 |
总计 | $384,639.63 | $16,107,890.23 | $172,817.81 | $16,665,347.67 |
SUMX(FILTER('InternetSales_USD', RELATED('SalesTerritory'[SalesTerritoryCountry])<>"United States") ,'InternetSales_USD'[SalesAmount_USD])