Параметризованное предложение IN в SQL-запросе Power Query


1

я видел Примеры (и закодированный), который параметризует оператор SQL Power Query со значениями, считанными из ячеек в электронной таблице. Но они всегда имеют дело с простыми логическими условиями, такими как myField = <parameter>, Я хочу параметризовать предложение IN ( myField IN <values> ), где произвольное число values читаются из таблицы Excel (также в том же файле). Кто-нибудь знает как это сделать?

Ответы:


1

некрасиво, но, похоже, работает.

  1. создать PQ-запрос для захвата таблицы столбцов «parameterValue» требуемых значений параметров
  2. добавить фиктивный столбец и сгруппировать все строки по фиктивным
  3. используйте Text.Combine для создания списка параметров и удаления других столбцов
  4. развернуть до значения ячейки
  5. создать требуемый sql-запрос без предложения IN (используйте «select top 1 ...» для эффективности)
  6. с помощью Расширенного редактора измените SQL-запрос, удалите «top 1» и примите запрос из шага 1 в качестве параметра IN

Query1:

let
    source = *yourData*,
    addDummy = Table.AddColumn(source, "Custom", each 1),
    group = Table.Group(addDummy, {"Custom"}, {{"Count", each _, type table}}),
    string = Table.AddColumn(group, "queryString", each Text.Combine([Count][parameterValue],"','")),
    removeOtherColumns = Table.SelectColumns(string,{"queryString"}),
    queryString = removeOtherColumns{0}[queryString]
in
    queryString

затем

Query2:

let
    Source = Sql.Database("*serverName*", "*dbName*", [Query=
Text.Replace("
select * from x
where parameterValue in('" & query1 & ")", ")", "')" )
])
in 
Source

0

У Кена Пулса есть хорошая статья об использовании таблицы параметров с Power Query в его блоге здесь: http://www.excelguru.ca/blog/2014/11/26/building-a-parameter-table-for-power-query/

Краткое содержание: создайте таблицу для параметров, напишите функцию для чтения указанного параметра, используйте функцию в М-коде для динамического применения требуемого параметра.

Возможно, вам придется расширить этот подход, чтобы построить оператор SQL в виде строки.


как я уже упоминал в своем вопросе, я уже знаю, как получить отдельные параметры (я даже включил ссылку на пример). И да, я видел комментарий о WHERE IN, Это все еще не то, о чем я спрашиваю. То, что я хочу сделать, это прочитать массив значений из таблицы.
Dmitry B.

0

Сначала я бы построил Power Query, например. «Значения» для чтения в строках таблицы Excel. Я бы установил Load To = Connection Only.

Затем в основном запросе на основе SQL я бы слился с этим новым запросом «Значения» и установил Join Kind = Inner.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.