- 在开始之前
- 入门指南
- 集成
- 使用流程应用程序
- 创建应用程序
- 正在加载数据
- 自定义流程应用程序
- 发布仪表板
- 应用程序模板
- 其他资源

Process Mining 用户指南
到期日期
简介
“到期日期”仪表板显示与对象是否符合截止日期以及相关成本的信息。可以预定义到期日期,以在流程中设置重要的阶段或活动截止日期。“到期日期”仪表板可用于分析流程中到期日期的各个方面。使用此仪表板,可以检查流程中预定义的到期日期,例如付款截止日期或需要按时满足的 SLA。
截止日期可能具有与逾期截止日期相关联的成本。
查看开箱即用标签和到期日期,详细了解“采购到付款”应用程序模板和“订单到现金”应用程序模板的开箱即用到期日期。
有关如何在数据转换中配置截止日期的更多信息,请查看配置截止日期。
配置截止日期
如果要使用“到期日期”仪表板来分析到期日期,则必须为应用程序模板定义到期日期。
如果您的应用程序模板有开箱即用的到期日期,这些到期日期将显示在到期日期仪表板中。在特定应用程序模板的文档中,您可以找到可用截止日期的概述。“应用程序模板”页面包含指向所有可用应用程序模板的文档链接。
如果到期日期仪表板中没有可用的数据,则需要使用数据转换在 models\5_business_logic\Due_dates_base.sql 文件中配置自己的到期日期。 您还可以在此处根据业务需求配置任何默认到期日期。
对于自定义流程,您还可以使用Due_dates_raw.csv文件上传截止日期。请查看自定义流程输入字段。
在转换中添加业务逻辑
在最后一个转换步骤中,根据需要添加业务逻辑以进行数据分析。
到期日期表中的每条记录代表特定对象的一个到期日期。 到期日期示例如下:
- 付款对象的付款截止日期。
- 采购申请的批准截止日期。
此表的必填字段为 Event_ID、Due_date、Actual_date 和 Expected_date。

并非所有活动都有截止日期,有些活动可能有多个截止日期。
有关更多信息,请参阅“数据转换” 。
Providing due date configuration input using dbt seeds
您可以使用 dbt 种子文件提供其他输入数据,用于在“到期日期” 仪表板中的计算。应用程序模板的应用程序转换的“seeds\” 文件夹中包含 Due_dates_configuration_raw.csv 文件。对于所有到期日期,您可以提供以下字段。
| 名称 | 类型 | 描述 |
|---|---|---|
| Due_date | 文本 | 到期日的名称。 |
| Due_date_type | 文本 | 截止日期类型。 |
| Fixed_costs | 布尔值 | 指示成本是固定的还是基于时间的。 |
| 成本 | 浮动 | 固定成本:成本金额。可变成本:每个时间和Type_type 的成本金额。 |
| 时间 | 整数 | 一个数字,指示在基于时间的成本情况下的时间量。 |
| Time_type | 文本 | 成本计算的时间段类型。这可以是以下任何值:日、小时、分钟、秒和毫秒。 |
下图显示了一个种子文件示例。

