Время прочтения: 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. Все работает, наш фильтр настроен правильно. Только не забываем добавить пользователи на вкладку «Безопасность на уровне строк», а дальше все работать будет автоматически 😊