我们有2个数据集。这两个数据集都有一个称为Office的列。说Dataset1 Office列的值是London,Liverpool和Dataset2,Office列的值是华盛顿州。
SSRS中有什么方法可以执行UNION ALL(但在SSRS中)这样的操作,从而在一个表列中生成所有Office值的列表?
答案 0 :(得分:1)
执行此操作的方式可能更优雅,但这就是我能想到的全部。
每个记录都需要有一个唯一的数字ID
假设您不能在数据集查询中将它们简单地合并在一起,如果您可以向每个记录添加数字ID,那么您就可以做到(尽管有点笨拙)
首先,我创建了两个数据集ds1
和ds2
来保存两个办公室名称列表。
例如,第一个数据集查询就是这样...
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")
)
最后,我们需要隐藏空行。为此,我将“行可见性”表达式设置为
=LEN(ReportItems!LookupResult.Value) = 0
结果是这样的(显然,您不需要num列,但这只是为了说明)