Reporting Services地理資訊報表

  • 6015
  • 0

Reporting Services地理資訊報表

在大家期盼已久,終於SSRS 2008 R2中正式納入了地理資訊報表的功能。相較於其他的商業智慧廠商,微軟不但不是領先推出地圖分析功能,而且很有可能是最後一個推出的(因為在我的記憶中,我實在想不出來有哪家商業智慧廠商分析工具中是沒有地圖功能的。這代表微軟在地理資訊商業智慧分析的漠視或是落後嗎?不,我不那麼認為,我認為這反而是微軟以更慎重的方式來推出地理資訊商業智慧分析。

雖然微軟在推出的時程上是比較落後的,但是解決方案卻是最完整的。其他的商業智慧廠商能夠提供的就只有地圖套色的功能而已,但是微軟除了單純的地圖套色之外,還提供了完整的配套措施:

1. 自SQL Server 2008起,SQL Server就正式納入了Geography以及Geometry兩種地理資訊資料型別,透過這兩種資料型別可以用來進行強大的地理資訊運算,讓地理商業智慧的效益可以發揮至最大。

2. 微軟是除了Google之外,唯一擁有地圖圖庫的廠商(還好,Google並不是商業智慧工具的廠商)。透過Bing Map的完整圖資,可以提供給使用者更豐富的分析資訊。

微軟目前的地理資訊報表功能是自Dundas Map for Reporting Services改良而成的,雖然加入了Bing Map的整合,但是仍舊有讓人遺憾之處。首先是受限於目前Reporting Services靜態報表的架構,目前Reporting Services地理資訊報表無法呈現如Silverlight Bing Map Viewer的動態絢麗效果,因此不能讓使用者進行平移或者是動態縮放地圖,此外,目前的報表也暫時不支援與Google Map進行整合,畢竟,兩者的API差距實在過大。

在SQL Server 2008之後,共計提供了Geometry以及 Geography資料類型。Geometry(平面幾何)資料型別主要是以符合開放式地理空間協會 (Open Geospatial Consortium,OGC)的SQL簡單特徵規格1.1.0版的規格紀錄地理資訊。至於Geography (球面測地)會儲存橢圓體(圓形地球)資料,例如 GPS 經緯度座標。這兩種資料型別有何差別呢?如果以台灣的大小來看,其實用哪一種病不會有太大的差異,因為以台灣的大小,其實把地球是作為平面或者是球面所得到的計算結果是不會差異太大的。但是如果是台北到紐約的距離,兩者計算個的結果就會差很多,Geometry會是直穿地心,而Geography則是沿地球表面。

其中「點」是最基本的地理資訊物件,它代表在空間中的一個位置,因此不管是客戶的所在位置、分店的所在位置都可以利用「點」的方式來記錄。而地圖報表就可以將這些點標註在地圖上。

位置的描述當然是透過經緯度來代表,以亞洲資採辦公室所在位置來看,是落在東經121.57475 北緯25.035975。若是要在SQL Server中建立一個可供分析計算的點物件,可以利用STGeomFromText函數(從文字轉換為平面幾何的地理資訊物件)。舉例來說,語法如下:

亞洲資採辦公室的所在位置:

geometry::STGeomFromText('POINT (121.57475 25.035975)',0)

image

至於「線」則是由兩點構成一直線,因此在地理資訊的意義上表示兩個點間的最短距離。當然,也可以透過很多段長短方向不一的線構成折線、鋸齒狀或者是曲線。

其實語法與之前的點很接近,只不過用逗點分隔構成線的每個點座標,以亞洲資採(121.57475 25.035975)到亞太會館(121.570265 25.038852)一直到台北101(121.564085 25.034128)來說,可以利用以下的SQL語法來構成這條路徑。

從亞洲資採到亞太會館再到台北101

geometry::STGeomFromText('LINESTRING (

121.57475 25.035975,

121.570265 25.038852,

121.564085 25.034128)', 0)

切換到空間結果分頁,可以看到在平面投影畫出這條路徑。

image

「多邊形」則是用來呈現在空間中不規則的任意色塊,包括了行政區、業務責任區都是可以透過多邊形的方式來呈現。在座標的表示上,多邊形本身是一個封閉的曲線所構成,因此它必須至少要有4個點,而且第一個點必須與最後一個點相同。

以下是假設某個公司在信義區的信義分店的業務責任區,就可以利用多個點的方式來構成責任區多邊形。當然,我們目前的範例點並沒有很多,因此這個責任區看起來會比較有稜有角,當點的數量越多,那麼這個多邊形就會看起來更平滑。

信義分店業務責任區:

geometry::STPolyFromText('POLYGON ((

121.559953 25.033174,

121.564666 25.040993,

121.576933 25.040639,

121.57659 25.039295,

121.576944 25.038761,

121.577042 25.03849,

121.577079 25.037894,

121.577982 25.036067,

121.5747 25.033588,

121.572714 25.032729,

121.559953 25.033174

))',0)

查詢的結果如下,空間結果也會繪製出這個空間中的多邊形。

image

有了這些空間物件後,就可以整合至Reporting Services的報表中了,詳細作法下次再介紹。

image

 

clip_image001

clip_image002
clip_image003

clip_image004

clip_image005

 

Allan Yiin

CTO, AsiaMiner