Публикация, обновление и 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 роли назначают конкретным людям. Теперь один отчёт безопасно показывает каждому только его данные.

ПонятиеСуть
Рольнабор фильтров на таблицах
Фильтр RLSDAX-условие, какие строки видны
Назначениепривязка пользователей к роли в Service

Как работает под капотом

RLS — это автоматический фильтр контекста, добавляемый движком ко всем запросам пользователя ещё до расчёта мер. Он применяется на сервере, поэтому ограниченный пользователь физически не может получить чужие строки даже через экспорт — данные отфильтрованы до того, как визуал что-либо посчитает. Это не «скрытие» в интерфейсе, а настоящая изоляция на уровне модели.

Частые ошибки

  • Не настроить шлюз для локального источника. Тогда расписание обновления упадёт — облако не дотянется до внутренней базы.
  • Считать RLS косметикой. Это реальная защита; но её обязательно тестируют («Просмотр как роль») перед публикацией.
  • Двунаправленные связи при RLS. Они могут «протащить» фильтр не туда и раскрыть лишние строки — будьте осторожны.

Итог

  • Публикация выводит отчёт в Service; расписание обновления (через шлюз для локальных источников) держит данные свежими.
  • RLS правилами на уровне строк показывает каждому пользователю только его данные в одном отчёте.
  • RLS применяется на сервере до расчёта — это настоящая изоляция, а не скрытие в UI.
Проверьте себя
1. Что нужно, чтобы Power BI Service обновлял данные из локальной базы компании?
AНичего, само работает
BШлюз (Data Gateway)
CDirectQuery всегда
DНовый .pbix каждый раз
2. Что делает Row-Level Security (RLS)?
AМеняет цвета отчёта
BОграничивает, какие строки данных видит конкретный пользователь
CУскоряет обновление
DСоздаёт новые меры