このページでは

派生プロパティ

派生プロパティは、Amplitude Dataの関数と演算子を使用して、既存のプロパティから遡って新しいイベントとユーザープロパティを作成します。 Amplitudeはクエリ時にそれらを動的に計算し、生データを変更することはありません。 これらを使用して、元のイベントペイロードで送信しなかった値について分析を実行できます。

既存のプロパティから計算された値が必要で、データを再計測したり再取り込んだりしたくない場合は、派生プロパティを使用してください。 イベント時にクライアントから送信される値が必要な場合は、代わりに通常のイベントプロパティを使用してください。 複数の未加工イベントから構築された、キュレートされた名前付きイベントが必要な場合は、代わりにカスタム イベントを使用してください。

たとえば、カートアイテムの価格がしきい値を超えているかどうかに基づいて、値が論理値である派生プロパティを作成します。

派生プロパティを作成する

派生プロパティを作成するには、プロジェクトのmainブランチにいる必要があります。

派生プロパティを作成するには、次の手順に従います。

  1. Amplitudeデータで、[トラッキングプラン] > [プロパティ] に移動し、[派生プロパティ] タブを選択します。
  2. 派生プロパティを追加」を選択します。
  3. 派生プロパティに名前を付けます。
  4. プロパティに、説明(提案機能を使用する場合を除き、オプション)やこのプロジェクト内のグラフでのプロパティの表示状況など、関連するメタデータをすべて追加します。
  5. 数式を入力します。 以下の有効な関数と演算子のリストを確認してください。
  6. [保存] を選択します。

結果をプレビューする

入力した数式が有効である限り、数式エディタの下のスペースで結果をテストできます。 数式で使用されているプロパティの既存の値を選択するか、自由形式の値を入力してテストします。 保存された派生プロパティについては、作成/編集モーダルまたはサイドパネルからテストできます。

派生プロパティの使用例

リファラURLの例を使用すると、次のような文字列演算子を使用して数式を作成できます。

SPLIT(PROPERTY('referrer_url','event'), "/", 2)

この数式は、「https://www.google.com/search?q=amplitude」などの値を「www.google.com」という値に変換します。 ここからさらに「google」に絞り込むには、SPLIT関数の結果を別のSPLIT関数内にラップします。結果の数式は次のようになります。

SPLIT(SPLIT(PROPERTY('referrer_url','event'), "/", 2), ".", 1)

Amplitudeは数学演算子もサポートしています。 たとえば、小計とチップのプロパティを含むイベントがあり、合計金額に基づいて分析を実行したい場合は、次の数式を使用します。

SUM(PROPERTY('subtotal','event'), PROPERTY('tip','event'))

注文総額が50ドルを超える場合に特定の注文が割引を受けるかどうかを判断するには、次の数式を使用します。

IF(SUM(PROPERTY('subtotal','event'), PROPERTY('tip','event')) >= 50, 'true')

派生プロパティを使用するクエリでは、数式の複雑さによってはクエリ時間が長くなる場合があります。 派生プロパティごとに最大 10 個のプロパティ参照の制限も適用されます。

関数と演算子

