Оптимизация производительности Excel Power Query - PullRequest
1 голос
/ 08 мая 2020

Я хочу обогатить свою таблицу Excel данными обмена валют в реальном времени без зависимости от подписки Microsoft 365 (так называемая функция «Акции»).

Для этого я написал следующий Power Query:

let
    EXCHANGE_DATA = Table.FromRecords({[

        EUR2ILS = try Web.Page(Web.Contents("https://transferwise.com/gb/currency-converter/eur-to-ils-rate")){0}[Data]{0}[#"Exchange rate(1 EUR → ILS)"]
                    otherwise Text.Replace(Web.Page(Web.Contents("https://transferwise.com/gb/currency-converter/eur-to-ils-rate")){0}[Data]{0}[Israeli New Sheqel], " ILS", ""),

        USD2ILS = try Web.Page(Web.Contents("https://transferwise.com/gb/currency-converter/usd-to-ils-rate")){0}[Data]{0}[#"Exchange rate(1 USD → ILS)"]
                    otherwise Text.Replace(Web.Page(Web.Contents("https://transferwise.com/gb/currency-converter/usd-to-ils-rate")){0}[Data]{0}[Israeli New Sheqel], " ILS", "")
    ]})
in 
    EXCHANGE_DATA

Затем я решил сделать его более понятным и выделил извлечение данных в отдельные переменные:

let
    EUR2ILS = Web.Page(Web.Contents("https://transferwise.com/gb/currency-converter/eur-to-ils-rate")){0}[Data]{0},
    USD2ILS = Web.Page(Web.Contents("https://transferwise.com/gb/currency-converter/usd-to-ils-rate")){0}[Data]{0},

    EXCHANGE_DATA = Table.FromRecords({[

        EUR2ILS = try EUR2ILS[#"Exchange rate(1 EUR → ILS)"]
                    otherwise Text.Replace(EUR2ILS[Israeli New Sheqel], " ILS", ""),

        USD2ILS = try USD2ILS[#"Exchange rate(1 USD → ILS)"]
                    otherwise Text.Replace(USD2ILS[Israeli New Sheqel], " ILS", "")
    ]})
in 
    EXCHANGE_DATA

Этот подход добавляет дополнительный шаг «Навигация» в очередь Примененных шагов.

С точки зрения производительности, какой подход я должен предпочесть в Power Query?

  1. Получение данных напрямую, указав последний столбец:
let EXCHANGE_DATA = Web.Page(Web.Contents("https://transferwise.com/gb/currency-converter/eur-to-ils-rate")){0}[Data]{0}[Israeli New Sheqel]
Или я могу сначала получить все данные и только потом указать конкретный столбец:
let EUR2ILS = Web.Page(Web.Contents("https://transferwise.com/gb/currency-converter/eur-to-ils-rate")){0}[Data]{0}

EXCHANGE_DATA = EUR2ILS[Israeli New Sheqel]
...