Использование значения ячейки в качестве параметра в Power Query

Вопрос или проблема

Я использую следующий запрос в Power Query Excel 2016:

let
   Source = Odbc.Query("dsn=AS400", "select * from libm61.emleqpm1 where STN1 = '03'  ")
in
    Source

Я хочу заменить ’03’ на значение из ячейки AD2

Возможно ли это сделать?

Я считаю, что существует более удобный и дружественный подход к обеим другим ответам, который является динамичным и не создает лишних записей, кроме самих параметров:

В Excel:

  1. Создайте таблицу параметров:
    Создание таблицы из диапазона
  2. Перейдите на вкладку Табличные инструменты и переименуйте таблицу в Parameters.

Затем в Power Query:

  1. Выберите Из других источников => Пустой запрос
  2. Перейдите на вкладку Просмотр => Продвинутый редактор
  3. Замените весь код на следующий:
    (ParameterName as text) =>
    let
    ParamSource = Excel.CurrentWorkbook(){[Name="Parameters"]}[Content],
    ParamRow = Table.SelectRows(ParamSource, each ([Parameter] = ParameterName)),
    Value=
    if Table.IsEmpty(ParamRow)=true
    then null
    else Record.Field(ParamRow{0},"Value")
    in
    Value

Наконец, нажмите Готово и переименуйте функцию в fnGetParameter.

С тех пор вы можете использовать ее – в данном случае fnGetParameter("STN1") – в любом месте, например:

let
   Source = Odbc.Query("dsn=AS400", "select * from libm61.emleqpm1 where STN1 = '" & fnGetParameter("STN1") & "'")
in
    Source

Ссылка:
https://www.excelguru.ca/blog/2014/11/26/building-a-parameter-table-for-power-query/

Ответ Раджеша С уже может удовлетворить вашу потребность. Однако слабостью его ответа является то, что ваш параметр зависит от его расположения в таблице. Я предлагаю более удачное решение:

  1. Точно как предложил Раджеш, создайте таблицу с правильными заголовками:
    Создание таблицы из диапазона
  2. Убедитесь, что курсор находится внутри таблицы, на вкладке “Данные” нажмите “Из таблицы/диапазона”
    Использование таблицы в качестве источника данных для Power Query
  3. Сейчас вы будете в редакторе Power Query. Сначала убедитесь, что столбец “Значения” имеет тип данных “Текст”. Затем, нажмите на столбец “Имя параметра” и на вкладке “Преобразование” нажмите “Поворот столбца”. Используйте “Значение” в качестве значений. Убедитесь, что вы развернули вкладку “Дополнительные параметры” и выбрали “Не агрегировать” в качестве функции агрегирования.
    Поворот параметров
  4. На данном этапе у вас будут разные столбцы с именем параметра в качестве названия столбца. Щелкните правой кнопкой мыши по запросу “Параметры” и нажмите “Ссылка”
    Создание ссылки из существующего запроса
  5. Щелкните правой кнопкой мыши по значению вашего параметра и нажмите “Просмотр”
    Просмотр конкретного значения
  6. У вас теперь будет запрос, который можно использовать в качестве переменной из вашего листа. Используйте его в вашем ODBC-запросе:

let Source = Odbc.Query("dsn=AS400", "select * from libm61.emleqpm1 where STN1 = '"&STN1"' ") in Source

Я понимаю, что мои шаги выглядят утомительно, но я очень забывчив, поэтому мне нужно использовать описательные имена переменных, чтобы легче запомнить, что делает мой Power Query. Вы также можете выполнить шаг “Изменить тип” после поворота параметров, если хотите использовать значения ячеек для вычислений с другими запросами. Вот моя ссылка

Сейчас это намного проще сделать в последней версии Excel (O365):
Вы можете просто объявить переменную в запросе PowerQuery, используя продвинутый редактор, указать, что значение переменной должно быть получено из таблицы Excel, затем ссылаться на переменные в следующих шагах.

Например: myVar = Excel.CurrentWorkbook(){[Name="MyParameterTable"]}[Content]{0}[MyColumnName]

Так, используя таблицу параметров с ключевыми и значениями колонок, вот как я бы сделал динамическими каталог и имя файла .csv для импорта:

