2016-08-19 67 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個空白記錄。

相關問題