如何在SSRS中修复表格大小? 我试过这个 How to set Fixed Rows of Tablix in SSRS 但是,我关注的是如果数据行小于5,如何添加空行,在报告中,例如可以安装15行。而不是通过静态插入新行,我想动态显示它。 同样,我们并不总是知道有多少数据行。 我可以考虑用表达式设置行可见性。 但是,我不太确定,我想更多地了解它。 另一种替代方式可能是使用存储过程??我也想了解更多相关信息。 我很感激有关此事的任何见解。 感谢
答案 0 :(得分:2)
在这个答案中,最大行是5,因为15到有点长,数据行数是3。
目标输出:
*我只有3个数据,所以其余两行应为空,因为最大行为5
<强>解决方案:强>
1.首先创建一个表。如果需要,添加标题/列名称。
2.在表格中引用您的数据集(右键单击表格的左上角,然后选择Tablix属性)
现在在小组外面的第一行。在最右边点击&gt;行可见性。在表达式上添加此内容。
= 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个空白行,其中包含数据的行具有相同的高度,并为每个行添加可见性条件。
<强>更新强>
为了限制表格中显示的数据数量,我就是这样做的。
SELECT TOP 5
或15,以确保始终获得要在表中显示的确切记录数。另一种方法是在表格中使用过滤器。
答案 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