有没有办法从多个数据集中获取所有列值的列表

问题描述 投票:0回答:1

我们有2个数据集。两个数据集都有一个名为Office的列。说Dataset1 Office列具有值London,Liverpool和Dataset2的Office列具有值华盛顿,加利福尼亚州。

在SSRS中是否有任何方法可以执行UNION ALL(但在SSRS中),在一个表列中生成所有Office值的列表?

ssrs-2012
1个回答
1
投票

可能有更优雅的方式来做到这一点,但这就是我能想到的一切......

您需要为每条记录设置唯一的数字ID

假设您不能简单地在数据集查询中将这些组合在一起,如果您可以为每条记录添加数字ID,那么您可以这样做(尽管有点笨拙)

首先,我创建了两个数据集ds1ds2来保存两个办公室名称列表。

例如,第一个数据集查询就是这个......

DECLARE @t TABLE(OfficeID int, Office varchar(20))
INSERT INTO @t VALUES
(1, 'London'),
(2, 'Liverpool')
SELECT * FROM @t

第二个就是这个。

DECLARE @t TABLE(OfficeID int, Office varchar(20))
INSERT INTO @t VALUES
(10, 'Washington'),
(11, 'California')
SELECT * FROM @t

如您所见,每个办公室现在都有一个唯一的数字ID

接下来,我需要另一个数据集,其中包含覆盖整个办公室ID范围的数字列表。在这个例子中,范围只有20个数字注意:这在SQL Server上为其他系统工作,你必须提出另一种获取数字列表的方法

所以,对dsNums的查询是

declare @n table(num int)
insert into @n
select top 20 row_number() over(order by t1.number) as N
from   master..spt_values t1 
       cross join master..spt_values t2
SELECT * FROM @n

接下来,我在报表中添加了一个表,将其缩减为两列并将其绑定到dsNums。第一列只是[num]字段。

第二个是一个表达式,它执行两次查找并获取第一个非空白结果。表达是

=IIF(
    LEN(LOOKUP(Fields!num.Value, Fields!OfficeID.Value, Fields!Office.Value, "ds1"))>0
    , LOOKUP(Fields!num.Value, Fields!OfficeID.Value, Fields!Office.Value, "ds1")
    , LOOKUP(Fields!num.Value, Fields!OfficeID.Value, Fields!Office.Value, "ds2")
    )

如果我们现在运行报告,我们得到.. enter image description here

最后我们需要隐藏空行。为此,我将Row Visibilty表达式设置为

=LEN(ReportItems!LookupResult.Value) = 0

结果就是这个(显然你不需要num列,但它只是为了说明)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.