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

Process Mining
“到期日期”仪表板显示有关是否满足截止日期的对象以及相关成本的信息。 可以预定义到期日期,以在流程中设置重要的阶段或活动截止日期。 到期日期仪表板可用于分析流程中到期日期的各个方面。 使用此仪表板,可以检查流程中预定义的到期日期,例如付款截止日期或需要按时满足的 SLA。
截止日期可能具有与逾期截止日期相关联的成本。
Check out Out-of-the-box Tags and Due dates for more information on out-of-the box Due dates for Purchase-to-Pay app templates and Order-to-Cash app templates.
Check out Configuring Due dates for more information on how to configure Due dates in data transformations.
如果要使用“ 到期日期 ”仪表板来分析到期日期,则必须为应用程序模板定义到期日期。
If there are out of the box due dates available for your app template, these due dates will be shown in the Due dates dashboard. In the documentation for your specific app template you will find an overview of the available due dates. The App Templates page contains links to the documentation for all available app templates.
models\5_business_logic\Due_dates_base.sql
文件中配置自己的到期日期。 您还可以在此处根据业务需求配置任何默认到期日期。
Due_dates_raw.csv
file. Check out Custom process input fields.
在转换中添加业务逻辑
在最后一个转换步骤中,根据需要添加业务逻辑以进行数据分析。
到期日期表中的每条记录代表特定对象的一个到期日期。 到期日期示例如下:
- 付款对象的付款截止日期。
- 采购申请的批准截止日期。
Event_ID
、Due_date
、Actual_date
和 Expected_date
。
并非所有活动都有截止日期,有些活动可能有多个截止日期。
Refer to Data transformations for more information.
Providing due date configuration input using dbt seeds
您可以使用 dbt 种子文件提供其他输入数据,以用于“到期日期”仪表板中的计算。 应用程序模板的应用程序转换的 seed \ 文件夹包含一个 Due_dates_configuration_raw.csv 文件。 对于所有到期日期,您可以提供以下字段。
名称 |
类型 |
描述 |
Due_date | 文本 | 到期日期的名称
。 |
Due_date_type | 文本 | 截止日期类型。 |
Fixed_costs |
布尔值 | 指示成本是固定的还是基于时间的。 |
成本 |
浮动 |
固定成本:成本金额。
可变成本:每个 Time 和 Type_type的成本金额。
|
时间 |
整数 | 一个数字,指示在基于时间的成本情况下的时间量。 |
Time_type | 文本 | 成本计算的时间段类型。 这可以是以下任何值: 天、 小时、 分钟、 秒、 毫秒。 |
配置截止日期的 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
Due dates dashboard
“ 截止日期 ”仪表板使您能够分析流程中发生的截止日期。
请按照以下步骤显示“ 截止日期 ”仪表板。
-
在仪表板左侧的菜单中选择“ 截止日期 ”。
系统将显示“到期日期”仪表板。
下表描述了“到期日期”仪表板上的可用图表。
图表 |
描述 |
可用指标 |
Due dates details | 条形图,显示与基于所选指标的到期日期相关的详细信息。 |
对象数
总延迟时间
平均延迟天数
时间百分比
总成本*
平均成本*
|
延迟的历史记录 | 历史记录图表,根据所选指标显示所选期间的到期日期信息。 |
总延迟时间
平均延迟天数
时间百分比
总成本*
平均成本*
|
差异分布 | 一个分布图,显示与延迟天数相关的到期日期数。 |
“概述”选项卡
“概述”选项卡上的图表会高亮显示为流程定义的到期日期。系统将显示每个到期日期的案例(延迟案例)数量和所选时间段内延迟的总时间。
Details tab
“ 详细信息 ” 选项卡包含多个图表,使您能够更详细地分析延迟的活动。 请参见下图。
图表 |
描述 |
可用指标 |
可能节省 | 饼图,显示在数据集中定义的截止日期内可能节省的时间。 |
总延迟时间
平均延迟天数
总成本*
平均成本*
|
延迟的历史记录 | 历史记录图表,根据所选指标显示所选期间的到期日期信息。 |
总延迟时间
平均延迟天数
时间百分比
总成本*
平均成本*
|
Due dates details | 条形图,显示与基于所选指标的到期日期相关的详细信息。 |
案例数
总延迟时间
平均延迟天数
时间百分比
总成本*
平均成本*
|
差异分布 | 一个分布图,显示与延迟天数相关的到期日期数。 |
Due dates details
The Due dates details chart enables you to view detailed due dates information based on different metrics and fields. You can select the following fields.
字段 |
描述 |
到期日期 | 到期日的名称。 |
截止日期类型* | 到期日期的类型。 |
成本* | 与到期日期相关的成本。 |
预期日期 | 预计执行活动的日期。 |
实际日期 | 活动实际执行的日期。 |
On time | 准时 或 迟到的活动。
备注: 延迟 活动是指 实际日期 晚于 预期日期的活动。
|
差异 | 预期日期 和 实际日期之间的时间量。 |