我的 SSRS 报告:最初需要隐藏与 ID 关联的其他行,但在 ID-Specific 扩展报告时可见

My SSRS Report: Additional Rows Associated with ID Need to be Initially Hidden, Yet Visible Upon ID-Specific Expansion of Report

我的问题

我试图让一些数据在 SSRS 中以某种方式显示,但我似乎无法让它准确显示我想要的方式,尽管我花了很多时间寻找解决方案。

我的数据

我拥有的数据存储在数据库 table 中,包括学生与导师的约会。每个约会都有一个对该约会唯一的 Appointment_ID,但 Appointment_ID 不是 table 中的唯一值。也就是说,每当对特定约会进行更改时,例如该约会的位置或时间更改,都会在 table 中创建与该 Appointment_ID 关联的附加行,因此可以与同一 Appointment_ID 关联的多行,根据更改内容包含略有不同的值。

我的报告

我正在使用 SQL 将数据从 table 提取到 SSRS,并且在我的查询中我使用 table 的行日期创建字段来计算新字段用于标识为 Appointment_ID 创建的第一行,以及一个由整数序列组成的字段,用于标识该约会的最早到最新条目。

我想在 SSRS 中显示数据,就像我在下面“示例 1”中显示的那样,第一行是列 headers,随后的每一行都是列值,但需要注意的是喜欢在其关联的 Appointment_ID 下嵌套值为“CHANGE”的行,这样它们最初是隐藏的,只有在用户选择通过单击 Appointment_ID(或旁边的 + 符号)来展开报告时才可见ID),以便显示与该 Appointment_ID 关联的所有行。请参阅下面的“示例 2”,以直观地表示当用户单击 Appointment_ID.

时我希望如何显示数据

示例 1:报表加载时数据的初始显示

Appointment_ID Student App_location Creation_Date App_Change_Indicator App_Change_Seq
d9fs73l41 Bob M. COJ_123 7/7/2020 INITIAL 0
d0s83jfos Jul S. ZOOM 8/3/2020 INITIAL 0
dofs09sje Ted B. TELEPHONE 6/4/2020 INITIAL 0

...等等

示例 2:示例 1 中的第一个 Appointment_ID 扩展为显示标记为“CHANGE”的其他条目

Appointment_ID Student App_Location Creation_Date App_Change_Indicator App_Change_Seq
d9fs73l41 Bob M. COJ_123 7/7/2020 INITIAL 0
d9fs73l41 Bob M. ZOOM 7/8/2020 CHANGE 1
d9fs73l41 Bob M. TELEPHONE 7/9/2020 CHANGE 2
d0s83jfos Jul S. ZOOM 8/3/2020 INITIAL 0
dofs09sje Ted B. TELEPHONE 6/4/2020 INITIAL 0

...等等

如果我很贪心,我不介意在扩展 Appointment_ID 时对那些 CHANGE 值行应用一些缩进。

我的失败

我的第一印象是通过更改查询中的 where 子句将数据拆分为两个数据集,以创建一个仅由值为“INITIAL”的行组成的数据集和另一个由具有值的行组成的数据集“更改”并将数据集拆分为两个 .rdl 文件,以便我可以通过创建链接 Appointment_ID 的参数来利用 SSRS 的子报告功能,但是当我引入更改数据集时,报告根本不会加载作为子报表。显然,子报表真的很慢,我现在拥有的数据包含大约 100,00 行,并且每天都会添加新行。我想要显示的列也比我在上面的示例中包含的要多得多。我现在使用的 SQL 查询正在使用 CTE,可能我可以通过使用 #temp tables 来稍微优化查询,但我不确定这是否可行,我宁愿无论如何不要走子报告路线,因为包含 CHANGE 约会行的子报告只会在这个报告中使用,而不是在证明子报告方法合理的几个报告中使用。

我的感悟

我觉得必须有一种更简单的方法来实现我想要的效果,它不会像子报表那样影响性能,但是 none 我的搜索和阅读教程为我提供了解决方案。

我的问题

如何在我的报表中显示数据,以便在展开 Appointment_ID 之前隐藏值为 CHANGE 的行?

这并不完美,但已经很接近了。

我做的第一件事是扩展数据集查询中的数据,因此我们有单独的 header 和详细信息列。它只是一个数据集,只是更多的列。

这是我用来重新创建您的示例数据并从数据集查询中 return 它的查询。

DECLARE @t TABLE (Appointment_ID varchar(20), Student varchar(20),  App_Location    varchar(20), Creation_Date date,    App_Change_Indicator    varchar(20), App_Change_Seq int)
INSERT INTO @t VALUES 
('d9fs73l41', 'Bob M.', 'COJ_123', '2020/7/7',  'INITIAL', 0), 
('d9fs73l41', 'Bob M.', 'ZOOM', '2020/8/7', 'CHANGE', 1), 
('d9fs73l41', 'Bob M.', 'TELEPHONE', '2020/9/7',    'CHANGE', 2), 
('d0s83jfos', 'Jul S.', 'ZOOM', '2020/3/8', 'INITIAL', 0), 
('dofs09sje', 'Ted B.', 'TELEPHONE', '2020/4/6',    'INITIAL', 0)


SELECT 
          hdr.Appointment_ID as hdr_Appointment_ID
        , hdr.Student as hdr_Student
        , hdr.App_Location as hdr_App_Location
        , hdr.Creation_Date as hdr_Creation_Date
        , hdr.App_Change_Indicator as hdr_App_Change_Indicator
        , hdr.App_Change_Seq as hdr_App_Change_Seq
        , det.*
    FROM (SELECT * FROM @t WHERE App_Change_Seq = 0) hdr 
        LEFT JOIN (SELECT * FROM @t WHERE App_Change_Seq != 0) det
            ON hdr.Appointment_ID = det.Appointment_ID

我在报告中添加了一个简单的 table 以显示来自数据集查询的原始数据以供参考。

然后我向报告中添加了一个新的 table 并按顺序将所有列 除了 Appointment_ID 拖到其中。

接下来,在主设计器下的行组面板中,我 right-clicked “详细信息”组并执行“添加组 -- Parent 组” 选择 hdr_AppointmentID 作为字段分组依据并选择了添加组的选项 header

接下来,我将每个 hdr_* 个字段副本选择到新创建的行的每一列中。

最后,我右击 header 行作为详细信息行,选择“行可见性”

然后我将行设置为最初隐藏,并将切换项设置为包含 hdr_appointment_ID 字段的文本框的名称。

最终输出最初看起来像这样

如果我展开第三行,它会显示...

不幸的是,如果您展开没有详细信息的行,它仍会展开,但会显示一个空白行。可能有解决此问题的方法,但它是 10:30 pom 这里所以我不是最好的! :)

对于缩进,现在详细信息位于不同的行,您可以按照自己的喜好设置格式。