すべてのプロダクト
Search
ドキュメントセンター

Hologres:ディメンション別グループ化ファネル関数 (finder_group_funnel)

最終更新日:Dec 18, 2025

ディメンション別グループ化ファネル関数を使用すると、さまざまなディメンションに基づいて結果をグループ化して表示し、イベントの関連プロパティを指定できます。たとえば、日、国、または IP アドレスで結果をグループ化して、より詳細なファネル分析を実現できます。ユーザーは 1 つのグループにのみ所属できます。ユーザーがどのグループにも属さない場合、そのユーザーは `unreach` グループに割り当てられます。

制限事項

Hologres V2.2.32 以降のバージョンのみが、ディメンション別グループ化ファネル関数をサポートしています。

注意事項

ファネル関数を使用するには、スーパーユーザーとして次の文を実行して拡張機能をインストールする必要があります。

CREATE extension flow_analysis; --拡張機能をインストールします。
  • 拡張機能はデータベースレベルでインストールされます。各データベースに対して、拡張機能のインストールは 1 回のみで済みます。

  • デフォルトでは、拡張機能は public スキーマにロードされます。拡張機能は他のスキーマにはロードできません。他のスキーマで拡張機能を使用するには、`public.windowFunnel` のように、`public.関数名` の形式で関数名を指定する必要があります。

finder_group_funnel

この関数は、選択したディメンションに基づいて指定されたイベントをグループ化し、ファネル結果を計算するために使用されます。

関数の構文

  • 構文

    finder_group_funnel(window, start_timestamp, step_interval, step_numbers, num_events, attr_related, group_event_index,time_zone,is_relative_window, server_timestamp, client_timestamp, group_dimension, prop1, prop2, ..., check_event1, check_event2...)
  • パラメーター

    パラメーター

    必須

    説明

    window

    はい

    統計分析のウィンドウ。単位:ミリ秒。

    start_timestamp

    はい

    統計分析の開始時刻。`TIMESTAMP` 型と `TIMESTAMPTZ` 型がサポートされています。

    step_interval

    はい

    ステップサイズの期間。コンバージョン計算と分析の粒度です。単位:秒。

    step_numbers

    はい

    分析するステップの数。たとえば、step_interval=86400 (1 日), step_number=7 は、`start_timestamp` で指定された時刻から開始して、7 日間、ファネルの状態が毎日分析されることを示します。

    num_events

    はい

    分析する必要があるイベントの数。

    attr_related

    はい

    イベントに関連付けられたプロパティがあるかどうかを指定します。このパラメーターは UINT8 型の数値です。バイナリ表現では、i 番目のビットが 1 の場合、(i+1) 番目のイベントに関連プロパティがあることを示します。通常、`attr_related` は `prop` とともに使用されます。attr_related が 1 に設定されている場合、入力する必要がある `prop` 式の数は、設定されている 1 の数と等しくなります。

    group_event_index

    はい

    グループ化の基準となるイベント。

    たとえば、group_event_index を 1 に設定すると、最初のイベントに到達するとすぐにグループ化が開始されます。group_event_index を 2 に設定すると、2 番目のイベントに到達した場合にのみグループ化が開始されます。2 番目のイベントに到達しないコンバージョンは、`unreach` グループに割り当てられます。

    time_zone

    はい

    入力時間のタイムゾーン。値は `TEXT` 型で、Asia/Shanghai のような標準的なタイムゾーン形式である必要があります。このパラメーターは、is_relative_window が true に設定されている場合にのみ出力結果に影響します。この場合、結果はタイムゾーンに基づいて表示されます。

    is_relative_window

    はい

    ウィンドウが複数暦日ウィンドウであるかどうかを指定します。デフォルト値は false です。このパラメーターを true に設定すると、他のパラメーターに次の制限が課せられます。

    • window:パラメーター値は 86,400,000 の整数倍である必要があります。

    • step_interval:パラメーター値は 86400 である必要があります。これは、1 つの観測ステップが 1 日であることを意味します。

    説明

    暦日とは、各日の 00:00:00 から 23:59:59 までの期間を指します。最初の暦日は イベント時間から 23:59:59 までで、それ以降の暦日は丸 1 日です。ほとんどの場合、暦日をウィンドウとして使用して日々のファネルデータを観測し、詳細なビジネス運用を実装できます。

    server_timestamp

    はい

    イベントが発生したサーバー時間。`TIMESTAMP` 型と `TIMESTAMPTZ` 型がサポートされています。このパラメーターは、関数の実行時にイベントが属するイベントスロットまたはステップを計算するために使用されます。

    client_timestamp

    はい

    イベントが発生したクライアント時間。`TIMESTAMP` 型と `TIMESTAMPTZ` 型がサポートされています。このパラメーターのデータ型は、start_timestamp パラメーターのデータ型と同じである必要があります。このパラメーターは、関数の実行時にデータをソートするために使用されます。

    group_dimension

    はい

    グループ化するディメンション。たとえば、ディメンションのグループ化に channel_id フィールドを選択した場合、グループ化されたデータは channel_id の値に基づいて表示されます。複数のディメンションを使用するには、`concat_ws` または `concat` を使用して連結します。現在、グループ化には `TEXT` 型のフィールドのみ使用できます。

    prop

    いいえ

    イベントの関連プロパティ。すべてのプロパティのデータ型は同じである必要があります。そうでない場合、比較を実行できません。

    check_event

    はい

    分析対象のコンバージョンイベントのリストです。`window` で定義された期間内に条件を満たすイベントは有効と見なされ、コンバージョン分析に含まれます。たとえば、イベントが 3 つある場合は、EventName = 'E0001', EventName = 'E0002', EventName = 'E0003' と入力します。

  • 戻り値

    `BINARY` 型のエンコードされた結果が返されます。結果をデコードするには、`finder_group_funnel_res` 関数を使用する必要があります。

