使用 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. 导航到分析数据
    • Redwood 界面中,依次打开应用程序和数据库(多维数据集),然后单击分析数据
    • 经典 Web 界面中,展开应用程序,选择多维数据集,单击多维数据集名称右侧的“操作”菜单,然后选择分析数据
  3. 在“分析”视图中,选择报表选项卡并单击创建
  4. 输入报表的名称和(可选)说明。
  5. 在“查询”字段中,输入与当前多维数据集相关的 MDX 查询。例如:
    SELECT
      {([West].children)}
    ON COLUMNS,
      {([Diet].children)}
    ON ROWS
    

    查询中必须同时包含行轴规范和列轴规范。也就是说,查询语法必须同时包含 ON COLUMNS 和 ON ROWS 规范,即使针对某个轴只是指定了一个空集 {} 也是如此。

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

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

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

要了解有关 MDX 的更多信息,请参见 "MDX" 和 "Writing MDX Queries"。

访问 MDX 报表

您能如何使用报表取决于您的多维数据集访问权限。

至少具有应用程序级“数据库访问”角色的用户可以呈现由其他人创建的已保存 MDX 报表。用户在报表中看到的数据取决于该用户的筛选器访问权限。

除了呈现已保存的报表外,具有“数据库访问”权限的用户还可以将结果集导出为各种格式:HTML、CSV、Excel 和 JSON。

具有“数据库访问”权限的用户还可以查看用来定义报表的 MDX 查询,方法是单击报表名称旁边的操作菜单并选择查看

如果您至少具有“数据库管理者”角色,则可以像具有“数据库访问”权限的用户一样使用报表。另外,您还可以使用操作菜单编辑和删除报表。

如果您是服务管理员,则可以额外使用执行用户按钮来模拟其他用户并检查他们的数据访问权限。这在测试为各个用户分配的筛选器时很有用。

MDX 报表示例

本节中的 MDX 示例展示了您可以使用 MDX 报表来执行、但在“即席分析”视图中不容易实现的一些特殊类型的分析。

下面的示例可以用来处理 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 除了可以用于基于网格的分析,还可用来复制和更新多维数据的子集。

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

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

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

要了解有关 MDX 插入和导出的更多信息,请参见 "MDX Insert Specification" 和 "MDX Export Specification"。

运行 MDX 脚本

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

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

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

编写、上载和运行 MDX 脚本

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

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

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

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

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

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

  1. 在“应用程序”页上,依次打开应用程序和数据库(多维数据集)。

  2. 依次单击脚本MDX 脚本

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

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

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

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

  1. 在“应用程序”页上,展开某个应用程序和多维数据集。

  2. 从多维数据集的“操作”菜单中,单击检查

  3. 依次单击脚本MDX 脚本

  4. 单击 + 以打开脚本编辑器。

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

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

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

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

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

  1. 在应用程序工作簿中,创建 MDX 工作表。请参见在多维数据集设计器中处理 MDX 工作表
  2. 文件名字段中添加文件名。
  3. 执行 MDX 字段中指出在创建多维数据集时是否执行 MDX。有效条目为
  4. 将 MDX 脚本添加在脚本行下面。
  5. 保存应用程序工作簿。
  6. 构建多维数据集。请参见在多维数据集设计器中创建应用程序和多维数据集
  7. 作业中运行 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 功能区上的计算运行脚本。

使用替代变量

MDX 脚本示例

下面是您可以从“作业”或在 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