Для начала несколько важных уточнений:
- добавочное обновление недоступно в бесплатной версии Power BI (для ознакомления можно зарегистрировать новый аккаунт и получить Pro версию на 60 дней);
- а также подходит не для всех источников, и есть несколько ограничений:
- в источнике должен быть столбец с датой, при этом сам формат даты не сильно важен,
- источник должен поддерживать свёртываемость запросов, т.е. запрос должно быть можно представить в виде SQL-запроса. К сожалению, практически все веб-ресурсы не поддерживают таковые, поэтому советуем собирать данные не напрямую из источников, а каким-либо образом сохранять их в своих базах данных, таким образом, вы не потеряете исторические данные при каких-либо неполадках на стороне ресурса.
Также в данной статье не раскрываются основы работы с Power BI, поэтому, как минимум, вы должны уметь подключаться к источникам, создавать функции и параметры, а также публиковать отчёт и работать со шлюзом данных. Если вы не обладаете такими навыками, то добро пожаловать на наш курс “Аналитик Power BI”. Но если все вышеперечисленное вас не смущает, то поехали.
Для начала подключимся к источнику данных, в нашем случае, это таблица из базы данных MySQL.

Сначала стоит рассмотреть структуру таблицы:
- Date - это дата совершения продаж,
- Sale - это сумма продаж,
- Timestamp - это дата из столбца Date, но в формате Unix-Time (количество секунд прошедших с начала 1970-го года),
- DateModify - это дата изменения данных, возникающая например, при корректировке продаж.
Добавим таблицу в Power BI. Где она выглядит следующим образом:

Чтобы удостовериться, что источник подходит для добавочного обновления, выбираем последний шаг запроса и в контекстном меню смотрим активен ли пункт “Просмотреть машинный запрос”. Если выбрать этот пункт, то будет доступен SQL-запрос к базе данных:


Теперь переходим к следующему пункту, а именно - созданию границ диапазона дат. Для этого создаём 2 параметра: с названиями RangeStart и RangeEnd. Важно: эти параметры должны быть с типом “Дата и время”, и дата RangeStart должна быть раньше чем RangeEnd. Но конкретные значения не так уж и важны (разумеется для текстового примера, на деле-то конечно важны).

После этого необходимо настроить фильтр для столбца Date на котором и будет основываться добавочное обновление. Даты в столбце Date должны быть позже чем RangeStart и раньше или равно чем RangeEnd.

Проверяем SQL-запрос, и если появилась строчка с фильтрацией, то всё идёт по плану.

Если же у вас нет столбца с датами, не стоит отчаиваться, для этого у нас в примере есть данные в столбце TimeStamp, которые не являются датой в привычном понимании.
Для этого напишем простую функцию переводящую дату из формата “Дата и время” в формат Unix-Time.
(datetime)=>
let
ToUnix = Int64.From(Duration.TotalSeconds(datetime - #datetime(1970, 1, 1, 0, 0, 0)))
in
ToUnix
И заменяем вот эту строку фильтрации:
#"Строки с примененным фильтром" = Table.SelectRows(test_sale, each [Date] > RangeStart and [Date] <= RangeEnd)
на такую:
#"Строки с примененным фильтром" = Table.SelectRows(test_sale, each [Timestamp] > ToUnix(RangeStart) and [Timestamp] <= ToUnix(RangeEnd))

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

Поэтому жмём кнопку “Применить и закрыть”, а когда применение завершится, добавим несколько визуальных элементов на полотно отчёта. Допустим, это будет график продаж, таблица дат и сумма продаж:

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

Активируем переключатель “Добавочное обновление”. Параметр “Хранить...” и “Обновлять...” настраиваем по своему усмотрению, но есть одна особенность, а именно, если выбрать, например, хранить строки 1 месяц, то в модель данных будут попадать данные не только за текущий месяц, но и за предыдущий, так как PowerBI считает по количеству завершенных периодов. Такие же условия и для лет и кварталов.

Мы будем хранить данные за 3 месяца, а обновлять данные за последние 7 дней. Жмём “Применить изменения” и публикуем отчёт.
Открываем сервис Power BI и сразу же открываем отчёт. Видим, что доступны данные не за последние 3 месяца, а за период, ограниченный параметрами RangeStart и RangeEnd.

Теперь обновляем набор данных этого отчета (он находится рядом с отчётом).

И открываем отчёт снова. И видим, что обновление отработало корректно, и теперь у нас в отчете хранятся данные за 3 месяца.

Обновление работает, а в чём смысл добавочного обновления? Как его проверить? Для этого в базе данных изменим данные, при этом одно изменение попадает в период обновления, а именно 7 дней, а второе не попадает. Сохраняем изменения и в сервисе Power BI снова обновляем набор данных:


Видно, что попало в набор данных только то изменение, которое попадало в диапазон обновлений, а второе было проигнорировано. В этом и смысл добавочного обновления, исторические данные загружаются лишь раз, а обновляются только актуальные.
Но на этом ещё не всё. У добавочного обновления есть ещё одна интересная возможность, а именно - обновление только изменённых данных. Активируем этот параметр, при этом указав столбец “DateModify” в настройках добавочного обновления/ И снова опубликуем отчёт.


И теперь изменим в базе данных продажи за несколько дней, при этом у части из них изменим значение “DateModify”, а у остальных оставим без изменений, сохраним изменения и повторно обновим набор данных.

Как мы видим обновились только те данные у которых были изменены значения “DateModify”.
Если статья была полезной для Вас, просим оставить комментарий :)