Process Mining
最新
バナーの背景画像
Process Mining
最終更新日 2024年4月17日

カスタムのスループット時間メトリック

はじめに

データ変換とダッシュボードの編集をカスタマイズすることで、カスタムのスループット時間メトリックを作成して使用できます。スループット時間は、2 つのアクティビティ A と B の間のタイミングです。以下に、変換の編集時にカスタムのスループット時間メトリックを作成する場合に実行が必要な手順と、スループット時間メトリックをプロセス アプリのダッシュボードで有効化する方法について説明します。

変換を編集してカスタムのスループット時間メトリックを作成する

まず、スループット時間を再計算してから、それを Case フィールドとして利用できるようにする必要があります。

スループット時間を計算する

ケースごとにアクティビティ Aアクティビティ B の間のスループット時間を計算できます。アクティビティは 1 つのケースで複数回発生する可能性があるため、アクティビティの最初の出現を使用するか、それとも最後の出現を使用するかを考慮する必要があります。

  1. イベント ログに基づいて追加のモデル ベースを作成し、目的のスループット時間を計算します。たとえば、Cases_with_throughput_times です。

  2. このモデルでは、前処理テーブルを作成し、そこで計算に使用するイベント終了を定義します。テーブルごとに、ケース ID とアクティビティのイベント終了が必要です。以下の例に、あるケースでアクティビティ A の最後の出現を選択する方法を示します。

    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")
    注:

    この例で、アクティビティの最初の出現箇所を選択する場合は、maxmin に置き換えます。

  3. 前処理テーブルをイベント ログに結合して実際のスループット時間を計算し、スループット時間テーブルを定義します。

    ヒント:

    pm-utils パッケージで提供されている datediff 関数を使用して、2 つのイベント終了間の時間差を計算できます。

    スループット時間は、アクティビティ Aアクティビティ B の前にあるインスタンスを対象として、ミリ秒単位で計算する必要があります。ミリ秒は、アプリ テンプレートで継続時間を定義するために使用する時間の単位です。スループット時間は、既に前処理テーブルのケースごとにグループ化されているため、任意のレコードを選択できます。上の例では、集計のが使用されています。スループット時間ケース 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)"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)"

週末を除く日数でスループット時間を計算する

pm-utils パッケージで提供されている date_from_timestamp 関数を使用して、2 つのアクティビティ間の日数を計算できます。さらに diff_weekdays 関数を使用することで週末を除外できます。

アクティビティ Aアクティビティ 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

休日を除く日数でスループット時間を計算する

アクティビティ Aアクティビティ B の間のスループット時間を、週末と休日を除いた日数で計算する手順は以下のとおりです。

1. 休日としてカウントする日を定義する Holidays.csv ファイルを作成します。ファイルには、少なくとも各休日に対して 1 つのレコードが含まれる必要があります。次の形式を使用します。
休日

日付

平日

元日

2024-01-01

はい

イースター

2024-03-31

いいえ

..

..

..

Holidays.csv ファイル内のレコードは、日付範囲から除外する必要がある日数をカウントするために使用されます。
2. Holidays.csv ファイルをシード ファイルとして dbt プロジェクトに読み込みます。詳しくは、Jinja のシードに関する dbt の公式ドキュメントをご覧ください。
3.週末を除く日数でスループット時間を計算する」で前述したように、pm-utils パッケージで提供される date_from_timestampdiff_weekdays の関数を使用し、スループット時間を週末を除いた日数で計算します。
4. 休日の .csv ファイルに保存されたレコードのうち、各ケースの指定した日付範囲内にあるレコードの数を計算します。以下の例のコードをご覧ください。
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' が使用されています。これは、diff_weekday 関数ですでに考慮されています。

5. 各ケースで計算された合計日数から、計算された休日数を減算します。以下の例のコードをご覧ください。

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"
)

スループット時間をケース フィールドとして利用可能にする

スループット時間テーブルを作成したら、このテーブルを Cases テーブルに結合し、追加のスループット時間データをケースの情報として追加する必要があります。新しいスループット時間フィールドをダッシュボードで利用できるようにするには、新しいスループット時間フィールドをカスタムのケース期間フィールドの 1 つにキャストする必要があります。

Cases テーブル内のカスタム ケース期間の行のいずれかを置き換えます。これは次のような行です。

{{ 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",

これを新しく作成したスループット時間に置き換えます。

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",

カスタムのスループット時間メトリックの変換が更新され、アプリ テンプレートにインポートできるようになります。

スループット時間メトリックをプロセス アプリのダッシュボードで有効化する

変換でカスタムのスループット時間を作成した場合、そのスループット時間は、アプリ テンプレート内のエイリアスでケースのプロパティとして利用可能です。プロセス アプリをカスタマイズすることで、変換で作成したカスタム スループット時間に基づいてスループット時間メトリックを作成できます。

注:

既定では、新しいカスタム期間フィールドが numeric 型のフィールドとして追加されます。必ずフィールドを編集し、新しいフィールドのduration に変更してください。「データ マネージャー」もご覧ください。

  • データ マネージャーに移動し、新しいメトリックを作成します。
  • スループット時間に使用するカスタムの期間フィールドを選択し、[平均] または必要な他の集計を選択します。カスタムのケース期間フィールドの名前をデータ マネージャーで好きな名前に変更することもできます。
  • アプリケーションを編集し、新しいメトリックをビジネス ユーザーに対して利用可能にするグラフにメトリックを配置します。
  • ダッシュボードをパブリッシュして、スループット時間メトリックをダッシュボードで利用できるようにします。
注:

Purchase-to-Pay アプリ テンプレートと Order-to-Cash アプリ テンプレートでは、スループット時間の計算はそれぞれ Purchase_order_items_with_throughput_timesSales_order_items_with_throughput_times で既に利用可能です。カスタム スループット時間をそこに追加して、Purchase_order_items または Sales_order_items でカスタム期間として利用可能にすることができます。

Was this page helpful?

サポートを受ける
RPA について学ぶ - オートメーション コース
UiPath コミュニティ フォーラム
UiPath ロゴ (白)
信頼とセキュリティ
© 2005-2024 UiPath. All rights reserved.