通过选择元组,您可以在活动 Smart View 网格中集中您的 Essbase 计算,使其范围限于您的块存储多维数据集中的特定数据切片。
以下各部分介绍了元组计算:
有关在计算脚本中使用 @GRIDTUPLES 的语法,请参见 FIX…ENDFIX。
通过选择元组,您可以在活动 Smart View 网格中集中您的 Essbase 计算,使其范围限于您的块存储多维数据集中的特定数据切片。
元组选择帮助您跨维优化非对称网格计算,避免过度计算。
Essbase 计算元组不同于 MDX 查询中使用的元组。计算性能和多维数据集大小主要是由多维数据集中的块数(假设块大小是特定的)驱动的。因此,计算元组是仅针对稀疏成员组合指定的。此外,为了便于编写计算脚本,在指定计算元组时可以包括单个稀疏维中的多个成员。例如,如果指定 ("New York", "California", "Actual", "Cola") 作为计算元组,则会计算以下单元格交叉点:
"New York"->"Actual"->"Cola" "California"->"Actual"->"Cola"
考虑以下对称网格。它是对称的,因为每种产品在网格中都具有相同的市场和方案 (Actual)。
以下网格是非对称的,因为 Diet Cola 产品在网格中具有比 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 的以下元组限制:
但是,当在计算脚本中选择元组时,为了方便起见,放宽了这些要求。您可以自由地编写元组表达式,并且元组可以描述成员列表,如以下元组所示:(@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 语句的一部分。
元组选择(无论是使用显式的元组列表还是使用 @GRIDTUPLES 函数执行的)仅在 FIX…ENDFIX 计算命令的上下文中适用。FIX 语句的语法已扩展,可用于启用元组选择:
FIX ([{ tupleList | @GRIDTUPLES(dimensionList) },] fixMbrs) COMMANDS ; ENDFIX
使用 Smart View 网格和 Essbase 计算脚本 FIX 语句,可以根据网格视点 (point of view, POV) 计算所选的成员元组。或者,您可以在 FIX 语句中显式键入元组组合,以删除对特定 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 工作表。