【SSRS】在 Reporting Services 繪製甘特圖 (Gantt)--小技巧分享

【SSRS】在 Reporting Services 繪製甘特圖 (Gantt)--小技巧分享
有時候我在做項目規劃、流程控制或個人計畫常常會用到甘特圖,來協助我們了解開始時間與結束時間的依賴關係,而SSRS中內建並沒有甘特圖,今天剛好需要用到這個功能,就隨手紀錄並且與大家分享!
這邊我用一個小弟的一個比賽的時程計畫的假設資料來當本篇的資料來源吧!
首先,我們需要對資料做一些處理,需要知道他開始的時間以及持續的時間這兩個重要的資料欄位
並且按照時間做排序,讓我們的項目可以按照著時間跑

有時候我在做項目規劃、流程控制或個人計畫常常會用到甘特圖,來協助我們了解開始時間與結束時間的依賴關係,而SSRS中內建並沒有甘特圖,今天剛好需要用到這個功能,就隨手紀錄並且與大家分享!

這邊我用一個小弟的一個比賽的時程計畫的假設資料來當本篇的資料來源吧!

首先,我們需要對資料做一些處理,需要知道他開始的時間以及持續的時間這兩個重要的資料欄位

並且按照時間做排序,讓我們的項目可以按照著時間跑

((畢竟有時候輸入資料並不會按照著順序輸入))

USE Gantt
GO
--把資料全部抓出來後,利用Datediff計算這個項目需要幾天完成
--利用Day函數抓取開始的日期再減去1,目的是為了讓甘特圖可以更準確地表示
SELECT *,DATEDIFF(DAY,StartDate,EndDate)+1 [DAYS],DAY(StartDate)-1 [START]
FROM Gantt
ORDER BY StartDate

上述語法所擷取出來的資料如下

image

 

資料確認沒有錯誤後,我們接下一個步驟就是開啟一個報表專案

專案要開啟Reporting Services的方案,若沒有這個方案請下載SSDT-BI工具

image

 

專案開啟後,會立即跳出報表精靈,或是手動加入報表,產生資料來源與資料集

在設計查詢中,將剛剛寫好的 SQL 放進查詢中,當然您也可以把它寫成預存程序

image

 

在選取欄位時,我們只要將項目名稱,開始時間,結束時間放到詳細資料中,其他的資料要等到製作圖表的時候所使用的

image

 

剛產生好的報表,會像下圖一樣,這時候我們要在表手的地方先加入七個欄位來做為日期的顯示用

image

 

新增七個欄位後,將大小調整到您適中的大小,並在欄位名稱上填入日期區間(如果要更緊密的區間,上一步需要增加更多的欄位),並且將資料區塊的欄位合併為一欄

image

 

合併成為一欄後,必須要在這個區塊中先放置一個矩形,放置舉行的目的是為了防止報表變形(也可以不放)

完成後在這合併後的區塊中,加入資料橫條的圖表

image

 

並選擇資料橫條的最後一個

image

 

放置後,我們將資料橫條設定高度為 0.24英吋,矩形高度設定0.25英吋後畫面會變得比較一致

image

 

將資料欄位放入,這時候要依照順序:開始日期->持續天數,最後再加入一個運算式,來讓每一條資料橫條的最大值都是31(每個月最後一天)

=31-Fields!START.Value-Fields!DAYS.Value

image

 

最後一個步驟就是,將開始日期的欄位,與最後運算式欄位的色彩取消,變成無色彩

image

 

就可以完成SSRS的甘特圖了

image

 

繪製甘特圖其實非常的簡單,是不是呢?

 

範例下載

 


 

大家好我是饅頭,希望大家喜歡我的文章

如果有錯誤的地方請不吝指教 ^_^