Время прочтения: 3 мин.

Что если информация в отчете не предназначена для большого количества пользователей?

Ответ один – разграничение прав. Тестирование возможности Power BI проведено мною на данных из интернета.

Пример данных для загрузки:

Пример нашего отчета.

Сейчас, если я размещу отчет на сервере, то любой пользователь (менеджер 1 или менеджер N) сможет увидеть продажи другого.

Если же мы хотим разграничить доступ, чтобы каждый менеджер мог видеть продажи только своего отдела, создадим роли.

В Power BI Desktop на вкладке «Моделирование» находим раздел «Безопасность» — Управление ролями и создаем роли. В своем примере я создала 3 роли для каждого отдела.

Настраиваем фильтрацию. В поле «Выражение DAX фильтра таблицы» прописываем формулу (используя конечно же язык запросов DAX):

[Отдел ] = «Отдел продаж 1».

Данное выражение необходимо добавить в каждую роль.

Теперь, когда Роли настроены, размещаем отчет на сервере. И добавляем пользователей. Заходим в Управление отчетом, нас интересует вкладка «Безопасность на уровне строк» (она становится активной только после того, как мы добавим роли), и распределяем сотрудников по группам.

После сохранения изменений, если Менеджер 1 зайдет посмотреть отчет, то он увидит данные только по своему отделу.

Единственный минус такого разграничения в том, что, если Менеджер 1 перейдет из Отдела продаж 1 в Отдел продаж 3, нам придется вручную вносить изменения. Если ваши данные содержат Имя пользователя в формате ДОМЕН\Логин или Пользователь@что-то.py, фильтрацию по отделам можно настроить автоматически. Создаем новую меру (otdel), которая будет выводить название отдела пользователя, просматривающего отчет. Имя пользователя можно получить с помощью формул

USERPRINCIPALNAME() и USERNAME().
otdel = LOOKUPVALUE(Data[Отдел ],sheet1[login], USERPRINCIPALNAME())

Переходим к последнему этапу. Возвращаемся в Управление ролями и добавляем выражение DAX, которое содержит нашу новую меру otdel. Также я сократила количество ролей до одной, т.к. теперь за распределение отвечает функция SWITCH.

SWITCH(Data[otdel],
"Отдел продаж 1", [Отдел ] = "Отдел продаж 1", 
"Отдел продаж 2", [Отдел ] = "Отдел продаж 2", 
"Отдел продаж 3", [Отдел ] = "Отдел продаж 3", 
"Отдел продаж 4", [Отдел ] = "Отдел продаж 4",
"Отдел продаж 5", [Отдел ] = "Отдел продаж 5", 
blank())

Все шаги выполнены, смотрим отчет под учеткой Менеджера 2. Все работает, наш фильтр настроен правильно. Только не забываем добавить пользователи на вкладку «Безопасность на уровне строк», а дальше все работать будет автоматически 😊