#filtering #powerbi #dax #row-level-security
#фильтрация #powerbi #dax #безопасность на уровне строк
Вопрос:
Я добавляю безопасность на уровне строк в модель Power BI, и она работает со всеми обычными таблицами, но есть таблица DAX, созданная на основе SUMMARY, которая игнорирует безопасность. Я создал небольшую модель, которая воспроизводит проблему — я делаю что-то не так здесь, или это поведение преднамеренное?
Вот моя модель данных — «Необработанная таблица» — это просто таблица вручную с некоторыми числами в ней и столбцом фильтра:
«Таблица DAX» создается с помощью инструкции SUMMARY, которая просто делает ее копией таблицы, созданной вручную (поскольку каждая строка в любом случае уникальна):
DAX Table = SUMMARIZE('Raw Table', 'Raw Table'[Number], 'Raw Table'[Filter])
Вот как выглядит содержимое таблиц, когда ничего не фильтруется:
Я добавил защиту на уровне строк, которая фильтрует таблицу фильтров только для записей «Показать»:
И благодаря объединению, похоже, что она фильтрует необработанную таблицу обычным образом — когда она включена, я могу видеть только строки с надписью «Show» в них (как и ожидалось). Однако таблица DAX продолжает отображать все, даже отфильтрованные строки, которые я не должен видеть:
Что я здесь делаю не так? Поскольку мне не разрешено (через RLS) видеть строки, помеченные как «Скрыть» в необработанной таблице, не следует ли их также исключить из инструкции SUMMARY? Я понимаю, что добавление среза в таблицу фильтров и нарезка необработанной таблицы не влияет на оператор SUMMARY (в этом случае я все еще вижу все строки) — я просто вижу здесь то же самое? Поскольку я не могу видеть эти строки на основе настроек безопасности, я бы ожидал, что они также будут скрыты от моего DAX.
Предполагая, что я делаю это правильно, и это намеренно, как я могу создать таблицу DAX, которая учитывает мои фильтры безопасности (поскольку мне нужно сделать это в моей полной модели)?
Ответ №1:
Вычисляемые таблицы (и столбцы) вычисляются при загрузке и материализации модели. Не во время выполнения.
Вам нужно будет подключить эту таблицу к вашей модели, чтобы безопасность распространялась и на нее.
Комментарии:
1. После выполнения еще нескольких тестов, похоже, происходит вот что — я пока не хочу это принимать, поскольку у меня нет подтверждения, но это выглядит вероятным. Power BI создает таблицу DAX во время обновления и не понимает, что содержимое изменилось в результате RLS во время выполнения.
2. Это есть где-то в документации, но поверьте мне. Она работает как в табличных моделях SSAS, за ней стоит тот же движок. Обновляется только при выполнении обновления. Почему бы вам просто не связать таблицу фильтров с вашей таблицей Dax?
3. Было бы неплохо связать таблицу — в моем случае функция СУММИРОВАНИЯ для получения списка значений фактически является частью более крупного объединения, которое дает пользователю некоторые дополнительные значения для сравнения помимо содержимого другой таблицы. Если я присоединюсь к отфильтрованной таблице напрямую, она также удалит эти дополнительные значения.