繁体   English   中英

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

[英]SSRS Fixed Tablix/ add blank rows below

如何在SSRS中固定表格大小? 我已经尝试过此方法如何在SSRS中设置Tablix的固定行,但是,我担心的是如果数据行小于5,如何在报告中插入空白行,例如可以插入15行。而不是插入新行通过静态,我想动态显示它。 与之类似,我们并不总是知道会有多少数据行。 我可以考虑使用表达式设置行可见性。 但是,我不太确定,我想进一步了解它。 另一种替代方法可能是使用存储过程? 我也想了解更多。 我希望对这个问题有任何见解。 谢谢

在此答案中,最大行是5,因为15到位有点长,数据行的数目是3。

目标输出:

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

在此处输入图片说明

解:
1.首先创建一个表。 如果需要,添加标题/列名称。
2.在表上引用您的数据集(右键单击表最左上角,然后选择“ Tablix属性”)
在此处输入图片说明

  1. 在常规下,选择所需数据集的数据集名称下拉菜单,然后单击确定。
  2. 在数据行上,以通常的方式添加您需要的数据

在此处输入图片说明

  1. 现在,在数据行的最左侧,右键单击>插入行>下面的外部组。

在此处输入图片说明

  1. 这样做5次。 这是目标输出。 在此处输入图片说明

  2. 现在在组外部的第一行。 在最左侧,单击>行可见性。 在表达式上添加它。

在此处输入图片说明

  1. 在另一外侧行上也要执行此操作,但是值应为:

= IIF(CountRows()<3,False,True)->第二行
= IIF(CountRows()<4,False,True)->第三行
= IIF(CountRows()<5,False,True)->第四行
= IIF(CountRows()<6,False,True)->第五行

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

更新:

为了限制在表中显示的数据量,这就是我的方法。

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

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

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

在此处输入图片说明

希望借此,您现在将在报告中有了一个想法。

我曾经应用过在需要设计发票或信函的地方添加其他行的逻辑,并且无论细节行如何,发票或信函都应始终覆盖整个页面。 但是,由于各种问题,我很快改变了自己的方法。 如果您还在创建信件或发票的过程中,请继续阅读; 我不固定表格大小,但是固定报表布局。 这样,即使行数更少或行数更多,SSRS也会正确处理数据。 解释如下,

假设您要创建一个宽度为8.5英寸,高度为11英寸的字母。 假设您从所有侧面离开了0.25英寸的边框; 这样您的车身宽度为8英寸,高度为10.5英寸。 从10.5英寸的高度开始,页眉保留1.5英寸,页脚保留1英寸。 这使您的身高保持8英寸。 明确将主体的高度固定为8英寸。 完成此操作后,SSRS知道必须生成10.5英寸的页面,而不管放置在工作台中的细线如何。 我希望这有帮助。 干杯!

PS此方法仅在PDF输出上只会给出预期的结果。

@bot的答案是壁橱。 在网上找到之后,我偶然发现了一篇文章,但您必须使用存储过程(仅针对Tablix的单独数据集),该存储过程计算出要填充Tablix的行数/行数,才能达到您想要的结果。 PS:我不记得确切的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM