首页 > 解决方案 > 一个 M 查询依赖于来自并行 M 查询的数据

问题描述

我在 SQL 中有这两个表:

CREATE TABLE X(
    "User"   VARCHAR(5),
    "Amount" INT
);
INSERT INTO X
    values
        ('Phil', 10),
        ('jon', 4),
        ('jo', 5);


CREATE TABLE Y(
    "User"   VARCHAR(5)
);
INSERT INTO Y
    values
        ('Phil'),
        ('jo'),
        ('paul'),
        ('jon');

我通过这两个 M 脚本将两者都导入 Power BI:

let
    Source = Sql.Database("serverX", "dbFoo"),
    dbo_X = Source{[Schema="dbo",Item="X"]}[Data]
in
    dbo_X

let
    Source = Sql.Database("serverX", "dbFoo"),
    dbo_Y = Source{[Schema="dbo",Item="Y"]}[Data]
in
    dbo_Y

是否可以修改 YM脚本使其仅导入已由 X 脚本导入的用户名?所以在上面的例子中,我希望第二个脚本检查用户是否在 X 中,如果不是,例如“Paul”,那么它不会出现在 Y

标签: sql-serverpowerbipowerquerym

解决方案


有几种方法可以做到这一点。


使用内部联接合并查询

选择 Home 选项卡下的 Merge Queries 并选择 Inner 作为 Join Kind:

内部联接

这应导致下表:

结果

选择 X 列并使用 Remove Column 来获取 User 列。


使用 Table.SelectRows 过滤 Y

在您的 Y 查询 M 代码中添加一个新行,如下所示:

let
    Source = Sql.Database("serverX", "dbFoo"),
    dbo_Y = Source{[Schema="dbo",Item="Y"]}[Data],
    YTable = Table.SelectRows(dbo_Y, each List.Contains(X[User], [User]))
in
    YTable

在服务器端进行过滤

加载表时使用自定义 SQL 查询:

let
    Source = Sql.Database("serverX", "dbFoo",
                          [Query = "select * from Y inner join X on Y.User = X.User"])
in
    Source

推荐阅读