如何修改Power BI中Y的M查询,仅导入X查询已加载的用户名?
修改Y的M脚本实现用户筛选
当然可以实现这个需求啦!你可以通过两种常见的方式修改Y的M脚本,只导入和X表重叠的用户名,自动排除像Paul这种不在X里的用户:
方式一:基于已加载的X表数据筛选(Power Query端处理)
这种方法直接利用已经导入Power BI的X表数据,在Power Query里对Y表做筛选,适合数据量不大的场景:
let Source = Sql.Database("serverX", "dbFoo"), dbo_Y = Source{[Schema="dbo",Item="Y"]}[Data], // 提取已加载的X表中的所有用户名 ExistingUsers = dbo_X[User], // 筛选Y表中用户名存在于ExistingUsers列表的行 FilteredY = Table.SelectRows(dbo_Y, each List.Contains(ExistingUsers, [User])) in FilteredY
注意事项:
- 确保X表(
dbo_X)已经在当前Power BI数据集中成功加载,否则M脚本会找不到这个引用 - 如果你的用户名存在大小写差异(比如X里是
Phil,Y里是phil),可以用Text.Lower()统一大小写后再匹配,比如修改筛选条件为each List.Contains(List.Transform(ExistingUsers, Text.Lower), Text.Lower([User]))
方式二:在SQL数据源层面过滤(推荐大数据量场景)
如果你的数据量比较大,推荐直接在SQL服务器端完成过滤,这样能减少传输到Power BI的数据量,提升效率。可以用Value.NativeQuery执行自定义SQL查询:
let Source = Sql.Database("serverX", "dbFoo"), // 执行内连接查询,只返回Y和X重叠的用户 FilteredY = Value.NativeQuery(Source, "SELECT Y.[User] FROM Y INNER JOIN X ON Y.[User] = X.[User]", null, [EnableFolding=true] ) in FilteredY
优势:
- 查询会折叠到SQL服务器执行,利用数据库的索引优化,性能更好
- 不需要依赖Power BI中已加载的X表,逻辑更独立
内容的提问来源于stack exchange,提问作者whytheq
相关产品推荐
相关产品推荐

