SSRS固定Tablix /在下面添加空行

时间:2016-04-15 08:35:05

标签: reporting-services

如何在SSRS中修复表格大小? 我试过这个 How to set Fixed Rows of Tablix in SSRS 但是,我关注的是如果数据行小于5,如何添加空行,在报告中,例如可以安装15行。而不是通过静态插入新行,我想动态显示它。 同样,我们并不总是知道有多少数据行。 我可以考虑用表达式设置行可见性。 但是,我不太确定,我想更多地了解它。 另一种替代方式可能是使用存储过程??我也想了解更多相关信息。 我很感激有关此事的任何见解。 感谢

3 个答案:

答案 0 :(得分:2)

在这个答案中,最大行是5,因为15到有点长,数据行数是3。

目标输出:

*我只有3个数据,所以其余两行应为空,因为最大行为5

enter image description here

<强>解决方案:
1.首先创建一个表。如果需要,添加标题/列名称。
2.在表格中引用您的数据集(右键单击表格的左上角,然后选择Tablix属性)
enter image description here

  1. 在“常规”选择所需数据集的“数据集名称”下拉列表下,然后单击“确定”。
  2. 在数据行中,以正常方式添加所需数据以添加
  3. enter image description here

    1. 现在左侧大部分数据行右键单击&gt;插入行&gt;外面的小组。
    2. enter image description here

      1. 这样做5次。这是目标输出。 enter image description here

      2. 现在在小组外面的第一行。在最右边点击&gt;行可见性。在表达式上添加此内容。

      3. enter image description here

        1. 也在另一个外行上执行此操作,但值应为:
        2. = IIF(CountRows()&lt; 3,False,True) - &gt;对于第二行
          = IIF(CountRows()&lt; 4,False,True) - &gt;为第三排
          = IIF(CountRows()&lt; 5,False,True) - &gt;为第四排
          = IIF(CountRows()&lt; 6,False,True) - &gt;第五行

          *可见性将隐藏组外部的行,具体取决于该组中的行数。即使您有空数据集,默认行数也始终为5.在您的情况下,您在组外添加15个空白行,其中包含数据的行具有相同的高度,并为每个行添加可见性条件。

          <强>更新

          为了限制表格中显示的数据数量,我就是这样做的。

          • 最简单的方法是在您的SQL查询中使用SELECT TOP 5或15,以确保始终获得要在表中显示的确切记录数。

          另一种方法是在表格中使用过滤器。

          1. 我在sql查询中添加了RowCount列来计算我拥有的所有记录数。
          2. 在报告中右键单击表格的左上角&gt; Tablix属性&gt;过滤器
          3. 然后我输入此值以限制要在我的表格中显示的数据数量。
          4. enter image description here

            希望您能够在报告中了解如何做到这一点。

答案 1 :(得分:0)

我曾经应用添加额外行的逻辑,其中需要设计发票或信件,并且应始终跨越以完成页面而不管细节线。但是,由于各种问题,我很快改变了我的方法。如果您还在创建信件或发票,请继续阅读;我没有修复表格大小,但是我修复了报表布局。这样,即使行数较少或行数较多,SSRS也能正确处理数据。解释如下,

假设您正在创建一个宽8.5英寸,高11英寸的字母。假设你从四面都留下了0.25英寸的边框;让你的身体宽度为8英寸,高度为10.5英寸。页面页眉为1.5英寸,页面页脚为1英寸,高度为10.5英寸。这让你身高8英寸。将Body的高度明确固定为8英寸。一旦完成,SSRS就会知道它必须生成一个10.5英寸的页面,而不管来自放置在主体中的桌子的细节线。我希望这有帮助。干杯!

P.S。此方法仅在PDF输出中提供预期结果。

答案 2 :(得分:0)

@ bot的答案就是壁橱。在网上找到之后,我偶然发现了一篇文章,但你必须使用存储过程(仅用于tablix的单独数据集),它计算出填充在tablix中的行数/行数,以满足你想要的结果。 P.S:我不记得确切的URL引用。

存储过程示例:

SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[uspPurchaseLines]
(
 --@InInvoiceNbr int
 @InLinesPerPage    int
)
AS
DECLARE @TotalRows int
DECLARE @Remainder int
DECLARE @NumPages int
DECLARE @NextPageRows int
set @TotalRows= 0
SELECT 
 ROW_NUMBER() OVER( ORDER BY P_id)as InvoiceRow,
                                             CusID,
                                             P_id,
                                             Inv_No,
                                             P_Desc,
                                             Del_date,
                                             Qty,
                                             Pack_size,
                                             U_Prize,
                                             Amt

into #tempInvoice
FROM Purchase_Details



SET @TotalRows= @@ROWCOUNT
IF @TotalRows=0
    BEGIN
        WHILE @TotalRows < @InLinesPerPage -- Add Blank Rows will generate blank invoice.
            BEGIN
                SET @TotalRows= @TotalRows+1
                INSERT  #tempInvoice
                 (InvoiceRow,
                 CusID,
                 P_id,
                 Inv_No,
                 P_Desc,
                 Del_date,
                 Qty,
                 Pack_size,
                 U_Prize,
                 Amt
                 )
                 VALUES 
                 (@TotalRows
                 --,@InInvoiceNbr
                 ,''
                 ,''
                 ,0
                 ,''
                 ,NULL
                 ,0
                 ,''
                 ,0
                 ,0
                 )
            END
    END
ELSE
    BEGIN
        SET @Remainder =  @TotalRows%@InLinesPerPage -- get remainder
        IF @Remainder !=0 
        BEGIN
            -- Get the current page increase by 1 becasue we have a remainder.
            SET @NumPages = @TotalRows/@InLinesPerPage  +1 
            SET @NextPageRows = @NumPages * @InLinesPerPage
            WHILE @TotalRows < @NextPageRows -- Add Blank Rows
            BEGIN
                SET @TotalRows= @TotalRows+1
                INSERT  #tempInvoice
                (InvoiceRow,
                 CusID,
                 P_id,
                 Inv_No,
                 P_Desc,
                 Del_date,
                 Qty,
                 Pack_size,
                 U_Prize,
                 Amt
                )
                VALUES 
                (@TotalRows
                --,@InInvoiceNbr
                ,''
                ,''
                ,0
                ,NULL
                ,''
                ,0
                ,''
                ,0
                ,0
                )
            END
        END
    END
SELECT * from #tempInvoice order by InvoiceRow asc
return