我的問題
我試圖讓一些資料在 SSRS 中以某種方式顯示,但我似乎無法讓它準確地顯示我想要的方式,盡管我花了很多時間尋找解決方案。
我的資料
我擁有的資料存盤在資料庫表中,由學生與顧問的約會組成。每個約會都有一個對該約會唯一的 Appointment_ID,但 Appointment_ID 不是表中的唯一值。也就是說,無論何時對特定約會進行更改,例如該約會的位置或時間更改,都會在表中創建與該 Appointment_ID 關聯的附加行,因此可以有多個行與相同的 Appointment_ID 關聯包含略有不同的值,具體取決于更改的內容。
我的報告
我正在使用 SQL 將該表中的資料提取到 SSRS 中,在我的查詢中,我使用表的行日期創建欄位來計算一個新欄位,以識別為 Appointment_ID 創建的第一行以及由整數序列組成的欄位,用于標識該約會的最早到最新條目。
我想在SSRS中顯示資料,就像我在“示例1”下面顯示的那樣,第一行是列標題,每個后續行都是列值,但需要注意的是,我想嵌套值為“CHANGE”的行" 在其關聯的 Appointment_ID 下,這樣它們最初是隱藏的,只有在用戶通過單擊 Appointment_ID(或 ID 旁邊的 符號)選擇展開報告時才可見,以便顯示與該 Appointment_ID 關聯的所有行。有關當用戶單擊 Appointment_ID 時我希望如何顯示資料的直觀表示,請參見下面的“示例 2”。
示例 1:報告加載時資料的初始顯示
| 約會_ID | 學生 | 應用位置 | 創立日期 | App_Change_Indicator | App_Change_Seq |
|---|---|---|---|---|---|
| d9fs73l41 | 鮑勃·M。 | COJ_123 | 2020 年 7 月 7 日 | 最初的 | 0 |
| d0s83jfos | 朱爾·S。 | 飛漲 | 2020 年 8 月 3 日 | 最初的 | 0 |
| dofs09sje | 特德·B。 | 電話 | 2020 年 6 月 4 日 | 最初的 | 0 |
...ETC。
示例 2:示例 1 中的第一個 Appointment_ID 已展開以顯示標記為“CHANGE”的其他條目
| 約會_ID | 學生 | App_Location | 創立日期 | App_Change_Indicator | App_Change_Seq |
|---|---|---|---|---|---|
| d9fs73l41 | 鮑勃·M。 | COJ_123 | 2020 年 7 月 7 日 | 最初的 | 0 |
| d9fs73l41 | 鮑勃·M。 | 飛漲 | 2020 年 7 月 8 日 | 改變 | 1 |
| d9fs73l41 | 鮑勃·M。 | 電話 | 2020 年 7 月 9 日 | 改變 | 2 |
| d0s83jfos | 朱爾·S。 | 飛漲 | 2020 年 8 月 3 日 | 最初的 | 0 |
| dofs09sje | 特德·B。 | 電話 | 2020 年 6 月 4 日 | 最初的 | 0 |
...ETC。
如果我很貪心,我不介意在 Appointment_ID 展開時對那些 CHANGE 值行應用一些縮進。
我的失敗
我的第一印象是通過更改查詢中的 where 子句將資料拆分為兩個資料集,以創建一個資料集,該資料集僅由值為“INITIAL”的行組成,另一個資料集由值為“CHANGE”的行組成,并且將資料集拆分為兩個 .rdl 檔案,以便我可以通過創建鏈接 Appointment_IDs 的引數來利用 SSRS 的子報表功能,但是當我將 CHANGE 資料集作為子報表引入時,報表根本不會加載。顯然,子報表真的很慢,而且我現在擁有的資料包含大約 100,00 行,并且每天都會添加新行。我想要顯示的列也比我在上面的示例中包含的要多得多。我現在使用的 SQL 查詢正在使用 CTE,
我的情緒
我覺得必須有一種更簡單的方法來實作我想要的,它不會像子報表那樣影響性能,但是我對教程的搜索和閱讀都沒有為我提供解決方案。
我的問題
如何在我的報告中顯示資料,以便最初隱藏具有值 CHANGE 的行,直到 Appointment_ID 展開?
uj5u.com熱心網友回復:
這并不完美,但很接近。
我做的第一件事是擴展資料集查詢中的資料,這樣我們就有了單獨的標題和詳細資訊列。它只是一個資料集,但只是更多的列。
這是我用來重新創建示例資料并從資料集查詢中回傳的查詢。
DECLARE @t TABLE (Appointment_ID varchar(20), Student varchar(20), App_Location varchar(20), Creation_Date date, App_Change_Indicator varchar(20), App_Change_Seq int)
INSERT INTO @t VALUES
('d9fs73l41', 'Bob M.', 'COJ_123', '2020/7/7', 'INITIAL', 0),
('d9fs73l41', 'Bob M.', 'ZOOM', '2020/8/7', 'CHANGE', 1),
('d9fs73l41', 'Bob M.', 'TELEPHONE', '2020/9/7', 'CHANGE', 2),
('d0s83jfos', 'Jul S.', 'ZOOM', '2020/3/8', 'INITIAL', 0),
('dofs09sje', 'Ted B.', 'TELEPHONE', '2020/4/6', 'INITIAL', 0)
SELECT
hdr.Appointment_ID as hdr_Appointment_ID
, hdr.Student as hdr_Student
, hdr.App_Location as hdr_App_Location
, hdr.Creation_Date as hdr_Creation_Date
, hdr.App_Change_Indicator as hdr_App_Change_Indicator
, hdr.App_Change_Seq as hdr_App_Change_Seq
, det.*
FROM (SELECT * FROM @t WHERE App_Change_Seq = 0) hdr
LEFT JOIN (SELECT * FROM @t WHERE App_Change_Seq != 0) det
ON hdr.Appointment_ID = det.Appointment_ID
我在報告中添加了一個簡單的表格,以顯示來自資料集查詢的原始資料以供參考。

然后,我在報告中添加了一個新表,并按順序拖動了除此之外 的所有列Appointment_ID。
接下來,在主設計器下的行組面板中,我右鍵單擊“詳細資訊”組并將“添加組-父組”選為hdr_AppointmentID要分組的欄位并選擇添加組標題的選項

接下來,我只是hdr_*將欄位的每個副本選擇到新創建的行的每一列中。

最后,我右鍵單擊詳細資訊行的行標題,選擇“行可見性”

然后我將該行設定為最初隱藏,并將切換項設定為包含該hdr_appointment_ID欄位的文本框的名稱。

最終輸出最初看起來像這樣

如果我展開第三行,它會顯示這個......

不幸的是,如果您展開沒有詳細資訊的行,它仍然會展開,但會顯示一個空白行。可能有辦法解決這個問題,但這里是晚上 10:30,所以我不是最好的!:)
對于你的縮進,現在細節在不同的行上,你可以按照你喜歡的方式格式化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/476640.html
標籤:tsql 报告服务 ssrs-tablix
