2016-04-15 56 views
1

如何在SSRS中修復表格大小? 我試過這 How to set Fixed Rows of Tablix in SSRS 但是,我關心的是如果數據行小於5,在報表中可以添加空白行,例如15行可以適合。而不是通過靜態插入新行,我想要動態顯示它。如在,我們並不總是知道有多少數據行將在那裏。 我可以考慮用表達式設置行可視性。 但是,我不太清楚,我想更多地瞭解它。 另一種替代方式可能是使用存儲過程?我想更多地瞭解它。 我希望對此事有所瞭解。 謝謝SSRS固定Tablix /在下面添加空白行

+0

是5行的最低數量,即使它們是空的?對不起,我只是想澄清。我實際上是通過可視性來做到這一點 – bot

+0

@bot,你究竟是什麼意思?我只有5個數據行,但在報告裏面,最大的行可以是15,那麼,如何顯示其餘(空行)?我只嘗試設置天花板..../15,但它只是無法正常工作。 – LittleBirdy

+0

檢查我的答案,如果我確實瞭解你 – bot

回答

0

@ bot的答案就是壁櫥。在網上找到之後,我偶然發現了一篇文章,但是您必須使用存儲過程(僅適用於tablix的單獨數據集),計算出行數/行數以填充到Tablix中,以滿足您的期望結果。 P.S:我不記得確切的URL參考。

存儲過程樣本:

SET ANSI_NULLS OFF 
GO 
SET QUOTED_IDENTIFIER OFF 
GO 
CREATE PROCEDURE [dbo].[uspPurchaseLines] 
(
[email protected] 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 
0

我曾經應用添加額外的行的邏輯,其中需要設計發票或字母,並應始終跨越完整頁面,而不考慮細節線。不過,由於各種問題,我很快改變了我的方法。如果您還在創建信件或發票的過程中,請繼續閱讀;我不修復表格大小,但是我修復了報表佈局。這種方式即使行數較少或行數較多,SSRS也能正確處理數據。說明如下,

我們假設你正在創建一個寬8.5英寸,高11英寸的字母。假設你已經從所有側面留下了0.25英寸的邊界;這會給你留下8英寸的寬度和10.5英寸的高度。頁面頁眉1.5英寸,頁腳10.5英寸高1英寸。這留下8英寸的身高。明確地將身體的高度固定爲8英寸。一旦完成,SSRS理解它必須生成10.5英寸的頁面,而不管來自放置在表格中的細節線。我希望這有幫助。乾杯!

P.S.這種方法只會給出PDF輸出的預期結果。

+0

感謝您分享您的方法。我會試一試,讓你知道。 – LittleBirdy

+1

我已經嘗試過你的方法,但我想要顯示下面的空行,而不管數據行的數量。現在,它停止在數據行之後。因此,我爲什麼要報告佈局/表格固定。無論如何,我可以動態地添加空白行? – LittleBirdy

+0

SSRS有兩種不同的渲染器用於屏幕輸出和pdf輸出。您不會在屏幕上看到效果,但PDF輸出會顯示您預期的結果。在我的情況下,通常客戶不關心屏幕輸出,但他們希望信件/發票的期望的pdf輸出發送給他們的客戶。對不起,我忘了在答案中提到這一點。我會更新我的答案。 –

1

在這個答案的最大行5,因爲15位長的數據行數爲3

目標輸出:

*我只有3個數據,所以剩下的另一
:因爲最大行5

enter image description here

解決兩行應該是空的1.首先創建一個表格。如果需要添加標題/列名稱。
2.參考您的餐桌上的數據集(右鍵點擊左上角最表,然後選擇Tablix屬性)
enter image description here

  • 在一般選擇的數據集名稱下拉數據集,然後單擊確定。
  • 數據行上添加你只是正常的方式需要添加數據
  • enter image description here

  • 現在,在最左邊的數據行權單擊>插入行>以下的外部組。
  • enter image description here

  • 做5次。這是目標輸出。 enter image description here

  • 現在放在組外的第一排。在最左側,點擊右側的>行可見性。在表達式上添加這個。

  • enter image description here

  • 執行此也對其他外部行,但值應該是:
  • = IIF(CountRows()< 3, False,True) - >第二行
    = IIF(CountRows()< 4,False,True) - >對於第三行
    = IIF(CountRows()< 5,False,True) - >第四排
    = IIF(CountRows()< 6,假,真) - >對於第五行

    *可見性將隱藏根據該組中的行的計數的組以外的行。即使你有空的數據集,默認的行數也總是5.在你的情況下,你在組外添加15行空白行,並在數據行中具有相同高度,併爲每個行添加可見性條件。

    UPDATE:

    爲了限制數據的數量的表格顯示,這是我做到了。

    • 最簡單的方法是使用SELECT TOP 5或15的情況下,你的SQL查詢,以確保您始終獲得記錄的確切數目在表格中顯示。

    另一種方法是在表格中使用過濾器。

    1. 我在我的sql查詢中添加了RowCount列來計算我擁有的所有記錄數。
    2. 在報表上右鍵單擊您的表> Tablix屬性>的左上角過濾
    3. 然後我進入這個值來限制我的表中顯示的數據的數量。

    enter image description here

    從這個希望你現在有一個想法如何做到這一點在你的報告。

    +0

    如果每頁的最大行數是10行。但數據庫有100行。這意味着我必須在每個頁面的tablix 100行中添加一行直到第十頁,好嗎? –