- Notas relacionadas
- Antes de empezar
- Primeros pasos
- Integraciones
- Trabajar con apps de proceso
- Trabajar con paneles y diagramas
- Trabajar con diagramas de proceso
- Trabajar con modelos de proceso Descubrir e Importar modelos BPMN
- Showing or hiding the menu
- Información del contexto
- Exportar
- Filtros
- Envío de ideas de automatización a UiPath® Automation Hub
- Etiquetas
- Fechas límite
- Comparar
- Comprobación de conformidad
- Análisis de causa raíz
- Simular el potencial de automatización
- Iniciar un proyecto de Task Mining desde Process Mining
- Triggering an automation from a process app
- Ver datos del proceso
- Creación de aplicaciones
- Cargar datos
- Personalizar apps de proceso
- Publicar aplicaciones de proceso
- Plantillas de la aplicación
- Recursos adicionales
- Etiquetas y fechas de vencimiento listas para usar
- Editar transformaciones de datos en un entorno local
- Setting up a local test environment
- Métricas personalizadas de tiempo de procesamiento
- SQL differences between Snowflake and SQL Server
- Configuration settings for loading input data
- Designing an event log
- Ampliar la herramienta de extracción de SAP Ariba
- Características de rendimiento
Process Mining
Métricas personalizadas de tiempo de procesamiento
Con la personalización de las transformaciones de datos y la edición de paneles puedes crear y usar métricas de tiempo de procesamiento personalizadas. Los tiempos de procesamiento son los tiempos entre dos actividades A y B. A continuación se describen los pasos que debes realizar para crear una métrica de tiempo de procesamiento personalizada al editar transformaciones y cómo habilitar la métrica de tiempo de procesamiento en los paneles de la aplicación de proceso.
Primero debe calcular el tiempo de procesamiento y luego hacer que esté disponible como campo de caso .
Por caso, puedes calcular los tiempos de rendimiento entre la Actividad A y la Actividad B.Dado que las actividades pueden ocurrir más de una vez por caso, debes tener en cuenta si tomas la primera o la última ocurrencia de una actividad.
-
Cree un modelo adicional basado en el registro de eventos para calcular los tiempos de procesamiento deseados. Por ejemplo, Casos_con_tiempo_procesamiento.
-
En este modelo, crea tablas de preprocesamiento en las que defines qué extremos de evento quieres utilizar para los cálculos. Por tabla, necesita el ID de casoy el Evento final de una actividad. A continuación se muestra un ejemplo de cómo seleccionar la última aparición de la actividad A para un caso.
Event_end_activity_A as ( select Event_log."Case_ID", max(Event_log."Event_end") as "Event_end_activity_A" from Event_log where Event_log."Activity" = 'Activity A' group by Event_log."Case_ID")
Event_end_activity_A as ( select Event_log."Case_ID", max(Event_log."Event_end") as "Event_end_activity_A" from Event_log where Event_log."Activity" = 'Activity A' group by Event_log."Case_ID")Nota:En este ejemplo, si quieres seleccionar la primera aparición de la actividad, reemplaza max por min.
-
Defina la tabla de tiempo de procesamiento uniendo las tablas de preprocesamiento al registro de eventos y calculando el tiempo de procesamiento real.
Consejo:Puede usar la función dateiff proporcionada en el paquete pm-utils para calcular la diferencia de tiempo entre el final de dos eventos.
El tiempo de procesamiento debe calcularse en milisegundos para las instancias en las que la actividad A precede a la actividad B.Los milisegundos son la unidad de tiempo utilizada para definir duraciones en la plantilla de la aplicación. Como los tiempos de procesamiento ya están agrupados por caso en las tablas de preprocesamiento, puedes elegir cualquier registro. En el ejemplo anterior se utiliza la agregación mínima . La tabla de tiempo de procesamiento, la selección del tiempo de procesamiento y un ID de caso, se pueden definir como se muestra a continuación.
Cases_with_throughput_times as ( select Event_log."Case_ID", case when min(Event_end_activity_A."Event_end_activity_A") <= min(Event_end_activity_B."Event_end_activity_B") then {{ pm_utils.datediff('millisecond', 'min(Event_end_activity_A."Event_end_activity_A")', 'min(Event_end_activity_B."Event_end_activity_B")') }} end as "Throughput_time_activity_A_to_activity_B" from Event_log left join Event_end_activity_A on Event_log."Case_ID" = Event_end_activity_A."Case_ID" left join Event_end_activity_B on Event_log."Case_ID" = Event_end_activity_B."Case_ID" group by Event_log."Case_ID)"
Cases_with_throughput_times as ( select Event_log."Case_ID", case when min(Event_end_activity_A."Event_end_activity_A") <= min(Event_end_activity_B."Event_end_activity_B") then {{ pm_utils.datediff('millisecond', 'min(Event_end_activity_A."Event_end_activity_A")', 'min(Event_end_activity_B."Event_end_activity_B")') }} end as "Throughput_time_activity_A_to_activity_B" from Event_log left join Event_end_activity_A on Event_log."Case_ID" = Event_end_activity_A."Case_ID" left join Event_end_activity_B on Event_log."Case_ID" = Event_end_activity_B."Case_ID" group by Event_log."Case_ID)"
Cálculo del tiempo de procesamiento en días sin incluir los fines de semana
date_from_timestamp
proporcionada en el paquete pm-utils para calcular el número de días entre dos actividades. Además, la función diff_weekdays
te permite filtrar los días de fin de semana.
Consulta el siguiente ejemplo de código para saber cómo calcular el número de días de la semana entre la actividad A y la actividad B.
with Event_log as (
select * from {{ ref('Event_log') }}
),
Activity_A as (
select
Event_log."Case_ID",
min({{ pm_utils.date_from_timestamp('Event_log."Event_end"') }}) as "Date_activity_A"
from Event_log
where Event_log."Activity" = 'Receive invoice'
group by Event_log."Case_ID"
),
Activity_B as (
select
Event_log."Case_ID",
min({{ pm_utils.date_from_timestamp('Event_log."Event_end"') }}) as "Date_activity_B"
from Event_log
where Event_log."Activity" = 'Pay invoice'
group by Event_log."Case_ID"
),
Total_days_minus_weekends as (
select
Activity_A."Case_ID",
Activity_A."Date_activity_A",
Activity_B."Date_activity_B",
{{ pm_utils.diff_weekdays('Activity_A."Date_activity_A"', 'Activity_B."Date_activity_B"') }}
-- Only compute for cases where both dates are known.
from Activity_A
inner join Activity_B
on Activity_A."Case_ID" = Activity_B."Case_ID"
)
select * from Total_days_minus_weekends
with Event_log as (
select * from {{ ref('Event_log') }}
),
Activity_A as (
select
Event_log."Case_ID",
min({{ pm_utils.date_from_timestamp('Event_log."Event_end"') }}) as "Date_activity_A"
from Event_log
where Event_log."Activity" = 'Receive invoice'
group by Event_log."Case_ID"
),
Activity_B as (
select
Event_log."Case_ID",
min({{ pm_utils.date_from_timestamp('Event_log."Event_end"') }}) as "Date_activity_B"
from Event_log
where Event_log."Activity" = 'Pay invoice'
group by Event_log."Case_ID"
),
Total_days_minus_weekends as (
select
Activity_A."Case_ID",
Activity_A."Date_activity_A",
Activity_B."Date_activity_B",
{{ pm_utils.diff_weekdays('Activity_A."Date_activity_A"', 'Activity_B."Date_activity_B"') }}
-- Only compute for cases where both dates are known.
from Activity_A
inner join Activity_B
on Activity_A."Case_ID" = Activity_B."Case_ID"
)
select * from Total_days_minus_weekends
Cálculo del tiempo de procesamiento en días sin incluir festivos
Sigue los siguientes pasos para calcular el tiempo de procesamiento en días entre la actividad A y la actividad B , excluyendo los fines de semana y los días festivos.
Holidays.csv
para definir los días que deben contarse como vacaciones. El archivo debe contener al menos un registro para cada día festivo. Utiliza el siguiente formato:
Vacaciones |
Fecha |
Día de la semana |
Día de año nuevo |
2024-01-01 |
Sí |
Semana Santa |
2024-03-31 |
No |
.. |
.. |
.. |
Holidays.csv
se utilizan para contar el número de días que deben excluirse de un intervalo de fechas.
Holidays.csv
como archivo semilla en el proyecto dbt . Para obtener información detallada, consulta la documentación oficial de dbt sobre semillas de jinja.
date_from_timestamp
y diff_weekdays
proporcionadas en el paquete pm-utils como se describe anteriormente en Cálculo del tiempo de procesamiento en días sin fines de semana.
.csv
que se encuentran dentro del rango de fechas dado para cada caso. Consulta el siguiente código de ejemplo.
Holidays_count as (
select
Total_days_minus_weekends."Case_ID",
count(Holidays."Date") as "Number_of_holidays"
from Total_days_minus_weekends
left join Holidays
on Holidays."Date" between Total_days_minus_weekends."Date_activity_A" and Total_days_minus_weekends."Date_activity_B"
where Holidays."Weekday" = 'Yes'
group by Total_days_minus_weekends."Case_ID"
)
Holidays_count as (
select
Total_days_minus_weekends."Case_ID",
count(Holidays."Date") as "Number_of_holidays"
from Total_days_minus_weekends
left join Holidays
on Holidays."Date" between Total_days_minus_weekends."Date_activity_A" and Total_days_minus_weekends."Date_activity_B"
where Holidays."Weekday" = 'Yes'
group by Total_days_minus_weekends."Case_ID"
)
Weekday = 'Yes'
se utiliza para no restar días festivos cuando el día festivo es un sábado o un domingo. Esto ya se ha solucionado en la función diff_weekday
.
5. Resta el número calculado de días festivos del número total de días calculados para cada caso. Consulta el siguiente código de ejemplo.
Total_days_minus_weekends_and_holidays as (
select
Total_days_minus_weekends."Case_ID",
Total_days_minus_weekends."Number_of_days" - Holidays_count."Number_of_holidays" as "Number_of_days_between_dates"
from Total_days_minus_weekends
inner join Holidays_count
on Total_days_minus_weekends."Case_ID" = Holidays_count."Case_ID"
)
Total_days_minus_weekends_and_holidays as (
select
Total_days_minus_weekends."Case_ID",
Total_days_minus_weekends."Number_of_days" - Holidays_count."Number_of_holidays" as "Number_of_days_between_dates"
from Total_days_minus_weekends
inner join Holidays_count
on Total_days_minus_weekends."Case_ID" = Holidays_count."Case_ID"
)
Una vez creada la tabla de tiempo de procesamiento, esta tabla debe unirse a la tabla Casos para añadir los datos de tiempo de procesamiento adicionales como información del caso. Para tener el nuevo campo de tiempo de procesamiento disponible en los paneles, es necesario convertir el nuevo campo de tiempo de procesamiento a uno de los campos de duración del caso personalizados.
Reemplaza una de las líneas de duración de casos personalizados en la tabla Casos que se ve así:
{{ pm_utils.optional(ref('Cases_base'), '"custom_case_duration_1"', 'integer') }} as "custom_case_duration_1",
{{ pm_utils.optional(ref('Cases_base'), '"custom_case_duration_1"', 'integer') }} as "custom_case_duration_1",
con el tiempo de procesamiento recién creado:
Cases_with_throughput_times."Throughput_time_activity_A_to_activity_B" as "custom_case_duration_1",
Cases_with_throughput_times."Throughput_time_activity_A_to_activity_B" as "custom_case_duration_1",
Las actualizaciones de las transformaciones para la métrica de tiempo de procesamiento personalizada están listas y se pueden importar a la plantilla de la aplicación.
Cuando creas un tiempo de rendimiento personalizado en tus transformaciones, está disponible en tu plantilla de aplicación como propiedad de caso bajo su alias. Puedes personalizar tu aplicación de proceso para crear una métrica de tiempo de rendimiento en función del tiempo de rendimiento personalizado que creaste en las transformaciones.
De forma predeterminada, se añade un nuevo campo de duración personalizado como campo de tipo numérico. Asegúrate de editar el campo y cambiar el Tipo del nuevo campo a duración. Consulta también Gestor de datos.
- Dirígete a Data Manager y crea una nueva métrica.
- Selecciona el campo de duración personalizado que se utilizará para el tiempo de procesamiento y selecciona Promedio o cualquier otra agregación deseada. También puedes cambiar el nombre del campo de duración del caso personalizado al nombre deseado en el Gestor de datos.
- Edita la aplicación y coloca la nueva métrica en los gráficos donde quieras que esté disponible para los usuarios empresariales.
- Publica los paneles para que la métrica de tiempo de procesamiento esté disponible en los paneles.
En las plantillas de la aplicación Purchase-to-Pay y Order-to-Cash , ya está disponible un cálculo del tiempo de procesamiento en Purchase_order_items_with_throput_pieces y Sales_order_items_with_throput_pieces, respectivamente. Los tiempos de procesamiento personalizados se pueden agregar allí y luego estar disponibles como una duración personalizada en Purchase_order_items o Sales_order_items.