在脚本中使用数组来增强故事

学习目标

  • 使用数组循环结果集。

结果集迭代

结果集的可视化

在脚本中使用结果集之前,必须确保了解结果集的元素。

  • 维标题 包含维名称。

  • 在 "列标题" 和" 行标题" 中,可以找到通常形成树的成员。一个轴上所有成员的组合称为 轴元组 。

  • 在行和列轴元组的交叉点处,可以在" 数据 "区域中找到数据单元格。

可以将行和列中的两个元组组合成具有相同效果的较大元组:选择单个数据单元格。诸如此类的"大元组"选择也存在一些更改,例如,如果维从行移动到列,或者轴被交换。

故事设计中使用"单个元组"方法来选择数据单元格。

分为四个表,对应于上述列表。左上方:维标题(紫色)。右上:列标题(橙色)左下:行标题(绿色)。右下方:数据(黄色)。

单个数据单元的参考

可以使用数据源的 getData({selection}) 函数引用单个数据单元格。要指定单元格,请将选择传递给函数。选择以通用 JSON 格式写入。

对于每个单元格,可以获取以下值之一:

  • 格式化值,例如 10,803,914.00

  • 原始值,例如 10803914

单个数据单元格的引用。示例在表中以红色突出显示,选择在其下方以红色突出显示。

读取选择集

如果必须使用多个单个数据单元格,则可以使用选择。例如,您可以将一组选择读取到数组中,然后生成所需的可视化,对数组循环。

读取选择集。突出显示示例的表,其下方显示详细信息。

从选择中读取单元格值

第 1 步:将所需的选择读入数组中。

第 2 步:循环数组并使用函数。例如,使用 getData({selection}) 函数对数据值进行可视化/反应。

上述代码块中的代码。突出显示“选择”(黄色)和“单元格”(绿色)。结果显示在图像底部。

以下是上述示例中使用的代码:

var selections = Table_1.getDataSource().getDataSelections({
[Alias.MeasureDimension]:"00O2SOEHXWHF3AU4LBEW8WZSX",
"0D_NW_BP__0D_NW_CNTRY":"US"
});
console.log(selections);

for (var x=0; x<selections.length; x++ ){
var cell = Table_1.getDataSource().getData(selections[x]);
console.log(cell.formattedValue);
}

从选定内容中读取维成员

可能仅使用值是不够的,因为您的用户想要了解值所属的元素。

您可以使用 getResultMember(dimension, {selection}) 函数执行此操作,如下图所示。

以下代码块中的代码。突出显示“选择”(黄色)和“单元格”(绿色)、“年”(蓝色)和“国家/地区”(蓝色)。结果显示在图像底部。

以下是上述示例中使用的代码:

var selections = Table_1.getDataSource().getDataSelections({
[Alias.MeasureDimension]:"00O2SOEHXWHF3AU4LBEW8WZSX",
"0D_NW_BP__0D_NW_CNTRY":"US"
});
console.log(selections);

for (var x=0; x<selections.length; x++ ){
var cell = Table_1.getDataSource().getData(selections[x]);
var year = Table_1.getDataSource().getResultMember("0CALYEAR", selections[x]);
var country = Table_1.getDataSource().getResultMember("0D_NW_BP__0D_NW_CNTRY", selections[x]);
console.log(country.description + " / " + year.description + " / " + cell.formattedValue);}

读取完整结果集

作为目前所显示内容的替代方法,您可以立即将结果集的整个(或部分)读入一个数组中。对于每个单元格,可以获得可在进一步脚本处理中引用的属性的完整列表。

例如:

var resultset = Table_1.getDataSource().getResultSet();
console.log(resultset);

读取完整结果集。表中的选择将突出显示,详细信息显示在图像底部。

要读取上述示例中的 值,您可以使用:

console.log(resultset[0][Alias.MeasureDimension].formattedValue);

getResultSet 的语法提供了三个可选参数。如果未指定任何参数,则检索整个可用结果集。

Table_1.getDataSource().getResultSet(selection?, offset?, limit?: integer)
  • selection 可用于限制返回的结果集,例如,限制为度量或维成员。

  • offset 在开始之前跳过偏移单元格以返回单元格。

  • limit 约束返回的单元格数。

脚本别名

脚本环境提供可用于引用不同标准对象的 Alias 对象。可用对象如下:

  • Alias.DefaultTheme

  • Alias.FlatHierarchy

  • Alias.MeasureDimension

  • Alias.NullMember

  • Alias.TotalsMember

要在脚本中引用结果成员,可以使用别名 Alias.TotalsMember

使用 Alias.TotalsMember 的代码示例。

要在脚本中引用度量维,可以使用别名 Alias.MeasureDimension

使用 Alias.MeasureDimension 的代码示例。

循环结果集

**业务场景:**您的团队请求向故事中添加领导董事会。他们希望直观地显示前三个国家/地区,并在图像下方的表格中显示其余国家/地区。他们希望所有可视化数据在数据更改时立即自动更新,例如,当用户选择一年时。

要使用的故事已经通过可视化对象微件和某些必需的脚本创建,因为在本练习中,你将只编写一个脚本函数来循环结果集并相应地更新所有文本字段。当值需要保持最新时,需要使用此功能。

本视频将引导你完成所需的最终故事和脚本。

视频:本节含 SAP 官方视频(视频 ID 1_rn3jts7n),需在 learning.sap.com 在线观看。

模拟步骤

以下练习模拟 SAP Analytics Cloud 中的高级模式,并带你使用数组来循环结果集,如演示视频所示。

**任务流:**在本练习中,您将:

  • 向页面和表添加脚本,以便在打开故事或表结果发生更改时更新文本微件

  • 制定脚本,实现领导董事会的可视化

  • 增强脚本功能以将表视图可视化

  • 在查看模式下测试故事

练习开始练习(SAP 官方交互式练习)