使用 GROUPBY 数据源对记录进行分组和聚合计算
在配置电子报告 (ER) 模型映射或格式时,您可以添加GroupBy 类型的必需数据源。
在设计时,GroupBy 数据源被配置为识别以下元素:
在运行时,配置的 GroupBy 数据源将分组字段中具有相同值的记录分组,然后返回记录列表。 每个记录表示一个组。 对于每个组,数据源将公开初始记录分组依据的字段值、计算的聚合函数的值以及属于该组的基础数据源的记录列表。
聚合函数
在运行时,将对每组记录执行每个聚合计算。 此计算通过使用在 GroupBy 类型的可编辑数据源中选择用于分组的数据源记录中的单个字段或表达式的值来完成。 当前支持以下聚合函数:
- AVG – 此函数返回组中值的平均值。 只能用于数字字段。
- COUNT – 此函数返回组中找到的项目数。
- Min – 此函数返回组中值中的最小值。
- Max – 此函数返回组中值中的最大值。
- SUM – 此函数返回组中所有值的总和。 只能用于数字字段。
执行位置
当您编辑 GroupBy 数据源并指定包含必须分组的记录的基础数据源时,系统会自动检测最有效的位置来执行该 GroupBy 数据源。 如果基础数据源可查询(即是否可以在数据库级别运行),应用程序数据库也将被指定为可编辑 GroupBy 数据源的执行位置。 否则,应用程序服务器内存将被指定为执行位置。
您可以通过选择适用于配置的数据源的位置手动更改自动检测到的执行位置。 如果所选执行位置不适用,将会在设计时间引发验证错误。
提示
我们建议您使用数据库位置对公开大量记录的数据源进行分组。
内存消耗
默认情况下,如果 GroupBy 数据源在内存中运行,应用程序服务器内存将用于将属于每个已发现组的基础数据源的记录存储为单个组的记录。 为帮助减少内存消耗,如果 GroupBy 数据源被配置为仅计算聚合函数并且在运行时不使用组的记录,您可以禁止记录存储。 要以这种方式减少内存消耗,请在功能管理工作区启用当记录分组仅用于计算聚合时,降低电子报告中的内存使用量功能。
备选方案
相似的聚合可以使用不同类型的数据源或 ER 内置函数计算。
若要了解有关此功能的详细信息,请完成以下示例。
示例:使用 GROUPBY 数据源进行聚合计算和记录分组
此示例显示系统管理员或电子报告功能顾问角色的用户如何配置具有 GROUPBY 数据源的 ER 模型映射,该数据源用于计算聚合函数和分组记录。 生成内部统计申报时,此模型映射用于打印控制报表。 该报表可让您查看报告的内部统计交易记录。
在 Microsoft Dynamics 365 Finance 中,本示例中的过程可以在 DEMF 公司完成。
准备示例数据
确保您在内部统计页面上有用于报告的内部统计交易。 您必须有不同运输代码的交易记录,因为在此示例中您将按传输字段对交易记录进行分组。
配置 ER 框架
按照配置电子报告框架中的步骤设置最低限度的电子报告参数集。 在开始使用 ER 框架设计 ER 模型映射之前,您必须完成此设置。
导入标准电子报告格式配置
按照导入标准电子报告格式配置中的步骤将标准电子报告配置添加到您当前的 Dynamics 365 Finance 实例。 从存储库导入内部统计模型配置的版本 1。
创建自定义数据模型配置
按照添加自定义数据模型配置中的步骤,手动添加一个新的从导入的内部统计模型配置派生的内部统计模型(Litware) ER 数据模型配置。
配置自定义数据模型组件
按照以下步骤对派生的内部统计模型(Litware) 数据模型进行必需的更改,以可以使用它来公开具有所需详细信息的传输代码。
转到组织管理>电子申报>配置。
在配置页上的配置树中,选择内部统计模型(Litware)。
选择设计器。
在数据模型设计器页面的模型树中,选择内部统计。
选择新建为所选内部统计节点添加新的嵌套节点。 在用于添加数据模型节点的下拉对话框中,按照下列步骤操作:
- 在名称字段中,输入 Transport。
- 在物料类型字段中,选择记录列表。
- 选择添加添加新节点。
选择新建为您刚才添加的传输节点添加新的嵌套节点。 在用于添加数据模型节点的下拉对话框中,按照下列步骤操作:
- 在名称字段中,输入 Code。
- 在物料类型字段中,选择字符串。
- 选择添加添加新节点。
选择新建为传输节点添加另一个新的嵌套节点。 在用于添加数据模型节点的下拉对话框中,按照下列步骤操作:
- 在名称字段中,输入 TotalInvoicedAmount。
- 在物料类型字段中,选择实际。
- 选择添加添加新节点。
选择新建为传输节点添加另一个新的嵌套节点。 在用于添加数据模型节点的下拉对话框中,按照下列步骤操作:
- 在名称字段中,输入 NumberOfTransactions。
- 在物料类型字段中,选择整数。
- 选择添加添加新节点。
选择新建为传输节点添加另一个新的嵌套节点。 在用于添加数据模型节点的下拉对话框中,按照下列步骤操作:
- 在名称字段中,输入 Transaction。
- 在物料类型字段中,选择记录列表。
- 选择添加添加新节点。
对于您刚才添加的 Transaction 节点,在节点快速选项卡上,选择切换项引用。
在切换项引用对话框中,在数据模型树中选择 CommodityRecord。 然后选择确定。
完成自定义数据模型的设计
按照完成数据模型的设计中的步骤完成派生的内部统计模型(Litware) 数据模型的设计。
创建新模型映射配置
按照创建新模型映射配置中的步骤为派生的内部统计模型 (Litware) 配置手动添加新的内部统计示例映射 ER 模型映射配置。
添加新模型映射组件
- 转到组织管理>电子申报>配置。
- 在配置页上的配置树中,展开内部统计模型配置。
- 选择内部统计示例映射配置。
- 选择设计器来打开映射列表。
- 选择删除将现有映射组件删除。
- 选择新建添加新的映射组件。
- 在定义字段中,选择内部统计。
- 在名称字段中输入内部统计映射。
- 选择设计器配置新映射。
设计添加的模型映射组件
添加数据源以访问应用程序表
配置数据源以访问包含内部统计交易记录详细信息的应用程序表。
- 在模型映射设计器页的数据源类型窗格中,选择 Dynamics 365 for Operations\表记录。
- 在数据源窗格中,选择添加根添加将用于访问内部统计表的新数据源。 内部统计表中的每个记录代表一个内部统计交易记录。
- 在数据源属性对话框中,在名称字段中输入 Transaction。
- 在表字段中,输入内部统计。
- 选择确定添加新数据源。
添加数据源以对内部统计交易记录进行分组
配置 GroupBy 数据源以对内部统计交易记录进行分组并计算聚合函数。
在模型映射设计器页的数据源类型窗格中,选择函数\分组依据。
在数据源窗格中,选择添加根添加将用于对内部统计交易记录进行分组并计算聚合函数的新数据源。
在数据源属性对话框中,在名称字段中输入 TransportRecord。
选择编辑分组依据配置分组条件。
在编辑“分组依据”参数页上,在右侧窗格中的数据源列表中,选择交易记录数据源并将其展开。
选择将字段添加到 > 分组项目指示选择 Transaction 数据源作为配置的 GroupBy 数据源的基础数据源。 Transaction 数据源的记录将被分组,该数据源的字段值将用于聚合函数的计算。
选择 Transaction\Transport 字段,然后选择将字段添加到 > 已分组字段,指示基础数据源的传输字段被选为配置的 GroupBy 数据源的分组条件。 换言之,Transaction 数据源的记录将根据传输字段的值进行分组。 配置的 GroupBy 数据源的每个记录将表示已在基础数据源的记录中找到的一个传输代码。
选择 Transaction\AmountMST 字段,然后按照以下步骤操作:
- 选择将字段添加到 > 聚合字段指示将为此字段计算聚合函数。
- 在聚合窗格中,在已为所选 Transaction\AmountMST 字段添加的记录中,在方法字段中,选择 Sum 函数。
- 在名称可选字段中,输入 TotalInvoicedAmount。
这些设置指定,对于每个传输组,将计算 Transaction\AmountMST 字段的总金额。
选择 Transaction\RecId 字段,然后按照以下步骤操作:
- 选择将字段添加到 > 聚合字段指示将为此字段计算聚合函数。
- 在聚合窗格中,在已为所选 Transaction\RecId 字段添加的记录中,在方法字段中,选择 Count 函数。
- 在名称可选字段中,输入 NumberOfTransactions。
这些设置指定,对于每个传输组,将计算组中交易记录的数量。
选择保存。
查看可编辑数据源的执行参数。 请注意,自动检测已在执行位置字段中自动选择,执行位置字段包含值 SQL。 这些设置指定选定的 Transaction 基础数据源当前是可查询的,您可以在数据库级别运行可编辑的 GroupBy 数据源。
打开执行位置字段的查找可查看可用值列表。 请注意,您可以选择查询或在内存中来强制此 GroupBy 数据源在数据库级别或应用程序服务器内存中运行。
选择保存,然后关闭编辑“分组依据”参数页面。
选择确定完成 GroupBy 数据源的设置。
将 GroupBy 数据源与数据模型字段绑定
将配置的数据源与数据模型的字段绑定,来指定在运行时如何使用应用程序数据填充数据模型。
在模型映射设计器页的数据模型窗格中,展开传输节点。
在数据源窗格中,展开 TransportRecord 数据源。
添加绑定以公开已发现传输组的列表:
- 在数据模型窗格中,选择传输项。
- 在数据源窗格中,选择 TransportRecord 数据源。
- 选择绑定。
添加绑定以公开每个发现的传输组的传输代码:
- 选择 Transport.Code 数据模型项。
- 选择 TransportRecord.grouped.TransportMode 已分组字段。
- 选择绑定。
添加绑定以公开每个已发现运输组的已计算聚合函数的值:
- 选择 Transport.NumberOfTransactions 数据模型项。
- 选择 TransportRecord.aggregated.NumberOfTransactions 已聚合字段。
- 选择绑定。
- 选择 Transport.TotalInvoicedAmount 数据模型项。
- 选择 TransportRecord.aggregated.TotalInvoicedAmount 已聚合字段。
- 选择绑定。
添加绑定以公开属于每个已发现传输组的交易记录:
- 选择 Transport.Transaction 数据模型项。
- 选择 TransportRecord.lines 字段。
- 选择绑定。
您可以继续为 Transport.Transaction 数据模型项和 TransportRecord.lines 数据源字段的嵌套项配置绑定,以在运行时公开属于每个已发现传输组的内部统计交易记录的详细信息。
调试添加的模型映射组件
使用 ER 数据源调试器测试配置的模型映射。
在模型映射设计器页面上,选择开始调试。
在调试数据源页面,在左侧窗格中,选择 TransportRecord 数据源,然后选择读取所有记录。
展开 TransportRecord 数据源,然后按照以下步骤操作:
- 选择 TransportRecord.grouped.TransportMode 数据源。
- 选择获取值。
- 选择 TransportRecord.grouped.NumberOfTransactions 数据源。
- 选择获取值。
- 选择 TransportRecord.grouped.TotalInvoicedAmount 数据源。
- 选择获取值。
从右窗格中,选择全部展开。
TransportRecord 数据源公开两个记录并提供两个传输代码。 对于每个传输代码,将计算交易记录数和开票总金额。
注释
当调用 GroupBy 数据源以优化数据库调用时,使用“懒惰读取”方法。 因此,GroupBy 数据源中的某些字段值仅在绑定到数据模型字段时才在 ER 数据源调试器中计算。
常见问题解答
计算组总计值时是否有计算总计的方法?
是。 要计算总计,请配置另一个 GroupBy 数据源,将您之前配置的 GroupBy 数据源用作基础数据源。 下图显示了 GroupBy 类型的 Totals 数据源,用于根据 GroupBy 类型的 TransportRecord 数据源的 SUM 聚合计算聚合 SUM 函数。
下图显示了 Totals 数据源调试的结果。