文字列関数

  • REGEXEXTRACT (text_property, regular_expression)
    • 説明:正規表現に一致する部分文字列を抽出します。
    • REGEXEXTRACT("shirt-150", "[0-9]+")
    • 結果150
  • REGEXREPLACE (text_property, regular_expression, replacement_text)
    • 説明:プロパティの値を、正規表現に一致するテキストから置換テキストに置き換えます。
    • REGEXREPLACE("en-US", "-.*", "")
    • 結果en
  • CONCAT(property1, property2)
    • 説明: プロパティを別のプロパティまたはテキスト値と連結します。
    • CONCAT("firstName", "lastName")
    • 結果firstName lastName
  • LOWERCASE (text_property)
    • 説明:プロパティ値のすべての文字を小文字に変換します。
    • LOWERCASE("John")
    • 結果john
  • UPPERCASE (text_property)
    • 説明:プロパティ値のすべての文字を大文字に変換します。
    • UPPERCASE("John")
    • 結果JOHN
  • SPLIT (property, separator, [index])
    • 説明: 区切り文字に基づいてプロパティを分割し、分割された要素の配列を返します。  オプションのインデックスを受け取り、そのインデックスにある要素を返します。
      • `SPLIT("a_b_c", "_")
      • SPLIT("john@example.com", "@", 0)`
    • 結果
      • `["a", "b", "c"]
      • "john"`
  • REMOVE (property, text)
    • 説明:プロパティ内のテキストの出現箇所をすべて削除します。
    • REMOVE("en-US", "en-")
    • 結果US
  • EXTRACT_FROM_DICT (property, text)
    • 説明:特定のキーに基づいて辞書文字列から値を抽出します。
    • EXTRACT_FROM_DICT("{'id': 1, 'name': 'John', 'country': 'US'}", "name")
    • 結果John

数学関数

オブジェクト関数

日付/時刻関数

Amplitudeでは、Unixタイムスタンプをすべてミリ秒単位にする必要があります。

配列関数

配列プロパティから作成された派生プロパティに対して計算を実行する場合、Amplitudeは最初の子のみが配列プロパティであると仮定します。 Amplitude は他の子も配列プロパティである場合でも、他の子の最初の値のみを考慮します。 以下にいくつかの例を示します。

plaintext
Example 1  
 propA = [1,2,3], propB = [a,b,c]  
 CONCAT(propA, propB) = [1a, 2a, 3a]  
Example 2  
 propA = [1, 2, 3], propB = [a]  
 CONCAT(propA, propB) = [1a, 2a, 3a]  
Example 3  
 propA = [1], propB = [a, b, c]  
 CONCAT(propA, propB) = [1a]

プロパティ関数

*[プロパティを挿入]*ドロップダウンからプロパティを選択すると、Amplitudeでは当該プロパティを参照するプロパティ関数がエディタに直接挿入されます。また、この関数は、別のAmplitudeプロパティを参照したい場所に手動で挿入することもできます。

これらの関数は他の関数内で使用できます。

参照イベント時刻

派生プロパティ数式でイベントのタイムスタンプを使用するには、派生プロパティビルダーの*[プロパティを挿入]ドロップダウンから*[イベント時刻]**を選択します。

派生プロパティ数式内では、Event Timeはエポックミリ秒単位のlong型の値です。日付を読みやすく表示するには、LONG_TO_TIMEまたはLONG_TO_DATEでラップします。イベント時刻TIME_TO_LONGDATE_TO_LONGでラップしないでください。値はすでにlong型であるため、変換するとnoneが返されます。イベント時刻を日付や日時のプロパティと比較するには、他方(イベント時刻でない方)のプロパティに対してTIME_TO_LONGまたはDATE_TO_LONGを使用して、long型の値に変換します。

条件演算子

文字列/数値演算子

集合演算子

セットリテラル(「リンゴ」、「オレンジ」)は演算子の右側に表示する必要があります。

  • ==
      • IF(product == ("apple","orange"), "true", "false")
      • プロダクト = "apple"、"true" を返します
  • !=
      • IF(product != ("apple","orange"), "true", "false")
      • プロダクト = "banana"、"true" を返します

並列演算子

データの配列に対して操作を実行し、カート分析の実行を支援します。

並列演算子を使用するには、少なくとも1つのプロパティが子カートのプロパティである必要があります。また、両方のプロパティが同じ親プロパティの下に存在する必要があります。

たとえば、products.priceproducts.quantityは互換性があります。products.priceshoppinglist.quantityは親プロパティが異なるため互換性がありません。

2つの配列で並列演算子を使用する場合、ITは各位置に対応する値を加算、乗算、または比較します。たとえば、PARALLEL_SUM([1, 3, 5], [2, 4, 6])の場合、[3, 7, 11]を返します。

