2009-02-20 119 views
1

我正在使用SQL Server Reporting Services和Visual Studio附帶的報表設計器。我有一個真的很大報告。實際上Visual Studio的掛起時間很長(一次有時需要幾個小時),或者只是在進行更改時崩潰。將數據集傳遞給SQL Server Reporting Services的子報表

我可以做的很少,我可以解決這個問題,所以我決定將報告的下半部分轉換爲子報告。所以,我從一個巨大的,反應遲鈍的報告開始,並以兩個小巧,可管理的報告結束 - 令人驚訝的是,這實際上是有效的。

一個問題:我的子報告使用與我的主要報告相同的數據。現在,它通過重新查詢數據庫來填充它的數據集。對數據庫的額外往返導致報告生成需要兩倍的時間;從45分鐘到1 1/2小時產生。

我想避免再次擊中數據庫,而是在兩個報告中使用相同的數據集。

如何在報表和子報表之間共享或傳遞數據集?

回答

0

我很肯定你不能。你可能更願意尋找方法來完全重新設計報告,這樣它就不會那麼大了......更不用說在導出到excel時子報表存在的各種問題。

0

我有幾個報告說,SQL是如此複雜,因爲它試圖編輯它時會鎖定Visual Studio。在這些報告中,我直接進入代碼視圖並直接編輯XML,這是可行的。當Visual Studio神奇地讓列比我設置的更寬時,我也會這樣做。不過,如果您要編輯報告的佈局太多,我懷疑你會想要沿着這條路走下去。

而不是在報告中運行您的查詢,是否有可能使用兩個報告使用的存儲過程來構建表?第一個報表運行存儲過程來構建表,然後兩個報表都只是查詢報表。如果報告可以由多個用戶運行,請注意併發問題。

0

您是否嘗試過在列表中使用列表,其中兩個列表都使用相同的數據集,然後過濾內部列表以僅顯示鏈接到外部列表的記錄?

就執行時間而言,45分鐘看起來像是一個可怕的長時間。我假設您已經對執行計劃進行了一些分析,以驗證您的查詢或存儲過程是否使用了有意義的索引?

希望這有助於

比爾

0

您可以使用虛擬參數做到這一點:

我。在主報告'MyData'中創建一個參數並勾選'內部'

ii。將默認值'MyData'設置爲您的數據集

iii。用表達式設置報表參數

=Parameters!MyData.Value 

希望這有助於 鄧肯

0

如果你創建一個表,你可以合併的細節行的所有細胞,並把報表的內容。然後將子報表的參數設置爲您想要運行子報表的字段。

傑森

3

,我認爲這可以幫助你: http://www.gotreportviewer.com/subreports/index.html

直供子報表數據 - 的SubreportProcessing事件要爲報表 供應數據,你必須處理 SubreportProcessing事件。請注意,此事件位於LocalReport 對象上。您可以添加如下事件處理程序:

private void MainForm_Load(object sender, EventArgs e) 
{ 
    this.reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(MySubreportEventHandler); 
} 

以下是事件處理程序的示例。在這個例子中, LoadSalesData被定義爲返回一個DataTable。

void MySubreportEventHandler(object sender, SubreportProcessingEventArgs e) 
{ 
    e.DataSources.Add(new ReportDataSource("Sales", LoadSalesData())); 
} 

如果你的報告有多個子報表,你可以看看SubreportProcessingEventArgs和供應數據的 相應報表的ReportPath 財產。您可能還需要檢查SubreportProcessingEventArgs的參數屬性 的值,並且僅返回 與子報表參數對應的數據子集,如 在此提及。

相關問題