使用 MDX 分析和管理数据
MDX(Multidimensional Expression,多维表达式)是一种强大的数据操纵和查询语言。
通过 MDX,您可以:
-
针对 Essbase 多维数据集中的数据和元数据进行查询和报告
-
将数据插入到 Essbase 多维数据集中
-
从 Essbase 多维数据集中导出数据
MDX 查询是单个 MDX 语句,只有一个结果集,应用于单个多维数据集。
MDX 报表是保存在多维数据集上下文中的单个 MDX 查询。您可以从 Smart View 以及 Essbase Web 界面访问 MDX 报表。
MDX 脚本是扩展名为 .mdx 的文件,您可以上载它,然后从作业或从 Smart View 运行。在 MDX 脚本中只应使用 MDX Insert 和 Export 语句。要分析网格数据,请使用 MDX 报表而非 MDX 脚本。
使用 MDX 报表分析数据
您可以在 Essbase Web 界面中使用 MDX 报表存储和呈现查询。创建报表所需的最低权限是“数据库管理者”。
使用“即席分析”选项卡定义布局并非始终是创建复杂报表的一种高效方式。如果您知道要查询的确切内容,则可以使用 MDX 创建一个查询来填充网格。
要了解有关 MDX 的更多信息,请参见 MDX 和 Writing MDX Queries 。
访问 MDX 报表
您如何使用 Essbase MDX 报表取决于您的多维数据集访问权限。
至少具有应用程序级“数据库访问”角色的用户可以呈现由其他人创建的已保存 MDX 报表。用户在报表中看到的数据取决于该用户的筛选器访问权限。
除了呈现已保存的报表外,具有“数据库访问”权限的用户还可以将结果集导出为各种格式:HTML、CSV、Excel 和 JSON。
数据库访问权限的用户还可以查看用来定义报表的 MDX 查询,方法是单击报表名称旁边的操作菜单并选择查看。
如果您至少具有“数据库管理者”角色,则可以像具有“数据库访问”权限的用户一样使用报表。另外,您还可以使用操作菜单编辑和删除报表。
如果您是服务管理员,则可以额外使用执行用户按钮来模拟其他用户并检查他们的数据访问权限。这在测试为各个用户分配的筛选器时很有用。
MDX 报表示例
本节中的 MDX 示例展示了您可以使用 MDX 报表来执行的一些特殊类型的分析,将 MDX 报表保存在 Essbase Web 界面的“分析”视图的“报表”选项卡上。
下面的示例可以用来处理 Sample Basic 多维数据集。
元数据报表
下面的示例仅返回元数据(成员名称,但没有数据):
SELECT
{[Product].Levels(1).Members}
ON ROWS,
{}
ON COLUMNS
返回网格:

属性报表
下面的示例列上使用属性维的成员:
SELECT
[Product].Children
ON ROWS,
[Ounces].Children
ON COLUMNS
WHERE {Sales}返回网格:

筛选报表
下面的示例使用切片器(WHERE 子句)将查询限制在 Cola 范围内。另外,Filter 函数将查询中的 0 级市场限制在利润为负的市场。
SELECT
{ Profit }
ON COLUMNS,
Filter( [Market].levels(0).members, Profit < 0)
ON ROWS
WHERE {Cola}
返回网格:

UDA 报表
下面的示例显示具有用户定义的属性 (user defined attribute, UDA) "Major Market" 的 Market 维成员的 Product 数据。切片器(WHERE 子句)将查询限制为仅包括 Sales 数据。
SELECT
[Product].Children
ON ROWS,
{Intersect(UDA([Market], "Major Market"), [Market].Children)}
ON COLUMNS
WHERE {Sales}
返回网格:

