SSRS:获取数据集的不同子集
SSRS: Get Distinct subset of Dataset
我有两个 SSRS 报告引用了一个共享数据集,returns 数据的格式类似于:
create table #example (ID1 bigint, ID2 char, ID3 char(2))
insert into #example (ID1, ID2, ID3)
values ('1592648378', 'D', 'Q')
,('1234567891', 'A', 'Z')
,('1234567891', 'A', 'Y')
,('1234567891', 'A', 'X')
,('1234567891', 'B', 'Z')
,('1234567891', 'B', 'Y')
,('9876543219', 'A', 'W')
,('9876543219', 'C', 'X')
,('9876543219', 'A', 'Q')
select *
from #example as exm
order by exm.ID1, exm.ID2, exm.ID3
drop table #example
我需要一份报告来显示详细信息的完整级别 (ID1 + ID2 + ID3)。我需要其他报告不仅要显示,而且要 以 CSV 格式 导出 select 详细程度。具体来说,我需要的详细程度只包括 ID1 + ID2。通过 selecting distinct(或分组)在查询中很容易做到这一点:
select distinct exm.ID1, exm.ID2
from #example as exm
order by exm.ID1, exm.ID2
我可以让每个报告引用它们自己的数据集版本,并分别维护每个查询。但是,如果可能的话,我想避免这种情况。我宁愿做的是允许我以坚持使用 CSV 导出的方式将字段分组在一起。我最初尝试按 Tablix 对象中的特定字段(在本例中为 ID1 + ID2)进行分组,但显然当您以 CSV 格式导出报告时,它将 return 所有基础数据(另外我还没有成功按照我的意愿格式化 Tablix)。我还考虑过从报告(在另一个数据集中)中查询共享数据集的可能性,但我找不到这样做的方法。我还认为可能有一种方法可以通过脚本修改数据集。有人知道我该如何解决这个问题吗?
这显示了我对 Tablix 和分组的尝试(右图是我想要的):
这是我得到的:
当我将其导出为 CSV 时会发生什么:
您可以为两个 table 重复使用相同的数据集。显示的详细程度基于您定义的行组。对于第二个 table,删除“详细信息”行组。确保在行组属性中,您在前两列上进行分组,并且没有任何未按任何内容分组的内容。
这将防止第二个 table 在报表视图中和导出的输出中都包含额外的行。
您可以试试这个方法来生成您的第二份报告(ID1 + ID2)。我会从头开始,因为没有太多的步骤。
- 向您的报告添加新的 table 并引用您的共享数据集
- 默认情况下,table 将有 3 列。删除其中一列
- 将 ID1 和 ID2 添加到 table
- 虽然此 table 已 selected,请转到屏幕底部的“行组”并右键单击“详细信息”行,然后 select 组属性
在“常规”选项卡上,按 ID1 和 ID2 添加 2 个分组,然后单击“确定”
结果:
编辑:格式化
我有两个 SSRS 报告引用了一个共享数据集,returns 数据的格式类似于:
create table #example (ID1 bigint, ID2 char, ID3 char(2))
insert into #example (ID1, ID2, ID3)
values ('1592648378', 'D', 'Q')
,('1234567891', 'A', 'Z')
,('1234567891', 'A', 'Y')
,('1234567891', 'A', 'X')
,('1234567891', 'B', 'Z')
,('1234567891', 'B', 'Y')
,('9876543219', 'A', 'W')
,('9876543219', 'C', 'X')
,('9876543219', 'A', 'Q')
select *
from #example as exm
order by exm.ID1, exm.ID2, exm.ID3
drop table #example
我需要一份报告来显示详细信息的完整级别 (ID1 + ID2 + ID3)。我需要其他报告不仅要显示,而且要 以 CSV 格式 导出 select 详细程度。具体来说,我需要的详细程度只包括 ID1 + ID2。通过 selecting distinct(或分组)在查询中很容易做到这一点:
select distinct exm.ID1, exm.ID2
from #example as exm
order by exm.ID1, exm.ID2
我可以让每个报告引用它们自己的数据集版本,并分别维护每个查询。但是,如果可能的话,我想避免这种情况。我宁愿做的是允许我以坚持使用 CSV 导出的方式将字段分组在一起。我最初尝试按 Tablix 对象中的特定字段(在本例中为 ID1 + ID2)进行分组,但显然当您以 CSV 格式导出报告时,它将 return 所有基础数据(另外我还没有成功按照我的意愿格式化 Tablix)。我还考虑过从报告(在另一个数据集中)中查询共享数据集的可能性,但我找不到这样做的方法。我还认为可能有一种方法可以通过脚本修改数据集。有人知道我该如何解决这个问题吗?
这显示了我对 Tablix 和分组的尝试(右图是我想要的):
这是我得到的:
当我将其导出为 CSV 时会发生什么:
您可以为两个 table 重复使用相同的数据集。显示的详细程度基于您定义的行组。对于第二个 table,删除“详细信息”行组。确保在行组属性中,您在前两列上进行分组,并且没有任何未按任何内容分组的内容。
这将防止第二个 table 在报表视图中和导出的输出中都包含额外的行。
您可以试试这个方法来生成您的第二份报告(ID1 + ID2)。我会从头开始,因为没有太多的步骤。
- 向您的报告添加新的 table 并引用您的共享数据集
- 默认情况下,table 将有 3 列。删除其中一列
- 将 ID1 和 ID2 添加到 table
- 虽然此 table 已 selected,请转到屏幕底部的“行组”并右键单击“详细信息”行,然后 select 组属性
在“常规”选项卡上,按 ID1 和 ID2 添加 2 个分组,然后单击“确定”
结果:
编辑:格式化