【问题标题】:Resize tables based on number of records in SSRS根据 SSRS 中的记录数调整表大小
【发布时间】:2019-05-27 13:54:04
【问题描述】:

我有两个表,数据如下:

            SELECT *
              FROM [dbo].[TestTable_1]
            ID  Value
            ----------
            1   gjha      
            2   dc        
            3   d         
            4   ds        
            5   dg        
            6   hn    

第二张桌子:

            SELECT *
              FROM [dbo].[TestTable_2]
            Value
            -----
            jklsa
            dfv
            b
            grt
            trj
            h
            muik
            rg
            kuu
            wd
            gb
            nm
            wef

我正在获取 SSRS 报告中的数据,如下所示:

问题是:

我怎样才能保持桌子大小不变?也就是说,如果SSRS报告中的小表有6条记录(在这种情况下), 较大的应该调整相同的大小,并且大表中的额外(/更多)记录应该向右移动。

这是 SSRS 的预期输出

            Value           Value
            --------  -----------------
            gjha      jklsa |muik | wef
            dc        dfv   |rg   |
            d         b     |kuu  |
            ds        grt   |wd   |
            dg        trj   |gb   |
            hn        h     |nm   |

注意:以上细节只是示例,但记录的数量是动态的。

【问题讨论】:

  • 如果两个选定的表都很长怎么办?但一个比另一个长!

标签: reporting-services ssrs-2017


【解决方案1】:

这不是一个完整的答案,因为它只是想到的并且完全未经测试。

首先是搜索SO创建多列表的方法,已经有很多答案,所以我不会在这里详细解释。它们通常涉及将 RowNumber 添加到每一行,然后您可以使用它来计算矩阵行和矩阵列号,列号可以在矩阵中用作列组。 (例如,如果行限制为 6,行号为 14,则最终行号为 2(14 mod 6 = 2),列号为 3 作为 Floor(14/6)+1 = 3。

接下来,创建仅从每个表中获取最高行数的数据集。类似的东西

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

现在您有了最小表的大小,您可以将其作为参数传递给从两个表中获取实际数据的 proc(在上面的示例中为 6)

【讨论】:

  • 你能推荐任何链接或教程吗?注意:我的数据集不同,实际上有 3 列,这 3 列来自 3 个不同的数据集。
【解决方案2】:

我刚刚在这里回答了一个类似的问题:https://stackoverflow.com/a/56350614/2033717

您可以通过将表达式中的3 替换为:

来调整此解决方案以适应您的情况:
=Floor(Count(Fields!ColumnName.Value, "Dataset1") / Count(Fields!ColumnName.Value, "Dataset1"))

换句话说,您正在确定需要多少列。然后将数据集的每一行分组为矩阵的行和列。如果您知道第二个表可以大于第一个表,这将起作用,但我不确定它是否可以在没有表达式的一些附加条件的情况下双向工作。

【讨论】:

  • @AskMe 你有机会试试这个吗?如果有效,请将其标记为已回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-30
  • 1970-01-01
相关资源
最近更新 更多