Функция суммирования DAX не учитывает безопасность на основе строк в моей модели Power BI

#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, которая учитывает мои фильтры безопасности (поскольку мне нужно сделать это в моей полной модели)?

Вот также ссылка на тестовый файл PBIX.

Ответ №1:

Вычисляемые таблицы (и столбцы) вычисляются при загрузке и материализации модели. Не во время выполнения.

Вам нужно будет подключить эту таблицу к вашей модели, чтобы безопасность распространялась и на нее.

Комментарии:

1. После выполнения еще нескольких тестов, похоже, происходит вот что — я пока не хочу это принимать, поскольку у меня нет подтверждения, но это выглядит вероятным. Power BI создает таблицу DAX во время обновления и не понимает, что содержимое изменилось в результате RLS во время выполнения.

2. Это есть где-то в документации, но поверьте мне. Она работает как в табличных моделях SSAS, за ней стоит тот же движок. Обновляется только при выполнении обновления. Почему бы вам просто не связать таблицу фильтров с вашей таблицей Dax?

3. Было бы неплохо связать таблицу — в моем случае функция СУММИРОВАНИЯ для получения списка значений фактически является частью более крупного объединения, которое дает пользователю некоторые дополнительные значения для сравнения помимо содержимого другой таблицы. Если я присоединюсь к отфильтрованной таблице напрямую, она также удалит эти дополнительные значения.