- 发行说明
- 入门指南
- 安装
- 配置
- 集成
- 身份验证
- Working with Apps and Discovery Accelerators
- AppOne 菜单和仪表板
- AppOne 设置
- TemplateOne 1.0.0 菜单和仪表板
- TemplateOne 1.0.0 设置
- TemplateOne menus and dashboards
- TemplateOne 2021.4.0 设置
- Purchase to Pay Discovery Accelerator 菜单和仪表板
- 购买到付款 Discovery Accelerator 设置
- Order to cash Discovery Accelerator 菜单和仪表板
- “订单到现金” Discovery Accelerator 设置
- Basic Connector for AppOne
- SAP Connectors
- 适用于 AppOne 的 SAP 订单到现金连接器
- 适用于 AppOne 的 SAP 采购到付款连接器
- SAP Connector for Purchase to Pay Discovery Accelerator
- SAP Connector for Order-to-Cash Discovery Accelerator
- Superadmin
- 仪表板和图表
- 表格和表格项目
- 应用程序完整性
- How to ....
- 使用 SQL 连接器
- Introduction to SQL connectors
- Setting up a SQL connector
- CData Sync extractions
- Running a SQL connector
- Editing transformations
- 释放 SQL 连接器
- Scheduling data extraction
- Structure of transformations
- Using SQL connectors for released apps
- Generating a cache with scripts
- Setting up a local test environment
- Separate development and production environments
- 实用资源

Process Mining 用户指南
聚合表达式
简介
记录表达式仅接受记录本身的值作为输入。相比之下,聚合表达式可用于对特定记录集进行计算。例如,计算所有记录的总金额或数据集中的记录总数。可以将聚合表达式与 SQL 中的GROUP BY函数进行比较。
在根级别聚合
聚合表达式在聚合级别计算每个唯一值的值。默认情况下,这是在“根”级别上,即整个表格的一个值。

下面是一个聚合表达式示例,用于计算“发票”数据集中所有金额的总和。

聚合表达式sum(records.amount)的计算方法如下:
- 获取Invoices中的所有记录 。
- 对于每个记录,选取“金额”数据源属性的值。
- 返回所有这些金额的总和。
该表达式计算单个唯一值,但此值将添加到数据集中的每条记录中。 以下是包含 4 行数据集的示例。

在子级别上聚合
除了计算整个数据集的聚合值,您还可以计算记录组的值。

以下是用于计算每个供应商总金额的聚合表达式示例。

系统将添加一个聚合级别,并将表达式的作用域设置为此新级别。 以下是示例数据集。

为作用域级别内的每个单独的值计算一次聚合表达式。此值将添加到此作用域内的每条记录。因此,总金额计算一次,然后复制 4 次到每条记录。每个供应商的总金额计算 3 次。由于有 2 条包含“供应商 A”的记录,因此其值将设置为两条记录。由于“供应商 B”和“供应商 C”只有一条记录,因此将值分配给相应的记录。
定义子级别
请按照以下步骤在子级别定义聚合表达式。
| 步骤 | 操作 |
|---|---|
| 1 | 在“编辑表达式属性”对话框的“设置”面板中,右键单击“根” 。 |
| 2 | 选择“添加级别” 。 |
| 3 | 单击“…级别”,然后选择要对值进行分组的数据源属性。在本例中为“供应商” 。 |
| 4 | 右键单击选定的属性级别,然后选择“设置为表达式级别” 。 |
所选级别由箭头指示。
树结构
在聚合表达式中,也可以访问所选聚合级别以外的其他级别。 我们可以使用p (代表父项)和c (代表子项)来上下遍历树结构。
节点有一个父节点,因此p返回单个节点,但可以有多个子节点,因此c返回节点列表。
父聚合级别

以下是基于父级别的聚合表达式示例。

表达式percentage(sum(records.Amount) / sum(p.records.Amount) * 100)计算每个供应商的百分比:
- 与供应商关联的金额总和除以所有金额的总和。
- 作用域将转移到父级别,即根级别。
- 将结果乘以 100 以转换为百分比。
子聚合级别

以下是基于子级别的聚合表达式示例。

count(c)表达式会返回每种供应商类型的所有供应商的列表。由于每个子项都是供应商,因此可以计算子项c的数量。
创建条件检查
对于记录表达式, if()函数可用于条件检查。 但是,只能按记录应用此函数。 无法使用 if 语句检查一组记录中的条件。 树形结构可用于遍历数据(特定部分),例如表示属性。

以下函数可用于此类计算。
| 函数 | 描述 |
|---|---|
exists(Scope, Condition) | 如果作用域中至少有一个条件的计算结果为true ,则返回true 。 |
forall(Scope, Condition) | 如果作用域中的所有条件的计算结果均为true ,则返回true 。 |
有关示例,请参见下图。

例如表达式
exists(records, find(lower(Supplier), 'consulting')
如果供应商的发票名称中包含“咨询”,则检查每个供应商类型。
lower用于将供应商名称转换为小写,并使检查不区分大小写。
筛选
聚合数据时,有时会根据数据的特定部分进行计算。 在这种情况下,可以使用filter()函数。

以下是基于筛选器的聚合表达式示例。
count(
unique(
filter(
records,
supplier_type = "Machinery"
).Supplier
)
)
count(
unique(
filter(
records,
supplier_type = "Machinery"
).Supplier
)
)
从内到外,表达式按以下方式构建:
-
检索当前作用域内的所有记录。
-
筛选这些记录,以便仅保留供应商类型为“机器”的记录。
-
对于每个筛选出的记录,返回“供应商”数据源属性的值。
-
从列表中删除所有重复值,因此每个唯一值只有一个项目。
-
计算列表中剩余的项目数。

在该示例中,案例所有者级别被设置为表达式级别。这意味着表达式的作用域是为案例所有者的所有唯一值计算一个值。对于每个案例所有者值, records是属于该案例所有者的记录列表。
表达式为每个“案例所有者” 返回一个值,该值表示类型为“机器”的 唯一 供应商 的数量。
其他筛选器选项
“设置”面板中的菜单包含用于为聚合添加筛选的选项。

以下是“设置”菜单选项的说明。
| 选项 | 描述 |
|---|---|
| 启用筛选器表达式 | 用于输入表达式作为筛选条件。 |
| 启用筛选器控件 | 打开“编辑筛选器控件”对话框,您可以在其中从列表中选择可用的筛选器控件。 |
| 启用比较周期 | 使您能够添加比较期间或表达式,以定义要筛选的多个先前期间。 |
| 应用最终用户筛选器 | 使您能够应用可用的最终用户筛选器。 |
使用“设置”菜单中的筛选选项时,筛选结果将显示在“值”面板中。有关示例,请参见下图。

排序
排序可用于确定最大值或最小值,或按特定顺序处理记录。
当您需要表达式的第一条或最后一条记录时,可以通过以下方式按级别排序:
- A..Z和Z..A将按值排序。
- 在字符串上,这将按字母顺序排序。
- 在数字格式(双精度、整数)上,这将按数值排序。
- 对于与时间相关的格式(日期时间、日期),系统将按时间顺序对其进行排序。
- 0..9和9..0将按组中的记录数进行排序。
- “表达式”允许您填写表达式,该表达式将按上述值进行排序。
对于每个排序选项,可以将顺序设置为升序或降序。
有关排序示例,请参见下图,其中确定了处理每个案例的第一个用户。

聚合表达式first(records.User)确定每个Case ID的第一个User }。 Event end按升序排序。