この例では、`finder_group_funnel` 関数の使用方法について説明します。

  1. `finder_group_funnel_test` テーブルを準備し、テーブルにデータを挿入します。

    CREATE TABLE finder_group_funnel_test(id INT, event_time TIMESTAMP, event TEXT, province TEXT,city TEXT);
    
    INSERT INTO finder_group_funnel_test VALUES 
    (1111, '2024-01-02 00:00:00', 'registration', 'Beijing','Beijing'), 
    (1111, '2024-01-02 00:00:01', 'logon', 'Beijing','Beijing'), 
    (1111, '2024-01-02 00:00:02', 'payment', 'Beijing','Beijing'), 
    (1111, '2024-01-02 00:00:03', 'exit', 'Beijing','Beijing'), 
    
    (1111, '2024-01-03 00:00:00', 'registration', 'Beijing','Beijing'), 
    (1111, '2024-01-03 00:00:01', 'logon', 'Beijing','Beijing'), 
    (1111, '2024-01-03 00:00:02', 'payment', 'Beijing','Beijing'), 
    
    (1111, '2024-01-04 00:00:00', 'registration', 'Beijing','Beijing'), 
    (1111, '2024-01-04 00:00:01', 'logon', 'Beijing','Beijing'), 
    
    
    (2222, '2024-01-02 00:00:00', 'registration', 'Zhejiang','Hangzhou'), 
    (2222, '2024-01-02 00:00:00', 'logon', 'Zhejiang','Hangzhou'), 
    (2222, '2024-01-02 00:00:01', 'payment', 'Zhejiang','Hangzhou'), 
    (2222, '2024-01-02 00:00:03', 'payment', 'Zhejiang','Hangzhou');
  2. `province` フィールドで結果をグループ化して表示するには、次のコマンドを実行します。

    SELECT
        id,
        UNNEST(finder_group_funnel (86400000 * 3, EXTRACT(epoch FROM TIMESTAMP'2024-01-02 00:00:00')::BIGINT, 86400, 3, 4, 0, 1, 'Asia/Shanghai', FALSE, event_time, event_time, province, event = 'registration', event = 'logon', event = 'payment', event = 'exit')) AS result
    FROM
        finder_group_funnel_test
    GROUP BY
        id;

    次の結果が返されます。`result` の値はエンコードされた結果です。結果をデコードするには、`finder_group_funnel_res` 関数を使用する必要があります。詳細については、「finder_group_funnel_res」をご参照ください。

      id  | result      
    ------+-----------------
     2222 | Zhejiang
     2222 | unreach
     1111 | Beijing
     1111 | unreach
    (4 rows)

