一个M查询依赖于来自并行M查询的数据

时间:2018-05-15 18:25:34

标签: sql-server powerbi powerquery m

我在SQL中有这两个表:

for

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

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');

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

是否可以修改Y let Source = Sql.Database("serverX", "dbFoo"), dbo_Y = Source{[Schema="dbo",Item="Y"]}[Data] in dbo_Y 脚本,以便它只导入已由X脚本导入的用户名? 因此,在上面的示例中,我希望第二个脚本检查用户是否在X中以及是否不在,例如" Paul"然后它不会出现在Y

1 个答案:

答案 0 :(得分:1)

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

将查询与内部联接合并

在“主页”选项卡下选择“合并查询”,然后选择“内部”作为“连接类型”:

Inner Join

这应该产生下表:

Result

选择X列并使用“删除列”来获取“用户”列。

使用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