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

How Do I Hide Rows Unless There Are 2 Rows Per Group in SSRS?

我创建了一个视图,其中显示了 children 的家庭,他们参加了我们机构的多个项目。我们只需要看两个children在两个不同的程序但是同一个家庭。将此视图引入 Reporting Services 时,如何仅在每组有两行时显示并隐藏其余行?例如,如果史密斯家族有两个 children - 一个在启蒙阶段,另一个在早期启蒙阶段 - 我如何显示这些行但隐藏其他每个家庭只列出一个 child 的行?

目前,我在 SQL 代码中有两个 CASE 语句。创建一个列,在每次出现 Head Start 计划术语时显示 1,否则显示 0。另一个做同样的事情,但每次出现 Early Head Start 项目术语。

我试过另辟蹊径,将这两个 CASE 语句压缩到一列中,按家族名称对它们进行分组,并计算每个家族的 1。但是,这并没有为我们提供所需的详细数据;我们需要显示每个 child 的姓名和程序术语。

我一直在试验 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%');

最后,我希望报告只列出在两个程序中都有 child 的家庭,并隐藏其余部分。我应该 re-do 我的 CASE 语句还是在 SSRS 的行可见性设置中实现一行代码?目前,我不确定如何完成此操作。

就个人而言,我会使用 RowVisibility 来隐藏不符合您的条件的行。首先,我建议可能使用 OVER clause 来获取一个字段,该字段将标识每个程序中有一个(或多个)子项的那些 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)

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