我有一个SSRS报告,在3列中打印地址标签,30页。有没有办法根据参数添加一个空行到SSRS数据集?
我创建了类似的说明报告发现here
很少做我必须准确地打印30个标签。因此,为了节约纸张和金钱,我想在此报告中添加一个参数1-30,以决定页面上的哪个位置开始打印。
如果我已经在页面上打印了16个标签,我可以在参数中选择17,我的结果将开始打印在页面的第17个标签上。
如果我可以使用该参数来添加一些空行到我的结果集,我可以做到这一点。这可能吗?
我有一个SSRS报告,在3列中打印地址标签,30页。有没有办法根据参数添加一个空行到SSRS数据集?
我创建了类似的说明报告发现here
很少做我必须准确地打印30个标签。因此,为了节约纸张和金钱,我想在此报告中添加一个参数1-30,以决定页面上的哪个位置开始打印。
如果我已经在页面上打印了16个标签,我可以在参数中选择17,我的结果将开始打印在页面的第17个标签上。
如果我可以使用该参数来添加一些空行到我的结果集,我可以做到这一点。这可能吗?
我不知道这是最好的解决办法,但看到下面
DECLARE @StartColumn INT = 6
;WITH CTE
AS (
SELECT *
,ROW_NUMBER() OVER (ORDER BY q.value) AS [rowNum]
FROM (
values('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L')
) q (value)
)
SELECT CASE
WHEN CTE.rowNum > @StartColumn THEN CTE.value
ELSE NULL
END AS [Value]
FROM CTE
这个查询,你会得到导致这样
然后运行它会是空白的空值报告(我认为你在报告中使用Group打印多行)
我遇到了类似的问题,例如选择打印哪个标签,b ut也需要为每个客户打印超过1个标签。我的问题是我无法访问SQL(我们使用多维数据集)。我使用SSRS 2012与SharePoint。这不太好,但确实有效。
我在报告中有1个数据集。我有14个标签 - 7个横跨& 2。每个标签都设置为自己的Tablix。
该tablix编号从1到14,从左上角开始。所以,1-7,从左边的“列”&,然后从右边“列”的顶部8-14。
令人讨厌的是参数值从0开始,因此它们被编号为0-13 每个tablix被设置为由特定参数值进行填充,例如,tablix 1被设置为由参数值0,tablix 2由参数值1过滤,tablix 3由参数值2过滤,tablix 4由参数值3过滤等。
我必须在标签中打印两次数据,所以我在Tablix中使用了两个文本框。
创建参数
用户将使用的客户机ID(一个6位数字)作为参数值。我创建了一个名为ClientID的参数。对于提示我把“替换000000每个标签所需。000000 =空白标签”
在常规选项,我:
个可用值
Create tablix
然后我为每个标签创建了一个tablix。他们都指向我的数据集(想象中称为“DataSet1”)。它们由一个单元组成。这与我的标签的可打印区域的高度和宽度相匹配。
创建文本框
我添加了表矩阵单元格内我的第一个文本框。我把它做得稍微小一点,就是Tablix的宽度,然后从Tablix的顶部向下。
创建的第二个文本框&将其调低,直到它适合我的需求。它使用与第一个文本框相同的公式。 (记住我需要打印客户端名称两次)。
我在我的报告中使用了查找数据集。是的,尽管tablix已经基于这个数据集。
第一个标签,两个文本框的公式为:
=lookup(Parameters!ClientID.Value(0),
Fields!ID.Value,
UCase(Fields!Surname.Value),
"DataSet1")
& ", " &
lookup(Parameters!ClientID.Value(0),
Fields!ID.Value,
Fields!Given.Value,
"DataSet1")
为表矩阵创建过滤器
我也有一个过滤器适用于每个表矩阵,所以将打印客户端通过参数选择的信息。
在过滤器选项 +下Tablix属性单击添加 +从表情,我选择我的ClientID +从操作员,我选择在 +的价值,我点击FX按钮来创建公式 =参数!ClientID。值(0)
不显示默认参数值
显然,如果你离开参数值设置为默认(000000),它将打印这一点。
我可以防止这种情况的唯一方法是使用字体颜色(我无法使可见性工作)。 +右键单击文本框 +选择文本框属性 +单击字体选项 +下的颜色,请单击FX按钮 +使用这个公式:
=iif(Parameters!ClientID.Value(0)="000000", "White", "Black")
对于后续的标签
对于第二个标签,我索引括号中的值,例如(0)(1)两个文本框的公式和也用于过滤器,例如
=lookup(Parameters!ClientID.Value(1),
Fields!ID.Value,
UCase(Fields!Surname.Value),
"DataSet1")
& ", " &
lookup(Parameters!ClientID.Value(1),
Fields!ID.Value,
Fields!Given.Value,
"DataSet1")
并在Tablix属性过滤,
=Parameters!ClientID.Value(1)
和文本框字体式
=iif(Parameters!ClientID.Value(1)="000000", "White", "Black")
然后我索引这个数目对于每个后续的标签,所以最后的标签(标签14)中,该值分别为:
=lookup(Parameters!ClientID.Value(13) etc
,并在Tablix属性过滤器,
=Parameters!ClientID.Value(13)
,并在文本框中输入字体公式 = IIF(参数!ClientID.Value(13)= “000000”, “白”, “黑”)
所以,当用户运行报告,他们替换000000,000000,000000等与适当的客户Id
Chanom让我在正确的轨道上,我的解决方案是创建我的数据集查询,如下面的示例中所示。
declare @cnt int = 1
declare @string varchar(max) = ''
declare @varID varchar(max) = cast(@paramID as varchar(max))
IF @paramStartLocation > 1
WHILE @cnt < @paramStartLocation
BEGIN
set @string = @string + 'select null as Column1
,null as Column2
,null as Column3
,null as Column4
,null as Column5
,null as Column6
UNION ALL
'
set @cnt = @cnt + 1
END
set @string = @string + 'SELECT [TableName].[Column1]
, [TableName].[Column2]
, [TableName].[Column3]
, [TableName].[Column4]
, [TableName].[Column5]
, [TableName].[Column6]
FROM [TableName]
WHERE [TableName].[IDColumn] in ('[email protected]+')'
exec(@string)
此处@paramStartLocation是开始打印的标签插槽,“null”记录在报告中显示为空白。 Chanom的解决方案可以跳过记录并显示空白,我的解决方案不需要跳过记录,但需要添加X个空白记录。
这里知道你的数据集查询会很有用。我的第一个直觉是将一个'空白'行合并到你的数据集中,并将你的参数数减去1来复制。但是,在不知道数据集是什么样的情况下,很难知道工会应该是什么样子 – Gallus