一方の入力が配列で、もう一方がスカラー(単一の数値)の場合、スカラーは配列の長さに一致するようにブロードキャストされます。 たとえば、PARALLEL_SUM([1, 3, 5], 1)の場合は[2, 4, 6]を返し、PARALLEL_PRODUCT(2, [4, 5, 6])の場合は[8, 10, 12]を返します。

並列演算子によって作成された派生プロパティは、数式で使用される親カートプロパティの子プロパティになります。 たとえば、PARALLEL_PRODUCT(PROPERTY('products.price', 'event'), PROPERTY('products.quantity', 'event'))を使用して派生プロパティrevenueを作成すると、revenueproductsの子プロパティになります。

並列演算子を使用して作成された派生プロパティをチャートで使用するには、まず親カートのプロパティ({:} とマークされています)を選択します。 その後、派生プロパティは子プロパティ選択リストに表示されます。

並列演算子の例

次のカートプロパティを持つ購入イベントがあります:

json
"Products": [{
    "brand": "Apple","categories": "Digital Content","department": "Electronics",
    "price": 24.99,"quantity": 1
}, {
    "brand": "Adidas","categories": "Newsletter","department": "Electronics",
    "price": 24.99,"quantity": 1
}, {
    "brand": "Fossil","categories": "Digital Content","department": "Women's Clothing",
    "price": 24.99,"quantity": 2
}]

PARALLEL_PRODUCTで派生プロパティRevenueを作成します。

plaintext
PARALLEL_PRODUCT(
    PROPERTY('Products.price', 'event'),
    PROPERTY('Products.quantity','event')
)

このプロパティをチャートに追加する場合、Brandでグループ化してブランド別の収益を表示します。

また、派生プロパティRevenueSUM_ARRAYを使用して、カートの合計値を計算することもできます。

plaintext
SUM_ARRAY(PROPERTY('Revenue', 'derived'))

すると、カート内のアイテムにおけるすべての収益値の合計が返されます。これは、カートの合計値でフィルタリングしたりグループ化したりする場合に便利です。

一般的な派生プロパティの式

このセクションでは、派生プロパティ式のいくつかの一般的な使用例について説明します。

カスタマーの年齢を計算する

plaintext
CEIL(
    DIVIDE(
        MINUS(
            PROPERTY('server_upload_time', 'amplitude_user'),
            TIME_TO_LONG(PROPERTY('Created At', 'user'))
        ),
        86400000
    )
)

この数式は、日付と時刻のデータ型を使用してユーザープロパティを追跡する場合に使用します。このユーザープロパティが設定されたときにトリガーされたイベントの時刻からのユーザーの年齢(ユーザーがシステムに存在していた期間)を計算します。

登録からの日数を計算する

イベント時刻を日付(date)または日時(datetime)プロパティと組み合わせて使用すると、イベントとユーザーの登録日などの固定日付との間の経過日数を計算できます。派生プロパティビルダーで、「プロパティを挿入」ドロップダウンから「イベント時刻」を選択し、次のような数式を作成します。

plaintext
DIVIDE(
    MINUS(
        PROPERTY('Event Time', 'event'),
        TIME_TO_LONG(PROPERTY('registration_date', 'user'))
    ),
    86400000
)

この例では、registration_dateが日時文字列("2023-08-18 17:37:39"など)であることが前提です。数式内では、イベント時刻がエポックミリ秒のlong型として機能します。この数式では、TIME_TO_LONGで登録日をlong型に変換し、イベント時刻から減算し、86400000(1日のミリ秒数)で割ります。

2つの日付の差を取得する

plaintext
DIVIDE(  
  MINUS(  
    DATE_TO_LONG(  
        PROPERTY(  
            'start_date', 'user'  
        )  
    ),  
    DATE_TO_LONG(  
        PROPERTY(  
            'end_date', 'user'  
        )  
    )  
  ),  
  86400000   
)

出力例。

上記の派生プロパティの場合、Amplitudeではend_datestart_dateのプロパティをUNIXタイムスタンプに変換して、これらの差分を算出します。次に、Amplitudeはこの結果を86400000(1日のミリ秒数)で割ります。

