假如你有一個購物類的網站,那么你如何給你的客戶來推薦產品呢?這個功能在很多電商類網站都有,那么,通過SQL Server Analysis Services的數據挖掘功能,你也可以輕松的來構建類似的功能。
此篇將介紹如何在SSAS存儲過程中封裝一段預測查詢,從而方便客戶端的調用。
在SQLServer數據引擎服務中,編寫存儲過程,我們可以通過SQL語句以及CLR的方式進行編寫。那么在分析服務下能否寫存儲過程呢?答案是可以的,只不過是只能通過CLR的方式來實現。以下記錄實現過程及要點。
首先,創建的項目類型為類庫項目,而且,無論你使用Visual Studio的什么版本,都要指定.net framework的版本為2.0。
引用關鍵dll文件,引用地址:C:\Program Files\Microsoft SQL Server\MSAS11.MSSQLSERVER\OLAP\bin\msmgdsrv.dll
留意下MSAS11,本文使用的環境是SQL Server 2012,如果是2008的話對應的是MSAS10。
代碼中需要添加的引用:
using Microsoft.AnalysisServices.AdomdServer;
然后在類里創建方法,需要注意的是在方法前需要加入如下聲明:
[SafeToPrepare(true)]
由於在此存儲過,程中的操作是接收參數后然后將其拼裝成DMX語句來返回相應的預測結果,所以項目引用了ADOMD.NET。關於ADOMD.NET可以參考前幾篇文章。
留意到在本文的示例代碼中,把訪問的接口文件和實現文件分開了,這主要是,在接口文件里,方法的聲明標記需要ADOMDServer的支持(留意前面提到的using),而啟動一個DMX查詢需要ADOMDClient的支持,它們下面都有ADOMDConnection,為了避免命名空間的沖突所以這里分開來寫:
留意下返回類型是DataTable。你也可以選擇返回其它類型,但是為了在下面能在Management Studio中的DMX查詢界面能夠直接看到結果,所以需要指定DataTable返回類型。
存儲過程的代碼創建完畢后,進行編譯,編譯完成后可以在bin目錄下看到生成的dll文件,這個文件就是要被發布到SSAS要用到的。比如這里用到的是SSASCLR.dll。
打開Management Studio,連接到分析服務,找到要用到的數據庫,這里使用AdventureWorks示例數據庫。
在Assembly下點擊右鍵,選擇New Assembly…
在File name旁點擊瀏覽,找到剛才編譯的dll文件。點擊OK,部署完成。
新建DMX查詢:
SSAS下CLR的存儲過程調用格式:程序集名稱+方法名
筆者不得不提一句,這是一個很特殊的地方,因為直接跳過了類名。
比如:CALL [SSASCLR].GetMiningResult()
以上如何開發和部署SSAS的CLR存儲過程介紹完畢。接下來還有一個問題,就是如何調試存儲過程呢?比如,在存儲過程被調用的時候,檢查下代碼中拼裝的DMX語句是否正確。
這里首先需要在Visual Studio里打開項目,然后在菜單欄的"調試"下找到"附加到進程"。
找到分析服務所對應的進程,名稱為msmdsrv.exe。要選中下面的"顯示所有用戶的進程"這里才可以看的到。
這樣,當我們在Management Studio里通過DMX調用這個存儲過程,並且在代碼里設置好斷點,那么就可以在對應位置看到調試信息。
總結:
此篇在前幾篇的基礎之下,把DMX查詢挖掘模型的過程封裝到了SSAS CLR存儲過程當中,並且演示了完整的方法以及需要注意到的地方。