根据 SSRS 中的记录数调整表的大小
Resize tables based on number of records in SSRS
我有两个 table 具有如下数据:
SELECT *
FROM [dbo].[TestTable_1]
ID Value
----------
1 gjha
2 dc
3 d
4 ds
5 dg
6 hn
第 2 table:
SELECT *
FROM [dbo].[TestTable_2]
Value
-----
jklsa
dfv
b
grt
trj
h
muik
rg
kuu
wd
gb
nm
wef
我正在 SSRS 报告中提取数据,如下所示:
问题是:
如何保持 table 大小不变?也就是说,如果 SSRS 报告中的小 table 有 6 条记录(在这种情况下),
较大的应调整与较小的相同大小,而较大的 table 中的额外(/更多)记录应向右移动。
这是 SSRS 的预期输出
Value Value
-------- -----------------
gjha jklsa |muik | wef
dc dfv |rg |
d b |kuu |
ds grt |wd |
dg trj |gb |
hn h |nm |
注意:以上详细信息只是示例,但是记录数确实是动态的。
这不是一个完整的答案,因为它只是我想到的并且完全未经测试。
首先是在SO中搜索创建multi-column table的方法,已经有很多答案了,我就不在这里详细解释了。它们通常涉及将 RowNumber 添加到每一行,然后您可以使用它来计算矩阵行和矩阵列号,列号可以在矩阵中用作列组。 (例如,如果行限制为 6,行号为 14,则最终行号为 2 (14 mod 6 = 2),列号为 3,如 Floor(14/6)+1 = 3.
接下来,创建仅从每个 table 中获取最高行数的数据集。像
DECLARE @a int
DECLARE @b int
SELECT @a = COUNT(*) FROM myTableA
SELECT @b = COUNT(*) FROM myTableA
SELECT CASE WHEN @a<=@b THEN @a ELSE @b END AS maxRows
现在你有了最小的 table 的大小,你可以将它作为参数传递给从两个 table 中获取实际数据的过程(这在我们的代码中是 6上面的例子)
我刚刚在这里回答了一个类似的问题:
您可以将表达式中的 3
替换为:
以适应您的情况
=Floor(Count(Fields!ColumnName.Value, "Dataset1") / Count(Fields!ColumnName.Value, "Dataset1"))
换句话说,您正在确定需要多少列。然后将数据集的每一行分组为矩阵的行和列。如果您知道第二个 table 可以比第一个大,这将起作用,但我不确定它是否可以在表达式上没有一些附加条件的情况下双向起作用。
我有两个 table 具有如下数据:
SELECT *
FROM [dbo].[TestTable_1]
ID Value
----------
1 gjha
2 dc
3 d
4 ds
5 dg
6 hn
第 2 table:
SELECT *
FROM [dbo].[TestTable_2]
Value
-----
jklsa
dfv
b
grt
trj
h
muik
rg
kuu
wd
gb
nm
wef
我正在 SSRS 报告中提取数据,如下所示:
问题是:
如何保持 table 大小不变?也就是说,如果 SSRS 报告中的小 table 有 6 条记录(在这种情况下), 较大的应调整与较小的相同大小,而较大的 table 中的额外(/更多)记录应向右移动。
这是 SSRS 的预期输出
Value Value
-------- -----------------
gjha jklsa |muik | wef
dc dfv |rg |
d b |kuu |
ds grt |wd |
dg trj |gb |
hn h |nm |
注意:以上详细信息只是示例,但是记录数确实是动态的。
这不是一个完整的答案,因为它只是我想到的并且完全未经测试。
首先是在SO中搜索创建multi-column table的方法,已经有很多答案了,我就不在这里详细解释了。它们通常涉及将 RowNumber 添加到每一行,然后您可以使用它来计算矩阵行和矩阵列号,列号可以在矩阵中用作列组。 (例如,如果行限制为 6,行号为 14,则最终行号为 2 (14 mod 6 = 2),列号为 3,如 Floor(14/6)+1 = 3.
接下来,创建仅从每个 table 中获取最高行数的数据集。像
DECLARE @a int
DECLARE @b int
SELECT @a = COUNT(*) FROM myTableA
SELECT @b = COUNT(*) FROM myTableA
SELECT CASE WHEN @a<=@b THEN @a ELSE @b END AS maxRows
现在你有了最小的 table 的大小,你可以将它作为参数传递给从两个 table 中获取实际数据的过程(这在我们的代码中是 6上面的例子)
我刚刚在这里回答了一个类似的问题:
您可以将表达式中的 3
替换为:
=Floor(Count(Fields!ColumnName.Value, "Dataset1") / Count(Fields!ColumnName.Value, "Dataset1"))
换句话说,您正在确定需要多少列。然后将数据集的每一行分组为矩阵的行和列。如果您知道第二个 table 可以比第一个大,这将起作用,但我不确定它是否可以在表达式上没有一些附加条件的情况下双向起作用。