この出力は double 型です(例: 2.0)。

標準化された日付形式を出力

plaintext
IF(  
    DATE_TIME_FORMATTER(  
        PROPERTY(  
            'publishDate',  
            'event'  
        ),  
        "yyyy-MM-dd'T'HH:mm:ssX",  
        'yyyy-MM-dd'  
    )
    contains '-',  
    DATE_TIME_FORMATTER(  
        PROPERTY(  
            'publishDate',  
            'event'  
        ),  
        "yyyy-MM-dd'T'HH:mm:ssX",  
        'yyyy-MM-dd'  
    ),  
    IF(  
        DATE_TIME_FORMATTER(  
            PROPERTY(  
                'publishDate',  
                'event'  
            ),  
            "yyyy-MM-dd HH:mm:ss",  
            'yyyy-MM-dd'  
        )
        contains '-',  
        DATE_TIME_FORMATTER(  
            PROPERTY(  
                'publishDate',  
                'event'  
            ),  
            "yyyy-MM-dd HH:mm:ss",  
            'yyyy-MM-dd'  
        ),  
        DATE_TIME_FORMATTER(  
            PROPERTY(  
                'publishDate',  
                'event'  
            ),  
            "yyyy-MM-dd",  
            'yyyy-MM-dd'  
        )  
    )  
)

出力例。

日付を標準の日付形式にフォーマットする方法の1つは、一連のIFステートメントを使用することです。 より具体的な条件が最初に来ることを確認してください。 ここにある$<number>を実際のプロパティに置き換えます。

カスタマーが登録した年月を取得する

plaintext
CONCAT(  
    REGEXEXTRACT(  
        PROPERTY(  
            'start_date',  
            'user'  
        ),  
        'dddd-dd'  
    ), "-01"  
)

この例では、派生プロパティはより詳細な値を含むプロパティからサインアップ月と年を取得し、「-01」を付加して月の始まりに設定します。値から「年」と「月」を取得するにはREGEXEXTRACT()を使用し、「"-01"」を付け加えるにはCONCAT()を使用します。 ここにある$<number>を実際のプロパティに置き換えます。

既存のプロパティ値を置換する

plaintext
IF(
    OR(
        REGEXEXTRACT(
            PROPERTY(
                "package",
                "event"
                ),
            'Casual'
        ) =='Casual',
        REGEXEXTRACT(
            PROPERTY(
                "package",
                "event"
            ),
            '1 Job Posting'
        )=='1 Job Posting',
        REGEXEXTRACT(
            PROPERTY(
                "package",
                "event"
            ),
            '1 Basic'
        )=='1 Basic'
    ),
    'Casual',
    'False'
)

出力例。

複数のプロパティ値を置換するには、まずREGEXEXTRACT()を使用してプロパティから文字列を取得します。そして、IFステートメント内のORステートメントを使用して、プロパティから取得した値に、置換したい値が含まれているかどうかを確認します。この例では、プロパティ値が、指定された値のいずれかと一致する場合、数式により値がCasualに置換されます。それ以外の場合はFalseに置換されます。ここにある$<number>を実際のプロパティに置き換えます。

誤って文字列として取り込まれた配列の長さをカウントします

SPLITを使用して文字列を配列形式に変換します:

plaintext
SPLIT(  
PROPERTY('color', 'event'),  
','  
)

出力例:

スクリーンショット 2023-09-28 at 14.39.54.png

プロパティの色は「Red, Green, Blue」という文字列としてAmplitudeに取り込まれました。SPLITの使用後、結果として得られる値は[Red, Green, Blue]になります。

ITEM_COUNTを使用する新しい派生プロパティ内で上記の派生プロパティを使用します。

plaintext
ITEM_COUNT(  
PROPERTY("Transform into Array", "derived")  
)

出力例:

スクリーンショット 2023-09-28 14.42.30.png

これで、基本データが配列になりました。ITEM_COUNTは、配列を構成する項目の数をカウントします。

これは役に立ちましたか?