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 的工作流程

  1. 載入程式庫。
  2. 建立指向 Analysis Services 上 MOLAP Cube 的連接字串。
  3. 驗證您在 Cube 上是否具有讀取存取權
  4. 連線時使用連接字串。
  5. 使用探索函式驗證連線。
  6. 藉由提交 MDX 查詢字串或建置查詢結構來設定查詢。
  7. 執行查詢並驗證結果。

若要在 OLAP Cube 上執行 MDX 查詢,您必須首先建立連接字串 (olapCnn),然後使用函式 OlapConnection(connectionString) 進行驗證。 連接字串必須具有資料來源 (例如 localhost) 和提供者 (MSOLAP)。

在建立連線之後,您可以傳入完整定義的 MDX 查詢,或可以使用 Query() 物件建構查詢,同時使用 cube()、axis()、columns()、slicers() 等來設定查詢詳細資料。

最後,將 olapCnn 和查詢傳遞至 executeMDexecute2D,以取回多維陣列或資料框架。

重要

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)

另請參閱

如何使用 olapR 建立 MDX 查詢