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 脚本。
主题:
您可以在 Essbase Web 界面中使用 MDX 报表存储和呈现查询。创建报表所需的最低权限是“数据库管理者”。
使用“即席分析”选项卡定义布局并非始终是创建复杂报表的一种高效方式。如果您知道要查询的确切内容,则可以使用 MDX 创建一个查询来填充网格。
要了解有关 MDX 的更多信息,请参见 "MDX" 和 "Writing MDX Queries"。
您能如何使用报表取决于您的多维数据集访问权限。
至少具有应用程序级“数据库访问”角色的用户可以呈现由其他人创建的已保存 MDX 报表。用户在报表中看到的数据取决于该用户的筛选器访问权限。
除了呈现已保存的报表外,具有“数据库访问”权限的用户还可以将结果集导出为各种格式:HTML、CSV、Excel 和 JSON。
具有“数据库访问”权限的用户还可以查看用来定义报表的 MDX 查询,方法是单击报表名称旁边的操作菜单并选择查看。
如果您至少具有“数据库管理者”角色,则可以像具有“数据库访问”权限的用户一样使用报表。另外,您还可以使用操作菜单编辑和删除报表。
如果您是服务管理员,则可以额外使用执行用户按钮来模拟其他用户并检查他们的数据访问权限。这在测试为各个用户分配的筛选器时很有用。
本节中的 MDX 示例展示了您可以使用 MDX 报表来执行、但在“即席分析”视图中不容易实现的一些特殊类型的分析。
下面的示例可以用来处理 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 Insert 子句,您可以使用通过 MDX 定义的计算(非物理)成员将数据更新到多维数据集中。
使用 MDX Export 子句,您可以将查询结果保存并导出为数据子集,以便以后查看或导入。
您可以将 Insert MDX 和 Export MDX 语句保存为 MDX 脚本后运行。
要了解有关 MDX 插入和导出的更多信息,请参见 "MDX Insert Specification" 和 "MDX Export Specification"。
使用此工作流在文本编辑器中编写 MDX 脚本并将它们上载到 Essbase。
在文本编辑器中编写 MDX 脚本,然后以 .mdx
作为扩展名将其保存。
在 Essbase Web 界面中,在文件下,将 MDX 脚本上载到应用程序或多维数据集目录。
从作业或 Smart View 中,使用 Essbase 功能区上的计算运行 MDX 脚本。
使用此工作流在多维数据集上的脚本编辑器中编写 MDX 脚本,然后从作业中运行它们。
在“应用程序”页上,依次打开应用程序和数据库(多维数据集)。
依次单击脚本和 MDX 脚本。
单击创建,输入脚本的名称,然后单击确定。
编写 MDX 脚本。成员树和函数列表可以为您提供帮助。
验证并保存脚本,然后关闭脚本编辑器。
从作业中运行 MDX 脚本(请参见运行 MDX);或者,如果使用的是 Smart View,则使用 Essbase 功能区上的计算。
在“应用程序”页上,展开某个应用程序和多维数据集。
从多维数据集的“操作”菜单中,单击检查。
依次单击脚本和 MDX 脚本。
单击 + 以打开脚本编辑器。
编写 MDX 脚本。成员树和函数列表可以为您提供帮助。
验证并保存脚本,然后关闭脚本编辑器。
从作业中运行 MDX 脚本(请参见运行 MDX);或者,如果使用的是 Smart View,则使用 Essbase 功能区上的计算。
使用此工作流可在应用程序工作簿中创建 MDX 脚本,然后从作业中运行这些脚本。
使用 MDX 脚本时,请使用以下准则。
使用 MDX 脚本执行“插入”或“导出”数据操作。
要进行网格分析,请使用 MDX 报表而非 MDX 脚本。
MDX 脚本还可以包括运行时替代变量。
为了可以在 Smart View 中使用,包含运行时替代变量的 MDX 脚本必须在 SET RUNTIMESUBVARS 计算命令中使用 XML 语法,包括 <RTSV_HINT>
。
要设置某个运行时替代变量,以使其仅计算 Smart View 中的可视数据切片,请将该运行时替代变量的值设置为 POV,并将数据类型设置为 member。
从 Essbase Web 界面中运行时,您的 MDX 脚本可以使用替代变量,但不能使用运行时替代变量。要在 MDX 脚本中使用运行时替代变量,必须从 Smart View 中使用 Essbase 功能区上的计算运行脚本。
下面是您可以从“作业”或在 Smart View 中对 Sample Basic 多维数据集运行的 MDX 脚本的示例。
MDX 插入
您可以保存此 .mdx
脚本,并从作业或从 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
脚本,并从作业或从 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