有没有办法从多个数据集中获取所有列值的列表
Is there a way to get list of all column values from multiple datasets
我们有 2 个数据集。两个数据集都有一个名为 Office 的列。假设 Dataset1 Office 列的值为 London、Liverpool 和 Dataset2 Office 列的值为 Washington, California。
在 SSRS 中有没有什么方法可以像 UNION ALL(但在 SSRS 中)那样在一个 table 列中生成所有 Office 值的列表?
可能有更优雅的方法来做到这一点,但这就是我所能想到的..
您需要为每条记录设置唯一的数字 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 服务器,对于其他系统,您必须想出另一种获取数字列表的方法
所以,对 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
接下来,我在报告中添加了一个 table,将其减少为两列并将其绑定到 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")
)
如果我们 运行 报告现在我们得到..
最后我们需要隐藏空行。为此,我将 Row Visibilty 表达式设置为
=LEN(ReportItems!LookupResult.Value) = 0
结果是这样的(显然您不需要 num 列,但这只是为了说明)
我们有 2 个数据集。两个数据集都有一个名为 Office 的列。假设 Dataset1 Office 列的值为 London、Liverpool 和 Dataset2 Office 列的值为 Washington, California。
在 SSRS 中有没有什么方法可以像 UNION ALL(但在 SSRS 中)那样在一个 table 列中生成所有 Office 值的列表?
可能有更优雅的方法来做到这一点,但这就是我所能想到的..
您需要为每条记录设置唯一的数字 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 服务器,对于其他系统,您必须想出另一种获取数字列表的方法
所以,对 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
接下来,我在报告中添加了一个 table,将其减少为两列并将其绑定到 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")
)
如果我们 运行 报告现在我们得到..
最后我们需要隐藏空行。为此,我将 Row Visibilty 表达式设置为
=LEN(ReportItems!LookupResult.Value) = 0
结果是这样的(显然您不需要 num 列,但这只是为了说明)