finder_group_funnel_res

この関数は、`finder_group_funnel` 関数から返された `BINARY` 型の結果に含まれるファネルの詳細をデコードするために使用されます。

関数の構文

  • 構文

    finder_group_funnel_res(finder_group_funnel())
  • パラメーター

    finder_group_funnel():この関数は、選択したディメンションに基づいて指定されたイベントをグループ化し、ファネル結果を計算するために使用されます。詳細については、「finder_group_funnel」をご参照ください。

  • 戻り値

    デコードされた結果が返されます。

この例では、「finder_group_funnel の例」の結果をデコードして、各ユーザーの詳細なファネルを表示します。

  • 次のコマンドを実行します。

    SELECT
        id,
        finder_group_funnel_res (result) AS res
    FROM (
        SELECT
            id,
            UNNEST(finder_group_funnel (86400000 * 3, EXTRACT(epoch FROM TIMESTAMP'2024-01-02 00:00:00')::BIGINT, 86400, 3, 4, 0, 1, 'Asia/Shanghai', FALSE, event_time, event_time, province, event = 'register', event = 'logon', event = 'pay', event = 'exit')) AS result
        FROM
            finder_group_funnel_test
        GROUP BY
            id) a; 
  • 次の結果が返されます。

     id  |    res    
    ------+-----------
     1111 | {4,4,3,2}
     1111 | {0,0,0,0}
     2222 | {3,3,0,0}
     2222 | {0,0,0,0}

    デコードされた結果の解釈:`finder_group_funnel` の結果をデコードして、各ユーザーの詳細なファネルを表示できます。たとえば、ユーザー ID 1111 の結果 `{4,4,3,2}` を考えてみましょう。

    • 4:ユーザーが 3 日以内に到達した最終イベントは、4 番目のイベント `exit` です。

    • 4:初日のユーザーの 4 番目のイベントは `Exit` です。

    • 3:2 日目にユーザーが到達した最終イベントは、3 番目のイベント `payment` です。

    • 2:3 日目にユーザーが到達した最終イベントは、2 番目のイベント `logon` です。

finder_group_funnel_text_group

この関数は、`finder_group_funnel` 関数から返された `BINARY` 型の結果に含まれるグループ化フィールドをデコードするために使用されます。この関数は通常、`finder_group_funnel_res` 関数と組み合わせて使用されます。

関数説明

  • 構文

    finder_group_funnel_text_group(finder_group_funnel())
  • パラメーター

    finder_group_funnel():この関数は、選択したディメンションに基づいて指定されたイベントをグループ化し、ファネル結果を計算するために使用されます。詳細については、「finder_group_funnel」をご参照ください。

  • 戻り値

    デコードされた結果が返されます。

この例では、「finder_group_funnel の例」の結果をデコードして、ファネル結果、最終到達イベント、およびグループ化された各ユーザーの各ステップサイズ内での最終到達イベントを表示します。次のコマンドを実行します。

SELECT
    id,
    finder_group_funnel_text_group (result) AS key,
    finder_group_funnel_res (result) AS res
FROM (
    SELECT
        id,
        UNNEST(finder_group_funnel (86400000 * 3, EXTRACT(epoch FROM TIMESTAMP'2024-01-02 00:00:00')::BIGINT, 86400, 3, 4, 0, 1, 'Asia/Shanghai', FALSE, event_time, event_time, province, event = 'registration', event = 'logon', event = 'payment', event = 'exit')) AS result
    FROM
        finder_group_funnel_test
    GROUP BY
        id) a;

次の結果が返されます。

  id  |   key   |    res    
------+---------+-----------
 2222 | Zhejiang    | {3,3,0,0}
 2222 | unreach | {0,0,0,0}
 1111 | Beijing    | {4,4,3,2}
 1111 | unreach | {0,0,0,0}
(4 rows)

ファネル結果の集計関数 (funnel_rep)

この関数は、`FINDER_FUNNEL` と `finder_group_funnel` の計算結果を集約して、ファネルの各レイヤーにおける全ユーザーの集約結果を生成するために使用されます。

