计算所选元组

通过选择元组,您可以在活动 Smart View 网格中集中您的 Essbase 计算,使其范围限于您的块存储多维数据集中的特定数据切片。

以下各部分介绍了元组计算:

有关在计算脚本中使用 @GRIDTUPLES 的语法,请参见 FIX…ENDFIX

元组计算用例

通过选择元组,您可以在活动 Smart View 网格中集中您的 Essbase 计算,使其范围限于您的块存储多维数据集中的特定数据切片。

元组选择帮助您跨维优化非对称网格计算,避免过度计算。

Essbase 计算元组不同于 MDX 查询中使用的元组。计算性能和多维数据集大小主要是由多维数据集中的块数(假设块大小是特定的)驱动的。因此,计算元组是仅针对稀疏成员组合指定的。此外,为了便于编写计算脚本,在指定计算元组时可以包括单个稀疏维中的多个成员。例如,如果指定 ("New York", "California", "Actual", "Cola") 作为计算元组,则会计算以下单元格交叉点:

"New York"->"Actual"->"Cola"
"California"->"Actual"->"Cola"

考虑以下对称网格。它是对称的,因为每种产品在网格中都具有相同的市场和方案 (Actual)。

一个对称网格,其中包含 Cola 一月份在五个市场的实际值,以及 Diet Cola 在相同的五个市场的值

以下网格是非对称的,因为 Diet Cola 产品在网格中具有比 Cola 产品较少的市场。

一个非对称网格,其中包含 Cola 一月份在五个市场的实际值,但仅包含 Diet Cola 在两个市场的值

当 FIX 语句或 Smart View 网格视点 (point of view, POV) 中有多个维时,默认计算范围是计算 FIX 或网格中的成员的叉积(所有可能的组合)。也就是说,POV 驱动的计算(其中,产品和市场组合是从网格中获取的)将计算以下所有行-成员组合:

Cola->"New York"
Cola->"Massachusetts"
Cola->"Florida"
Cola->"Connecticut"
Cola->"New Hampshire"
"Diet Cola"->"New York"
"Diet Cola"->"Massachusetts"
"Diet Cola"->"Florida"
"Diet Cola"->"Connecticut"
"Diet Cola"->"New Hampshire"

这可能比您需要的计算活动更多。如果希望计算网格上显示的组合,则可以指定要计算哪些元组,并将计算限定于较小的切片。对元组进行计算还可以减少计算时间和多维数据集大小。

Cola->"New York"
Cola->"Massachusetts"
Cola->"Florida"
Cola->"Connecticut"
Cola->"New Hampshire"
"Diet Cola"->"New York"
"Diet Cola"->"Florida"

了解基于元组的计算

计算元组用来表示两个或更多稀疏维中成员的数据切片,以便在 Essbase 块存储计算中使用。

有效计算元组的示例:

  • ("Diet Cola", "New York")
  • ("Diet Cola", "Cola", Florida)
  • (Cola, "New Hampshire")

在编写 MDX 表达式时,您可能会注意到应用于 MDX 的以下元组限制:

  • MDX 元组中只能包括每个维中的单个成员
  • 一个 MDX 集内的所有元组都必须以相同的顺序表示相同的维

但是,当在计算脚本中选择元组时,为了方便起见,放宽了这些要求。您可以自由地编写元组表达式,并且元组可以描述成员列表,如以下元组所示:(@Children(East), Cola)

为视点计算选择元组

用来选择元组的一种简单方法是将它们作为 FIX 语句中的列表显式插入到计算脚本中。

请记住,FIX 语句的格式如下所示:

FIX (fixMbrs)
COMMANDS ;
ENDFIX

在下面的 FIX 语句中,在命令块开始之前指定了两个元组。各个元组括在花括号 { } 中,花括号用于对进行界定,集是元组的集合。

FIX({
  (@Children(East), Cola),
  ("New York", Florida, "Diet Cola")
  })
Sales (Sales = Sales + 10;);
ENDFIX

选择元组的另一种方法是根据上下文基于在运行计算时 Smart View 网格 POV 中存在的任何成员进行选择。可以通过在计算脚本中将 @GRIDTUPLES 函数提供为 FIX 的参数来执行此操作。

FIX ({@GRIDTUPLES(Product, Market)})
   Sales (Sales = Sales + 10;);
ENDFIX

如果您从 Smart View 针对下面的网格执行此计算脚本,则只会对所显示的产品和市场的组合进行计算。例如,不会计算 "Diet Cola"->Massachusetts,因为它未显式显示在网格上。请注意,虽然只有 Actual 显示在网格上,但是会对所有方案(在此示例多维数据集中为第三个稀疏维)进行计算。这是因为方案维不是计算脚本中的 GRIDTUPLES 语句的一部分。

一个非对称网格,其中包含 Cola 一月份在五个市场的实际值,但仅包含 Diet Cola 在两个市场的值

