仮想プロパティ作成のベストプラクティス
仮想プロパティとは、取り込み済みのプロパティフィールドに対してSQL式で二次計算を行って作成するプロパティです。仮想プロパティのSQL式はtrino構文を使用します。trinoの構文や関数の使い方はTrinoドキュメントを参照してください。
活用シーン1:時間差の計算
トラッキングでは、通常ユーザーのライフサイクル日数をイベントプロパティとして収集することはありません。その場合、イベントプロパティにユーザーの登録時間を追加し、次の方法でユーザーがイベントを発生させた時点のライフサイクルを取得できます。date_diff(unit, timestamp1, timestamp2)関数を使ってユーザープロパティ「登録時間」とイベントプロパティ「イベント発生時間」の間隔日数を計算し、仮想ユーザープロパティ「ユーザーのライフサイクル日数」を生成します。例:date_diff('day', date("register_time"), date("#event_time"))。
活用シーン2:型変換
運用中に、送信されたプロパティの型が想定と異なる場合があります。cast(value AS type)関数でプロパティの型を変換できます。なお、プロパティ値を想定の型に強制変換できない場合、新しいプロパティ値は空になります。ルールの例:cast(old_prop_string as int)
活用シーン3:タイムスタンプの変換
登録時間などのカスタムプロパティが数値型のタイムスタンプとして送信されている場合は、from_unixtime(unixtime)関数で時間形式に変換すると、システムでのフィルタリングやグループ化などの操作に使用できます。ルールの例:from_unixtime("register_time")
活用シーン4:文字の切り出し
場合によっては、1つのプロパティで送信される内容が複数の情報の組み合わせになっていることがあります。たとえば「報酬獲得」プロパティの値が「宝石獲得300」という文字列で送信されている場合に、このプロパティの決まった位置の文字を切り出して新しいプロパティにしたいときは、cast(substring("get_reward", 5, 4) as int)という式で実現できます。substring(string, start, length)関数は文字列からstartを起点とする長さlengthの部分を切り出すもので、さらにcast(value AS type)関数で切り出した部分を数値型に変換し、後続の分析に使用します。
活用シーン5:複合重複排除
ゲームのデータ分析では、アカウントIDやサーバーIDなどの共通イベントプロパティを記録することがよくありますが、現在システムが提供している重複排除計算は単一のプロパティを対象とするものだけです。アカウントIDとサーバーIDの組み合わせで重複排除したい場合は、concat(server_id, '@',account_id)というルールの仮想プロパティを作成できます。concat(string1, ..., stringN)関数は、複数のテキスト型プロパティを連結するために使用できます。
活用シーン6:条件判定
ゲームのテスト段階ではデータリセットが行われることがあります。データリセットの前後でユーザーのIDは変わりませんが、リセット前後のイベントデータはそれぞれ独立しており、引き継ぎ関係はありません。また、サーバーごとにリセットの時間が異なる場合もあります。このとき、1つのプロパティで個々のユーザーのイベントがリセット前かリセット後かを区別したい場合は、次の仮想プロパティを作成することで実現できます:
case
when "serverid" = 1 and "#event_time" > cast('2020-11-15 10:30:00.000' as timestamp) then 'リセット後'
when "serverid" = 2 and "#event_time" > cast('2020-11-22 10:30:00.000' as timestamp) then 'リセット後'
else 'リセット前'
end
活用シーン7:定数
IF関数を使うと、定数の仮想プロパティを作成できます。たとえば、リテンションモデルで再訪人数の累積合計も同時に表示したい場合は、定数1の仮想プロパティを作成し、このプロパティに対して集計計算を行います。ルールは次のとおりです
if("#event_time" is not null, 1, 1)。ここでの"#event_time"には、通常、空にならないシステムフィールドを設定します。

