Публикация, обновление и RLS
Выводим отчёт в свет: публикация, автообновление и разграничение доступа к строкам.
Row-Level Security (RLS) — безопасность на уровне строк: правило, ограничивающее, какие строки данных видит конкретный пользователь.
От файла к работающему сервису
Готовый .pbix бесполезен, пока лежит на вашем диске. Публикация в Power BI Service превращает его в инструмент для всей компании: коллеги открывают отчёт в браузере, данные обновляются сами, а доступ контролируется правами. Это финальный и обязательный этап работы аналитика.
Публикация
В Desktop нажимаете «Опубликовать» (Publish) и выбираете рабочую область (workspace) в Service. Отчёт и его набор данных загружаются в облако. После этого им можно делиться по ссылке, встраивать в портал, собирать из него дашборды.
Обновление данных
В режиме Import данные в облаке — снимок на момент публикации. Чтобы они освежались, настраивают расписание обновления (Scheduled refresh): раз в час, раз в день и т.д. Если источник внутри корпоративной сети (локальная база, файл на сервере), между Service и источником ставят шлюз (Data Gateway) — программу-посредника, через которую облако дотягивается до внутренних данных.
┌─────────┐ расписание ┌──────────┐ шлюз ┌──────────┐ │ SERVICE │ ─────────────> │ Gateway │ ───────> │ База/файл│ │ (облако)│ <───свежие─── │(в сети │ <─данные─ │ компании │ │ │ данные │ компании)│ │ │ └─────────┘ └──────────┘ └──────────┘
Row-Level Security
Часто разным людям нужно видеть разные строки одного отчёта: менеджер Юга — только продажи Юга, директор — всё. Дублировать отчёт под каждого нелепо. RLS решает это правилами на уровне строк. В Desktop создают роли с DAX-фильтром:
-- Роль «Менеджер региона», фильтр на таблице Sales:
[region] = USERPRINCIPALNAME()
-- Чаще через справочник доступа:
[region] = LOOKUPVALUE(
UserAccess[region],
UserAccess[email], USERPRINCIPALNAME()
)USERPRINCIPALNAME() возвращает email вошедшего пользователя; по нему фильтр оставляет только его строки. В Service роли назначают конкретным людям. Теперь один отчёт безопасно показывает каждому только его данные.
| Понятие | Суть | |
| Роль | набор фильтров на таблицах | |
| Фильтр RLS | DAX-условие, какие строки видны | |
| Назначение | привязка пользователей к роли в Service |
Как работает под капотом
RLS — это автоматический фильтр контекста, добавляемый движком ко всем запросам пользователя ещё до расчёта мер. Он применяется на сервере, поэтому ограниченный пользователь физически не может получить чужие строки даже через экспорт — данные отфильтрованы до того, как визуал что-либо посчитает. Это не «скрытие» в интерфейсе, а настоящая изоляция на уровне модели.
Частые ошибки
- Не настроить шлюз для локального источника. Тогда расписание обновления упадёт — облако не дотянется до внутренней базы.
- Считать RLS косметикой. Это реальная защита; но её обязательно тестируют («Просмотр как роль») перед публикацией.
- Двунаправленные связи при RLS. Они могут «протащить» фильтр не туда и раскрыть лишние строки — будьте осторожны.
Итог
- Публикация выводит отчёт в Service; расписание обновления (через шлюз для локальных источников) держит данные свежими.
- RLS правилами на уровне строк показывает каждому пользователю только его данные в одном отчёте.
- RLS применяется на сервере до расчёта — это настоящая изоляция, а не скрытие в UI.