olapR(SQL Server 机器学习服务中的 R 包)
适用于: SQL Server 2016 (13.x) 及更高版本
olapR 是 Microsoft 提供的 R 包,用于针对 SQL Server Analysis Services OLAP 多维数据集进行 MDX 查询。 函数不支持所有 MDX 操作,但可以生成对维度进行详尽分析、向下钻取、汇总和透视的查询。 该包在 SQL Server 机器学习服务和 SQL Server 2016 R Services 中提供。
可以在连接到所有受支持 SQL Server 版本上的 Analysis Services OLAP 多维数据集时使用此包。 此时不支持连接到表格模型。
加载包
olapR 包未预加载到 R 会话中。 运行以下命令以加载包。
library(olapR)
包版本
在所有仅适用于 Windows 的产品和提供该包的下载中,当前版本为 1.0.0。
可用性和位置
以下产品以及 Azure 上的多个虚拟机映像中都提供了此包。 包位置也会相应地变化。
Products | 位置 |
---|---|
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 |
Data Science Virtual Machine (在 Azure 上) | C:\Program Files\Microsoft\R Client\R_SERVER\library |
SQL Server Virtual Machine(在 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 多维数据集的 MDX 查询。 olapR 并不提供所有 MDX 方案的 API,但它涵盖了大多数用例,包括 N 维中的切片、切块、向下钻取、汇总和透视方案。 对于无法使用 olapR API 构建的查询,还可以将直接 MDX 查询输入到 Analysis Services。
使用 olapR 的工作流
- 加载库。
- 在 Analysis Services 上创建指向 MOLAP 多维数据集的连接字符串。
- 验证你是否对多维数据集具有读取访问权限
- 对连接使用连接字符串。
- 使用 explore 函数验证连接。
- 通过提交 MDX 查询字符串或生成查询结构来设置查询。
- 执行查询并验证结果。
若要对 OLAP 多维数据集执行 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 数据库上使用的查询对象。 使用多维数据集、轴、列、行、页、章节、切片器向查询添加详细信息。 |
executeMD |
采用查询对象或 MDX 字符串,并返回多维数组形式的结果。 |
execute2D |
采用查询对象或 MDX 字符串,并返回二维数据帧形式的结果。 |
explore |
允许浏览多维数据集元数据。 |
MDX 概念
MDX 是多维 OLAP (MOLAP) 多维数据集的查询语言,这些多维数据集包含针对数据分析和浏览进行优化的结构中存储的已处理和已聚合的数据。 多维数据集用于商业和科学应用程序,以深入了解历史数据中的关系。 在内部,多维数据集由大多数可量化的数值数据组成,这些数据按日期和时间、地理位置或其他实体等维度进行切片。 典型查询可能会汇总给定区域及时间段的销售额,按产品类别、促销、销售渠道等进行切片。
可以使用各种操作访问多维数据集数据:
切片 - 通过选取一个维度的值,采用多维数据集的一个子集,从而产生小一个维度的多维数据集。
切块 - 通过指定多个维度上值的范围,创建子多维数据集。
向下钻取/向上钻取 - 从更一般的数据范围导航到更详细的数据范围,反之亦然。
汇总 - 总结某个维度上的数据。
透视 - 旋转多维数据集。
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 查询选择 Internet 销售计数和销售额并将它们放置在“列”轴上。 在“行”轴上,它放置了“产品系列”维度的所有可能值。 然后,使用 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)