除非 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)
如果我了解您的数据的工作方式,这应该会为您提供您希望的确切结果,但如果我误解了什么,请告诉我。
我创建了一个视图,其中显示了 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)
如果我了解您的数据的工作方式,这应该会为您提供您希望的确切结果,但如果我误解了什么,请告诉我。