Один запрос M зависит от данных параллельного запроса M - PullRequest
0 голосов
/ 15 мая 2018

У меня есть две таблицы в 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');

Я импортирую оба в Power BI с помощью этих двух M-сценариев:

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

Можно ли изменить скрипт Y M, чтобы он импортировал только имена пользователей, которые были импортированы скриптом X? Поэтому в приведенном выше примере я бы хотел, чтобы второй скрипт проверял, находится ли пользователь в X, а если нет, например «Paul», то он не будет отображаться в Y

1 Ответ

0 голосов
/ 15 мая 2018

Есть несколько способов сделать это.


Объединение запросов с внутренним объединением

Выберите Merge Queries на вкладке Home и выберите Inner в качестве вида соединения:

Inner Join

Это должно привести к следующей таблице:

Result

Выберите столбец X и используйте команду «Удалить столбец», чтобы просто получить столбец «Пользователь».


Фильтр Y с использованием Table.SelectRows

Добавьте новую строку в код Y-запроса следующим образом:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...