メインコンテンツまでスキップ

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はデフォルト値で、一般的なフンネルの計算を示します。
    • 1DEDUPLICATIONモードを示し、フィルタリングされたイベントチェーンには繰り返しのイベントが含まれていない必要があります。arrayパラメーターが[event_type = 'A'、event_type = 'B'、event_type = 'C'、event_type = 'D']であり、元のイベントチェーンが「A-B-C-B-D」の場合、「B」のイベントは繰り返され、フィルタリングされたイベントチェーンは「A-B-C」となります。
    • 2FIXEDモードを示し、フィルタリングされたイベントチェーンには指定されたシーケンスを乱すイベントが含まれていない必要があります。前述のarrayパラメーターを使用し、元のイベントチェーンが「A-B-D-C」の場合、イベント「D」がシーケンスを中断し、フィルタリングされたイベントチェーンは「A-B」となります。
    • 4INCREASEモードを示し、フィルタリングされたイベントは厳密に増加するタイムスタンプを持つ必要があります。重複するタイムスタンプはイベントチェーンを中断します。このモードはバージョン2.5からサポートされています。
  • array:定義されたイベントチェーンです。配列である必要があります。

戻り値

BIGINT型の値が返されます。

例1uidに基づいて連続したイベントの最大数を計算します。スライディングウィンドウは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が返されます。

例2uidに基づいて連続したイベントの最大数を計算します。スライディングウィンドウは1800秒で、フィルタリングモードは 01 を使用します。

この例では、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が返されます。

mode1 に変更して、もう一度文を実行します。

+------+-------+
| uid | level |
+------+-------+
| 1 | 3 |
| 2 | 1 |
+------+-------+
2 rows in set (0.05 sec)

フィルタリング後の最長のイベントチェーンは「Browse-Click-Order」であり、3が返されます。

例3uidに基づいて連続したイベントの最大数を計算します。スライディングウィンドウは1900秒で、フィルタリングモードは 02 を使用します。

この例では、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が返されます。

mode2 に変更して、もう一度文を実行します。

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」となります。

例4uidに基づいて連続したイベントの最大数を計算します。スライディングウィンドウは1900秒で、フィルタリングモードは 04 を使用します。

この例では、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 = 1uid = 2の両方で 3が返されます。

mode4 に変更して、もう一度文を実行します。

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, スライディングウィンドウフンネル