Simple Log Serviceは、ウィンドウファンネル機能を提供します。 この関数を使用して、ユーザーの行動、アプリケーションのトラフィック、製品目標の変換などのデータを分析できます。 このトピックでは、ウィンドウファネル関数の構文について説明します。 このトピックでは、関数の使用方法の例も示します。
ウィンドウファネル関数は、次の構文をサポートしています。
分析ステートメントで文字列を使用する場合は、文字列を単一引用符 (')で囲む必要があります。 二重引用符 (") で囲まれていない、または囲まれている文字列は、フィールド名または列名を示します。 例えば、 'status' はステータスの文字列を示し、status または "status" はステータスログフィールドを示します。
関数 | 構文 | 説明 | SQLでサポート | SPLでサポート |
window_funnel( sliding_window, timestamp, event_id, ARRAY[ event_list01, event_list02 ...])) | スライディングタイムウィンドウでイベントチェーンを検索し、イベントチェーン内の連続イベントの最大数をカウントします。 event_idパラメーターの値がイベントチェーンで指定されている場合は、この構文を使用できます。 | √ | × | |
window_funnel( sliding_window, timestamp, ARRAY[ event_id=event_list01, event_id=event_list02 ...])) | スライディングタイムウィンドウでイベントチェーンを検索し、イベントチェーン内の連続イベントの最大数をカウントします。 event_idパラメーターの値がイベントチェーンで指定されておらず、event_idパラメーターにカスタム値を使用する場合は、この構文を使用できます。 | √ | × |
実装
ウィンドウファネル関数は、スライディングタイムウィンドウ内のイベントチェーンを検索し、イベントチェーン内の連続イベントの最大数をカウントするために使用されます。 ウィンドウファネル関数は、指定したイベントチェーンの最初のイベントからカウントを開始し、イベントを順番にチェックして、連続イベントの最大数を返します。
ウィンドウファンネル関数は、次のアルゴリズムに基づいて機能します。
この関数は、イベントチェーンの最初のイベントからカウントを開始し、イベントカウンタの初期値を1に設定します。 次いで、スライディング時間ウィンドウが開始する。
スライディングタイムウィンドウでは、イベントチェーン内のイベントが順番に発生すると、イベントカウンタがインクリメントされます。
スライディングタイムウィンドウでは、イベントチェーン内のイベントのシーケンスが中断されると、イベントカウンタが停止します。 検索が停止し、新しい検索が開始されます。 連続するイベントの最大数は、最後の検索が終了するまでカウントされます。
最後の検索の最後に、カウントの値が複数存在する場合、関数はカウントの最大値を返します。 カウントの最大値は、連続するイベントの最大数を示す。
たとえば、100秒のスライドタイムウィンドウと、イベントチェーンにイベント1、イベント2、イベント3、イベント4、およびイベント5のパターンを指定します。 しかしながら、イベントチェーン内のイベントは、イベント1、イベント2、イベント4、イベント5、イベント1、およびイベント3の順序で発生する。 スライディング時間ウィンドウでは、連続イベントの最大数は2です。 値2は、イベント1とイベント2との間の連続関係を示す。
関数は、イベントチェーンの最初のイベントからカウントを開始する必要があります。 たとえば、関数がイベント2、イベント3、およびイベント4のシーケンスでカウントを開始する場合、関数は0を返します。
この関数は、イベントチェーンで発生するすべてのイベントをカウントする必要があります。 例えば、イベント4はスライディング時間ウィンドウで発生するが、イベント3は発生しない。 この場合、この検索は、連続するイベントの最大数をカウントすることには関与しない。
構文
ウィンドウファネル関数は、次の構文をサポートしています。
event_idパラメーターの値がイベントチェーンで指定されている場合は、次の構文を使用できます。
window_funnel(sliding_window, timestamp, event_id, ARRAY[event_list01, event_list02...])
event_idパラメーターの値がイベントチェーンで指定されておらず、event_idパラメーターのカスタム値を使用する場合は、次の構文を使用できます。
window_funnel(sliding_window, timestamp, ARRAY[event_id=event_list01, event_id=event_list02...])
パラメーター
パラメーター | 説明 |
sliding_window | スライド時間ウィンドウ。 単位は秒です。 このパラメーターの値はbigint型です。 |
timestamp | タイムスタンプ。 単位は秒です。 このパラメーターの値はbigint型です。 Simple Log Serviceの組み込み __time__ フィールドを使用することを推奨します。 |
event_id | ログフィールドの名前。 このパラメーターの値は、イベントの名前です。 例: イベントA、イベントB、またはイベントC。このパラメーターの値はvarchar型です。 |
event_list | カスタムイベントチェーン。最大32個のイベントを含めることができます。 このパラメーターの値は配列型です。 例:
|
例
eコマースストアは、プロモーション活動をホストし、ウィンドウファンネル機能を使用して活動の変換パフォーマンスを分析しました。 変換プロセスは、商品に関する情報を閲覧するステップと、商品をオンラインショッピングカートに追加するステップと、商品を購入するステップとの3つのステップからなる。 次の図は、Simple log Serviceによって収集されるサンプルログを示しています。
ログフィールド | 説明 |
behavior_type | ユーザーの行動のタイプ。 有効な値:
|
カテゴリ_id | 商品のカテゴリID。 |
iteme_id | 商品のID。 |
timestamp | ユーザーの動作が発生した時点。 |
ユーザー_id | ユーザーの ID。 |
例 1
ユーザーが24時間以内に実行した購入行動を分析します。
クエリ文
* | SELECT user_id, window_funnel( 86400, timestamp, ARRAY [behavior_type='pv', behavior_type='cart',behavior_type='buy'] ) AS levels GROUP BY user_id ORDER BY user_id LIMIT 1000
クエリおよび分析の結果
ユーザ24のレベルフィールドの値は3である。 ユーザは、商品に関する情報を閲覧し、その商品をオンラインショッピングカートに追加し、次いでその商品を購入するという順序で購入を完了する。
ユーザ14のレベルフィールドの値は2である。 ユーザは、商品に関する情報を閲覧し、その商品をオンラインショッピングカートに追加するが、購入を完了しない。
例 2
さまざまな種類のユーザー行動を持つユーザーの数を分析します。
クエリ文
* | SELECT levels, count, sum(count) over( ORDER BY levels DESC ) AS total FROM ( SELECT levels, count(1) AS count FROM ( SELECT user_id, window_funnel( 86400, timestamp, ARRAY [behavior_type='pv', behavior_type='cart',behavior_type='buy'] ) AS levels FROM log GROUP BY user_id ) GROUP BY levels ORDER BY levels )
クエリおよび分析の結果
商品に関する情報を閲覧するユーザの数は513,194である。 商品に関する情報を閲覧した後に購入プロセスを継続しないユーザーの数は138,491です。
オンラインショッピングカートに商品を追加するユーザーの数は374,703です。 オンラインショッピングカートに商品を追加した後に購入プロセスを続行しないユーザーの数は198,642です。
商品を購入するユーザーの数は176,061です。
例 3
このプロモーション活動のコンバージョン率を計算します。
絶対コンバージョン率: ユーザーの総数に対するユーザーの行動の種類を実行するユーザーの割合。
相対コンバージョン率: 異なるタイプのユーザー行動を実行するユーザーに対する、あるタイプのユーザー行動を実行するユーザーの割合。 後者のタイプのユーザ行動は、前者のタイプのユーザ行動の前に発生した。
クエリ文
* | SELECT *, 100.0 * total /(sum(count) over()) AS "Absolute conversion rate", if( lag(total, 1, 0) over() = 0, 100, (100.0 * total / lag(total, 1, 0) over()) ) AS "Relative conversion rate" FROM ( SELECT levels, count, sum(count) over( ORDER BY levels DESC ) AS total FROM ( SELECT levels, count(1) AS count FROM ( SELECT user_id, window_funnel( 86400, timestamp, ARRAY [behavior_type='pv', behavior_type='cart',behavior_type='buy'] ) AS levels FROM log GROUP BY user_id ) GROUP BY levels ) ORDER BY levels )
クエリおよび分析の結果
テーブル内のクエリと分析結果
ファネルチャートでのクエリと分析の結果