请查看转换。
配置截止日期的 SQL 示例
此页包含一些 SQL 示例,您可以使用这些示例通过转换配置到期日期。
SQL 示例基于事件日志和自定义流程应用程序模板,以及具有Case_ID的用例。如果要使用 SQL 示例为采购到付款应用程序模板或订单到现金应用程序模板定义到期日期,请确保使用适当的对象和相关的内部 object_ID。对于“购买到付款” ,您可以使用Purchase_order_item_end_to_end_events事件日志、 Purchase_order_items对象,并将Purchase_order_item_ID_internal用作Case_ID 。对于订单到现金,您可以使用Sales_order_item_end_to_end_events事件日志、 Sales_order_items对象,并将Sales_order_item_ID_internal用作Case_ID 。
以下代码块显示了用于定义到期日期的 SQL 查询示例。
select
tableA."Case_ID",
{{ pm_utils.as_varchar('Name of Due date') }} as "Due_date",
tableB."SLA_date" as "Expected_date",
tableA."Executed_date" as "Actual_date"
from {{ ref('tableA') }} as tableA
left join {{ ref('tableB') }} as tableB
on tableA."Case_ID" = tableB."Case_ID"
select
tableA."Case_ID",
{{ pm_utils.as_varchar('Name of Due date') }} as "Due_date",
tableB."SLA_date" as "Expected_date",
tableA."Executed_date" as "Actual_date"
from {{ ref('tableA') }} as tableA
left join {{ ref('tableB') }} as tableB
on tableA."Case_ID" = tableB."Case_ID"
以下代码块显示了用于配置截止日期的 SQL 查询示例。
select
Due_dates_base."Case_ID",
Due_dates_base."Due_date",
Due_dates_base."Actual_date",
Due_dates_base."Expected_date",
{{ pm_utils.as_varchar('Type of Due date') }} as "Due_date_type",
case
when Due_dates_base."Actual_date" <= Due_dates_base."Expected_date"
then {{ pm_utils.to_boolean('true') }}
else {{ pm_utils.to_boolean('false') }}
end as "On_time",
case
-- when actual or expected date are null
when Due_dates_base."Actual_date" is null or Due_dates_base."Expected_date" is null
then {{ pm_utils.to_double('null') }}
-- when the due date is on time, the cost is 0
when Due_dates_base."Actual_date" <= Due_dates_base."Expected_date"
then {{ pm_utils.to_double('0') }}
-- when the due date is late, configure a cost
when Due_dates_base."Expected_date" > Due_dates_base."Actual_date"
then {{ pm_utils.to_double('10') }}
end as "Cost",
{{ pm_utils.datediff('millisecond', 'Due_dates_base."Expected_date"', 'Due_dates_base."Actual_date"') }} as "Difference"
from Due_dates_base
select
Due_dates_base."Case_ID",
Due_dates_base."Due_date",
Due_dates_base."Actual_date",
Due_dates_base."Expected_date",
{{ pm_utils.as_varchar('Type of Due date') }} as "Due_date_type",
case
when Due_dates_base."Actual_date" <= Due_dates_base."Expected_date"
then {{ pm_utils.to_boolean('true') }}
else {{ pm_utils.to_boolean('false') }}
end as "On_time",
case
-- when actual or expected date are null
when Due_dates_base."Actual_date" is null or Due_dates_base."Expected_date" is null
then {{ pm_utils.to_double('null') }}
-- when the due date is on time, the cost is 0
when Due_dates_base."Actual_date" <= Due_dates_base."Expected_date"
then {{ pm_utils.to_double('0') }}
-- when the due date is late, configure a cost
when Due_dates_base."Expected_date" > Due_dates_base."Actual_date"
then {{ pm_utils.to_double('10') }}
end as "Cost",
{{ pm_utils.datediff('millisecond', 'Due_dates_base."Expected_date"', 'Due_dates_base."Actual_date"') }} as "Difference"
from Due_dates_base
活动 X 在日期 Y 之前完成
此 SQL 代码可识别最后一次出现的活动“X”在日期“Y”之前完成的情况。
with Event_log_base as (
select * from {{ ref('Event_log_base') }}
),
Cases_base as (
select * from {{ ref('Cases_base') }}
),
-- Last activity X of each case
Last_activity_X as (
select
Event_log_base."Case_ID",
max(Event_log_base."Event_end") as "Event_end",
max(Event_log_base."Event_ID") as "Event_ID"
from Event_log_base
where Event_log_base."Activity" = 'X'
group by Event_log_base."Case_ID"
),
-- Last activity X should be done before Case date field Y
Activity_X_done_before_date_Y as (
select
Last_activity_X."Case_ID",
{{ pm_utils.as_varchar('Last activity X before Cases date field Y') }} as "Due_date",
Last_activity_X."Event_end" as "Actual_date",
Cases_base."Case_date_field_Y" as "Expected_date",
Last_activity_X."Event_ID"
from Last_activity_X
inner join Cases_base
on Last_activity_X."Case_ID" = Cases_base."Case_ID"
)
select * from Activity_X_done_before_date_Y
with Event_log_base as (
select * from {{ ref('Event_log_base') }}
),
Cases_base as (
select * from {{ ref('Cases_base') }}
),
-- Last activity X of each case
Last_activity_X as (
select
Event_log_base."Case_ID",
max(Event_log_base."Event_end") as "Event_end",
max(Event_log_base."Event_ID") as "Event_ID"
from Event_log_base
where Event_log_base."Activity" = 'X'
group by Event_log_base."Case_ID"
),
-- Last activity X should be done before Case date field Y
Activity_X_done_before_date_Y as (
select
Last_activity_X."Case_ID",
{{ pm_utils.as_varchar('Last activity X before Cases date field Y') }} as "Due_date",
Last_activity_X."Event_end" as "Actual_date",
Cases_base."Case_date_field_Y" as "Expected_date",
Last_activity_X."Event_ID"
from Last_activity_X
inner join Cases_base
on Last_activity_X."Case_ID" = Cases_base."Case_ID"
)
select * from Activity_X_done_before_date_Y
活动 X 在活动 Y 后 5 天内完成
此 SQL 代码用于标识活动“X”最后一次出现是在活动“Y”最后一次出现之后 5 天内发生的案例。
with Event_log_base as (
select * from {{ ref('Event_log_base') }}
),
-- Last activity X of each case
Last_activity_X as (
select
Event_log_base."Case_ID",
max(Event_log_base."Event_end") as "Event_end",
max(Event_log_base."Event_ID") as "Event_ID"
from Event_log_base
where Event_log_base."Activity" = 'X'
group by Event_log_base."Case_ID"
),
-- Last activity Y of each case
Last_activity_Y as (
select
Event_log_base."Case_ID",
max(Event_log_base."Event_end") as "Event_end",
max(Event_log_base."Event_ID") as "Event_ID"
from Event_log_base
where Event_log_base."Activity" = 'Y'
group by Event_log_base."Case_ID"
),
-- Last activity X should be done at date of last Event Y + 5 days
Activity_X_done_within_5_days_after_activity_Y as (
select
Last_activity_Y."Case_ID",
{{ pm_utils.as_varchar('Last activity X before last activity Y + 5 days') }} as "Due_date",
{{ pm_utils.dateadd('day', 5, 'Last_activity_Y."Event_end"') }} as "Expected_date",
Last_activity_X."Event_end" as "Actual_date",
Last_activity_Y."Event_ID" as "Event_ID"
from Last_activity_Y
inner join Last_activity_X
on Last_activity_Y."Case_ID" = Last_activity_X."Case_ID"
)
select * from Activity_X_done_within_5_days_after_activity_Y
with Event_log_base as (
select * from {{ ref('Event_log_base') }}
),
-- Last activity X of each case
Last_activity_X as (
select
Event_log_base."Case_ID",
max(Event_log_base."Event_end") as "Event_end",
max(Event_log_base."Event_ID") as "Event_ID"
from Event_log_base
where Event_log_base."Activity" = 'X'
group by Event_log_base."Case_ID"
),
-- Last activity Y of each case
Last_activity_Y as (
select
Event_log_base."Case_ID",
max(Event_log_base."Event_end") as "Event_end",
max(Event_log_base."Event_ID") as "Event_ID"
from Event_log_base
where Event_log_base."Activity" = 'Y'
group by Event_log_base."Case_ID"
),
-- Last activity X should be done at date of last Event Y + 5 days
Activity_X_done_within_5_days_after_activity_Y as (
select
Last_activity_Y."Case_ID",
{{ pm_utils.as_varchar('Last activity X before last activity Y + 5 days') }} as "Due_date",
{{ pm_utils.dateadd('day', 5, 'Last_activity_Y."Event_end"') }} as "Expected_date",
Last_activity_X."Event_end" as "Actual_date",
Last_activity_Y."Event_ID" as "Event_ID"
from Last_activity_Y
inner join Last_activity_X
on Last_activity_Y."Case_ID" = Last_activity_X."Case_ID"
)
select * from Activity_X_done_within_5_days_after_activity_Y
Analyzing Due dates
Due dates dashboard
“到期日期”仪表板使您能够分析流程中存在的到期日期。
请按照以下步骤显示“到期日期”仪表板。
- 在仪表板左侧的菜单中选择“到期日期” 。
系统将显示“到期日期”仪表板。
下表介绍了“到期日期”仪表板上的可用图表。
| 图表 | 描述 | 可用指标 |
|---|---|---|
| Due dates details | 条形图,显示与基于所选指标的到期日期相关的详细信息。 | 对象数量总延迟时间平均延迟时间准时百分比总成本*平均成本* |
| 延迟的历史记录 | 历史记录图表,根据所选指标显示所选期间的到期日期信息。 | 总延迟时间平均延迟时间准时百分比总成本* 平均成本* |
| 差异分布 | 一个分布图,显示与延迟天数相关的到期日期数。 |
- 仅当为到期日期配置了“固定成本”和“成本”时,总延迟总成本和延迟的平均成本才可用。
“概述”选项卡
“概述”选项卡上的图表会高亮显示为流程定义的到期日期。系统将显示每个到期日期的案例(延迟案例)数量和所选时间段内延迟的总时间。

