適用於: 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 的工作流程
- 載入程式庫。
- 建立一個連線到 Analysis Services 上的 MOLAP 多維度資料集的連線字串。
- 確認您是否具有對 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 的 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)