window_funnel
window_funnel
説明
スライディングウィンドウ内のイベントチェーンを検索し、イベントチェーン内の最大連続イベント数を計算します。この関数は、コンバージョン率の分析によく使用されます。v2.3からサポートされています。
この関数は、次のルールに従って動作します:
- イベントチェーン内の最初のイベントからカウントを開始します。最初のイベントが見つかった場合、イベントカウンターは1に設定され、スライディングウィンドウが開始されます。最初のイベントが見つからない場合は、0が返されます。
- スライディングウィンドウ内では、イベントチェーンのイベントが順番に発生した場合、カウンターが増加します。スライディングウィンドウを超えた場合、イベントカウンターは増加しません。
- 指定された条件に一致する複数のイベントチェーンがある場合、最長のイベントチェーンが返されます。
構文
BIGINT window_funnel(BIGINT window, DATE|DATETIME time, INT mode, array[cond1, cond2, ..., condN])
パラメーター
window
:スライディングウィンドウの長さです。サポートされるデータ型はBIGINTです。単位はtime
パラメーターに依存します。time
のデータ型がDATEの場合、単位は日です。time
のデータ型がDATETIMEの場合、単位は秒です。time
:タイムスタンプを含む列です。DATEおよびDATETIMEのデータ型がサポートされています。mode
:イベントチェーンのフィルタリングモードです。サポートされるデータ型はINTです。値の範囲:0、1、2。0
はデフォルト値で、一般的なフンネルの計算を示します。1
はDEDUPLICATION
モードを示し、フィルタリングされたイベントチェーンには繰り返しのイベントが含まれていない必要があります。array
パラメーターが[event_type = 'A'、event_type = 'B'、event_type = 'C'、event_type = 'D']
であり、元のイベントチェーンが「A-B-C-B-D」の場合、「B」のイベントは繰り返され、フィルタリングされたイベントチェーンは「A-B-C」となります。2
はFIXED
モードを示し、フィルタリングされたイベントチェーンには指定されたシーケンスを乱すイベントが含まれていない必要があります。前述のarray
パラメーターを使用し、元のイベントチェーンが「A-B-D-C」の場合、イベント「D」がシーケンスを中断し、フィルタリングされたイベントチェーンは「A-B」となります。4
はINCREASE
モードを示し、フィルタリングされたイベントは厳密に増加するタイムスタンプを持つ必要があります。重複するタイムスタンプはイベントチェーンを中断します。このモードはバージョン2.5からサポートされています。
array
:定義されたイベントチェーンです。配列である必要があります。
戻り値
BIGINT型の値が返されます。
例
例1:uid
に基づいて連続したイベントの最大数を計算します。スライディングウィンドウは1800秒で、フィルタリングモードは 0
です。
この例では、action
テーブルを使用します。データは uid
でソートされています。
mysql> select * from action;
+------+------------+---------------------+
| uid | event_type | time |
+------+------------+---------------------+
| 1 | Browse | 2020-01-02 11:00:00 |
| 1 | Click | 2020-01-02 11:10:00 |
| 1 | Order | 2020-01-02 11:20:00 |
| 1 | Pay | 2020-01-02 11:30:00 |
| 1 | Browse | 2020-01-02 11:00:00 |
| 2 | Order | 2020-01-02 11:00:00 |
| 2 | Pay | 2020-01-02 11:10:00 |
| 3 | Browse | 2020-01-02 11:20:00 |
| 3 | Click | 2020-01-02 12:00:00 |
| 4 | Browse | 2020-01-02 11:50:00 |
| 4 | Click | 2020-01-02 12:00:00 |
| 5 | Browse | 2020-01-02 11:50:00 |
| 5 | Click | 2020-01-02 12:00:00 |
| 5 | Order | 2020-01-02 11:10:00 |
| 6 | Browse | 2020-01-02 11:50:00 |
| 6 | Click | 2020-01-02 12:00:00 |
| 6 | Order | 2020-01-02 12:10:00 |
+------+------------+---------------------+
17 rows in set (0.01 sec)
次の文を実行します:
select uid,
window_funnel(1800,time,0,[event_type='Browse', event_type='Click',
event_type='Order', event_type='Pay']) AS level
from action
group by uid
order by uid;
+------+-------+
| uid | level |
+------+-------+
| 1 | 4 |
| 2 | 0 |
| 3 | 1 |
| 4 | 2 |
| 5 | 2 |
| 6 | 3 |
+------+-------+
結果の説明:
uid = 1
の一致するイベントチェーンは「Browse-Click-Order-Pay」であり、4
が返されます。「Browse」イベントの時点(2020-01-02 11:00:00)以降が条件に合致せず、カウントされません。uid = 2
のイベントチェーンは最初のイベント「Browse」から始まらないため、0
が返されます。uid = 3
の一致するイベントチェーンは「Browse」ですが、Click
イベントは1800秒のウィンドウを超えているためカウントされません。uid = 4
の一致するイベントチェーンは「Browse-Click」であり、2
が返されます。uid = 5
の一致するイベントチェーンは「Browse-Click」であり、2
が返されます。Order
イベント(2020-01-02 11:10:00)はイベントチェーンに属しておらず、カウントされません。uid = 6
の一致するイベントチェーンは「Browse-Click-Order」であり、3
が返されます。
例2:uid
に基づいて連続したイベントの最大数を計算します。スライディングウィンドウは1800秒で、フィルタリングモードは 0
と 1
を使用します。
この例では、action1
テーブルを使用します。データは time
でソートされています。
mysql> select * from action1 order by time;
+------+------------+---------------------+
| uid | event_type | time |
+------+------------+---------------------+
| 1 | Browse | 2020-01-02 11:00:00 |
| 2 | Browse | 2020-01-02 11:00:01 |
| 1 | Click | 2020-01-02 11:10:00 |
| 1 | Order | 2020-01-02 11:29:00 |
| 1 | Click | 2020-01-02 11:29:50 |
| 1 | Pay | 2020-01-02 11:30:00 |
| 1 | Click | 2020-01-02 11:40:00 |
+------+------------+---------------------+
7 rows in set (0.03 sec)
次の文を実行します:
select uid,
window_funnel(1800,time,0,[event_type='Browse',
event_type='Click', event_type='Order', event_type='Pay']) AS level
from action1
group by uid
order by uid;
+------+-------+
| uid | level |
+------+-------+
| 1 | 4 |
| 2 | 1 |
+------+-------+
2 rows in set (0.02 sec)
uid = 1
では、「Click」イベント(2020-01-02 11:29:50)が繰り返されたイベントですが、モード 0
が使用されているため、カウントされます。したがって、4
が返されます。
mode
を 1
に変更して、もう一度文を実行します。
+------+-------+
| uid | level |
+------+-------+
| 1 | 3 |
| 2 | 1 |
+------+-------+
2 rows in set (0.05 sec)
フィルタリング後の最長のイベントチェーンは「Browse-Click-Order」であり、3
が返されます。
例3:uid
に基づいて連続したイベントの最大数を計算します。スライディングウィンドウは1900秒で、フィルタリングモードは 0
と 2
を使用します。
この例では、action2
テーブルを使用します。データは time
でソートされています。
mysql> select * from action2 order by time;
+------+------------+---------------------+
| uid | event_type | time |
+------+------------+---------------------+
| 1 | Browse | 2020-01-02 11:00:00 |
| 2 | Browse | 2020-01-02 11:00:01 |
| 1 | Click | 2020-01-02 11:10:00 |
| 1 | Pay | 2020-01-02 11:30:00 |
| 1 | Order | 2020-01-02 11:31:00 |
+------+------------+---------------------+
5 rows in set (0.01 sec)
次の文を実行します:
select uid,
window_funnel(1900,time,0,[event_type='Browse', event_type='Click',
event_type='Order', event_type='Pay']) AS level
from action2
group by uid
order by uid;
+------+-------+
| uid | level |
+------+-------+
| 1 | 3 |
| 2 | 1 |
+------+-------+
2 rows in set (0.02 sec)
uid = 1
の場合、モード 0
が使用されており、Pay
イベント(2020-01-02 11:30:00)がイベントチェーンを中断しないため、3
が返されます。
mode
を 2
に変更して、もう一度文を実行します。
select uid,
window_funnel(1900,time,2,[event_type='Browse', event_type='Click',
event_type='Order', event_type='Pay']) AS level
from action2
group by uid
order by uid;
+------+-------+
| uid | level |
+------+-------+
| 1 | 2 |
| 2 | 1 |
+------+-------+
2 rows in set (0.06 sec)
2
が返されます。Pay
イベントはイベントチェーンを中断し、イベントカウンターが停止します。フィルタリングされたイベントチェーンは「Browse-Click」となります。
例4:uid
に基づいて連続したイベントの最大数を計算します。スライディングウィンドウは1900秒で、フィルタリングモードは 0
と 4
を使用します。
この例では、action3
テーブルを使用します。データは time
でソートされています。
select * from action3 order by time;
+------+------------+---------------------+
| uid | event_type | time |
+------+------------+---------------------+
| 1 | Browse | 2020-01-02 11:00:00 |
| 1 | Click | 2020-01-02 11:00:01 |
| 2 | Browse | 2020-01-02 11:00:03 |
| 1 | Order | 2020-01-02 11:00:31 |
| 2 | Click | 2020-01-02 11:00:03 |
| 2 | Order | 2020-01-02 11:01:03 |
+------+------------+---------------------+
3 rows in set (0.02 sec)
次の文を実行します:
select uid,
window_funnel(1900,time,0,[event_type='Browse', event_type='Click',
event_type='Order']) AS level
from action3
group by uid
order by uid;
+------+-------+
| uid | level |
+------+-------+
| 1 | 3 |
| 2 | 3 |
+------+-------+
uid = 1
とuid = 2
の両方で 3
が返されます。
mode
を 4
に変更して、もう一度文を実行します。
select uid,
window_funnel(1900,time,4,[event_type='Browse', event_type='Click',
event_type='Order']) AS level
from action3
group by uid
order by uid;
+------+-------+
| uid | level |
+------+-------+
| 1 | 3 |
| 2 | 1 |
+------+-------+
1 row in set (0.02 sec)
uid = 2
の場合、モード 4
(厳密に増加する)が使用されています。同じ秒に「Click」が発生するため、「Click」と「Order」はカウントされません。したがって、1
が返されます。
キーワード
window_funnel, funnel, スライディングウィンドウフンネル