使用 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 报表,请执行以下操作:
  1. 以“数据库管理者”或更高级别角色的身份登录 Essbase Web 界面
  2. 导航到分析数据:在主页上,导航到应用程序,然后选择“操作”菜单 “应用程序”页上的“操作”菜单图标的图像,位于应用程序名称旁边。。选择 Databases(数据库) > Database Name > Analyze Data(分析数据)
  3. 在“分析”视图中,选择报表选项卡并单击创建
  4. 输入报表的名称和(可选)说明。

    注意:

    使用 Essbase on Autonomous AI Database 时,请勿在报表名称中包含百分比 (%) 字符。URL 中不支持百分比 (%) 字符。如果报表名称包含 %,则在分析数据视图中的报表之间切换时可能会出现错误。
  5. 在“查询”字段中,输入与当前多维数据集相关的 MDX 查询。例如:
    SELECT
      {([West].children)}
    ON COLUMNS,
      {([Diet].children)}
    ON ROWS
    

    由于“分析数据”的上下文是处于活动状态的多维数据集,因此我们建议您在 MDX 报表中省略可选的多维数据集规范(FROM 子句)。省略 FROM 子句会提高灵活性 — 如果复制或重命名了多维数据集,则该报表将在新的多维数据集中工作。

    MDX 报表支持替代变量,但不支持运行时替代变量。要使用运行时替代变量,请将 MDX 查询保存为一个脚本,并从 Smart View 使用 Essbase 功能区上的计算来运行该脚本。

  6. 单击验证以验证 MDX 语法,然后单击保存
  7. 从左侧的“报表”面板中,选择已保存的报表来呈现网格。

要了解有关 MDX 的更多信息,请参见 MDXWriting 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

返回网格:

报表输出中显示 Product 成员 100、200、300、400 和 Diet

属性报表

下面的示例列上使用属性维的成员:

SELECT 
 [Product].Children 
ON ROWS, 
 [Ounces].Children 
ON COLUMNS 
WHERE {Sales}

返回网格:

报表输出行上显示 Product 成员 100、200、300、400 和 Diet。列上显示属性成员:Ounces_32、Ounces_20、Ounces_16 和 Ounces_12

筛选报表

下面的示例使用切片器(WHERE 子句)将查询限制在 Cola 范围内。另外,Filter 函数将查询中的 0 级市场限制在利润为负的市场。

SELECT
  { Profit } 
ON COLUMNS,
  Filter( [Market].levels(0).members, Profit < 0) 
ON ROWS
WHERE {Cola}

返回网格:

报表输出行上显示 Market 成员 Oregon、Utah、Nevada、Oklahoma、Louisiana、Ohio、Wisconsin、Missouri 和 Iowa。列上显示 Profit。数据值均为负。

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}

返回网格:

报表输出行上显示 Product 成员 100、200、300、400 和 Diet。列上显示属于 Major Market 的 East 和 Central。

使用 MDX 插入和导出数据

除了可用于基于网格分析之外,MDX 还可用来复制和更新多维数据的子集。 Essbase

使用 MDX Insert 子句,您可以使用通过 MDX 定义的计算(非物理)成员将数据更新到多维数据集中。

使用 MDX Export 子句,您可以将查询结果保存并导出为数据子集,以便以后查看或导入。

您可以将 Insert MDX 和 Export MDX 语句保存为 MDX 脚本后运行。

要了解有关 MDX 插入和导出的更多信息,请参见 MDX 插入规范MDX 导出规范

运行 MDX 脚本

当您需要执行“插入”或“导出”数据操作时,可以使用 MDX 脚本。

您可以使用 MDX 报表来分析网格数据。请参阅使用 MDX 报表分析数据

要使用 MDX 脚本,请选择一个工作流:

编写、上载和运行 MDX 脚本

使用此工作流在文本编辑器中编写 MDX 脚本并将它们上载到 Essbase

  1. 在文本编辑器中编写 MDX 脚本,然后以 .mdx 作为扩展名将其保存。

  2. Essbase Web 界面中,在文件下,将 MDX 脚本上载到应用程序或多维数据集目录。

  3. 作业Smart View 中运行 MDX 脚本,使用 Essbase 功能区中的计算

在脚本编辑器中编写 MDX 脚本并运行它

使用此工作流在多维数据集上的脚本编辑器中编写 MDX 脚本,然后从作业中运行它们。

  1. 主页上,打开应用程序并打开数据库(多维数据集)。

  2. 依次单击脚本MDX 脚本

  3. 单击创建,输入脚本的名称,然后单击确定

  4. 编写 MDX 脚本。成员树和函数列表可以为您提供帮助。

  5. 验证并保存脚本,然后关闭脚本编辑器。

  6. 作业中运行 MDX 脚本(请参阅运行 MDX ),或者如果使用的是 Smart View ,则使用 Essbase 功能区中的计算

在多维数据集设计器中创建 MDX 脚本并运行它

使用此工作流可在应用程序工作簿中创建 MDX 脚本,然后从作业中运行这些脚本。

  1. 在应用程序工作簿中,创建 MDX 工作表。请参见 Work with MDX Worksheets in Cube Designer
  2. 文件名字段中添加文件名。
  3. 执行 MDX 字段中指出在创建多维数据集时是否执行 MDX。有效条目为
  4. 将 MDX 脚本添加在脚本行下面。
  5. 保存应用程序工作簿。
  6. 构建多维数据集。请参见 Create an Application and Cube in Cube Designer(在多维数据集设计器中创建应用程序和多维数据集)
  7. 作业中运行 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