process-mining
2024.10
true
UiPath logo, featuring letters U and I in white

Process Mining

Automation CloudAutomation Cloud Public SectorAutomation SuiteStandalone
Última actualización 18 de dic. de 2024

Métricas personalizadas de tiempo de procesamiento

Introducción

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.

Crear una métrica de tiempo de procesamiento personalizada con edición de transformaciones

Primero debe calcular el tiempo de procesamiento y luego hacer que esté disponible como campo de caso .

Calcular el tiempo de procesamiento

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.

  1. Cree un modelo adicional basado en el registro de eventos para calcular los tiempos de procesamiento deseados. Por ejemplo, Casos_con_tiempo_procesamiento.

  2. 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.

  3. 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

Puedes utilizar la función 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_weekendswith 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.

1. Crea un archivo 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

Semana Santa

2024-03-31

No

..

..

..

Los registros del archivo Holidays.csv se utilizan para contar el número de días que deben excluirse de un intervalo de fechas.
2. Carga el archivo 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.
3. Calcula el tiempo de procesamiento en días sin fines de semana utilizando las funciones 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.
4. Calcula el número de registros que se almacenan en el archivo de vacaciones .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"
)
Nota:
En el ejemplo anterior, el filtro 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"
)

Hacer que el tiempo de procesamiento esté disponible como campo de caso

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.

Habilitar la métrica de tiempo de procesamiento en los paneles de la aplicación de proceso

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.

Nota:

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.
Nota:

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.

¿Te ha resultado útil esta página?

Obtén la ayuda que necesitas
RPA para el aprendizaje - Cursos de automatización
Foro de la comunidad UiPath
Uipath Logo White
Confianza y seguridad
© 2005-2024 UiPath. Todos los derechos reservados.