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 上的數個虛擬機器映像提供了此套件。 套件位置也會隨之而異。

產品 位置
SQL Server 機器學習服務 (內含 R 整合) C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\library
SQL Server 2016 R 服務 C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\R_SERVICES\library
Microsoft 機器學習 Server (R Server) C:\Program Files\Microsoft\R_SERVER\library
Microsoft R Client C:\Program Files\Microsoft\R 客戶端\R_SERVER\library
資料科學虛擬機器 (在 Azure 上) C:\Program Files\Microsoft\R 客戶端\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 多維度資料集的連線字串。
  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 的 SQLServer2016SP2-KB4052908-x64-ENU.exe

功能清單

函式 描述
OlapConnection 建立連接字串以存取 Analysis Services 資料庫。
Query 建構要用於 Analysis Services 資料庫的 Query 物件。 使用多維度資料集、軸、資料行、資料列、頁面、章節及交叉分析篩選器,為查詢新增詳細資料。
executeMD 取得 Query 物件或 MDX 字串,並傳回結果作為多維陣列。
execute2D 取得 Query 物件或 MDX 字串,並傳回結果作為 2D 資料框架。
explore 允許探索 Cube 中繼資料。

MDX 概念

MDX 是多維度 OLAP (MOLAP) Cube 的查詢語言,其中包含已處理和已匯總的資料,其儲存在針對資料分析和探索最佳化的結構中。 資料立方體用於商業和科學應用中,以從歷史資料中找出各種關係的洞見。 在內部結構上,Cube 主要由可量化的數值資料組成,並依照日期與時間、地理位置或其他實體類別等維度進行切分。 一般查詢可能會匯總特定區域和時段的銷售量,並依產品類別、促銷、銷售通路等進行配量。

可透過各種操作存取 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]

使用 多維度立方體教學課程中的 AdventureWorks OLAP 立方體,此 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)