SQL Server BI資料倉庫應用——公共自行車借還資料多維分析
一篇幾年前資料倉庫與商務智慧的課程大作業,主要涵蓋使用SQL Server BI進行資料倉庫的設計和裝載、多維分析。
另一作者:Katherine
分析工具:SQL Server BI 2008、Excel
關於資料倉庫的理論和SQL Server BI 的使用推薦慕課網 西南財經大學李瑾坤副教授的商務智慧。
原始資料:資料為浙江省溫州市鹿城區2011年11月1日到20日公共自行車借還資料記錄表,包括欄位如下:
欄位 | 示例資料 |
No. | 1 |
車號 | WZB000036 |
車號SN | 36 |
借出車站 | 區政府西 |
借出車站號 | 17 |
借車鎖樁號 | 1 |
借車時刻 | 2012/11/1 5:59:38 |
歸還車站 | 縣前頭 |
還車車站號 | 64 |
還車鎖樁號 | 20 |
還車時刻 | 2012/11/1 6:03:42 |
用車時間 | 4 |
用車方式 | 會員卡借車 |
卡型別 | 普通會員卡 |
借車卡SN | 324408 |
1. 分析目標
(1)每個站點在不同時間段的借出次數、還入次數;
(2)每個時間段人們的用車頻率,以小時、時段、天、月為單位;
(3)每輛車在一定時間段內的累計使用時長及總使用時長;
(4)每個樁在一定時間段內的累計使用頻次及總使用次數;
(5)每個客戶的用車偏好性:平均用車時間、高頻用車時間點等。
2. 多維分析模型設計
設定度量值為用車時間、借車次數和還車次數,其中用車時間直接使用原始資料集中的“用車時間”屬性,單位是分鐘;借車次數、還車次數應用多維分析模型“事實表計數”功能實現。
維度包括站點、借車時間、還車時間、借車卡、自行車這5個維度。
維度 | 維度層次 |
站點 | 站點編號、車樁編號 |
借車時間 | 借車時刻、借車小時、借車時段、借車日期、借車月份 |
換車時間 | 還車時刻、還車小時、還車時段、還車日期、還車月份 |
借車卡 | 卡型別、卡號 |
自行車 | 自行車編號 |
注:借車時段及還車時段的劃分如下:6~9時為上午,10~14時為中午,1~20時為下午,其餘為夜晚。
3. 資料倉庫設計
資料倉庫包括一個事實表、四個維度表。
事實表:
記錄編號僅作主鍵,不參與多維分析;自行車編號、車樁編號、借車卡號分別對應自行車、車樁、借車卡維度表;用車時間為一個度量值。
各維度表:
車樁號指的是某個站點的第幾個車樁,如15表示第15號車樁;車樁編號的構成是“站點編號+車樁號”,如“100第10號”表示第100號站點第10號車樁;站點編號對應站點維度表。
表關係圖:
4. 資料裝載
建立名稱為LoadBicycleDM的Integration Service專案,新建兩個連線管理器,Localhost.Bicycle和Localhost.BicycleDM,分別對應OLEDB源和OLE DB目標。在控制流面板中插入資料流任務如下:
裝載借車卡表:
圖片太小看不清,OLE DB源中的資料訪問模式為SQL命令:select distinct(借車卡SN),卡型別 from [Bicycle].[dbo].[Bicycle] order by 借車卡SN
裝載自行車表:
SQL命令:select distinct(車號SN),車號 from [Bicycle].[dbo].[Bicycle] order by 車號SN
裝載站點表:
SQL命令:select 借出車站號,借出車站,COUNT(distinct([借車鎖樁號])) as 車樁數 from [Bicycle].[dbo].[Bicycle] group by 借出車站號,借出車站
裝載車樁表:
OLE DB源:
OLE DB源1:
排序:
排序1:
合併:派生列:
聚合:
派生列1:資料轉換:裝載事實表:
OLE DB源:
派生列:
資料轉換:
執行資料裝載
5. 多維分析
建立名稱為BicycleAS的Analysis Service專案,新建資料來源為已建好的資料倉庫,名稱為BicycleDM.ds。
根據資料來源建立資料來源檢視,名稱為Bicycle.dsv,並做如下修改:
(1)將記錄編號的邏輯主鍵刪除,設定借車卡號、自行車編號、車樁編號、借車時刻、還車時刻為邏輯主鍵;
(2)在事實表中新建命名計算:借車小時、還車小時、借車時段、還車時段、借車日期、還車日期、借車月份、還車月份。程式碼如下:
借車小時:
convert(int,ltrim(substring(借車時刻,(charindex(':',借車時刻,5)-2),2)))
還車小時:convert(int,ltrim(substring(還車時刻,(charindex(':',還車時刻,5)-2),2)))
借車日期:substring(借車時刻,6,(charindex('/',借車時刻,6)-6)) + '.' + right('0'+ rtrim(substring(借車時刻,(charindex('/',借車時刻,6)+1),2)),2)
還車日期:substring(還車時刻,6,(charindex('/',還車時刻,6)-6)) + '.' + right('0'+ rtrim(substring(還車時刻,(charindex('/',還車時刻,6)+1),2)),2)
借車時段:case
when convert(int,ltrim(substring(借車時刻,(charindex(':',借車時刻,5)-2),2))) between 0 and 5 then '夜晚'
when convert(int,ltrim(substring(借車時刻,(charindex(':',借車時刻,5)-2),2))) between 6 and 9 then '上午'
when convert(int,ltrim(substring(借車時刻,(charindex(':',借車時刻,5)-2),2))) between 10 and 14 then '中午'
when convert(int,ltrim(substring(借車時刻,(charindex(':',借車時刻,5)-2),2))) between 15 and 20 then '下午'
when convert(int,ltrim(substring(借車時刻,(charindex(':',借車時刻,5)-2),2))) between 21 and 23 then '夜晚'
else '無'
end
還車時段:
case
when convert(int,ltrim(substring(還車時刻,(charindex(':',還車時刻,5)-2),2))) between 0 and 5 then '夜晚'
when convert(int,ltrim(substring(還車時刻,(charindex(':',還車時刻,5)-2),2))) between 6 and 9 then '上午'
when convert(int,ltrim(substring(還車時刻,(charindex(':',還車時刻,5)-2),2))) between 10 and 14 then '中午'
when convert(int,ltrim(substring(還車時刻,(charindex(':',還車時刻,5)-2),2))) between 15 and 20 then '下午'
when convert(int,ltrim(substring(還車時刻,(charindex(':',還車時刻,5)-2),2))) between 21 and 23 then '夜晚'
else '無'
end
借車月份:substring(借車時刻,6,(charindex('/',借車時刻,6)-6)) + '月'
還車月份:substring(還車時刻,6,(charindex('/',還車時刻,6)-6)) + '月'
構建多維資料來源檢視:
使用現有表建立多維資料集,名稱為BicycleDM.cube。度量值表選為事實表,度量值選擇用車時間和事實表計數,現有維度選擇自行車、車樁、借車卡。預覽圖如下:
使用現有表新建借車時間維度、還車時間維度。以建立借車時間維度為例,主表選擇事實表,鍵列選擇借車時刻,不選擇任何相關表,可用屬性勾選借車時刻、借車小時、借車時段、借車日期、借車月份,維度名稱設定為借車時間。還車時間使用相同方法建立,兩者的預覽圖如下:
各維度屬性通用設定如下:
AttributeHierarchyVisible | True |
OrderBy | Name |
站點編號NameColumn | 站點名稱 |
自行車編號NameColumn | 車牌號 |
其餘屬性NameColumn | 屬性自身 |
屬性之間關係型別 | 剛性 |
借車時間維度的層次結構和屬性關係如下:
還車時間維度的層次結構和屬性關係:
借車卡維度的層次結構和屬性關係:
車樁維度的層次結構和屬性關係:
自行車維度沒有特殊設定。
6. Excel 資料呈現
處理多維分析模型
在SQL Server中連線Analysis Service,使用Localhost伺服器,在資料庫目錄下發現存在名為BicycleAS的資料庫(如下圖),證明操作成功。
開啟EXCEL2016,匯入來自Analysis Service的資料,使用Localhost伺服器,選擇BicycleAS資料庫,資料顯示方式選擇資料透視表。
7. 結論
在11月1日到11月20日,各站點用車次數的資料透檢視和頻數分佈圖如下:
從圖中可以看出,“五馬美食林”“國光大廈”等6個站點用車次數遙遙領先,均在8000以上;“市二醫院”“數碼廣場”等55個站點用車次數在4000到8000之間,處於中等水平;“新城車站”“科技館”等119個站點用車次數在4000以下。假定在這20天中用車次數在8000以上的為高頻站點,4000到6000之間的為中頻站點,4000以下的為低頻站點,結合溫州市鹿城區公共自行車站點分佈圖,可的得到如下高中低頻站點分佈圖:
管理部門可根據各站點的分佈和用車頻次的相對大小,合理分配資源,提高公共自行車網路執行效率,如按實際情況增減站點的車樁個數,高頻站點配備較多的車樁,低頻站點配備較少的車樁。
下圖為各小時借車頻次分佈圖:
從圖中可以看出,按小時分佈的借車頻次存在兩個峰值,分別位於上午8-9時和下午17-18時,與人們上下班時間相符,交通部門可據此在這兩個時段內合理指揮交通,儘量避免自行車和機動車的行駛衝突。此外,晚上21時到次日6時借車次數接近於0,管理部門可利用這個時間段對公共自行車進行檢查、維修、更換、排程等工作。
從11月1日到11月20日,各量自行車用車時間統計圖如下:
從圖中可以看出,大部分自行車的累計使用時間在1000到3000分鐘之間。高於3000分鐘的車輛因為使用時間長,可能面臨提前報廢的風險,而低於1000分鐘的車輛可能是由於自身出現問題,導致騎行功能降低甚至無法騎行。管理部門可以據此識別出這些車輛,並只對這些車輛進行檢測和維修,從而有效降低運營成本。
計算每一趟單車出行的使用時長,統計得出的用車時長頻數分佈如上圖所示。從圖中可以看出,大部分單車出行的時長在10分鐘到30分鐘這個區間內,有少數人騎行超過2小時。共享單車行業主打綠色低碳,在提供設施的同時,配套地推出鼓勵使用單車出行的優惠政策,有利於企業提升軟實力。根據用車時長,企業經營者可以合理定價,鼓勵人們更多地使用單車出行,比如:對於騎行超過1小時的使用者,可以減免一定的使用費用,從而達到鼓勵人們使用自行車,推廣單車共享行業的目的。