派生プロパティ

この記事のテーマ:

  • 派生プロパティが分析にどのように役立つかを理解する
  • 派生プロパティを作成する際に使用できる関数と演算子を確認します。

あるケースでは、Amplitudeに送信されなかったプロパティに基づいて分析を実行することがありますが、それは既存のプロパティから派生させることができます。Amplitude Dataの派生プロパティを使用して、新規イベントとユーザープロパティを遡及的に作成できます。複数の既存プロパティにまたがって適用できる関数と演算子を使用します。これらは、生データに影響を与えず、その場で計算されます。

例えば、ショッピングカートに追加されたアイテムが割引対象かどうかでグループ化するチャートを作成することができます。その場合、価格が一定額を超えるかどうかに基づいて、値がブール値である派生プロパティを作成することができます。

Screen_Shot_2021-08-03_at_2.35.25_PM.png

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

**注:**派生プロパティの作成は、プロジェクトのメインブランチで行う必要があります。

派生プロパティを作成するには、次のステップに従ってください:

  1. Amplitude Dataで、[Properties](プロパティ)に移動し、[Derived](派生)タブをクリックします。
  2. [+ Add Derived Property](+派生プロパティを追加)をクリックします。
  3. *[新しいプロパティを派生する]*モーダルで、新しいプロパティ名(必須)と説明(オプション)を入力します。
  4. 数式を入力します。有効な関数と演算子のリストについては、下記を参照してください。
  5. [Save](保存)をクリックします。

結果をプレビューする

入力した数式が有効である限り、数式エディタの下のスペースで結果をプレビューすることができます。そうするには、数式で使用するプロパティの既存の値を選択するか、または自由形式の値をテストしてください。[Create/Edit](作成/編集)モーダル、または、保存された派生プロパティのサイドパネルから実行できます。

Screen_Shot_2021-08-03_at_12.46.09_PM.png

派生プロパティの使用例

以前の参照URLの例では、次のような文字列演算子を使用して数式を書くことができました:

SPLIT(referrer_url, "/", 2)

この式は、例えば、値「https://www.google.com/search?q=amplitude」を、値「www.google.com」に変換します。" しかし、これをさらに簡素化して、単に「google」だけにしたらどうなるでしょうか?これは、別のSPLIT関数内でSPLIT関数の結果をラップすることによって、実行できます。結果として出てくる数式は次のようになります:

SPLIT(SPLIT(referrer_url, "/", 2), ".", 1)

Amplitudeは、数学演算子もサポートしています。たとえば、小計とTipプロパティを含むイベントがあり、合計額に基づいていくつかの分析を実行したいとしましょう。次のように実行できます:

SUM(subtotal, tip)

合計注文サイズが$50を超えた場合、割引注文がいくつあるかを知りたいと思うようになるかもしれません。この数式には、特定の注文が割引を受け取るかどうかが表示されます:

IF(SUM(subtotal, tip) >= 50, true)

注意: 派生プロパティを使用するクエリは、数式の複雑さに応じて、クエリ時間が長い場合があります。派生プロパティごとに、最大10のプロパティ参照の制限もあります。

関数と演算子

文字列関数

関数 説明 結果
REGEXEXTRACT (text_property, regular_expression) regular_expressionに一致する文字列を抽出する REGEXEXTRACT("shirt-150", "[0-9]+") "150"
REGEXREPLACE (text_property, regular_expression, replacement_text) replacement_expressionと一致するテキストであるプロパティの値を、replacement_textと一致するテキストのそれで置き換えます。 REGEXREPLACE("en-US", "-.*", "") "en"
CONTACT(property1, property2) 別のプロパティまたはテキスト値で、プロパティを連結します。 CONTACT("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-")  
EXTRACT_FROM_DICT (property, text) 特定のキーに基づいて、辞書文字列から値を抽出する EXTRACT_FROM_DICT("{'id': 1, 'name': 'John', 'country': 'US'}", "name") "John"

数学関数

関数 説明 結果
SUM(num_property1, num_property2) or ADDITION( 他のプロパティまたは数字を持つプロパティを加算します。+演算子と同等 SUM(subtotal, tip) >>>  SUM(10, 2) 12
MINUS(num_property1, num_property2)または減算( 他のプロパティまたは数字を持つプロパティを減算します。-演算子と同等。 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
(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) 日付時間(YY-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-01 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) 日付プロパティのフォーマットを新しいフォーマットに変換します。
詳細については、Java SimpleDateFormatを参照してください。 DATE_TIME_FORMATTER ("05.01.2021 12:00:00:000", "MM.dd.yyyy hh:mm:ss:SSS", "yyyy/MM/dd") "2021/05/01"
今日() 現在の日は、UTCのエポック時間でロングとして表されます。 今日() - 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() Monday

配列関数

配列プロパティから作成された派生プロパティで計算を行う場合、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*)
 
*products is an array property (e.g. ['apple', 'orange', 'banana']) 3
GREATEST(property) 配列の最大値を取得します GREATEST(prices*)
 
*pricesは配列プロパティです(例:[3.5, 10, 2]) 10
LEAST(property) 配列の最小値を取得します LEAST(prices*)
 
*pricesは配列プロパティです(例:[3.5, 10, 2])
  2
COALESCE(property) 配列の最初の非null値を取得します COALESCE(locations*)
 
*locationsは配列プロパティです(例:[null, 'California', 'New York'])
  'California'

条件演算

演算 説明
IF(logical_expression, value_if_true, value_if_false) logical_expressionが真の場合は、value_if_trueを返します。そうでない場合は、value_if_falseを返します IF(price == 0, "true", "false")
IF(property == "(none)", "Property was not set", "Property was set")
IF(OR(region == "California", region == "New York"), "USA", "Other")
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)

String/numerical operators

演算
== 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”

演算子を設定する

セットリテラル(例:("apple", "orange"))は演算子の右側に表示する必要があります

演算
== IF(product == (“apple”,“orange”), "true", "false")
product = “apple”は"true"を返します
!= IF(product != (“apple”,“orange”), "true", "false")
product = “banana”は"true"を返します

Need help? Contact Support

Visit Amplitude.com

Have a look at the Amplitude Blog

Learn more at Amplitude Academy

© 2025 Amplitude, Inc. All rights reserved. Amplitude is a registered trademark of Amplitude, Inc.