#sql #sql-server #reporting-services #sql-server-2012 #ssrs-2012
#sql #sql-server #службы отчетов #sql-server-2012 #ssrs-2012
Вопрос:
У меня есть несколько профилей, которые имеют определенный уровень разрешений, которые перечисляются и хранятся в SQL. Я хочу создать в SSRS отчет, в котором отображаются все разрешения в левой части таблицы и все профили сверху с X или каким-либо указанием профилей, имеющих соответствующие разрешения. Эта информация хранится в трех таблицах.
Таблица 1: Профили — дает имена профилей, связанных с идентификатором GUID
Таблица 2: Profile_Priv — предоставляет идентификатор GUID профиля с номером разрешения (в этой таблице отображаются только разрешения, фактически предоставленные профилю)
Таблица 3: Привилегии — связывает номер разрешения обратно с именем разрешения.
У меня есть запрос, который будет извлекать разрешения, назначенные профилю, и я могу легко заполнить пустую матрицу всеми возможными разрешениями, но объединение этих двух ускользает от меня. Это то, что у меня есть в SSRS до сих пор. Я передаю параметр в SSRS с именем ProfileName, чтобы позволить запросу показывать, какие профили необходимы для этого конкретного отчета.
Select Privileges.Description, Profiles.Name
FROM Privileges LEFT OUTER JOIN
Profile_Priv ON Privileges.ID = Profile_Priv.ID INNER JOIN
Profiles ON Profile_Priv.PID = Profiles.PID
WHERE (Profiles.Name = @ProfileName)
ORDER BY Privileges.ID
Это не заполняет какую-либо информацию в таблице, как я ожидал, а также не будет выполнять какие-либо преобразования данных, такие как преобразование значения в Yes.
Любая обратная связь или помощь приветствуются.
Дополнение 1:
Даже при изменении его на полное объединение выполнение отдельного профиля возвращает только те разрешения, которые есть у конкретного профиля.
Я хочу создать что-то вроде этого в отчете:
Profile 1 Profile 2 Profile 3 Profile 4
Permission 1 X X
Permission 2 X X X X
Permission 3 X X
Permission 4
В настоящее время я получаю это, используя приведенный выше пример, если я искал профиль 2:
Profile 2
Permission 2 X
Permission 3 X
Комментарии:
1. Вам нужно добавить примеры данных, которые вы получаете в данный момент, и то, как вы хотите, чтобы они выглядели в отчете.
2. Добавлена дополнительная информация для целей пояснения.
3. Вы фильтруете для профиля 2 , поэтому ожидаются только разрешения 2 и 3 . Вы должны удалить свое предложение WHERE, если хотите, чтобы они все были в матрице, иначе ваш фильтр разрешит только выбранный профиль в таблице.
Ответ №1:
Вы можете выполнить полное внешнее соединение, но вместо использования предложения WHERE используйте оператор CASE, чтобы возвращать что-то вроде «True» (если у профиля есть это разрешение) или «False», если это не так. Таким образом, вы всегда получаете все разрешения.
Комментарии:
1. Оператор case отлично решил проблему. Спасибо.