関数説明

  • 構文

    funnel_rep(step_number, num_events, funnel_res)
  • パラメーター

    パラメーター

    必須

    説明

    step_number

    はい

    タイムスロットの数を指定する `UINT` 値。この値は通常、`finder_funnel` 関数の step_numbers の値と同じです。

    たとえば、step_numbers=7 は、7 つのタイムスロットが観測されることを示します。

    num_events

    はい

    コンバージョンに参加するイベントの総数を指定する `UINT` 値。この値は通常、`finder_funnel` 関数の check_event のイベント数と同じです。

    funnel_res

    はい

    各ユーザーによって生成されたすべてのコンバージョンステップの詳細。これは `finder_tunnel` の出力です。

  • 戻り値

    この関数は、{"n1,...,nn","m1,...,mn"} の形式の文字列の 1 次元配列を返します。この配列は、全体のファネル状態 (イベント 1 から N に一致するユーザー数) と、各ステップサイズ内のファネル状態 (イベント 1 から N に一致するユーザー数) を表します。

この例では、ウィンドウ期間が 3 日、ステップサイズが 3 日の場合に各ユーザーが到達するイベントを計算する方法について説明します。「finder_group_funnel の例」のデータが使用されます。次のコマンドを実行します。

-- 3 日間のウィンドウと 3 日間のステップサイズで、各ユーザーが到達したイベントを計算します。
SELECT
    funnel_rep (3, 4, funnel_res)
FROM (
    SELECT
        id,
        FINDER_FUNNEL (86400000 * 3, EXTRACT(epoch FROM TIMESTAMP'2024-01-02 00:00:00')::BIGINT, 86400, 3, 4, 0, 'Asia/Shanghai', FALSE, event_time, event_time, event = 'registration', event = 'logon', event = 'payment', event = 'exit') AS funnel_res
    FROM
        finder_group_funnel_test
    GROUP BY
        id) a;

次の結果が返されます。

                funnel_rep                 
-------------------------------------------
 {"2,2,2,1","2,2,2,1","1,1,1,0","1,1,0,0"}
(1 row)

使用例のまとめ

シナリオ 1:複数日ウィンドウを使用してユーザーのファネル結果をグループ化して表示する

4 つのイベントが順次発生した場合に、`province` ディメンションに基づいて 3 日以内のファネルデータと各日のファネルデータを分析します。

  1. データを準備するには、次のコマンドを実行します。

    CREATE TABLE finder_group_funnel_test_1(id INT, event_time TIMESTAMP, event TEXT, province TEXT,city TEXT);
    
    INSERT INTO finder_group_funnel_test_1 VALUES 
    (1111, '2024-01-02 00:00:00', 'registration', 'Beijing','Beijing'), 
    (1111, '2024-01-02 00:00:01', 'logon', 'Beijing','Beijing'), 
    (1111, '2024-01-02 00:00:02', 'payment', 'Beijing','Beijing'), 
    (1111, '2024-01-02 00:00:03', 'exit', 'Beijing','Beijing'), 
    
    (1111, '2024-01-03 00:00:00', 'registration', 'Beijing','Beijing'), 
    (1111, '2024-01-03 00:00:01', 'logon', 'Beijing','Beijing'), 
    (1111, '2024-01-03 00:00:02', 'payment', 'Beijing','Beijing'), 
    
    (1111, '2024-01-04 00:00:00', 'registration', 'Beijing','Beijing'), 
    (1111, '2024-01-04 00:00:01', 'logon', 'Beijing','Beijing'), 
    
    (2222, '2024-01-02 00:00:00', 'registration', 'Zhejiang','Hangzhou'), 
    (2222, '2024-01-02 00:00:00', 'logon', 'Zhejiang','Hangzhou'), 
    (2222, '2024-01-02 00:00:01', 'payment', 'Zhejiang','Hangzhou'), 
    (2222, '2024-01-02 00:00:03', 'payment', 'Zhejiang','Hangzhou'),
    
    (3333, '2024-01-02 00:00:00', 'registration', 'Shanghai','Shanghai'), 
    (3333, '2024-01-02 00:00:00', 'logon', 'Shanghai','Shanghai'), 
    (3333, '2024-01-02 00:00:01', 'payment', 'Shanghai','Shanghai'), 
    (3333, '2024-01-02 00:00:03', 'payment', 'Shanghai','Shanghai'),
    (3333, '2024-01-02 00:00:04', 'exit', 'Shanghai','Shanghai');
  2. 4 つのイベントが順次発生した場合に、`province` ディメンションに基づいて 3 日以内のファネルデータと各日のファネルデータを分析します。次のコマンドを実行します。

    SELECT
        key,
        funnel_rep (3, 4, res) AS ans
    FROM (
        SELECT
            id,
            finder_group_funnel_text_group (result) AS key,
            finder_group_funnel_res (result) AS res
        FROM (
            SELECT
                id,
                UNNEST(finder_group_funnel (86400000 * 3, EXTRACT(epoch FROM TIMESTAMP'2024-01-02 00:00:00')::BIGINT, 86400, 3, 4, 0, 1, 'Asia/Shanghai', FALSE, event_time, event_time, province, event = 'Register', event = 'Log on', event = 'Payment', event = 'Exit')) AS result
            FROM
                finder_group_funnel_test_1
            GROUP BY
                id) a) b
    GROUP BY
        key;

    次の結果が返されます。

       key   |                    ans                    
    ---------+-------------------------------------------
     Beijing    | {"1,1,1,1","1,1,1,1","1,1,1,0","1,1,0,0"}
     unreach | {"0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0"}
     Shanghai    | {"1,1,1,1","1,1,1,1","0,0,0,0","0,0,0,0"}
     Zhejiang    | {"1,1,1,0","1,1,1,0","0,0,0,0","0,0,0,0"}
    (4 rows)