Details tab
“详细信息”选项卡包含多个图表,可用于更详细地分析延迟的活动。请参见下图。

以下是“到期日期”仪表板上可用图表的概述。
| 图表 | 描述 | 可用指标 |
|---|---|---|
| 可能节省 | 饼图,显示在数据集中定义的截止日期内可能节省的时间。 | 总延迟时间平均延迟时间总成本* 平均成本* |
| 延迟的历史记录 | 历史记录图表,根据所选指标显示所选期间的到期日期信息。 | 总延迟时间平均延迟时间准时百分比总成本* 平均成本* |
| Due dates details | 条形图,显示与基于所选指标的到期日期相关的详细信息。 | 案例数量总延迟时间平均延迟时间准时百分比总成本*平均成本* |
| 差异分布 | 一个分布图,显示与延迟天数相关的到期日期数。 |
- 仅当使用 Due_dates_configuration_raw.csv 种子文件提供了固定_成本和成本时,总成本和平均成本延迟才可用。
Due dates details
“到期日期详细信息”图表使您能够根据不同的指标和字段查看详细的到期日期信息。可以选择以下字段。
| 字段 | 描述 |
| 到期日期 | 到期日的名称。 |
| 截止日期类型* | 到期日期的类型。 |
| 成本* | 与到期日期相关的成本。 |
| 预期日期 | 预计执行活动的日期。 |
| 实际日期 | 活动实际执行的日期。 |
| On time | 为“准时”或“延迟”的活动。 注意: “延迟”活动是指“实际 日期”晚于“预期日期”的活动。 |
| 差异 | 预期日期与实际日期之间的时间量。 |
- 仅当为到期日期配置了这些字段时,到期日期类型和成本才可用。