ディメンション別グループ化ファネル関数を使用すると、さまざまなディメンションに基づいて結果をグループ化して表示し、イベントの関連プロパティを指定できます。たとえば、日、国、または 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` 関数の使用方法について説明します。
`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');`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 日以内のファネルデータと各日のファネルデータを分析します。
データを準備するには、次のコマンドを実行します。
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');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:複数暦日ウィンドウに基づいて暦日ごとにグループ化されたユーザーのファネル結果を表示する
データを準備するには、次のコマンドを実行します。
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');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)