[英]SSRS Fixed Tablix/ add blank rows below
如何在SSRS中固定表格大小? 我已经尝试过此方法如何在SSRS中设置Tablix的固定行,但是,我担心的是如果数据行小于5,如何在报告中插入空白行,例如可以插入15行。而不是插入新行通过静态,我想动态显示它。 与之类似,我们并不总是知道会有多少数据行。 我可以考虑使用表达式设置行可见性。 但是,我不太确定,我想进一步了解它。 另一种替代方法可能是使用存储过程? 我也想了解更多。 我希望对这个问题有任何见解。 谢谢
在此答案中,最大行是5,因为15到位有点长,数据行的数目是3。
目标输出:
*我只有3个数据,因此其余两行应该为空,因为最大行为5
解:
1.首先创建一个表。 如果需要,添加标题/列名称。
2.在表上引用您的数据集(右键单击表最左上角,然后选择“ Tablix属性”)
= IIF(CountRows()<3,False,True)->第二行
= IIF(CountRows()<4,False,True)->第三行
= IIF(CountRows()<5,False,True)->第四行
= IIF(CountRows()<6,False,True)->第五行
*可见性将隐藏该组之外的行,具体取决于该组中的行数。 这样,即使您的数据集为空,默认行数也始终为5。在这种情况下,您要在组外添加15个空白行,并在包含数据的行中添加相同的高度,并为每个行添加可见性条件。
更新:
为了限制在表中显示的数据量,这就是我的方法。
SELECT TOP 5
或15,以确保始终获得要在表中显示的确切记录数。 另一种方法是在表中使用过滤器。
希望借此,您现在将在报告中有了一个想法。
我曾经应用过在需要设计发票或信函的地方添加其他行的逻辑,并且无论细节行如何,发票或信函都应始终覆盖整个页面。 但是,由于各种问题,我很快改变了自己的方法。 如果您还在创建信件或发票的过程中,请继续阅读; 我不固定表格大小,但是固定报表布局。 这样,即使行数更少或行数更多,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.