Вызов таблицы с использованием динамического идентификатора

Я пытаюсь динамически вызвать таблицу в Power Query M. Я создал простой запрос ниже, чтобы объяснить, что я пытаюсь сделать.

Я бы хотел, чтобы результат был «Это сработало», а не «Источник1», который я сейчас получаю.

let
  Source1 =  Table.FromList(
    {
      [Word1="It",Word2="Worked"]
    },
    Record.FieldValues,
    {"Word1","Word2"}
  ),
  Source2 = "Source" & "1"
in
  Source2

Сведения о сценарии использования:

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

if ENV = "production" then
  Customer_s
else
  Customer_m

Где Customer_s — это запрос на получение данных о клиентах, найденных в файле CSV, а Customer_m — это запрос на получение данных о клиентах, найденных на сервере SQL.

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

Я просто обнаружил, что PowerBI останавливается и постоянно повторяет запросы без необходимости, что убивает мой компьютер и скорость сети. Я подумал, что простым способом обойти это будет создание фиктивных данных, которые выглядят как результат работы SQL Server, но хранятся локально на моей машине. Таким образом, я также могу писать запросы, если у меня нет доступа к Интернету.


person Jay Killeen    schedule 14.03.2016    source источник
comment
Я не уверен, правильно ли я использовал терминологию. Надеюсь, ответ позволит мне также динамически вызывать результат другого запроса.   -  person Jay Killeen    schedule 14.03.2016


Ответы (3)


Если вы используете это:

= Expression.Evaluate("Source"&"1", #shared)

вы можете динамически ссылаться на другие запросы. Но не другие шаги в том же запросе (как кажется). Поэтому он должен сидеть в новом запросе.

Или ваш вопрос был о:

 Text.Combine({"It", "Worked"}, " ")

?

person ImkeF    schedule 14.03.2016

#shared содержит список всех доступных запросов и библиотечных функций, поэтому вы можете сделать что-то вроде этого: Record.Field(#shared, "It " & "Worked")

person Alejandro Lopez-Lago - MSFT    schedule 14.03.2016
comment
Спасибо за предложение. Я не могу ссылаться ни на что в запросе Source1, потому что он может представлять результат гораздо большего запроса с тысячами строк данных. - person Jay Killeen; 15.03.2016

Я сделал эту работу благодаря информации, предоставленной @ImkeF.

Сначала мне пришлось разделить два запроса, чтобы Source1 оценивался с полным выражением let in, а затем мог быть доступен через #shared.

ЗАПРОС 1

let
  Source1 =  Table.FromList(
    {
      [Word1="It",Word2="Worked"]
    },
    Record.FieldValues,
    {"Word1","Word2"}
  )
in
  Source1

Запрос 2

let
    Source2 = Expression.Evaluate("Source"&"1", #shared)
in
    Source2

Это имеет QUERY 2, что приводит к:

╔═══════╦════════╗
║ Word1 ║ Word2  ║
╠═══════╬════════╣
║ It    ║ Worked ║
╚═══════╩════════╝

Спасибо @ImkeF и @Alejandro за вашу помощь.

person Jay Killeen    schedule 14.03.2016
comment
Я применил это к своему PowerBi и отлично работает... пока.... Formula.Firewall: Query 'Customer' ошибка. АРХ! - person Jay Killeen; 15.03.2016
comment
Единственный известный мне способ решить эту проблему — включить быстрое объединение: support.office.com/en-us/article/, но это отключит уровни конфиденциальности, установленные в вашем запросе (если они есть) - person ImkeF; 15.03.2016