运行 MDX 脚本
编写、上载和运行 MDX 脚本
使用此工作流在文本编辑器中编写 MDX 脚本并将它们上载到 Essbase。
-
在文本编辑器中编写 MDX 脚本,然后以
.mdx作为扩展名将其保存。 -
在 Essbase Web 界面中,在文件下,将 MDX 脚本上载到应用程序或多维数据集目录。
-
从作业或 Smart View 中运行 MDX 脚本,使用 Essbase 功能区中的计算。
在脚本编辑器中编写 MDX 脚本并运行它
使用此工作流在多维数据集上的脚本编辑器中编写 MDX 脚本,然后从作业中运行它们。
-
在主页上,打开应用程序并打开数据库(多维数据集)。
-
依次单击脚本和 MDX 脚本。
-
单击创建,输入脚本的名称,然后单击确定。
-
编写 MDX 脚本。成员树和函数列表可以为您提供帮助。
-
验证并保存脚本,然后关闭脚本编辑器。
-
从作业中运行 MDX 脚本(请参阅运行 MDX ),或者如果使用的是 Smart View ,则使用 Essbase 功能区中的计算。
在多维数据集设计器中创建 MDX 脚本并运行它
使用此工作流可在应用程序工作簿中创建 MDX 脚本,然后从作业中运行这些脚本。
- 在应用程序工作簿中,创建 MDX 工作表。请参见 Work with MDX Worksheets in Cube Designer 。
- 在文件名字段中添加文件名。
- 在执行 MDX 字段中指出在创建多维数据集时是否执行 MDX。有效条目为是和否。
- 将 MDX 脚本添加在脚本行下面。
- 保存应用程序工作簿。
- 构建多维数据集。请参见 Create an Application and Cube in Cube Designer(在多维数据集设计器中创建应用程序和多维数据集)。
- 从作业中运行 MDX 脚本,或者如果使用的是 Smart View ,则使用 Essbase 功能区上的计算。
适用于 MDX 脚本的准则
使用 MDX 脚本执行“插入”或“导出”数据操作。对于 Essbase Web 界面中的网格分析,请使用 MDX 报表而不是 MDX 脚本。MDX 脚本可以根据需要包括运行时替代变量,并且可以从 Smart View 运行它们。
为了可以在 Smart View 中使用,包含运行时替代变量的 MDX 脚本必须在 SET RUNTIMESUBVARS 计算命令中使用 XML 语法,包括 <RTSV_HINT>。
要设置某个运行时替代变量,以使其仅计算 Smart View 中的可视数据切片,请将该运行时替代变量的值设置为 POV,并将数据类型设置为 member。
从 Essbase Web 界面中运行时,您的 MDX 脚本可以使用替代变量,但不能使用运行时替代变量。要在 MDX 脚本中使用运行时替代变量,必须从 Smart View 中使用 Essbase 功能区上的计算运行脚本。
MDX 脚本示例
下面是可在 Sample Basic 多维数据集上运行的 MDX 插入和导出脚本的示例,这些脚本可以从 Essbase Web 界面中的作业运行,也可以从 Calculate 操作 Smart View 运行。
MDX 插入
您可以保存此 .mdx 脚本并从 Jobs 或从 Smart View 中的计算对话框运行它。
INSERT "([Measures].[Payroll])" TO "([Measures].[Revised_Payroll])"
INTO [Sample].[Basic]
FROM (
SELECT
{[Measures].[Payroll]} ON COLUMNS,
{Crossjoin
(Crossjoin(Descendants([Year]),
Crossjoin(Descendants([Scenario]),
Descendants([Product]))),
Descendants([Market]))} ON ROWS
FROM [Sample].[Basic]
);上面的示例假设您以前向 Sample Basic 中添加了 Revised_Payroll 度量。
MDX 导出
您可以保存此 .mdx 脚本并从 Jobs 或从 Smart View 中的计算对话框运行它。
EXPORT INTO FILE "sample01" OVERWRITE
SELECT
{[Mar],[Apr]}
ON COLUMNS,
Crossjoin({[New York]},
Crossjoin({[Actual],[Budget]},
{[Opening Inventory],[Ending Inventory]}))
ON ROWS
FROM [Sample].[Basic]
WHERE ([100-10])运行脚本后,以下导出文件 sample01.txt 会保存在文件目录的多维数据集目录中:
Market,Scenario,Measures,Mar,Apr
New York,Actual,Opening Inventory,2041,2108
New York,Actual,Ending Inventory,2108,2250
New York,Budget,Opening Inventory,1980,2040
New York,Budget,Ending Inventory,2040,2170使用运行时替代变量的 MDX 导出
您可以保存此 .mdx 脚本并从 Smart View 中的计算对话框运行它。
SET RUNTIMESUBVARS
{
States = "Massachusetts"<RTSV_HINT><svLaunch>
<description>US States</description>
<type>member</type>
<allowMissing>false</allowMissing>
<dimension>Market</dimension>
<choice>multiple</choice>
</svLaunch></RTSV_HINT>;
};
EXPORT INTO FILE "sample002" OVERWRITE
SELECT
{[Mar],[Apr]}
ON COLUMNS,
Crossjoin({&States}, Crossjoin({[Actual],[Budget]},
{[Opening Inventory],[Ending Inventory]}))
ON ROWS
FROM [Sample].[Basic]
WHERE ([100-10])
运行脚本后,以下导出文件 sample002.txt 会保存在文件目录的多维数据集目录中:
Market,Scenario,Measures,Mar,Apr
Massachusetts,Actual,Opening Inventory,-54,-348
Massachusetts,Actual,Ending Inventory,-348,-663
Massachusetts,Budget,Opening Inventory,-160,-520
Massachusetts,Budget,Ending Inventory,-520,-910