2016-05-05 5 views
0

В Power Query я хочу использовать список различных значений из одного запроса (например, список клиентов, присутствующих в таблице Sales), чтобы ввести его в оператор SQL по другому запросу (например, таблица «Клиент»).Как перестроить комбинацию данных Power Query

Чтобы вытащить список различных значений У меня есть функция, getDistinct(), что:

  1. Извлекает один столбец из выбора запроса,
  2. держать только различные значения присутствуют на этой колонке, и
  3. Возвращайте эти значения, разделенные запятыми, чтобы они могли быть введены в SQL-инструкцию.

Эта функция отлично работает в автономном запросе. Однако, когда я пытаюсь использовать его на мой запрос «Клиент» он выдает ошибку (см код и сообщение об ошибке ниже):

let 
    Source = Oracle.Database("myServer", [Query="select * from db_customer where customer_id in (" & getDistinct(Sales,"CustomerID") & ")"]) 
in 
    Source 

и ошибка:

Formula.Firewall: Query 'Customer' (step 'Source') references other queries or steps, so it may not directly access a data source. Please rebuild this data combination.

Я попытался создать другой запрос, который выполняет эту функцию, а затем ссылается на него в моем запросе «Клиент», но это, похоже, не работает. Я знаю, что могу «игнорировать уровни конфиденциальности» (который, кстати, я проверял и работает), но поскольку я не знаю последствий этого, я боюсь просочившихся данных.

ответ

3

Я не понимаю, почему для этого требования необходима функция или любой письменный код.

Я бы создал запрос, чтобы получить таблицу Sales, а затем Group by CustomerID. Я бы установил это так: Load To/Only Create Connection.

Тогда Клиенты Запрос будет просто:

  1. Источником является Oracle таблицы Клиенты
  2. Merge для продаж Запроса на CustomerID с регистрацией Kind = Внутренне
+0

Это не работает для меня , Если на шаге 1 вы получите все данные клиента, любой пользователь власти сможет открыть Power Query и просмотреть все данные клиента. – Victor

+1

Если бы они хотели получить к нему доступ, они могли бы изменить запрос в первом ответе, чтобы получить его. Если вы создаете исходный запрос как соединение, пользователи не должны видеть какие-либо исходные данные на листе. –

+0

@ AlejandroLopez-Lago-MSFT Возможно, я не смог правильно описать конкретный сценарий. Предположим, я хочу поделиться этим отчетом с определенной аудиторией (которая не может обновить отчет, так как у них нет доступа к базе данных), и я не хочу, чтобы они каким-либо образом получали данные о клиентах, которых нет на таблица продаж. Если я ничего не пропущу, даже если я создам запрос «только для соединения», вы все равно можете перейти к PowerQuery и просмотреть предварительный просмотр данных, которые могут оказаться данными, которые они не должны видеть, даже если они не загружены в модель. – Victor