我创建了一个视图,该视图显示了有孩子的家庭被我们机构的多个计划录取。我们只需要看看两个不同的程序中有两个孩子却是同一个家庭。将此视图引入Reporting Services时,如何仅在每个组有两行时显示并隐藏其余行?例如,如果史密斯一家有两个孩子-一个在“抢先”中,另一个在“提前抢先”中-如何显示这些行,但隐藏其他仅列出每个家庭一个孩子的行?
当前,我在SQL代码中有两个CASE语句。将创建一列,该列针对每次出现的Head Start程序项显示1,否则显示0。另一位用户则执行相同的操作,但是每次出现“抢先启动”程序项时。
我尝试了一条不同的路线,将这两个CASE语句压缩为一列,按姓氏将它们分组,然后计算每个家庭的1。但是,这并不能为我们提供所需的详细数据。我们需要显示每个孩子的姓名和课程术语。
我一直在实验SSRS的“行可见性”部分中的CountRows表达式和报表tablix中的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的“行可见性”设置中实现一行代码?目前,我不确定如何完成此操作。
答案 0 :(得分:1)
我个人会使用pv
隐藏不符合您条件的行。首先,我建议可能使用OVER
clause来获得一个字段,该字段将标识每个程序中有一个(或多个)孩子的RowVisibility
组。
FamilyName
从此处,可以将SELECT...
SUM(CASE WHEN ProgramTermAbbreviation = 'HS20' OR ProgramTermAbbreviation = 'EH20' THEN 1 ELSE 0 END)
OVER(PARTITION BY FamilyName) AS HSIdentifier
设置为1或以下时隐藏。在我看来,最简单的方法是像以下这样的表达式:
RowVisibility
如果我了解您的数据的工作方式,这应该会为您提供所希望的确切结果,但是如果我误解了一些信息,请告诉我。