シナリオ 2:複数暦日ウィンドウに基づいて暦日ごとにグループ化されたユーザーのファネル結果を表示する

  1. データを準備するには、次のコマンドを実行します。

    CREATE TABLE finder_group_funnel_test_2(id INT, event_time TIMESTAMP, event TEXT, province TEXT,city TEXT);
    
    INSERT INTO finder_group_funnel_test_2 VALUES 
    (1111, '2024-01-02 00:00:02', 'registration', 'Beijing','Beijing'), 
    (1111, '2024-01-02 00:00:03', 'logon', 'Beijing','Beijing'), 
    
    (1111, '2024-01-03 00:00:04', 'payment', 'Beijing','Beijing'), 
    
    (1111, '2024-01-05 00:00:01', 'exit', 'Beijing','Beijing'), 
    
    
    (2222, '2024-01-02 00:00:00', 'registration', 'Zhejiang','Hangzhou'), 
    (2222, '2024-01-02 00:00:00', 'logon', 'Zhejiang','Hangzhou'), 
    (2222, '2024-01-02 00:00:01', 'payment', 'Zhejiang','Hangzhou'), 
    (2222, '2024-01-02 00:00:03', 'payment', 'Zhejiang','Hangzhou');
  2. 4 つのイベントが順次発生した場合に、`province` ディメンションに基づいて 3 日以内のファネルデータと各暦日のファネルデータを分析します。次のコマンドを実行します。

    SELECT
        key,
        funnel_rep (3, 4, res) AS ans
    FROM (
        SELECT
            id,
            finder_group_funnel_text_group (result) AS key,
            finder_group_funnel_res (result) AS res
        FROM (
            SELECT
                id,
                UNNEST(finder_group_funnel (86400000 * 3, EXTRACT(epoch FROM TIMESTAMP'2024-01-02 00:00:00')::BIGINT, 86400, 3, 4, 0, 1, 'Asia/Shanghai', TRUE, event_time, event_time, province, event = 'register', event = 'logon', event = 'pay', event = 'exit')) AS result
            FROM
                finder_group_funnel_test_2
            GROUP BY
                id) a) b
    GROUP BY
        key;

    次の結果が返されます。

       key   |                    ans                    
    ---------+-------------------------------------------
     unreach | {"0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0"}
     Zhejiang    | {"1,1,1,0","1,1,1,0","0,0,0,0","0,0,0,0"}
     Beijing    | {"1,1,1,0","1,1,1,0","0,0,0,0","0,0,0,0"}
    (3 rows)