概念:工作簿中的结构化引用
Worksheets 工作簿中的动态数据区域与 Excel 表格相似。在您向基于 Workday 高级自定义报告的工作簿添加动态数据区域时,Worksheets 会创建一个包含动态数据的表。默认情况下,Worksheets 使用英文单词“Report”加上一个递增的数字来指定动态数据表名称。示例:Report1。
在运行数据向导之时或之后,您可以选择为动态数据表创建自己的名称。Worksheets 仅支持为高级自定义报告提供表名称。如果您确实需要重命名动态数据表,请注意,表名称在工作簿中必须唯一,并且不能与任何已定义的名称或数据透视表同名。
运行数据向导后,您可以使用包含表名称和列名称的特殊语法,在公式中指定动态引用,而不必使用确切的单元格范围。表名称和列名称的这种组合就是结构化引用。在动态数据刷新时,Worksheets 会根据需要自动更新结构化引用的范围。
示例:您可以使用 =SUM(SalesCategory[Sales Amount]) 代替公式 =SUM(B1:B24),前者的“SalesCategory”是表名称,“Sales Amount”是列名称。“SalesCategory”表名称未在动态数据区域中显示;但是,如果您要显示动态数据面板,该面板就会显示在此处。

请注意以下事项:
- 对于在 Workday 23R1 之前创建的动态数据区域,若要添加表名称,您需要编辑这些区域。要执行此操作,您可以在动态数据面板中单击“编辑动态数据”,或单击面板中的任意“编辑”链接。
- 如果您后续更改了表名称或列名称,Worksheets 会更新工作簿内的现有结构化引用;但如果您的外部引用包含表名称或列名称,则 Worksheets 不会自动更新使用者工作簿。您需要手动更新引用。
- Worksheets 不支持以下做法:
- 使用结构化引用(表名称和列名称)定义条件格式规则。但我们支持为使用结构化引用填充的数据应用条件格式规则。
- 将最初在 Excel 中创建且包含结构化引用的文件上传到 Worksheets。
- 在 NOTIFYIF 公式中使用结构化引用
结构化引用语法自动填充
在公式栏或单元格中输入公式时,您无需记住结构化引用的语法。根据您在公式中输入的内容,或者您在动态数据表中选择的内容,Worksheets 会生成并显示相应的语法。
当您选择以下选项时,Worksheets 会生成动态数据结构化引用语法:
- 动态数据表中的单个单元格。
- 列标题选择一个或多个标题行。
- 动态数据列您可以选择标题和数据,也可以仅选择数据。
- 整个表格请选择包括标题在内的整个动态数据区域。
此外,如果您键入表格名称,然后在公式中键入左括号,系统会显示列名称和特殊标识符以供选择。
结构化引用语法指导标准
- 无需将表名称用引号引起来或括在方括号内。
- 无需将列名称用引号引起来,但需要用方括号将它们括起来。
- 使用井号 (#) 和下文所述的指示符来引用单元格范围的特殊子集。
- 在动态数据区域中包括公式列时,公式不需要包含表名称,但所有列名称前都要包括 @ 符号。
- 在提交公式时,请记得按无约束数组公式的键盘快捷键:Ctrl+Alt+Enter 或 Ctrl+Alt+Shift+Enter (Windows) 或 Command+Option+Enter (Mac)。
结构化引用的特殊标识符
说明符 | 示例 | 引用 |
|---|---|---|
#All | [#All] | 整个表,包括列标题和数据。 |
#Data | [#Data] | 仅引用数据行,不引用标题。 |
#Headers | [#Headers] | 仅引用标题行,不引用数据。 |
#This Row 或 @ | 仅引用与公式在同一行中的单元格。您不能将这些说明符与其他任何条目说明符组合使用。 此说明符必须用在动态数据公式列的每个标题之前。 示例:=SUM([@Current Salary],[@Proposed Bonus]) |
语法示例
基本示例:
=SUM(CompDetails[New Salary],CompDetails[Stock Amount])
注释:
- 该公式将两列的值相加,并在新列中显示结果。表名称为“CompDetails”。
- 列名称为“New Salary”和“Stock Amount”(括在方括号中)。
在下面的示例表中,我们向工作簿添加了动态数据,并将该表命名为“CompDetails”。下图显示了列名称。
结构化引用 | 所含内容 | 隐含的单元格范围 |
|---|---|---|
CompDetails 或 CompDetails[#Data] | 表中的所有数据,不含列标题。 | A2:G39 |
=CompDetails[[#All],[Proposed Bonus %]] | “Proposed Bonus %”列中的所有单元格 | F1:F39 |
=CompDetails[[#Headers],[Salary Increase %]] | “Salary Increase %”列的标题 | E1 |
=CompDetails[[#All],[Compensation Grade]:[Salary Increase %]] | “Compensation Grade”和“Salary Increase %”列之间(包含这两列)的所有单元格,含标题 | B1:E39 |
=CompDetails[[Compensation Grade]:[New Salary]] | “Compensation Grade”和“New Salary”列之间(包含这两列)的所有数据,不含标题 | B2:D39 |
=CompDetails[[#Headers],[Employee ID]:[New Salary]] | “Employee ID”和“New Salary”之间的列的标题 | A1:D1 |
=CompDetails[[#Headers],[#Data],[Compensation Grade]] | “Compensation Grade”列的标题和数据 | B1:B39 |
=CompDetails[[#This Row], [New Salary]] 或 =CompDetails[@New Salary] | 当前行与“New Salary”列相交处的单元格 | D5(如果当前行为第 5 行) |
结构化引用与定义的名称的比较
定义的名称与结构化引用存在一些相似之处,但两者也有显著差异。下表汇总了主要差异:
定义的名称 | 结构化引用 |
|---|---|
您可以为任何工作簿范围创建定义的名称。 | 结构化引用仅引用动态数据区域中的数据,且仅适用于高级自定义报告数据。 |
定义的名称可跨列和行指定固定单元格范围,您也可以使用“公式”字段,为公式、常量或一组不连续的单元格范围定义名称。 | 结构化引用组合使用表名称和列名称,以指定一个或多个动态数据列中的动态单元格范围。 |
如果定义的名称位于动态数据区域中,那么即使在刷新期间数据发生变化,单元格范围也保持不变。 | 引用所涉及的数据是动态数据,并在动态数据刷新后自动更新。 |
“定义的名称”面板(“右侧窗格”)会显示所有定义的名称,便于您查看和管理。 | 结构化引用并非独立实体,它们作为动态数据区域的一部分进行管理,因此不需要单独的面板。 |
您可以在 Slides 演示文稿中使用定义的名称。 | 结构化引用在 Slides 演示文稿中不可见或不可用。 |
如果您在幻灯片演示文稿的链接表中使用定义的名称,之后又更改了其名称或范围,则需要刷新演示文稿中的链接数据,才能看到更新后的数据。 如果您在幻灯片演示文稿的链接值中使用定义的名称值,然后编辑了定义的名称范围,使得该链接值不再包括在内,则您需要先移除然后再重新添加该链接值。 | 您可以更改表名称或列名称。如果您执行此操作,Worksheets 会更新工作簿内的现有结构化引用;但如果您的外部引用(使用者工作簿)包含之前的表名称或列名称,Worksheets 不会自动对其进行更新。有关外部引用的更多信息,请参见 概念:使用外部引用来引用其他工作簿中的数据。 |