Power Query Excel. Чтение и сохранение переменной с рабочего листа

#powerbi #powerquery #m

#powerbi #powerquery #m

Вопрос:

Прошу прощения за это плохое название, но в данный момент не могу сформулировать правильное название.

Что это за процесс:

  1. Получает идентификатор сообщения, он же смещение с листа.
  2. Получает список обновлений из Telegram на основе этого смещения.
  3. Сохраните идентификатор последнего сообщения, который будет использоваться в качестве смещения на стр.1
  4. Обрабатывайте обновления.

Смещение позволяет извлекать обновления, полученные только после этого смещения. Например, я получаю 10 сообщений в первый раз, а идентификатор последнего сообщения, иначе смещение, равен 100500. Перед вторым запуском бот получил дополнительные 10 сообщений, так что всего 20. Чтобы не загружать все 20 сообщений (10 из которых я уже обработал), мне нужно указать смещение от 1-го запуска, поэтому API вернет только последние 10 сообщений.

PQ запускается в Excel.

 let
    // Offset is number read from table in Excel. Let's say it's 10.
    Offset = 10
    // Returns list of messages as JSON objects.
    Updates = GetUpdates(Offset),
    // This update_id will be used as offset in next query run.
    LastMessageId = List.Last(Updates)[update_id],
    // Map Process function to each item in the list of update JSON objects.

    Map = List.Transform(Updates, each Process(_))
in
    Map
  

Проблема в том, что мне нужно сохранять / считывать этот номер смещения каждый раз, когда выполняется запрос И обрабатываются обновления.

Из-за отложенной оценки, основанной на приведенном ниже коде, я могу либо вывести LastMessageId из запроса, либо вывести результат функции Map.

Вопрос в том, как я могу сделать обе вещи: сохранить / загрузить LastMessageId из обновлений и обработать эти обновления.

Спасибо.

Комментарии:

1. Лучший вариант — показать ваши образцы данных в Excel, а затем показать, как вы хотите, чтобы они преобразовывались в Power BI.

2. Привет, спасибо. Я обновил обрезанный код. Надеюсь, теперь это более понятно.

3. Если я правильно понимаю, вы хотите, чтобы ваш запрос записывал / обновлял значение в файле Excel (т. Е. Имел побочный эффект и сохранял некоторую информацию), но, насколько я знаю, это изначально невозможно. Насколько мне известно, это не то, для чего Power Query был предназначен или поддерживает. Могут быть некоторые обходные пути, такие как выполнение некоторого SQL (для сохранения значения обратно в базу данных) или отправка значения в веб-службу (с использованием Web.Contents и PUT запроса/ POST / PATCH ). Если вы используете Power BI, возможно, будет проще обновить файл Excel с помощью поддерживаемого языка сценариев (например, Python).

4. Не совсем. Когда я получаю новые обновления, я также извлекаю update_Id, он же offset, а затем мне нужно сохранить его в книге Excel (эта часть в порядке, запрос может быть загружен на листе) для следующего запуска запроса. Но проблема в том, что мне нужны оба: обновления процесса И вывод update_id на лист.