You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Power Query中排除包含指定内容的完整Session?

在Power Query中过滤包含特定内容的完整Session记录

核心逻辑和你熟悉的TSQL嵌套查询一致:先定位所有存在违规内容的SessionId,再从原表中排除这些Session的全部行。以下是两种实现方式:

一、可视化界面操作(适合新手)

假设你已经把CSV导入Power Query编辑器:

  1. 筛选违规记录:点击SessionContent列的筛选按钮 → 选「文本筛选」→「包含」,输入Some Data I don't want be in table,确定后得到所有含违规内容的行。
  2. 提取并去重坏SessionId:选中SessionId列,右键→「删除其他列」,再点击顶部菜单栏的「删除重复项」,得到需要排除的SessionId列表(可将这个查询重命名为BadSessions)。
  3. 返回原表过滤:切换回原始数据查询,点击「合并查询」→「合并为新查询」:
    • 第一个表选原始数据,第二个表选BadSessions
    • 匹配列都选SessionId,连接类型选左反(左反连接会保留原表中不在BadSessions里的所有行)
  4. 加载合并后的结果到Excel即可。

二、M代码实现(灵活高效)

直接编写M代码可以跳过界面操作的繁琐,适合需要自动化或批量处理的场景:

let
    // 1. 导入CSV(替换为你的文件路径)
    Source = Csv.Document(File.Contents("C:\YourPath\data.csv"), [Delimiter=",", Encoding=1252, QuoteStyle=QuoteStyle.None]),
    // 2. 提升标题行并设置数据类型
    PromotedHeaders = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
    ChangedType = Table.TransformColumnTypes(PromotedHeaders,{{"SessionId", type text}, {"SequenceNumber", Int64.Type}, {"SessionContent", type text}}),
    // 3. 提取所有含违规内容的SessionId并去重
    BadSessions = Table.Distinct(Table.SelectRows(ChangedType, each Text.Contains([SessionContent], "Some Data I don't want be in table"))[SessionId]),
    // 4. 过滤掉所有坏Session的行
    FilteredTable = Table.SelectRows(ChangedType, each not List.Contains(BadSessions, [SessionId]))
in
    FilteredTable

代码说明:

  • BadSessions:先筛选出含违规文本的行,再提取SessionId列并去重,得到需要排除的Session列表。
  • FilteredTable:遍历原表每一行,只保留SessionId不在BadSessions里的记录。

注意事项

  • 文本匹配默认区分大小写,如需忽略大小写,可修改为Text.Contains(Text.Lower([SessionContent]), Text.Lower("Some Data I don't want be in table"))
  • 确保SessionId的数据类型在原表和BadSessions中一致(比如都是文本或数值),否则会出现匹配失败。

内容的提问来源于stack exchange,提问作者Posix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 15:43:09