let
    directy = Excel.CurrentWorkbook(){[Name="Param"]}[Content]{0}[Value],
    newDirectory = if Text.EndsWith(directy,"\") then directy else directy&"\",
    filePath = Excel.CurrentWorkbook(){[Name="Param"]}[Content]{1}[Value],
    Source = Csv.Document(File.Contents(newDirectory&filePath),[Delimiter=";", Columns=2, Encoding=1252, QuoteStyle=QuoteStyle.None])
in
    Source

Пример таблицы параметров:
Пример таблицы параметров

Пример изменения запроса в продвинутом редакторе:
Пример изменения запроса в продвинутом редакторе

Нет, непосредственно вы не можете использовать ссылку на ячейку. Вам необходимо создать отдельный диапазон данных и преобразовать его в таблицу.

Введите описание изображения здесь

Теперь преобразуйте этот диапазон в таблицу и присвойте ей имя, например, ParaTAB или ParameterTAB, тогда ваша команда будет выглядеть так:

let
   Source = Odbc.Query("dsn=AS400", "select * from libm61.emleqpm1 where STN1 =  ParaTAB[Value]{2}  ")
in
    Source

Здесь Power Query возьмет третье значение или третью строку, что является ADM, поскольку отсчет идет с 0.

Примечание: Помните, что B6 и A2 — это ссылки на ячейки.

Ответ или решение

Использование значения ячейки в качестве параметра в Power Query может существенно снизить трудозатраты при обработке данных и создать гибкость в процессах отчетности. В Excel 2016, без прямой возможности ссылки на отдельные ячейки из Power Query, существует несколько способов решения этой задачи. Мы разберем концепцию, предложим конкретные примеры и применим их на практике.

Теоретическая часть

Power Query в основном предназначен для импортирования данных и их трансформации. В рамках этого процесса очень важно иметь возможность динамически управлять параметрами, такими как критерии отбора, строки подключения или пути к файлам. Это особенно актуально для сложных запросов, работающих с большими объемами данных или использующих внешние источники, такие как базы данных AS400.

Основная идея заключается в создании таблицы параметров, которая будет хранить значения, используемые в запросах. Это позволяет легко изменять параметры, просто обновляя значения в таблице. Таким образом, несмотря на отсутствие прямой ссылки на ячейку, мы можем динамически управлять параметрами через Power Query.

Пример

Рассмотрим пошаговый процесс:

  1. Создание таблицы параметров в Excel:

    • Заполните таблицу в Excel, например, с заголовками "Параметр" и "Значение".
    • Внесите необходимые значения параметров. Например, STN1 = ’03’.
    • Выделите диапазон и преобразуйте его в таблицу, присвоив ей имя, например, "Parameters".
  2. Создание функции в Power Query для извлечения значения параметра:

    • В Power Query выберите "Из других источников => Пустой запрос".

    • Перейдите в "Просмотр => Продвинутый редактор" и вставьте следующий код:

      (ParameterName as text) =>
      let
       ParamSource = Excel.CurrentWorkbook(){[Name="Parameters"]}[Content],
       ParamRow = Table.SelectRows(ParamSource, each ([Параметр] = ParameterName)),
       Value = if Table.IsEmpty(ParamRow) then null else Record.Field(ParamRow{0}, "Значение")
      in
       Value
    • Нажмите "Готово" и дайте функции имя, например, "fnGetParameter".

  3. Использование параметра в вашем запросе:

    • В вашем запросе ODBC в Power Query замените фиксированное значение параметра на вызов функции fnGetParameter:

      let
      Source = Odbc.Query("dsn=AS400", "select * from libm61.emleqpm1 where STN1 = '" & fnGetParameter("STN1") & "'")
      in
      Source

Применение

Теперь при изменении значения в ячейке таблицы, Power Query автоматически использует это обновленное значение в ходе выполнения запроса. Такой подход не только упрощает управление параметрами, но и делает отчеты более адаптивными к изменениям требований. Если вы работаете в команде, это также обеспечивает централизованное управление параметрами, снижая вероятность ошибок и увеличивая согласованность данных.

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

Заключение

Использование таблиц параметров в Power Query — это мощный способ наладить динамическое управление импортом и обработкой данных. Несмотря на отсутствие прямых ссылок на ячейки, этот метод предоставляет широкие возможности для адаптации и гибкости, что особенно важно при работе с большими наборами данных или при частых изменениях требований к отчетности. Таким образом, данное решение позволяет автоматизировать множество рутинных задач и сосредоточиться на аналитике и интерпретации данных.

Оцените материал
Добавить комментарий

Капча загружается...