1. 程式人生 > >SQL Server BI資料倉庫應用——公共自行車借還資料多維分析

SQL Server BI資料倉庫應用——公共自行車借還資料多維分析

一篇幾年前資料倉庫與商務智慧的課程大作業,主要涵蓋使用SQL Server BI進行資料倉庫的設計和裝載、多維分析。

另一作者:Katherine

分析工具:SQL Server BI 2008、Excel

關於資料倉庫的理論和SQL Server BI 的使用推薦慕課網 西南財經大學李瑾坤副教授的商務智慧

原始資料:資料為浙江省溫州市鹿城區2011年11月1日到20日公共自行車借還資料記錄表,包括欄位如下:

欄位 示例資料
No.1
車號WZB000036
車號SN36
借出車站區政府西
借出車站號17
借車鎖樁號1
借車時刻2012/11/1 5:59:38
歸還車站縣前頭
還車車站號64
還車鎖樁號20
還車時刻2012/11/1 6:03:42
用車時間4
用車方式 會員卡借車
卡型別 普通會員卡
借車卡SN324408

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小時的使用者,可以減免一定的使用費用,從而達到鼓勵人們使用自行車,推廣單車共享行業的目的。