Наборы данных Power BI и модели служб Analysis Services используют общую инфраструктуру безопасности на основе ролей. В Power BI Desktop вы можете определить правила фильтрации только на уровне строк, тогда как в табличном редакторе безопасность на уровне объектов доступна как для моделей Power BI, так и для моделей служб Analysis Services.
Проще говоря, теоретически безопасность можно применять только к таблицам и столбцам, но не к мерам. Показатели скрыты, если они зависят от столбца или таблицы, которые скрыты из-за роли безопасности. Однако есть способ скрыть меру, не скрывая ни одну из таблиц и столбцов модели: просто создайте скрытую пустую таблицу, которая на самом деле не используется ни в каких вычислениях, но на которую ссылается неиспользуемая переменная нужной вам меры. прятаться. Затем скройте эту таблицу, и мера тоже будет скрыта.
Чтобы быть более техническим, безопасность на уровне объекта может быть применена к таблицам и столбцам, но не может быть применена к показателям напрямую. Если мера — прямо или косвенно — ссылается на столбец или таблицу, недоступные в текущем контексте безопасности, мера также становится невидимой. Таким образом, гарантируется, что если столбец должен быть невидим для группы пользователей, его содержимое не может быть выведено путем просмотра результатов измерений, основанных на указанном столбце.
В частности, могут быть случаи, когда меру следует скрыть от группы пользователей, не удаляя видимость существующих структур данных. Сначала рассмотрим простой пример. Мы определяем меру «Объем продаж» как произведение «Продажи[Количество]» на «Продажи[Цена]». У вас также есть мера «Продажи со скидкой», которая применяет заданную сумму продажи со скидкой; Теперь, как вы можете скрыть продажи со скидкой от группы пользователей, не скрывая первоначальную меру суммы продаж ? Если скрыть Sales[Quantity] или Sales[Price], вы скроете обе меры. Поскольку скидка устанавливается внутриПоказатели продаж со скидкой и не сохраненные в модели, похоже, что вы не можете скрыть только этот показатель. Однако если мы создадим зависимость в Discounted Sales для пустой скрытой таблицы, специально созданной для создания этой зависимости, мы можем скрыть Discounted Sales, скрыв эту таблицу.
С представленными вам основами мы теперь углубимся в суть нашей статьи. В образце модели, используемом в этой статье, всем пользователям доступны четыре меры:
Мы добавляем еще три меры, которые запрещены для просмотра группе пользователей, т. е. пользователям, не имеющим доступа к информации, относящейся к торговым посредникам. Далее мы будем называть их «мерами торгового посредника»:
Мера в таблице продаж
Reseller Value :=
[Sales Amount] * .9
Мера в таблице продаж
Reseller Margin :=
[Reseller Value] - [Total Cost]
Мера в таблице продаж
Reseller Margin % :=
DIVIDE ( [Reseller Margin], [Reseller Value] )
Мера Reseller Value включает постоянное значение (0,9), которое является частью бизнес-логики, которую мы не хотим раскрывать. Меры реселлера считаются конфиденциальной информацией, и доступ к ним должен быть защищен. Поскольку и маржа торгового посредника, и процент маржи торгового посредника зависят от значения торгового посредника, мы можем применить ограничение безопасности только к значению торгового посредника, и существующие зависимости распространят правило безопасности на другие меры торгового посредника.
Самый эффективный способ скрыть Reseller Value — добавить в его выражение DAX зависимость от таблицы (ResellerSecurity), которую пользователи, принадлежащие к роли безопасности Reseller Disabled, не могут видеть. Ссылаясь на таблицу ResellerSecurity в неиспользуемой переменной, мы создаем семантическую зависимость, которая не влияет на план выполнения и, следовательно, не влияет на производительность. Вот код, который мы предлагаем:
Мера в таблице продаж
Reseller Value :=
VAR CheckSecurity = 'ResellerSecurity'
RETURN [Sales Amount] * .9
Таблица ResellerSecurity может быть определена как вычисляемая таблица с использованием пустого табличного выражения. Эту таблицу следует сделать невидимой для пользователей:
Мера в таблице продаж
ResellerSecurity =
FILTER ( { BLANK() }, FALSE )
Чтобы определить правило безопасности на уровне объекта, мы должны сначала создать роль безопасности. В Power BI Desktop вы можете перейти в раздел Моделирование/Управление ролями/Создать и определить роль безопасности «Отключенный торговый посредник». Вам не нужно назначать фильтр для этой роли в Power BI Desktop.
Для следующего шага требуется табличный редактор в качестве внешнего инструмента, подключенного к модели в Power BI Desktop. Мы назначаем «Нет» роли Reseller Disabled в свойстве Object Level Security таблицы ResellerSecurity.
Сохранив модель обратно в Power BI Desktop, мы можем убедиться, что администратор видит все меры на панели полей.
Однако если мы используем функцию «Просмотреть как» в Power BI Desktop и выбираем роль «Отключенный торговый посредник», на панели «Поля» не отображаются никакие показатели торгового посредника.
Из-за зависимости между скрытой таблицей ResellerSecurity и мерой Reseller Value последняя не видна пользователям с ролью Reseller Disabled. Как побочный эффект,Показатели Reseller Margin и Reseller Margin % не отображаются, поскольку они зависят от Reseller Value.
Прежде чем мы перейдем к конкретному примеру, настоятельно рекомендуем читателю ознакомиться с предварительной статьей о KPI, KPI в табличных моделях для Power BI и Excel.
Мы можем использовать описанную выше технику, чтобы скрыть определенные KPI. Например, мера Margin % включает определение KPI, которое показывает два KPI: Goal и Status. Как вы видите на картинке ниже, виден только статус. Целевой KPI скрыт.
Мы назначаем зависимость выражению цели, которая затем распространяется и на выражение состояния. Целевое выражение (соответствующее целевому показателю KPI) зависит от скрытой пустой таблицы KpiSecurity, которую мы добавляем в модель данных так же, как мы делали это для ResellerSecurity.
В определении выражения состояния на следующем рисунке используется целевая мера _Margin%, которая соответствует целевому выражению на предыдущем рисунке в разделе «Свойство».
Аналогично тому, что мы сделали для мер торгового посредника, мы установили «Нет» для безопасности на уровне объекта таблицы KpiSecurity для роли Kpi Disabled, которую мы создали в Power BI Desktop.
Мы обязательно сохраним модель из табличного редактора. Затем автор модели может увидеть на панели «Поля» в Power BI Desktop ключевые показатели эффективности «Цель» и «Состояние» для показателя «Маржа %».
Когда мы активируем функцию «Просмотреть как» в Power BI Desktop и выбираем роль Kpi Disabled, ключевые показатели эффективности «Цель» и «Состояние» в % маржи больше не видны и не доступны пользователю.
Безопасность на уровне объекта в табличной модели не позволяет напрямую скрыть меру или ключевой показатель эффективности. Однако на самом деле вы можете ограничить доступ к показателям и ключевым показателям эффективности с помощью безопасности на уровне объектов, создав зависимость с таблицей или столбцом, к которым вы применяете ограничения безопасности для определенных групп пользователей. Просто используя ссылку в переменной, которая не используется в оставшемся выражении DAX, вы создаете зависимость для требований безопасности, не влияя на производительность запросов.