《power BI》 高级筛选器Filter 和Values人工造表 ALL 函数

本文介绍了Power BI中高级筛选器的使用,包括FILTER函数的迭代筛选,VALUES用于创建唯一值表,以及ALL函数在清除筛选条件中的应用。FILTER函数适用于复杂筛选条件,VALUES可生成唯一值表,而ALL函数能清除筛选后的表格或列。同时讨论了ALL函数的不同形式以及与ALLSELECTED和ALLEXCEPT函数的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FILTER

Filter函数是一个迭代函数,会对筛选表进行逐行扫描,是一个表函数,会返回一个表。

FILTER 函数 的第一个参数 表 ,必须是唯一值的表

COUNTROWS(FILTER(表,筛选条件))

CALCULATE(度量值,FILTER(表名,筛选条件1 && 条件2))

如果筛选条件是列 = 值 ,则不需要用filter,但是如果筛选条件是

列 = 度量值 、列 = 公式 、列 = 列 、度量值 = 度量值 、度量值 = 公式 、度量值 = 固定值,

则筛选条件必须使用FILTER来表达,否则CALCULATE 函数会报错。


VALUES

人工造表,该表为唯一值的表

新表 = VALUES(‘源表’[目标列])

filter总分2 = calculate([度量值总分],filter(values(‘成绩表’[学号]),[度量值总分]>250))

filter 内部 如果是使用度量值进行筛选,必须使用度量值本身,而不能是度量值的公式,因为只有度量值本身才具有筛选功能,否则需要在filter外面套上calculate函数。

<think>好的,我现在需要解决用户的问题:如何在Power BI中筛选表一中不包含表二的值。让我仔细思考一下这个问题。 首先,用户可能有两张表,表一表二,他们希望筛选出表一中那些在某个字段上不存在于表二的数据。例如,表一可能有客户列表,表二有订单记录,用户想找出没有下过订单的客户。 接下来,我需要回忆Power BI中处理这种情况的常用方法。通常,可以使用DAX表达式或者利用模型关系来实现。不过,这里可能需要更具体的步骤。 一种常见的方法是使用DAX的FILTER函数NOT以及RELATED函数。不过,如果两个表之间没有建立关系,可能需要使用其他方法,比如EXCEPT函数或者合并查询。 假设表一表二有一个共同的字段,比如ID。如果这两个表已经建立了关系,那么可以使用RELATED函数来检查是否存在关联的记录。如果没有关系,可能需要使用LOOKUPVALUE或者合并查询来处理。 不过,DAX中的EXCEPT函数可能更直接。EXCEPT函数可以返回第一个表中存在但第二个表中不存在的行。但需要注意的是,EXCEPT要求两个表的列结构完全相同,这可能不适用,如果用户只需要比较单个字段的话。 另一种方法是使用CALCULATETABLEFILTER的组合。例如,创建计算表,筛选出表一中不存在于表二的记录。这时候可能需要使用NOTCONTAINS函数。 或者,使用合并查询在Power Query中处理。将表一表二合并,根据共同字段左反连接,这样可以得到表一中不在表二中的记录。 现在需要考虑用户的技能水平。如果他们更熟悉Power Query,可能合并查询的方法更直观。如果是偏好DAX,则需要编写相应的表达式。 可能的步骤包括: 1. 确保两个表有一个共同的字段。 2. 在Power Query中使用合并查询,选择左反连接。 3. 或者在DAX中创建计算表,使用FILTERNOT EXISTS函数。 需要验证这些方法的正确性。例如,在DAX中,正确的表达式可能类似于: FILTER(表一, NOT(CONTAINS(表二, 表二[ID], 表一[ID]))) 或者使用EXISTS函数FILTER(表一, NOT(EXISTS(SELECTCOLUMNS(表二, "ID", 表二[ID]), 表二[ID] = 表一[ID]))) 另外,EXCEPT函数的用法可能不适用,如果表结构不同的话,所以可能需要调整。 还需要考虑性能问题,如果数据量很大,合并查询可能更高效,或者在模型中建立关系后使用计算列。 总结可能的解决步骤: 方法一:使用Power Query合并查询 1. 在Power Query中加载表一表二。 2. 在表一中执行合并查询,选择表二,选择共同字段,左反连接类型。 3. 展开合并后的列(如果有需要),即可得到表一中不在表二的记录。 方法二:使用DAX创建计算表 1. 在建模视图中,新建计算表。 2. 使用FILTERCONTAINS函数来筛选表一中不存在于表二的记录。 例如: 结果表 = FILTER(表一, NOT(CONTAINS(表二, 表二[ID], 表一[ID]))) 或者使用变量来优化: 结果表 = VAR IDsInTable2 = VALUES(表二[ID]) RETURN FILTER(表一, NOT(表一[ID] IN IDsInTable2)) 需要注意的是,这里的IN操作符在DAX中可能需要使用CONTAINSROW函数,或者使用INTERSECT函数来判断存在性。 如果用户需要动态筛选,可能需要使用度量值或计算列,并结合视觉级筛选器。但对于生成一个静态的结果表,计算表是合适的。 最后,需要确保用户理解如何应用这些步骤,并验证结果是否正确。例如,测试某些在表二存在的ID是否被正确排除,以及不存在的ID是否被包含在结果中。</think>在Power BI中筛选表一中不包含表二的值,可以通过以下两种方法实现: --- ### **方法一:使用Power Query(合并查询)** **适用场景**:静态数据清洗,生成新表。 1. **加载数据**: - 在Power Query编辑器中导入表一表二。 2. **执行左反连接**: - 选中表一 → 选择**合并查询** → 选择表二 → 勾选共同字段(如`ID`)。 - 在**连接类型**中选择**左反**(仅保留第一个表中未匹配的行)。 3. **展开结果**: - 合并后,若需保留表一的完整字段,直接删除表二扩展的列。 4. **加载新表**: - 生成的表即为表一中不包含表二的值。 --- ### **方法二:使用DAX创建计算表** **适用场景**:动态筛选,依赖模型关系。 1. **假设条件**: - 表一表二有共同字段(如`ID`)。 - 若未建立关系,需通过DAX匹配值。 2. **DAX公式**: ```dax 结果表 = FILTER( 表一, NOT(CONTAINS(表二, 表二[ID], 表一[ID])) ) ``` - 或使用变量优化: ```dax 结果表 = VAR IDsInTable2 = VALUES(表二[ID]) RETURN FILTER(表一, NOT(表一[ID] IN IDsInTable2)) ``` 3. **验证结果**: - 创建表格视觉对象,检查结果是否过滤了表二中存在的值。 --- ### **关键注意事项** 1. **字段一致性**:确保比较的字段(如`ID`)类型内容一致。 2. **性能优化**:若数据量大,优先使用Power Query处理。 3. **动态筛选**:若需实时联动,建议通过模型关系结合度量值实现。 通过以上方法,可高效筛选出表一中独有的数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值