Как скрыть строки, если в SSRS нет 2 строк на группу? - PullRequest
0 голосов
/ 08 ноября 2019

Я создал представление, в котором показаны семьи с детьми, которые зарегистрированы в нескольких программах нашего агентства. Нам нужно только увидеть, когда двое детей участвуют в двух разных программах, но в одной семье. Как перенести это представление в службы Reporting Services, как отображать только две группы в группе и скрывать остальные? Например, если в семье Смит есть двое детей - один в Head Start, а другой в Early Head Start, - как мне показать эти строки, но скрыть другие, в которых указан только один ребенок на семью?

В настоящее время яесть два оператора CASE в коде SQL. Один создает столбец, который отображает 1 для каждого вхождения термина программы Start Start и 0 в противном случае. Другой делает то же самое, но для каждого вхождения в программу «Ранний стартовый курс».

Я попытался пойти по другому пути и сжать оба этих оператора CASE в один столбец, сгруппировать их по фамилии и сосчитать 1 на семью. Однако это не дает нам подробных данных, которые нам нужны;нам нужно показать имя и программный термин каждого ребенка.

Я экспериментировал с обоими выражениями CountRows в разделе «Видимость строк» ​​операторов SSRS и IIF в табличном отчете, но я не могу заставить их работать,

КОД SQL:

SELECT CP_Data.dbo.Family.FamilyName,
       CP_Data.dbo.vParticipant.PersonName,
       CP_Data.dbo.vParticipant.ChildPlusID,
       CP_Data.dbo.vParticipant.EnrlStatus,
       CP_Data.dbo.vParticipant.ProgramTermAbbreviation,
       CASE WHEN ProgramTermAbbreviation = 'HS20' THEN 1 ELSE 0 END AS HSIdentifier,
       CASE WHEN ProgramTermAbbreviation = 'EH20' THEN 1 ELSE 0 END AS EHSIdentifier,
       CP_Data.dbo.vParticipant.EnrollmentDate
FROM CP_Data.dbo.vParticipant
     LEFT OUTER JOIN CP_Data.dbo.FamilyMembership ON CP_Data.dbo.vParticipant.ParticipantPersonID = CP_Data.dbo.FamilyMembership.PersonID
     RIGHT OUTER JOIN CP_Data.dbo.Family ON CP_Data.dbo.FamilyMembership.FamilyID = CP_Data.dbo.Family.FamilyID
WHERE (CP_Data.dbo.vParticipant.ProgramTermAbbreviation = 'HS20'
    OR CP_Data.dbo.vParticipant.ProgramTermAbbreviation = 'EH20')
  AND (CP_Data.dbo.vParticipant.EnrlStatus = 'Enrolled'
    OR CP_Data.dbo.vParticipant.EnrlStatus LIKE 'Drop%');

В конце я хочу, чтобы в отчете были перечислены только семьи, у которых есть ребенок, в обеих программах, а остальные скрыты. Должен ли я повторно выполнить свои операторы CASE или реализовать строку кода в параметре «Видимость строки» для SSRS? В настоящее время я не уверен, как это сделать.

1 Ответ

1 голос
/ 08 ноября 2019

Лично я бы использовал RowVisibility, чтобы скрыть строки, которые не соответствуют вашим критериям. Во-первых, я хотел бы предложить использовать OVER предложение , чтобы получить единственное поле, которое будет идентифицировать те FamilyName группы, у которых есть один (или более) дочерний элемент в каждой программе.

SELECT...
SUM(CASE WHEN ProgramTermAbbreviation = 'HS20' OR ProgramTermAbbreviation = 'EH20' THEN 1 ELSE 0 END) 
    OVER(PARTITION BY FamilyName) AS HSIdentifier

Оттуда вы можете установить RowVisibility на скрытое, если значение равно 1 или меньше. Мне кажется, что самым простым способом сделать это было бы следующее выражение:

=IIF(Fields!HSIdentifier.Value > 1, false, true)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...