2016-08-19 114 views
1

我有一个SSRS报告,在3列中打印地址标签,30页。有没有办法根据参数添加一个空行到SSRS数据集?

我创建了类似的说明报告发现here

很少做我必须准确地打印30个标签。因此,为了节约纸张和金钱,我想在此报告中添加一个参数1-30,以决定页面上的哪个位置开始打印。

如果我已经在页面上打印了16个标签,我可以在参数中选择17,我的结果将开始打印在页面的第17个标签上。

如果我可以使用该参数来添加一些空行到我的结果集,我可以做到这一点。这可能吗?

+0

这里知道你的数据集查询会很有用。我的第一个直觉是将一个'空白'行合并到你的数据集中,并将你的参数数减去1来复制。但是,在不知道数据集是什么样的情况下,很难知道工会应该是什么样子 – Gallus

回答

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 

这个查询,你会得到导致这样

enter image description here

然后运行它会是空白的空值报告(我认为你在报告中使用Group打印多行)

0

我遇到了类似的问题,例如选择打印哪个标签,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 =空白标签”

  1. 在常规选项,我:

    • 更改的数据类型设置为文本
    • 启用允许空值( “”)
    • 启用允许多值
    • 设置选择参数可见性为可见
  2. 个可用值

    • 留下作为无
  3. 默认值
    • 选择指定值
    • 单击添加值,并设置为00000我这样做14次(所以我有一个缺省每个标签的值为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

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 ('[email protected]+')' 

    exec(@string) 

此处@paramStartLocation是开始打印的标签插槽,“null”记录在报告中显示为空白。 Chanom的解决方案可以跳过记录并显示空白,我的解决方案不需要跳过记录,但需要添加X个空白记录。

相关问题