我有一份SSRS报告,可以在3列中打印30页的地址标签。
我创建的报告类似于找到的here
指令我很少需要打印30个标签。因此,为了节省纸张和金钱,我想在此报告中添加一个参数,编号为1-30,以决定页面上的哪个位置开始打印。
如果我已在页面上打印了16个标签,我可以在参数中选择17,我的结果将开始在页面的第17个标签上打印。
如果我可以使用该参数在我的结果集中添加一些空行,我可以完成此操作。这可能吗?
答案 0 :(得分:0)
我不确定这是最佳解决方案,但请参阅下面的查询
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
你会得到这样的结果
然后运行它将在报告中显示空值时显示空白(我认为您在报告中使用组来打印多行)
答案 1 :(得分:0)
我遇到了类似的问题,例如选择要打印的标签,还需要为每个客户打印超过1个标签。我的问题是我无法访问SQL(我们使用立方体)。我使用SSRS 2012和SharePoint。它不漂亮,但确实有效。
我的报告中有一个数据集。我有14个标签 - 7个标签和1个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 =空白标签”
在常规选项下,我:
可用值
创建Tablix
然后我为每个标签创建了一个tablix。他们都指向我的数据集(富有想象力地称为“DataSet1”)。它们由一个细胞组成。这与我的标签的可打印区域的高度和宽度相匹配。
创建文本框
我在tablix单元格中添加了第一个文本框。我把它做得比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创建过滤器
我还必须对每个Tablix应用过滤器,因此它将打印通过参数选择的客户端信息。
在“过滤器”选项下的“Tablix属性”上 +单击“添加” +从表达式中,我选择了我的ClientID +来自运营商,我选择了In +在值中,我单击了Fx按钮来创建公式 =参数!ClientID.Value(0)
不显示默认参数值
显然,如果将参数值保留为默认值(000000),它将打印出来 我可以防止这种情况的唯一方法是使用字体颜色(我无法使Visibility工作)。 +右键单击文本框 +选择文本框属性 +单击字体选项 +在“颜色”下,单击“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
答案 2 :(得分:0)
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 ('+@varID+')'
exec(@string)
这里@paramStartLocation是开始打印的标签槽,&#34; null&#34;记录在报告中显示为空白。 Chanom的解决方案可以跳过记录并显示空白,我的解决方案不需要跳过记录,而是添加X个空白记录。