除非SSRS中每组有2行,否则如何隐藏行?

我创建了一个视图,该视图显示了有孩子的家庭被我们机构的多个计划录取。我们只需要看看两个不同的程序中有两个孩子却是同一个家庭。将此视图引入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的“行可见性”设置中实现一行代码?目前,我不确定如何完成此操作。

leyuruan 回答:除非SSRS中每组有2行,否则如何隐藏行?

我个人会使用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

如果我了解您的数据的工作方式,这应该会为您提供所希望的确切结果,但是如果我误解了一些信息,请告诉我。

本文链接:https://www.f2er.com/3136408.html

大家都在问