olapR (SQL Server 機器學習服務中的 R 套件)
適用於: SQL Server 2016 (13.x) 和更新版本
olapR 為 Microsoft 的 R 套件,用於針對 SQL Server Analysis Services OLAP Cube 進行 MDX 查詢。 函式不支援所有 MDX 作業,但是您可以建置在維度上進行配量、切割、向下讚研、彙總和樞紐的查詢。 該套件包含在 SQL Server 機器學習服務與 SQL Server 2016 R Services 中。
您可以使用此套件連線到所有支援 SQL Server 版本上的 Analysis Services OLAP Cube。 目前不支援連線到表格式模型。
載入套件
olapR 套件未預先載入 R 工作階段中。 請執行下列命令以載入套件。
library(olapR)
套件版本
在所有僅限 Windows 產品,以及提供該套件的下載中,目前版本為 1.0.0。
可用性和位置
下列產品以及 Azure 上的數個虛擬機器映像提供了此套件。 套件位置會隨之改變。
Products | Location |
---|---|
SQL Server 機器學習服務 (內含 R 整合) | C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\library |
SQL Server 2016 R Services | C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\R_SERVICES\library |
Microsoft Machine Learning Server (R Server) | C:\Program Files\Microsoft\R_SERVER\library |
Microsoft R Client | C:\Program Files\Microsoft\R Client\R_SERVER\library |
資料科學虛擬機器 (在 Azure 上) | C:\Program Files\Microsoft\R Client\R_SERVER\library |
SQL Server 虛擬機器 (在 Azure 上) 1 | C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\library |
1 R 整合在 SQL Server 中是選擇性項目。 當您在 VM 組態期間新增機器學習或 R 功能時,即會安裝 olapR 套件。
如何使用 olapR
olapR 程式庫提供簡單的 R 樣式 API,用於針對 Analysis Services Cube 產生和驗證 MDX 查詢。 olapR 不會為所有 MDX 案例提供 API,但會涵蓋大部分的使用案例,包括 N 維度中的配量、切割、向下切入、匯總和樞紐案例。 您也可以針對無法使用 olapR API 建構的查詢,將直接 MDX 查詢輸入至 Analysis Services。
使用 olapR 的工作流程
- 載入程式庫。
- 建立指向 Analysis Services 上 MOLAP Cube 的連接字串。
- 驗證您在 Cube 上是否具有讀取存取權
- 連線時使用連接字串。
- 使用探索函式驗證連線。
- 藉由提交 MDX 查詢字串或建置查詢結構來設定查詢。
- 執行查詢並驗證結果。
若要在 OLAP Cube 上執行 MDX 查詢,您必須首先建立連接字串 (olapCnn
),然後使用函式 OlapConnection(connectionString)
進行驗證。 連接字串必須具有資料來源 (例如 localhost) 和提供者 (MSOLAP)。
在建立連線之後,您可以傳入完整定義的 MDX 查詢,或可以使用 Query()
物件建構查詢,同時使用 cube()、axis()、columns()、slicers() 等來設定查詢詳細資料。
最後,將 olapCnn
和查詢傳遞至 executeMD
或 execute2D
,以取回多維陣列或資料框架。
重要
olapR 需要 Analysis Services OLE DB 提供者。 如果您尚未在電腦上安裝 SQL Server Analysis Services,請從 Microsoft 下載提供者:用於 Analysis Services 連線的資料提供者
您應該針對 SQL Server 2016 安裝的確切版本在這裡。
函式清單
函式 | 描述 |
---|---|
OlapConnection |
建立連接字串以存取 Analysis Services 資料庫。 |
Query |
建構要用於 Analysis Services 資料庫的 Query 物件。 使用 Cube、軸、資料行、資料列、分頁、章節、交叉分析篩選器,將詳細資料新增至查詢。 |
executeMD |
取得 Query 物件或 MDX 字串,並傳回結果作為多維陣列。 |
execute2D |
取得 Query 物件或 MDX 字串,並傳回結果作為 2D 資料框架。 |
explore |
允許探索 Cube 中繼資料。 |
MDX 概念
MDX 是多維度 OLAP (MOLAP) Cube 的查詢語言,其中包含已處理和已匯總的資料,其儲存在針對資料分析和探索最佳化的結構中。 Cube 用於商務和科學應用程式,以繪製有關歷程資料中關聯性的深入解析。 在內部,Cube 是由大部分可量化的數值資料所組成,其會沿著日期和時間、地理位置或其他實體等維度進行配量。 一般查詢可能會匯總特定區域和時段的銷售量,並依產品類別、促銷、銷售通路等進行配量。
您可以使用各種作業存取 Cube 資料:
配量 - 藉由針對一個維度挑選一個值來取得 Cube 子集,因而產生比一個維度還要小的 Cube。
切割 - 藉由在多個維度上指定值範圍來建立 Subcube。
向下切入/向上切入 - 從更一般的資料範圍瀏覽至更詳細的資料範圍,反之亦然。
彙總 - 摘要維度上的資料。
樞紐 - 旋轉 Cube。
MDX 查詢類似於 SQL 查詢,但由於 OLAP 資料庫的彈性,最多可以包含 128 個查詢軸。 前四個軸為方便起見命名為:資料行、資料列、分頁和章節。 只使用兩個 (資料列和資料行) 也很常見,如下列範例所示:
SELECT {[Measures].[Internet Sales Count], [Measures].[Internet Sales-Sales Amount]} ON COLUMNS,
{[Product].[Product Line].[Product Line].MEMBERS} ON ROWS
FROM [Analysis Services Tutorial]
WHERE [Sales Territory].[Sales Territory Country].[Australia]
使用 多維度 Cube 教學課程中的 AdventureWorks OLAP Cube,此 MDX 查詢會選取網際網路銷售計數和銷售金額,並將其放在 [資料行] 軸上。 在 [資料列] 軸上,其會放置「產品線」維度的所有可能值。 然後,使用 WHERE 子句 (這是 MDX 查詢中的交叉分析篩選器軸),它會篩選查詢,只有來自澳洲的銷售量才重要。 若沒有交叉分析篩選器軸,我們將匯總並摘要來自所有國家/地區的銷售量。
olapR 範例
# load the library
library(olapR)
# Connect to a local SSAS default instance and the Analysis Services Tutorial database.
# For named instances, use server-name\\instancename, escaping the instance name delimiter.
# For databases containing multiple cubes, use the cube= parameter to specify which one to use.
cnnstr <- "Data Source=localhost; Provider=MSOLAP; initial catalog=Analysis Services Tutorial"
olapCnn <- OlapConnection(cnnstr)
# Approach 1 - build the mdx query in R
qry <- Query()
cube(qry) <- "[Analysis Services Tutorial]"
columns(qry) <- c("[Measures].[Internet Sales Count]", "[Measures].[Internet Sales-Sales Amount]")
rows(qry) <- c("[Product].[Product Line].[Product Line].MEMBERS")
slicers(qry) <- c("[Sales Territory].[Sales Territory Country].[Australia]")
result1 <- executeMD(olapCnn, qry)
# Approach 2 - Submit a fully formed MDX query
mdx <- "SELECT {[Measures].[Internet Sales Count], [Measures].[Internet Sales-Sales Amount]} ON AXIS(0), {[Product].[Product Line].[Product Line].MEMBERS} ON AXIS(1) FROM [Analysis Services Tutorial] WHERE [Sales Territory].[Sales Territory Country].[Australia]"
result2 <- execute2D(olapCnn, mdx)