派生プロパティ
派生プロパティは、Amplitude Dataの関数と演算子を使用して、既存のプロパティから遡って新しいイベントとユーザープロパティを作成します。 Amplitudeはクエリ時にそれらを動的に計算し、生データを変更することはありません。 これらを使用して、元のイベントペイロードで送信しなかった値について分析を実行できます。
既存のプロパティから計算された値が必要で、データを再計測したり再取り込んだりしたくない場合は、派生プロパティを使用してください。 イベント時にクライアントから送信される値が必要な場合は、代わりに通常のイベントプロパティを使用してください。 複数の未加工イベントから構築された、キュレートされた名前付きイベントが必要な場合は、代わりにカスタム イベントを使用してください。
たとえば、カートアイテムの価格がしきい値を超えているかどうかに基づいて、値が論理値である派生プロパティを作成します。
派生プロパティを作成する
派生プロパティを作成するには、プロジェクトのmainブランチにいる必要があります。
派生プロパティを作成するには、次の手順に従います。
- Amplitudeデータで、[トラッキングプラン] > [プロパティ] に移動し、[派生プロパティ] タブを選択します。
- 「派生プロパティを追加」を選択します。
- 派生プロパティに名前を付けます。
- プロパティに、説明(提案機能を使用する場合を除き、オプション)やこのプロジェクト内のグラフでのプロパティの表示状況など、関連するメタデータをすべて追加します。
- 数式を入力します。 以下の有効な関数と演算子のリストを確認してください。
- [保存] を選択します。
結果をプレビューする
入力した数式が有効である限り、数式エディタの下のスペースで結果をテストできます。 数式で使用されているプロパティの既存の値を選択するか、自由形式の値を入力してテストします。 保存された派生プロパティについては、作成/編集モーダルまたはサイドパネルからテストできます。
派生プロパティの使用例
リファラ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
数学関数
| 関数 | 概要 | 例 | 結果 |
|---|---|---|---|
SUM(num_property1, num_property2) | プロパティを他のプロパティまたは数値とともに追加します。 +演算子と同等です。エイリアスとしてADD使用します。 | SUM(subtotal, tip) >>> SUM(10, 2) | 12 |
MINUS(num_property1, num_property2) | プロパティを他のプロパティまたは数値で減算します。 -演算子と同等です。エイリアスとしてSUBTRACT使用します。 | MINUS(total, tip) >>> MINUS(12, 2) | 10 |
MULTIPLY (num_property1, num_property2) | プロパティと他のプロパティや数値を乗算します。*演算子と同等です。 | MULTIPLY(price, quantity) >>> MULTIPLY(2.50, 4) | 10 |
DIVIDE(numerator, denominator) | プロパティを別のプロパティまたは数値で割ります。/演算子と同等です。 | DIVIDE(calorie_intake, calorie_goal) >>> DIVID(1000, 2000) | 0.5 |
POWER(num_property, exponent) | プロパティの値を指数乗にします。 | POWER(property, 3) >>> POWER(2, 3) | 8 |
MIN(num_property1, num_property_2) | 2 つの数値の間の最小値を返します。 | MIN(5, 10) | 5 |
MAX(num_property1, num_property_2) | 2つの数値の間の最大値を返します。 | MAX(5, 10) | 10 |
CEIL(num_property) | 最も近い整数に切り上げます。 | CEIL(3.8) | 4.0 |
FLOOR(num_property) | 最も近い整数まで切り下げます。 | FLOOR(3.8) | 3.0 |
オブジェクト関数
| 関数 | 概要 | 例 | 結果 |
|---|---|---|---|
EXTRACT_FROM_DICT (property, text) | 特定のキーに基づいて辞書文字列から値を抽出します。 | EXTRACT_FROM_DICT("{'id': 1, 'name': 'John', 'country': 'US'}", "name") | John |
日付/時刻関数
Amplitudeでは、Unixタイムスタンプをすべてミリ秒単位にする必要があります。
| 関数 | 概要 | 例 | 結果 |
|---|---|---|---|
DATE_TO_LONG (date_property) | 日付を UNIX タイムスタンプに変換する | DATE_TO_LONG("2020-12-01") | 1606780800000 |
TIME_TO_LONG (time_property) | 日時(YYYY-MM-dd[T]HH:mm:ss)をUnixタイムスタンプに変換する | TIME_TO_LONG("2020-12-01 12:00:00") | 1606780800000 |
LONG_TO_TIME (number_property) | Unixタイムスタンプを日時(ユーザーのタイムゾーン)に変換する | LONG_TO_TIME (1606780800000) | 2020年12月1日 12:00:00 |
LONG_TO_DATE (number_property) | Unixタイムスタンプを日付に変換する (ユーザーのタイムゾーンに合わせたローカルなもの) | LONG_TO_DATE (1606780800000) | 2020-12-01 |
DATE_TIME_FORMATTER (datetime_property, old_format, new_format) | datetimeプロパティの形式を新しい形式に変換します。 詳細については、Java SimpleDateFormatを参照してください。 | DATE_TIME_FORMATTER ("05.01.2021 12:00:00:000", "MM.dd.yyyy hh:mm:ss:SSS", "yyyy/MM/dd") | 2021年5月1日 |
TODAY() | 現在の日付はUTCエポック時間のlong型で表示。 | TODAY() - start_date_in_ms >>> 1609459200000 - 1577836800000 | 31622400000 |
EVENT_HOUR_OF_DAY() | イベントのタイムスタンプから時刻(0~23)を取得します。 | EVENT_HOUR_OF_DAY() | 10 |
EVENT_DAY_OF_WEEK() | イベントのタイムスタンプから曜日を文字列として取得します。 例えば、月曜日です。 | EVENT_DAY_OF_WEEK() | 月曜日 |
配列関数
配列プロパティから作成された派生プロパティに対して計算を実行する場合、Amplitudeは最初の子のみが配列プロパティであると仮定します。 Amplitude は他の子も配列プロパティである場合でも、他の子の最初の値のみを考慮します。 以下にいくつかの例を示します。
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]
| 関数 | 概要 | 例 | 結果 |
|---|---|---|---|
ITEM_COUNT (property) | 配列プロパティの長さ。配列以外のプロパティのデフォルト値は 1 です。 | ITEM_COUNT(products) | 3 |
GREATEST(property) | 配列の最大値を取得します。 | GREATEST(prices) | 10 |
LEAST(property) | 配列の最小値を取得します。 | LEAST(prices) | 2 |
COALESCE(property) | 配列の最初の非 NULL 値を取得する | COALESCE(locations) | 'カリフォルニア' |
プロパティ関数
*[プロパティを挿入]*ドロップダウンからプロパティを選択すると、Amplitudeでは当該プロパティを参照するプロパティ関数がエディタに直接挿入されます。また、この関数は、別のAmplitudeプロパティを参照したい場所に手動で挿入することもできます。
これらの関数は他の関数内で使用できます。
| 関数 | 概要 | 例 | 結果 |
|---|---|---|---|
PROPERTY(property_name, property_type) | Amplitude内のプロパティへの参照。 使用可能なプロパティタイプ: "user"、"event"、"derived"、"lookup"、"group" | PROPERTY("first name","user") | プロジェクト内のユーザープロパティ「first name」への参照。 これは派生プロパティがAmplitudeのクエリサービスと通信する方法です。 |
PROPERTY(property_name, "group", group_type) | Amplitude内のグループプロパティへの参照。グループプロパティにはグループタイプが必要です。 | PROPERTY("name","group", "business") | プロジェクト内のグループタイプ「ビジネス」内のグループプロパティ「名前」への参照。 これは派生プロパティがAmplitudeのクエリサービスと通信する方法です。 |
参照イベント時刻
派生プロパティ数式でイベントのタイムスタンプを使用するには、派生プロパティビルダーの*[プロパティを挿入]ドロップダウンから*[イベント時刻]**を選択します。
派生プロパティ数式内では、Event Timeはエポックミリ秒単位のlong型の値です。日付を読みやすく表示するには、LONG_TO_TIMEまたはLONG_TO_DATEでラップします。イベント時刻はTIME_TO_LONGやDATE_TO_LONGでラップしないでください。値はすでにlong型であるため、変換するとnoneが返されます。イベント時刻を日付や日時のプロパティと比較するには、他方(イベント時刻でない方)のプロパティに対してTIME_TO_LONGまたはDATE_TO_LONGを使用して、long型の値に変換します。
条件演算子
| 演算子 | 概要 | 例 |
|---|---|---|
IF(logical_expression, value_if_true, value_if_false) | logical_expressionが真の場合、value_if_trueを返し、それ以外はvalue_if_falseを返します。 | IF(property == "(none)", "Property wasn't set", "Property was set") |
AND(logical_expression_1, logical_expression_2) | 両方の論理式が真の場合は true を返し、そうでない場合は false を返します。 | AND(is_subscribed == "true", has_valid_promo == "true") |
OR(logical_expression_1, logical_expression_2) | 論理式のいずれかが真であれば True を返し、そうでない場合は false を返します。 | OR(has_email == "true", has_phone == "true") |
SWITCH(expression, case_1, value_1, [case_2, value_2 ...], [default]) | 式を評価し、定義されたケースに基づいて値を返します。定義されている場合に、どのケースも満たされないときはデフォルト値を返し、それ以外の場合は null を返します。 | SWITCH(tier, "gold", 2, "silver", 2, "bronze", 1, 0) |
文字列/数値演算子
| 演算子 | 例 |
|---|---|
== | action == "purchase" |
!= | item_count != 0 |
contains | email contains "@gmail.com" |
does not contain | title does not contain "officer" |
<、<=、>、>= | duration >= 60 |
glob match | url glob match "https://www.google.*/*" |
glob does not match | query glob does not match "*/query=*" |
has prefix | title has prefix "sir" |
does not have prefix | title does not have prefix "sir" |
集合演算子
セットリテラル(「リンゴ」、「オレンジ」)は演算子の右側に表示する必要があります。
==- 例:
IF(product == ("apple","orange"), "true", "false")- プロダクト = "apple"、"true" を返します
- 例:
!=- 例:
IF(product != ("apple","orange"), "true", "false")- プロダクト = "banana"、"true" を返します
- 例:
並列演算子
データの配列に対して操作を実行し、カート分析の実行を支援します。
| 演算子 | 概要 |
|---|---|
PARALLEL_SUM | 各位置で2つの配列から対応する値を加算します。 |
PARALLEL_PRODUCT | 各位置にある2つの配列から対応する値を乗算します。この演算子を使用して、カート内の各アイテムの収益を計算します。 例えば、PARALLEL_PRODUCT(PROPERTY('Products.price', 'event'), PROPERTY('Products.quantity','event'))のようになります。 |
PARALLEL_MAX | 各位置にある 2 つの配列から対応する値のうち大きい方を返します。 |
PARALLEL_MIN | 各位置にある 2 つの配列から対応する値のうち小さい方を返します。 |
SUM_ARRAY | 単一の配列プロパティ内の数値要素をすべて合計します。この演算子を使用して、フィルタリングまたはグループ化に使用するカートの合計値を計算します。 たとえば、SUM_ARRAY([1, 2, 4])の場合、7を返します。 |
並列演算子を使用するには、少なくとも1つのプロパティが子カートのプロパティである必要があります。また、両方のプロパティが同じ親プロパティの下に存在する必要があります。
たとえば、products.price と products.quantityは互換性があります。products.price と shoppinglist.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を作成すると、revenueがproductsの子プロパティになります。
並列演算子を使用して作成された派生プロパティをチャートで使用するには、まず親カートのプロパティ({:} とマークされています)を選択します。 その後、派生プロパティは子プロパティ選択リストに表示されます。
並列演算子の例
次のカートプロパティを持つ購入イベントがあります:
"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
}]
| ブランド | 価格 | 数量 |
|---|---|---|
| Apple | 24.99 | 1 |
| アディダス | 24.99 | 1 |
| Fossil | 24.99 | 2 |
PARALLEL_PRODUCTで派生プロパティRevenueを作成します。
PARALLEL_PRODUCT(
PROPERTY('Products.price', 'event'),
PROPERTY('Products.quantity','event')
)
このプロパティをチャートに追加する場合、Brandでグループ化してブランド別の収益を表示します。
また、派生プロパティRevenueでSUM_ARRAYを使用して、カートの合計値を計算することもできます。
SUM_ARRAY(PROPERTY('Revenue', 'derived'))
すると、カート内のアイテムにおけるすべての収益値の合計が返されます。これは、カートの合計値でフィルタリングしたりグループ化したりする場合に便利です。
一般的な派生プロパティの式
このセクションでは、派生プロパティ式のいくつかの一般的な使用例について説明します。
カスタマーの年齢を計算する
CEIL(
DIVIDE(
MINUS(
PROPERTY('server_upload_time', 'amplitude_user'),
TIME_TO_LONG(PROPERTY('Created At', 'user'))
),
86400000
)
)
この数式は、日付と時刻のデータ型を使用してユーザープロパティを追跡する場合に使用します。このユーザープロパティが設定されたときにトリガーされたイベントの時刻からのユーザーの年齢(ユーザーがシステムに存在していた期間)を計算します。
登録からの日数を計算する
イベント時刻を日付(date)または日時(datetime)プロパティと組み合わせて使用すると、イベントとユーザーの登録日などの固定日付との間の経過日数を計算できます。派生プロパティビルダーで、「プロパティを挿入」ドロップダウンから「イベント時刻」を選択し、次のような数式を作成します。
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つの日付の差を取得する
DIVIDE(
MINUS(
DATE_TO_LONG(
PROPERTY(
'start_date', 'user'
)
),
DATE_TO_LONG(
PROPERTY(
'end_date', 'user'
)
)
),
86400000
)
出力例。
上記の派生プロパティの場合、Amplitudeではend_dateやstart_dateのプロパティをUNIXタイムスタンプに変換して、これらの差分を算出します。次に、Amplitudeはこの結果を86400000(1日のミリ秒数)で割ります。
この出力は double 型です(例: 2.0)。
標準化された日付形式を出力
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>を実際のプロパティに置き換えます。
カスタマーが登録した年月を取得する
CONCAT(
REGEXEXTRACT(
PROPERTY(
'start_date',
'user'
),
'dddd-dd'
), "-01"
)
この例では、派生プロパティはより詳細な値を含むプロパティからサインアップ月と年を取得し、「-01」を付加して月の始まりに設定します。値から「年」と「月」を取得するにはREGEXEXTRACT()を使用し、「"-01"」を付け加えるにはCONCAT()を使用します。 ここにある$<number>を実際のプロパティに置き換えます。
既存のプロパティ値を置換する
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を使用して文字列を配列形式に変換します:
SPLIT(
PROPERTY('color', 'event'),
','
)
出力例:

プロパティの色は「Red, Green, Blue」という文字列としてAmplitudeに取り込まれました。SPLITの使用後、結果として得られる値は[Red, Green, Blue]になります。
ITEM_COUNTを使用する新しい派生プロパティ内で上記の派生プロパティを使用します。
ITEM_COUNT(
PROPERTY("Transform into Array", "derived")
)
出力例:

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