元组选择(无论是使用显式的元组列表还是使用 @GRIDTUPLES 函数执行的)仅在 FIX…ENDFIX 计算命令的上下文中适用。FIX 语句的语法已扩展,可用于启用元组选择:

FIX ([{ tupleList | @GRIDTUPLES(dimensionList) },] fixMbrs)
COMMANDS ;
ENDFIX
  • tupleList — 逗号分隔的元组集。
  • dimensionList — 至少使用其成员来自活动 Smart View 网格的两个稀疏维来定义计算区域。(在计算脚本中,只能使用稀疏维来定义元组。)
  • fixMbrs — 一个成员或成员列表。

有关减小计算范围的元组选择示例

使用 Smart View 网格和 Essbase 计算脚本 FIX 语句,可以根据网格视点 (point of view, POV) 计算所选的成员元组。或者,您可以在 FIX 语句中显式键入元组组合,以删除对特定 Smart View 网格的依赖性来定义计算范围。

计算所选的元组可帮助您在计算脚本和 Smart View 网格中有效地处理非对称区域。

请看以下示例:

  • 未选择元组 — 根据当前的 Smart View 网格视点 (point-of-view, POV) 以默认方式进行计算。计算不局限于任何特定的元组。
  • 选择已命名的稀疏维 — 对在计算脚本中指定的两个或更多稀疏维中的元组进行计算。计算将局限于 Smart View 网格中存在的元组维中的成员。
  • 选择上下文稀疏维 — 对在运行时选择的稀疏维中的元组进行计算。计算将局限于 Smart View 网格中存在的元组维中的成员。

要尝试使用示例,请在 Essbase Web 界面的文件区域中,从 gallery 文件夹的 Technical > Calc 部分中下载 CalcTuple_Tuple.xlsx 工作簿模板。有关说明,请参阅该工作簿中的 README 工作表。

未选择元组

下面的计算脚本计算 Smart View 网格中的 Product 和 Market 维成员的完整叉积,演示了未选择元组时将发生的默认 Essbase 块存储计算行为。

借助在 SET RUNTIMESUBVARS 块中定义的两个运行时替代变量 (runtime substitution variable, RTSV),计算被限定于从 Smart View 中运行计算时网格中存在的任何 Product 和 Market 视点。

SET RUNTIMESUBVARS
{
ProductGridMembers = POV
<RTSV_HINT><svLaunch>
<description>All Product's members on the grid</description>
<type>member</type>
<dimension>Product</dimension><choice>multiple</choice>
</svLaunch></RTSV_HINT>;
MarketGridMembers = POV
<RTSV_HINT><svLaunch>
<description>All Market's members on the grid</description>
<type>member</type> <dimension>Market</dimension><choice>multiple</choice>
</svLaunch></RTSV_HINT>;
};
FIX (
&ProductGridMembers, &MarketGridMembers
)
Marketing(
   Marketing = Marketing +1;
);
ENDFIX

选择已命名的稀疏维

Essbase 块存储计算脚本使用 @GRIDTUPLES 函数选择 Product 和 Market 维的元组,仅计算这两个维的元组,将其计算范围限制为从 Smart View 执行计算时 Smart View 网格中存在的那些成员。

FIX (
{@GRIDTUPLES(Product, Market)}
)
Marketing(
   Marketing = Marketing + 1;
);
ENDFIX

通过仅选定元组中指定的稀疏维,计算将包含比默认计算少很多的块数。不过,此计算脚本将计算 fix (Year, Scenario) 中未提到的维中的所有成员。

选择上下文稀疏维

Essbase 块存储计算脚本使用 @GRIDTUPLES 函数和一个运行时替代变量,根据 RTSV 提示中的稀疏维选择仅计算网格中的所选元组。

运行时替代变量 &DimSelections(在 SET RUNTIMESUBVARS 块中定义)将计算范围限制为仅限多维数据集中的稀疏维,不包括“方案”。FIX 语句中使用的 @GRIDTUPLES 函数调用此变量,限制将计算的交叉点的数量。

SET RUNTIMESUBVARS
            {
            DimSelections = "Version", "Site", "Entity", "Product", "Market"
            <RTSV_HINT><svLaunch>
            <description>List two or more sparse dimensions used for forming calculation tuples:</description>
            <type>string</type>
            </svLaunch></RTSV_HINT>;
            };
            FIX (
            {@GRIDTUPLES(&DimSelections)}
            )
            Marketing(
            Marketing = Marketing + 1;
            );
            ENDFIX
        

此计算包含比上一个示例更少的块数,这是因为,在本例中,元组定义扩展为超出 Product->Market 的更多稀疏维。

要尝试使用示例,请在 Essbase Web 界面的文件区域中,从 Gallery 文件夹的 Technical > Calc 部分中下载 CalcTuple_Tuple.xlsx 工作簿模板。有关说明,请参阅该工作簿中的 README 工作表。