From f8f544e7d6c79bea77a5ff5a3fcbf8b2793f7a31 Mon Sep 17 00:00:00 2001 From: Akhil Prakash <94870426+akhil-prakash@users.noreply.github.com> Date: Tue, 30 Dec 2025 10:53:49 -0800 Subject: [PATCH 1/2] Update experiment-sequential-testing.md --- .../under-the-hood/en/experiment-sequential-testing.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/collections/under-the-hood/en/experiment-sequential-testing.md b/content/collections/under-the-hood/en/experiment-sequential-testing.md index 8a6316d27..88101c400 100644 --- a/content/collections/under-the-hood/en/experiment-sequential-testing.md +++ b/content/collections/under-the-hood/en/experiment-sequential-testing.md @@ -12,7 +12,7 @@ enable_math: true --- Experiment uses a sequential testing method of statistical inference. With sequential testing, results are valid whenever you view them. You can decide to end an experiment early based on observations made to that point. The number of observations you’ll need to make an informed decision is, on average, much lower than the number you’d need with [T-tests](/docs/feature-experiment/experiment-theory/analyze-with-t-test) or similar procedures. You can experiment rapidly, incorporating what you learn into your product and escalating the pace of your experimentation program. -Sequential testing has several advantages over T-tests. Primarily, you don’t need to know the number of observations necessary to achieve significance before you start the experiment. You can use both sequential testing and T-tests for binary metrics and continuous metrics. If you have concerns related to long tailed distributions affecting the Central Limit Theorem assumption, read this article about [outliers](/docs/feature-experiment/advanced-techniques/find-and-resolve-outliers-in-your-data). +Sequential testing has several advantages over T-tests. Primarily, you don’t need to know the number of observations necessary to achieve significance before you start the experiment. You can use both sequential testing and T-tests for binary metrics and continuous metrics. If you have concerns related to long tailed distributions affecting the Central Limit Theorem assumption, read this article about [outliers](/docs/feature-experiment/advanced-techniques/winsorization-in-experiment). Given enough time, the statistical power of sequential testing method is 1. If there is an effect size to be detected, this approach can detect it. @@ -132,4 +132,4 @@ The table below summarizes the number of rejections for different configurations | 3 | 0.05 | 0.2 | 0.20 | 0.0 | 0 | Using the same basic configurations as before, the number of rejections (out of 100 trials) is within the predetermined threshold of alpha = 0.05. With alpha set to 0.05, only 5% of the experiments yield false positives, as opposed to 30-50% when using a T-test. -{{/partial:collapse}} \ No newline at end of file +{{/partial:collapse}} From 840e9b4f74bed7f33c3a654663c1c2a05063fa08 Mon Sep 17 00:00:00 2001 From: markzegarelli Date: Mon, 5 Jan 2026 09:55:47 -0800 Subject: [PATCH 2/2] Removed links --- content/collections/pages/en/math.md | 39 +- markdown-issues.json | 718 --------------------------- 2 files changed, 1 insertion(+), 756 deletions(-) delete mode 100644 markdown-issues.json diff --git a/content/collections/pages/en/math.md b/content/collections/pages/en/math.md index a5352575c..65444d6d4 100644 --- a/content/collections/pages/en/math.md +++ b/content/collections/pages/en/math.md @@ -3,42 +3,5 @@ id: 4ab659f3-268f-46e8-b49c-453e5388b22d blueprint: page title: 'Math test' enable_math: true +published: false --- -Experiment uses a sequential testing method of statistical inference. With sequential testing, results are valid whenever you view them. You can decide to end an experiment early based on observations made to that point. The number of observations you’ll need to make an informed decision is, on average, much lower than the number you’d need with [T-tests](/docs/feature-experiment/experiment-theory/analyze-with-t-test) or similar procedures. You can experiment more quickly, incorporating what you learn into your product and escalating the pace of your experimentation program. - -$$ -\int_{a}^{b} f(x)\,dx = F(b) - F(a) -$$ - -Sequential testing has several advantages over T-tests. Primarily, you don’t need to know the number of observations necessary to achieve significance before you start the experiment. You can use both sequential testing and T-tests for binary metrics and continuous metrics. If you have concerns related to long tailed distributions affecting the Central Limit Theorem assumption, read this article about [outliers](/docs/feature-experiment/advanced-techniques/find-and-resolve-outliers-in-your-data). - -This article explains the basics of sequential testing, how it fits into Amplitude Experiment, and how you can make it work for you. - -## Hypothesis testing in Amplitude Experiment - -When you run an A/B test, Experiment conducts an hypothesis test using a randomized control trial. In this trial, users are randomly assigned to either a treatment variant or the control. The control represents your product in its current state, while each treatment includes a set of potential changes to your current baseline product. With a predetermined metric, Experiment compares the performance of these two populations using a test statistic.  - -In a hypothesis test, you’re looking for performance differences between the control and your treatment variants. Amplitude Experiment tests the null hypothesis  - -$$ -H_0:\ \delta = 0 -$$ - -where - -$$ -\delta = \mu_{\text{treatment}} - \mu_{\text{control}} -$$ - -states there’s no difference between treatment’s mean and control’s mean. - -For example, you want to measure the conversion rate of a treatment variant. The null hypothesis posits that the conversion rates of your treatment variants and your control are the same. - -The alternative hypothesis states that there is a difference between the treatment and control. Experiment’s statistical model uses sequential testing to look for any difference between treatments and control. - -There are many different sequential testing options. Amplitude Experiment uses a family of sequential tests called mixture sequential probability ratio test (mSPRT). The weight function, H, is the mixing distribution. The following mixture of likelihood ratios against the null hypothesis is such that: - -$$ - \Lambda_n = \int \prod_{i=1}^{n} \frac{f(x_i \mid \delta)}{f(x_i \mid 0)}\, dH(\delta) -$$ - diff --git a/markdown-issues.json b/markdown-issues.json deleted file mode 100644 index b9afd3e98..000000000 --- a/markdown-issues.json +++ /dev/null @@ -1,718 +0,0 @@ -{ - "timestamp": "2025-08-05T21:31:41.313Z", - "crawled": 749, - "errors": 2, - "skipped": 0, - "markdownIssues": [ - { - "type": "tables", - "description": "Unrendered table (pipe characters)", - "count": 4, - "samples": [ - "|" character separates non-repeating and repeating arguments. Any arguments after "|" are repeatable arguments and you can specify them any number of times. However, the entire list of arguments must be present in any multiple argument operator (meaning, you can't specify just one of three arguments, you must include all three).

\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Operator
DescriptionSyntax
Evaluates each SourceDescription sequentially on the returned JsonElement. Equivalent to evaluating a specific path when chaining BasicPaths. This also works with indexing into an array, for example ["path", "foo", "1"] chooses the element at index 1 (second element) in the array at "foo".The index must be provided as a string.["path", \\SOURCE_DESCRIPTION...]Example: ["path", "foo", "bar"] => obj['foo']['bar'].
Returns the first value returned by SOURCE_DESCRIPTION in the list.["any", SOURCE_DESCRIPTION, \\SOURCE_DESCRIPTION...]
Escapes a single JSON value so you can create a static value.Example: ["value", "amplitude-vacuum"...
Creates a dictionary (object) where the raw_strings are keys and values are the evaluated SOURCE_DESCRIPTIONS.["dict", "raw_string", SOURCE_DESCRIPTION, \\"raw_string", SOURCE_DESCRIPTION...]
Returns an array, where elements are the values returned by evaluating SOURCE_DESCRIPTIONS. If a SOURCE_DESCRIPTION fails to evaluate, it will be skipped["array", SOURCE_DESCRIPTION, \\SOURCE_DESCRIPTION...]
Determines the first true BooleanCondition and returns the result of the following SOURCE_DESCRIPTION. Throws a NoValueFoundAtSource exception if nothing evaluates to true.["condition"\\"cond", BOOLEAN_SOURCE, SOURCE_DESCRIPTION, \\BOOLEAN_SOURCE, SOURCE_DESCRIPTION...]
If the BOOLEAN_SOURCE evaluates to true, returns the first SOURCE_DESCRIPTION. Otherwise returns the second SOURCE_DESCRIPTION.["ifelse", BOOLEAN_SOURCE, SOURCE_DESCRIPTION, SOURCE_DESCRIPTION]
Evaluates the given sampleKey (second arg) with the samplePercent (first arg) to determine whether it should be in the sample. Returns boolean["sample_md5", SOURCE_DESCRIPTION, SOURCE_DESCRIPTION]
Assumes the string returned by SOURCE_DESCRIPTION is an ISO datetime string, for example, , and converts to milliseconds since epoch["iso_time_to_ms", SOURCE_DESCRIPTION]
Assumes the string returned by SOURCE_DESCRIPTION is milliseconds since epoch and converts to ISO datetime string, for example, ["ms_to_iso_time", SOURCE_DESCRIPTION]
Generates an ISO datetime string for right now["iso_time_now"]
Generates the milliseconds since epoch for right now["ms_time_now"]
Assumes the string returned by SOURCE_DESCRIPTION is a base64-encoded INT96, for example, , and converts to milliseconds since epoch["int96_time_to_ms", SOURCE_DESCRIPTION]
Takes in a RAW_STRING time format, for example, , and a that returns a string in that format, for example, '1/1/2021 5:06:07', and converts to milliseconds since epoch["parse_time_to_ms", RAW_STRING, SOURCE_DESCRIPTION]
Assumes the value returned by SOURCE_DESCRIPTION is a string json blob and returns the parsed json value["parse_json_element"\\"parse_json_object", SOURCE_DESCRIPTION]
Merges the json objects that each SOURCE_DESCRIPTION evaluates to["merge_dicts", SOURCE_DESCRIPTION, \\SOURCE_DESCRIPTION...]
Flattens a nested json object into a single layer json object["flatten_dict", "raw_string", INTEGER_SOURCE, SOURCE_DESCRIPTION]
Evaluates the specified SourceDescription the returned JsonElement without the requested fields["exclude_keys", SOURCE_DESCRIPTION, \\"raw_string"...]
Treats the results of each SOURCE_DESCRIPTION as a string and returns the concatenated string["concat", SOURCE_DESCRIPTION, \\SOURCE_DESCRIPTION...]
Replace all old_string within the value returned by SOURCE_DESCRIPTION with new_string. Returns a string or raises a NoValueException if SOURCE_DESCRIPTION can't be evaluated to a string. The old_string supports Java's regex syntax for matching patterns, more details at https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html["replace_with", "old_string", "new_string", SOURCE_DESCRIPTION]
Splits the value returned by SOURCE_DESCRIPTION by the specified character sequence. Returns a jsonArray or raises a NoValueException if SOURCE_DESCRIPTION can't be evaluated to a string["split", "raw_string", SOURCE_DESCRIPTION]
Returns the lowercase string["lowercase"\\"lower", SOURCE_DESCRIPTION]
Returns type of the source description as a string: 'string', 'list', 'dict', 'bool', 'number', 'null'["typeof", SOURCE_DESCRIPTION]
\n\n

Boolean operators

\n

These operators return a JsonPrimitive of type Boolean, so they're valid to use with and .

\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
OperatorDescriptionSource
Evaluates as a static boolean value. Throws an exception during initialization if RAW_JSON isn't a boolean value.["bool", any_json]
Return whether both arguments are true. Null values are treated as false, string 'true' or 'false' is cast to a boolean.["not"|", - "|"&&", SOURCE_DESCRIPTION, | SOURCE_DESCRIPTION...]
Return whether at least one argument is true. Null values are treated as false, string 'true' or 'false' is cast to a boolean.["or"|", - "||", SOURCE_DESCRIPTION, |" - ], - "url": "https://amplitude.com/docs/data/converter-configuration-reference" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* E *" - ], - "url": "https://amplitude.com/docs/web-experiment/tracking" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* (75th percentile - 25th percentile)\n
  • Lower Bound: 25th percentile - 1.5 *" - ], - "url": "https://amplitude.com/docs/feature-experiment/advanced-techniques/find-and-resolve-outliers-in-your-data" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* 0.95 = 0.9025 (90.25%)

    \n

    Instead of adding an experiment to multiple holdout groups, create a single group with all the relevant experiments instead. This will allow for a more even distribution of traffic across experiments. 

    \n

    In the example above, you would create just one holdout group containing all three experiments (A, B, and C).

    \n

    Case 2: Handle experiments with holdout groups and mutual exclusion

    \n

    Adding an experiment to a holdout group and a mutual exclusion group can also further limit the amount of traffic to the experiment. Each user will be evaluated for both the holdout group and the mutual exclusion group.

    \n

    For example, imagine the following holdout group and mutual exclusion group: 

    \n
      \n
    • The holdout group has a holdout percentage of 5% and contains experiment A.
    • \n
    • The mutual exclusion group has half the traffic directed to experiment A in slot 1, with the other half going to experiment B in slot 2.
    • \n
    \n

    In this scenario, experiment A receives about half of the total traffic:

    \n

    0.95 *" - ], - "url": "https://amplitude.com/docs/feature-experiment/advanced-techniques/holdout-groups-advanced-use-cases" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* 0.95 = 0.9025 (90.25%)

    \n

    Instead of adding an experiment to multiple holdout groups, create a single group with all the relevant experiments instead. This allows for a more even distribution of traffic across experiments. 

    \n

    In the example above, you would create just one holdout group containing all three experiments (A, B, and C).

    \n

    Handle experiments with holdout groups and mutual exclusion

    \n

    Adding an experiment to a holdout group and a mutual exclusion group can also further limit the amount of traffic to the experiment. Experiment evaluates each user for both the holdout group and the mutual exclusion group.

    \n

    For example, imagine the following holdout group and mutual exclusion group: 

    \n
      \n
    • The holdout group has a holdout percentage of 5% and contains experiment A.
    • \n
    • The mutual exclusion group has half the traffic directed to experiment A in slot 1, with the other half to experiment B in slot 2.
    • \n
    \n

    In this scenario, experiment A receives about half of the total traffic:

    \n

    0.95 *" - ], - "url": "https://amplitude.com/docs/feature-experiment/advanced-techniques/holdout-groups-exclude-users" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* 0.5 = 0.25, or 25% of the total traffic.

    \n

    Instead of adding an experiment to multiple mutual exclusion groups, create a group that includes all the relevant experiments instead; here, that group would contain experiments A, B, and C.

    \n
      \n
    • Adding an experiment to a holdout group and a mutual exclusion group will further limit the amount of traffic to the experiment, as each user will be evaluated for both groups.
    • \n
    \n

    For example, consider the following holdout group and mutual exclusion group: 

    \n
      \n
    • The holdout group contains experiment A, with a holdout percentage of 5%
    • \n
    • The mutual exclusion group contains experiment A in slot 1 and experiment B in slot 2, where each experiment receives 50% of the traffic
    • \n
    \n

    In this case, experiment A will receive 0.95 *" - ], - "url": "https://amplitude.com/docs/feature-experiment/advanced-techniques/mutually-exclusive-experiments" - }, - { - "type": "codeBlocks", - "description": "Unrendered code blocks", - "count": 1, - "samples": [ - "`)

    \n

    client := &http.Client {\n}\nreq, err := http.NewRequest(method, url, payload)

    \n

    if err != nil {\nfmt.Println(err)\nreturn\n}\nreq.Header.Add("Authorization", "Basic API_KEY:API_SECRET")\nreq.Header.Add("Content-Type", "application/json")

    \n

    res, err := client.Do(req)\nif err != nil {\nfmt.Println(err)\nreturn\n}\ndefer res.Body.Close()

    \n

    body, err := ioutil.ReadAll(res.Body)\nif err != nil {\nfmt.Println(err)\nreturn\n}\nfmt.Println(string(body))\n}\n

    \n

    \n\n\n

    \n

    \n Example: Delete users from all projects\n \n
    \n
    \n
    \n
    \n

    \n\n

    }'\n

    \n

    \n

    \n\n

    }\n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n\n

    \n

    \n\n

    }`" - ], - "url": "https://amplitude.com/docs/apis/analytics/user-privacy" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 2, - "samples": [ - "*/chart/*", - "* is a wildcard. You can also enter strings like "*" - ], - "url": "https://amplitude.com/docs/analytics/charts/build-charts-modify-user-segment" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 2, - "samples": [ - "*

  • \n
  • Chart IDs: A list of the chart IDs *", - "*
  • \n\n

    *" - ], - "url": "https://amplitude.com/docs/admin/billing-use/usage-reports" - }, - { - "type": "lists", - "description": "Unrendered lists (- or * bullets)", - "count": 2, - "samples": [ - "- Require suffix: When set, this allows users to append a string at the end of every file exported to S3.
    ", - "    - User property: You can select a single user property to sync along with each user as an extra column in each file exported." - ], - "url": "https://amplitude.com/docs/data/destination-catalog/amazon-s3-cohort" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "**,**" - ], - "url": "https://amplitude.com/docs/data/destination-catalog/vwo" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "*.*" - ], - "url": "https://amplitude.com/docs/admin/single-sign-on/auth-0" - }, - { - "type": "lists", - "description": "Unrendered lists (- or * bullets)", - "count": 2, - "samples": [ - "- Full Sync: Amplitude periodically imports the entire dataset, regardless of whether the data is already imported. This is good for data sets where the row data changes over time, but there is no easy way to tell which rows have changed. Otherwise, the more efficient option would be a time-based import. This option isn't supported for ingesting event data.
    ", - "- Time-based: Amplitude periodically ingests the most recent rows in the data, as determined by the provided Timestamp column. The first import ingests all available data, and later imports ingest any data with timestamps after the time of the most recent import. To use this option, include the timestamp column in the output of your SQL statement." - ], - "url": "https://amplitude.com/docs/data/source-catalog/bigquery" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* 100\n

  • Event totals: T/E
  • \n
  • Sum of property value: S/E
  • \n
  • Average of property value: A/E
  • \n
  • Funnel conversion, uniques: FM/E
  • \n
  • Funnel conversion, totals: FT/E
  • \n\n

    Examples

    \n

    For this example, assume the metric event has a numeric event property VALUE. This table is the chronological log of events coming into Amplitude:

    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    UserEvent typeMetric event property value
    U1Exposure event
    U1Metric event5
    U1Metric event10
    U2Exposure event
    U2Metric event15
    U3Exposure event
    U3Exposure event
    U4Exposure event
    U5Metric event20
    \n

    In this example, the number of unique users exposed to the experiment—E in the list of notations above—is four (U1, U2, U3, U4). Of those, the number who triggered the metric event (M in the list) is two (U1 and U2). U5 doesn’t count, as they were not exposed to the experiment.

    \n

    The metric event was triggered three times, twice by U1 and once by U2. Again, U5 does not count.

    \n

    The sum of all the metric events' property values is 30, and the sum of their average — — is 22.5.

    \n

    With that information, we can plug these values into each of the formulas listed above:

    \n
      \n
    • Unique conversions = (M/E) *" - ], - "url": "https://amplitude.com/docs/feature-experiment/under-the-hood/experiment-analysis-chart-calculation" - }, - { - "type": "tables", - "description": "Unrendered table (pipe characters)", - "count": 1, - "samples": [ - "|| 80% treatment, 20% control
    • \n
    • Segment 2: Country = Canada |" - ], - "url": "https://amplitude.com/docs/feature-experiment/workflow/add-variants" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* price. Defaults to 1
    Required. Double. The price of the products purchased, and this can be negative. Note: revenue = quantity *" - ], - "url": "https://amplitude.com/docs/sdks/analytics/android/android-kotlin-sdk" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* price.
    Required. . The price of the products purchased, and this can be negative. Note: revenue = quantity *" - ], - "url": "https://amplitude.com/docs/sdks/analytics/browser/browser-sdk-2" - }, - { - "type": "tables", - "description": "Unrendered table (pipe characters)", - "count": 2, - "samples": [ - "|correlation| >= 0.4\n
  • Moderately Predictive: 0.3 <= |", - "| < 0.4
  • \n
  • Slightly Predictive: 0.2 <= |correlation|" - ], - "url": "https://amplitude.com/docs/analytics/charts/compass/compass-interpret-2" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* three property values) display in the Data Table.
  • \n
  • If you export a funnel metric without attribution, grouped by a non-time property, the .CSV export result limit is 300 rows.
    \nIf, for example, you add another top-level group-by for the day property (a time property), and the date range includes seven days (and thus, seven different values for the property), up to 2100 rows (300 rows *" - ], - "url": "https://amplitude.com/docs/analytics/charts/data-tables/data-tables-results-and-sorting-logic" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* Price
  • 0
    Price (optional *" - ], - "url": "https://amplitude.com/docs/sdks/analytics/go/go-sdk" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* price. Defaults to 1.
    Required. NSNumber. The price of the products purchased, and this can be negative. Note: revenue = quantity *" - ], - "url": "https://amplitude.com/docs/sdks/analytics/ios/ios-sdk" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* price. Defaults to 1
    Required. Double. The price of the products purchased, and this can be negative. Note: revenue = quantity *" - ], - "url": "https://amplitude.com/docs/sdks/analytics/react-native/react-native-sdk" - } - ], - "summary": { - "totalUrls": 749, - "totalErrors": 2, - "totalSkipped": 1, - "totalIssues": 22, - "urlsWithIssues": 22, - "ignorePatterns": [ - "/docs/llms", - "*.pdf", - "*.zip", - "/docs/jp/*" - ], - "ignoreUrls": [], - "issuesByType": [ - { - "type": "tables", - "count": 3, - "description": "Unrendered table (pipe characters)" - }, - { - "type": "emphasis", - "count": 16, - "description": "Unrendered emphasis (**bold** or *italic*)" - }, - { - "type": "codeBlocks", - "count": 1, - "description": "Unrendered code blocks" - }, - { - "type": "lists", - "count": 2, - "description": "Unrendered lists (- or * bullets)" - } - ] - }, - "issuesByType": { - "tables": [ - { - "type": "tables", - "description": "Unrendered table (pipe characters)", - "count": 4, - "samples": [ - "|" character separates non-repeating and repeating arguments. Any arguments after "|" are repeatable arguments and you can specify them any number of times. However, the entire list of arguments must be present in any multiple argument operator (meaning, you can't specify just one of three arguments, you must include all three).

    \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    Operator
    DescriptionSyntax
    Evaluates each SourceDescription sequentially on the returned JsonElement. Equivalent to evaluating a specific path when chaining BasicPaths. This also works with indexing into an array, for example ["path", "foo", "1"] chooses the element at index 1 (second element) in the array at "foo".The index must be provided as a string.["path", \\SOURCE_DESCRIPTION...]Example: ["path", "foo", "bar"] => obj['foo']['bar'].
    Returns the first value returned by SOURCE_DESCRIPTION in the list.["any", SOURCE_DESCRIPTION, \\SOURCE_DESCRIPTION...]
    Escapes a single JSON value so you can create a static value.Example: ["value", "amplitude-vacuum"...
    Creates a dictionary (object) where the raw_strings are keys and values are the evaluated SOURCE_DESCRIPTIONS.["dict", "raw_string", SOURCE_DESCRIPTION, \\"raw_string", SOURCE_DESCRIPTION...]
    Returns an array, where elements are the values returned by evaluating SOURCE_DESCRIPTIONS. If a SOURCE_DESCRIPTION fails to evaluate, it will be skipped["array", SOURCE_DESCRIPTION, \\SOURCE_DESCRIPTION...]
    Determines the first true BooleanCondition and returns the result of the following SOURCE_DESCRIPTION. Throws a NoValueFoundAtSource exception if nothing evaluates to true.["condition"\\"cond", BOOLEAN_SOURCE, SOURCE_DESCRIPTION, \\BOOLEAN_SOURCE, SOURCE_DESCRIPTION...]
    If the BOOLEAN_SOURCE evaluates to true, returns the first SOURCE_DESCRIPTION. Otherwise returns the second SOURCE_DESCRIPTION.["ifelse", BOOLEAN_SOURCE, SOURCE_DESCRIPTION, SOURCE_DESCRIPTION]
    Evaluates the given sampleKey (second arg) with the samplePercent (first arg) to determine whether it should be in the sample. Returns boolean["sample_md5", SOURCE_DESCRIPTION, SOURCE_DESCRIPTION]
    Assumes the string returned by SOURCE_DESCRIPTION is an ISO datetime string, for example, , and converts to milliseconds since epoch["iso_time_to_ms", SOURCE_DESCRIPTION]
    Assumes the string returned by SOURCE_DESCRIPTION is milliseconds since epoch and converts to ISO datetime string, for example, ["ms_to_iso_time", SOURCE_DESCRIPTION]
    Generates an ISO datetime string for right now["iso_time_now"]
    Generates the milliseconds since epoch for right now["ms_time_now"]
    Assumes the string returned by SOURCE_DESCRIPTION is a base64-encoded INT96, for example, , and converts to milliseconds since epoch["int96_time_to_ms", SOURCE_DESCRIPTION]
    Takes in a RAW_STRING time format, for example, , and a that returns a string in that format, for example, '1/1/2021 5:06:07', and converts to milliseconds since epoch["parse_time_to_ms", RAW_STRING, SOURCE_DESCRIPTION]
    Assumes the value returned by SOURCE_DESCRIPTION is a string json blob and returns the parsed json value["parse_json_element"\\"parse_json_object", SOURCE_DESCRIPTION]
    Merges the json objects that each SOURCE_DESCRIPTION evaluates to["merge_dicts", SOURCE_DESCRIPTION, \\SOURCE_DESCRIPTION...]
    Flattens a nested json object into a single layer json object["flatten_dict", "raw_string", INTEGER_SOURCE, SOURCE_DESCRIPTION]
    Evaluates the specified SourceDescription the returned JsonElement without the requested fields["exclude_keys", SOURCE_DESCRIPTION, \\"raw_string"...]
    Treats the results of each SOURCE_DESCRIPTION as a string and returns the concatenated string["concat", SOURCE_DESCRIPTION, \\SOURCE_DESCRIPTION...]
    Replace all old_string within the value returned by SOURCE_DESCRIPTION with new_string. Returns a string or raises a NoValueException if SOURCE_DESCRIPTION can't be evaluated to a string. The old_string supports Java's regex syntax for matching patterns, more details at https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html["replace_with", "old_string", "new_string", SOURCE_DESCRIPTION]
    Splits the value returned by SOURCE_DESCRIPTION by the specified character sequence. Returns a jsonArray or raises a NoValueException if SOURCE_DESCRIPTION can't be evaluated to a string["split", "raw_string", SOURCE_DESCRIPTION]
    Returns the lowercase string["lowercase"\\"lower", SOURCE_DESCRIPTION]
    Returns type of the source description as a string: 'string', 'list', 'dict', 'bool', 'number', 'null'["typeof", SOURCE_DESCRIPTION]
    \n\n

    Boolean operators

    \n

    These operators return a JsonPrimitive of type Boolean, so they're valid to use with and .

    \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    OperatorDescriptionSource
    Evaluates as a static boolean value. Throws an exception during initialization if RAW_JSON isn't a boolean value.["bool", any_json]
    Return whether both arguments are true. Null values are treated as false, string 'true' or 'false' is cast to a boolean.["not"|", - "|"&&", SOURCE_DESCRIPTION, | SOURCE_DESCRIPTION...]
    Return whether at least one argument is true. Null values are treated as false, string 'true' or 'false' is cast to a boolean.["or"|", - "||", SOURCE_DESCRIPTION, |" - ], - "url": "https://amplitude.com/docs/data/converter-configuration-reference" - }, - { - "type": "tables", - "description": "Unrendered table (pipe characters)", - "count": 1, - "samples": [ - "|| 80% treatment, 20% control\n
  • Segment 2: Country = Canada |" - ], - "url": "https://amplitude.com/docs/feature-experiment/workflow/add-variants" - }, - { - "type": "tables", - "description": "Unrendered table (pipe characters)", - "count": 2, - "samples": [ - "|correlation| >= 0.4
  • \n
  • Moderately Predictive: 0.3 <= |", - "| < 0.4
  • \n
  • Slightly Predictive: 0.2 <= |correlation|" - ], - "url": "https://amplitude.com/docs/analytics/charts/compass/compass-interpret-2" - } - ], - "emphasis": [ - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* E *" - ], - "url": "https://amplitude.com/docs/web-experiment/tracking" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* (75th percentile - 25th percentile)
  • \n
  • Lower Bound: 25th percentile - 1.5 *" - ], - "url": "https://amplitude.com/docs/feature-experiment/advanced-techniques/find-and-resolve-outliers-in-your-data" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* 0.95 = 0.9025 (90.25%)

    \n

    Instead of adding an experiment to multiple holdout groups, create a single group with all the relevant experiments instead. This will allow for a more even distribution of traffic across experiments. 

    \n

    In the example above, you would create just one holdout group containing all three experiments (A, B, and C).

    \n

    Case 2: Handle experiments with holdout groups and mutual exclusion

    \n

    Adding an experiment to a holdout group and a mutual exclusion group can also further limit the amount of traffic to the experiment. Each user will be evaluated for both the holdout group and the mutual exclusion group.

    \n

    For example, imagine the following holdout group and mutual exclusion group: 

    \n
      \n
    • The holdout group has a holdout percentage of 5% and contains experiment A.
    • \n
    • The mutual exclusion group has half the traffic directed to experiment A in slot 1, with the other half going to experiment B in slot 2.
    • \n
    \n

    In this scenario, experiment A receives about half of the total traffic:

    \n

    0.95 *" - ], - "url": "https://amplitude.com/docs/feature-experiment/advanced-techniques/holdout-groups-advanced-use-cases" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* 0.95 = 0.9025 (90.25%)

    \n

    Instead of adding an experiment to multiple holdout groups, create a single group with all the relevant experiments instead. This allows for a more even distribution of traffic across experiments. 

    \n

    In the example above, you would create just one holdout group containing all three experiments (A, B, and C).

    \n

    Handle experiments with holdout groups and mutual exclusion

    \n

    Adding an experiment to a holdout group and a mutual exclusion group can also further limit the amount of traffic to the experiment. Experiment evaluates each user for both the holdout group and the mutual exclusion group.

    \n

    For example, imagine the following holdout group and mutual exclusion group: 

    \n
      \n
    • The holdout group has a holdout percentage of 5% and contains experiment A.
    • \n
    • The mutual exclusion group has half the traffic directed to experiment A in slot 1, with the other half to experiment B in slot 2.
    • \n
    \n

    In this scenario, experiment A receives about half of the total traffic:

    \n

    0.95 *" - ], - "url": "https://amplitude.com/docs/feature-experiment/advanced-techniques/holdout-groups-exclude-users" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* 0.5 = 0.25, or 25% of the total traffic.

    \n

    Instead of adding an experiment to multiple mutual exclusion groups, create a group that includes all the relevant experiments instead; here, that group would contain experiments A, B, and C.

    \n
      \n
    • Adding an experiment to a holdout group and a mutual exclusion group will further limit the amount of traffic to the experiment, as each user will be evaluated for both groups.
    • \n
    \n

    For example, consider the following holdout group and mutual exclusion group: 

    \n
      \n
    • The holdout group contains experiment A, with a holdout percentage of 5%
    • \n
    • The mutual exclusion group contains experiment A in slot 1 and experiment B in slot 2, where each experiment receives 50% of the traffic
    • \n
    \n

    In this case, experiment A will receive 0.95 *" - ], - "url": "https://amplitude.com/docs/feature-experiment/advanced-techniques/mutually-exclusive-experiments" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 2, - "samples": [ - "*/chart/*", - "* is a wildcard. You can also enter strings like "*" - ], - "url": "https://amplitude.com/docs/analytics/charts/build-charts-modify-user-segment" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 2, - "samples": [ - "*

  • \n
  • Chart IDs: A list of the chart IDs *", - "*
  • \n\n

    *" - ], - "url": "https://amplitude.com/docs/admin/billing-use/usage-reports" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "**,**" - ], - "url": "https://amplitude.com/docs/data/destination-catalog/vwo" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "*.*" - ], - "url": "https://amplitude.com/docs/admin/single-sign-on/auth-0" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* 100\n

  • Event totals: T/E
  • \n
  • Sum of property value: S/E
  • \n
  • Average of property value: A/E
  • \n
  • Funnel conversion, uniques: FM/E
  • \n
  • Funnel conversion, totals: FT/E
  • \n\n

    Examples

    \n

    For this example, assume the metric event has a numeric event property VALUE. This table is the chronological log of events coming into Amplitude:

    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    UserEvent typeMetric event property value
    U1Exposure event
    U1Metric event5
    U1Metric event10
    U2Exposure event
    U2Metric event15
    U3Exposure event
    U3Exposure event
    U4Exposure event
    U5Metric event20
    \n

    In this example, the number of unique users exposed to the experiment—E in the list of notations above—is four (U1, U2, U3, U4). Of those, the number who triggered the metric event (M in the list) is two (U1 and U2). U5 doesn’t count, as they were not exposed to the experiment.

    \n

    The metric event was triggered three times, twice by U1 and once by U2. Again, U5 does not count.

    \n

    The sum of all the metric events' property values is 30, and the sum of their average — — is 22.5.

    \n

    With that information, we can plug these values into each of the formulas listed above:

    \n
      \n
    • Unique conversions = (M/E) *" - ], - "url": "https://amplitude.com/docs/feature-experiment/under-the-hood/experiment-analysis-chart-calculation" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* price. Defaults to 1
    Required. Double. The price of the products purchased, and this can be negative. Note: revenue = quantity *" - ], - "url": "https://amplitude.com/docs/sdks/analytics/android/android-kotlin-sdk" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* price.
    Required. . The price of the products purchased, and this can be negative. Note: revenue = quantity *" - ], - "url": "https://amplitude.com/docs/sdks/analytics/browser/browser-sdk-2" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* three property values) display in the Data Table.\n
  • If you export a funnel metric without attribution, grouped by a non-time property, the .CSV export result limit is 300 rows.
    \nIf, for example, you add another top-level group-by for the day property (a time property), and the date range includes seven days (and thus, seven different values for the property), up to 2100 rows (300 rows *" - ], - "url": "https://amplitude.com/docs/analytics/charts/data-tables/data-tables-results-and-sorting-logic" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* Price
  • 0
    Price (optional *" - ], - "url": "https://amplitude.com/docs/sdks/analytics/go/go-sdk" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* price. Defaults to 1.
    Required. NSNumber. The price of the products purchased, and this can be negative. Note: revenue = quantity *" - ], - "url": "https://amplitude.com/docs/sdks/analytics/ios/ios-sdk" - }, - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* price. Defaults to 1
    Required. Double. The price of the products purchased, and this can be negative. Note: revenue = quantity *" - ], - "url": "https://amplitude.com/docs/sdks/analytics/react-native/react-native-sdk" - } - ], - "codeBlocks": [ - { - "type": "codeBlocks", - "description": "Unrendered code blocks", - "count": 1, - "samples": [ - "`)

    \n

    client := &http.Client {\n}\nreq, err := http.NewRequest(method, url, payload)

    \n

    if err != nil {\nfmt.Println(err)\nreturn\n}\nreq.Header.Add("Authorization", "Basic API_KEY:API_SECRET")\nreq.Header.Add("Content-Type", "application/json")

    \n

    res, err := client.Do(req)\nif err != nil {\nfmt.Println(err)\nreturn\n}\ndefer res.Body.Close()

    \n

    body, err := ioutil.ReadAll(res.Body)\nif err != nil {\nfmt.Println(err)\nreturn\n}\nfmt.Println(string(body))\n}\n

    \n

    \n\n\n

    \n

    \n Example: Delete users from all projects\n \n
    \n
    \n
    \n
    \n

    \n\n

    }'\n

    \n

    \n

    \n\n

    }\n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n\n

    \n

    \n\n

    }`" - ], - "url": "https://amplitude.com/docs/apis/analytics/user-privacy" - } - ], - "lists": [ - { - "type": "lists", - "description": "Unrendered lists (- or * bullets)", - "count": 2, - "samples": [ - "- Require suffix: When set, this allows users to append a string at the end of every file exported to S3.
    ", - "    - User property: You can select a single user property to sync along with each user as an extra column in each file exported." - ], - "url": "https://amplitude.com/docs/data/destination-catalog/amazon-s3-cohort" - }, - { - "type": "lists", - "description": "Unrendered lists (- or * bullets)", - "count": 2, - "samples": [ - "- Full Sync: Amplitude periodically imports the entire dataset, regardless of whether the data is already imported. This is good for data sets where the row data changes over time, but there is no easy way to tell which rows have changed. Otherwise, the more efficient option would be a time-based import. This option isn't supported for ingesting event data.
    ", - "- Time-based: Amplitude periodically ingests the most recent rows in the data, as determined by the provided Timestamp column. The first import ingests all available data, and later imports ingest any data with timestamps after the time of the most recent import. To use this option, include the timestamp column in the output of your SQL statement." - ], - "url": "https://amplitude.com/docs/data/source-catalog/bigquery" - } - ] - }, - "issuesByUrl": { - "https://amplitude.com/docs/data/converter-configuration-reference": [ - { - "type": "tables", - "description": "Unrendered table (pipe characters)", - "count": 4, - "samples": [ - "|" character separates non-repeating and repeating arguments. Any arguments after "|" are repeatable arguments and you can specify them any number of times. However, the entire list of arguments must be present in any multiple argument operator (meaning, you can't specify just one of three arguments, you must include all three).

    \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    Operator
    DescriptionSyntax
    Evaluates each SourceDescription sequentially on the returned JsonElement. Equivalent to evaluating a specific path when chaining BasicPaths. This also works with indexing into an array, for example ["path", "foo", "1"] chooses the element at index 1 (second element) in the array at "foo".The index must be provided as a string.["path", \\SOURCE_DESCRIPTION...]Example: ["path", "foo", "bar"] => obj['foo']['bar'].
    Returns the first value returned by SOURCE_DESCRIPTION in the list.["any", SOURCE_DESCRIPTION, \\SOURCE_DESCRIPTION...]
    Escapes a single JSON value so you can create a static value.Example: ["value", "amplitude-vacuum"...
    Creates a dictionary (object) where the raw_strings are keys and values are the evaluated SOURCE_DESCRIPTIONS.["dict", "raw_string", SOURCE_DESCRIPTION, \\"raw_string", SOURCE_DESCRIPTION...]
    Returns an array, where elements are the values returned by evaluating SOURCE_DESCRIPTIONS. If a SOURCE_DESCRIPTION fails to evaluate, it will be skipped["array", SOURCE_DESCRIPTION, \\SOURCE_DESCRIPTION...]
    Determines the first true BooleanCondition and returns the result of the following SOURCE_DESCRIPTION. Throws a NoValueFoundAtSource exception if nothing evaluates to true.["condition"\\"cond", BOOLEAN_SOURCE, SOURCE_DESCRIPTION, \\BOOLEAN_SOURCE, SOURCE_DESCRIPTION...]
    If the BOOLEAN_SOURCE evaluates to true, returns the first SOURCE_DESCRIPTION. Otherwise returns the second SOURCE_DESCRIPTION.["ifelse", BOOLEAN_SOURCE, SOURCE_DESCRIPTION, SOURCE_DESCRIPTION]
    Evaluates the given sampleKey (second arg) with the samplePercent (first arg) to determine whether it should be in the sample. Returns boolean["sample_md5", SOURCE_DESCRIPTION, SOURCE_DESCRIPTION]
    Assumes the string returned by SOURCE_DESCRIPTION is an ISO datetime string, for example, , and converts to milliseconds since epoch["iso_time_to_ms", SOURCE_DESCRIPTION]
    Assumes the string returned by SOURCE_DESCRIPTION is milliseconds since epoch and converts to ISO datetime string, for example, ["ms_to_iso_time", SOURCE_DESCRIPTION]
    Generates an ISO datetime string for right now["iso_time_now"]
    Generates the milliseconds since epoch for right now["ms_time_now"]
    Assumes the string returned by SOURCE_DESCRIPTION is a base64-encoded INT96, for example, , and converts to milliseconds since epoch["int96_time_to_ms", SOURCE_DESCRIPTION]
    Takes in a RAW_STRING time format, for example, , and a that returns a string in that format, for example, '1/1/2021 5:06:07', and converts to milliseconds since epoch["parse_time_to_ms", RAW_STRING, SOURCE_DESCRIPTION]
    Assumes the value returned by SOURCE_DESCRIPTION is a string json blob and returns the parsed json value["parse_json_element"\\"parse_json_object", SOURCE_DESCRIPTION]
    Merges the json objects that each SOURCE_DESCRIPTION evaluates to["merge_dicts", SOURCE_DESCRIPTION, \\SOURCE_DESCRIPTION...]
    Flattens a nested json object into a single layer json object["flatten_dict", "raw_string", INTEGER_SOURCE, SOURCE_DESCRIPTION]
    Evaluates the specified SourceDescription the returned JsonElement without the requested fields["exclude_keys", SOURCE_DESCRIPTION, \\"raw_string"...]
    Treats the results of each SOURCE_DESCRIPTION as a string and returns the concatenated string["concat", SOURCE_DESCRIPTION, \\SOURCE_DESCRIPTION...]
    Replace all old_string within the value returned by SOURCE_DESCRIPTION with new_string. Returns a string or raises a NoValueException if SOURCE_DESCRIPTION can't be evaluated to a string. The old_string supports Java's regex syntax for matching patterns, more details at https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html["replace_with", "old_string", "new_string", SOURCE_DESCRIPTION]
    Splits the value returned by SOURCE_DESCRIPTION by the specified character sequence. Returns a jsonArray or raises a NoValueException if SOURCE_DESCRIPTION can't be evaluated to a string["split", "raw_string", SOURCE_DESCRIPTION]
    Returns the lowercase string["lowercase"\\"lower", SOURCE_DESCRIPTION]
    Returns type of the source description as a string: 'string', 'list', 'dict', 'bool', 'number', 'null'["typeof", SOURCE_DESCRIPTION]
    \n\n

    Boolean operators

    \n

    These operators return a JsonPrimitive of type Boolean, so they're valid to use with and .

    \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    OperatorDescriptionSource
    Evaluates as a static boolean value. Throws an exception during initialization if RAW_JSON isn't a boolean value.["bool", any_json]
    Return whether both arguments are true. Null values are treated as false, string 'true' or 'false' is cast to a boolean.["not"|", - "|"&&", SOURCE_DESCRIPTION, | SOURCE_DESCRIPTION...]
    Return whether at least one argument is true. Null values are treated as false, string 'true' or 'false' is cast to a boolean.["or"|", - "||", SOURCE_DESCRIPTION, |" - ], - "url": "https://amplitude.com/docs/data/converter-configuration-reference" - } - ], - "https://amplitude.com/docs/web-experiment/tracking": [ - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* E *" - ], - "url": "https://amplitude.com/docs/web-experiment/tracking" - } - ], - "https://amplitude.com/docs/feature-experiment/advanced-techniques/find-and-resolve-outliers-in-your-data": [ - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* (75th percentile - 25th percentile)\n
  • Lower Bound: 25th percentile - 1.5 *" - ], - "url": "https://amplitude.com/docs/feature-experiment/advanced-techniques/find-and-resolve-outliers-in-your-data" - } - ], - "https://amplitude.com/docs/feature-experiment/advanced-techniques/holdout-groups-advanced-use-cases": [ - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* 0.95 = 0.9025 (90.25%)

    \n

    Instead of adding an experiment to multiple holdout groups, create a single group with all the relevant experiments instead. This will allow for a more even distribution of traffic across experiments. 

    \n

    In the example above, you would create just one holdout group containing all three experiments (A, B, and C).

    \n

    Case 2: Handle experiments with holdout groups and mutual exclusion

    \n

    Adding an experiment to a holdout group and a mutual exclusion group can also further limit the amount of traffic to the experiment. Each user will be evaluated for both the holdout group and the mutual exclusion group.

    \n

    For example, imagine the following holdout group and mutual exclusion group: 

    \n
      \n
    • The holdout group has a holdout percentage of 5% and contains experiment A.
    • \n
    • The mutual exclusion group has half the traffic directed to experiment A in slot 1, with the other half going to experiment B in slot 2.
    • \n
    \n

    In this scenario, experiment A receives about half of the total traffic:

    \n

    0.95 *" - ], - "url": "https://amplitude.com/docs/feature-experiment/advanced-techniques/holdout-groups-advanced-use-cases" - } - ], - "https://amplitude.com/docs/feature-experiment/advanced-techniques/holdout-groups-exclude-users": [ - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* 0.95 = 0.9025 (90.25%)

    \n

    Instead of adding an experiment to multiple holdout groups, create a single group with all the relevant experiments instead. This allows for a more even distribution of traffic across experiments. 

    \n

    In the example above, you would create just one holdout group containing all three experiments (A, B, and C).

    \n

    Handle experiments with holdout groups and mutual exclusion

    \n

    Adding an experiment to a holdout group and a mutual exclusion group can also further limit the amount of traffic to the experiment. Experiment evaluates each user for both the holdout group and the mutual exclusion group.

    \n

    For example, imagine the following holdout group and mutual exclusion group: 

    \n
      \n
    • The holdout group has a holdout percentage of 5% and contains experiment A.
    • \n
    • The mutual exclusion group has half the traffic directed to experiment A in slot 1, with the other half to experiment B in slot 2.
    • \n
    \n

    In this scenario, experiment A receives about half of the total traffic:

    \n

    0.95 *" - ], - "url": "https://amplitude.com/docs/feature-experiment/advanced-techniques/holdout-groups-exclude-users" - } - ], - "https://amplitude.com/docs/feature-experiment/advanced-techniques/mutually-exclusive-experiments": [ - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* 0.5 = 0.25, or 25% of the total traffic.

    \n

    Instead of adding an experiment to multiple mutual exclusion groups, create a group that includes all the relevant experiments instead; here, that group would contain experiments A, B, and C.

    \n
      \n
    • Adding an experiment to a holdout group and a mutual exclusion group will further limit the amount of traffic to the experiment, as each user will be evaluated for both groups.
    • \n
    \n

    For example, consider the following holdout group and mutual exclusion group: 

    \n
      \n
    • The holdout group contains experiment A, with a holdout percentage of 5%
    • \n
    • The mutual exclusion group contains experiment A in slot 1 and experiment B in slot 2, where each experiment receives 50% of the traffic
    • \n
    \n

    In this case, experiment A will receive 0.95 *" - ], - "url": "https://amplitude.com/docs/feature-experiment/advanced-techniques/mutually-exclusive-experiments" - } - ], - "https://amplitude.com/docs/apis/analytics/user-privacy": [ - { - "type": "codeBlocks", - "description": "Unrendered code blocks", - "count": 1, - "samples": [ - "`)

    \n

    client := &http.Client {\n}\nreq, err := http.NewRequest(method, url, payload)

    \n

    if err != nil {\nfmt.Println(err)\nreturn\n}\nreq.Header.Add("Authorization", "Basic API_KEY:API_SECRET")\nreq.Header.Add("Content-Type", "application/json")

    \n

    res, err := client.Do(req)\nif err != nil {\nfmt.Println(err)\nreturn\n}\ndefer res.Body.Close()

    \n

    body, err := ioutil.ReadAll(res.Body)\nif err != nil {\nfmt.Println(err)\nreturn\n}\nfmt.Println(string(body))\n}\n

    \n

    \n\n\n

    \n

    \n Example: Delete users from all projects\n \n
    \n
    \n
    \n
    \n

    \n\n

    }'\n

    \n

    \n

    \n\n

    }\n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n\n

    \n

    \n\n

    }`" - ], - "url": "https://amplitude.com/docs/apis/analytics/user-privacy" - } - ], - "https://amplitude.com/docs/analytics/charts/build-charts-modify-user-segment": [ - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 2, - "samples": [ - "*/chart/*", - "* is a wildcard. You can also enter strings like "*" - ], - "url": "https://amplitude.com/docs/analytics/charts/build-charts-modify-user-segment" - } - ], - "https://amplitude.com/docs/admin/billing-use/usage-reports": [ - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 2, - "samples": [ - "*

  • \n
  • Chart IDs: A list of the chart IDs *", - "*
  • \n\n

    *" - ], - "url": "https://amplitude.com/docs/admin/billing-use/usage-reports" - } - ], - "https://amplitude.com/docs/data/destination-catalog/amazon-s3-cohort": [ - { - "type": "lists", - "description": "Unrendered lists (- or * bullets)", - "count": 2, - "samples": [ - "- Require suffix: When set, this allows users to append a string at the end of every file exported to S3.
    ", - "    - User property: You can select a single user property to sync along with each user as an extra column in each file exported." - ], - "url": "https://amplitude.com/docs/data/destination-catalog/amazon-s3-cohort" - } - ], - "https://amplitude.com/docs/data/destination-catalog/vwo": [ - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "**,**" - ], - "url": "https://amplitude.com/docs/data/destination-catalog/vwo" - } - ], - "https://amplitude.com/docs/admin/single-sign-on/auth-0": [ - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "*.*" - ], - "url": "https://amplitude.com/docs/admin/single-sign-on/auth-0" - } - ], - "https://amplitude.com/docs/data/source-catalog/bigquery": [ - { - "type": "lists", - "description": "Unrendered lists (- or * bullets)", - "count": 2, - "samples": [ - "- Full Sync: Amplitude periodically imports the entire dataset, regardless of whether the data is already imported. This is good for data sets where the row data changes over time, but there is no easy way to tell which rows have changed. Otherwise, the more efficient option would be a time-based import. This option isn't supported for ingesting event data.
    ", - "- Time-based: Amplitude periodically ingests the most recent rows in the data, as determined by the provided Timestamp column. The first import ingests all available data, and later imports ingest any data with timestamps after the time of the most recent import. To use this option, include the timestamp column in the output of your SQL statement." - ], - "url": "https://amplitude.com/docs/data/source-catalog/bigquery" - } - ], - "https://amplitude.com/docs/feature-experiment/under-the-hood/experiment-analysis-chart-calculation": [ - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* 100\n

  • Event totals: T/E
  • \n
  • Sum of property value: S/E
  • \n
  • Average of property value: A/E
  • \n
  • Funnel conversion, uniques: FM/E
  • \n
  • Funnel conversion, totals: FT/E
  • \n\n

    Examples

    \n

    For this example, assume the metric event has a numeric event property VALUE. This table is the chronological log of events coming into Amplitude:

    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    UserEvent typeMetric event property value
    U1Exposure event
    U1Metric event5
    U1Metric event10
    U2Exposure event
    U2Metric event15
    U3Exposure event
    U3Exposure event
    U4Exposure event
    U5Metric event20
    \n

    In this example, the number of unique users exposed to the experiment—E in the list of notations above—is four (U1, U2, U3, U4). Of those, the number who triggered the metric event (M in the list) is two (U1 and U2). U5 doesn’t count, as they were not exposed to the experiment.

    \n

    The metric event was triggered three times, twice by U1 and once by U2. Again, U5 does not count.

    \n

    The sum of all the metric events' property values is 30, and the sum of their average — — is 22.5.

    \n

    With that information, we can plug these values into each of the formulas listed above:

    \n
      \n
    • Unique conversions = (M/E) *" - ], - "url": "https://amplitude.com/docs/feature-experiment/under-the-hood/experiment-analysis-chart-calculation" - } - ], - "https://amplitude.com/docs/feature-experiment/workflow/add-variants": [ - { - "type": "tables", - "description": "Unrendered table (pipe characters)", - "count": 1, - "samples": [ - "|| 80% treatment, 20% control
    • \n
    • Segment 2: Country = Canada |" - ], - "url": "https://amplitude.com/docs/feature-experiment/workflow/add-variants" - } - ], - "https://amplitude.com/docs/sdks/analytics/android/android-kotlin-sdk": [ - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* price. Defaults to 1
    Required. Double. The price of the products purchased, and this can be negative. Note: revenue = quantity *" - ], - "url": "https://amplitude.com/docs/sdks/analytics/android/android-kotlin-sdk" - } - ], - "https://amplitude.com/docs/sdks/analytics/browser/browser-sdk-2": [ - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* price.
    Required. . The price of the products purchased, and this can be negative. Note: revenue = quantity *" - ], - "url": "https://amplitude.com/docs/sdks/analytics/browser/browser-sdk-2" - } - ], - "https://amplitude.com/docs/analytics/charts/compass/compass-interpret-2": [ - { - "type": "tables", - "description": "Unrendered table (pipe characters)", - "count": 2, - "samples": [ - "|correlation| >= 0.4\n
  • Moderately Predictive: 0.3 <= |", - "| < 0.4
  • \n
  • Slightly Predictive: 0.2 <= |correlation|" - ], - "url": "https://amplitude.com/docs/analytics/charts/compass/compass-interpret-2" - } - ], - "https://amplitude.com/docs/analytics/charts/data-tables/data-tables-results-and-sorting-logic": [ - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* three property values) display in the Data Table.
  • \n
  • If you export a funnel metric without attribution, grouped by a non-time property, the .CSV export result limit is 300 rows.
    \nIf, for example, you add another top-level group-by for the day property (a time property), and the date range includes seven days (and thus, seven different values for the property), up to 2100 rows (300 rows *" - ], - "url": "https://amplitude.com/docs/analytics/charts/data-tables/data-tables-results-and-sorting-logic" - } - ], - "https://amplitude.com/docs/sdks/analytics/go/go-sdk": [ - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* Price
  • 0
    Price (optional *" - ], - "url": "https://amplitude.com/docs/sdks/analytics/go/go-sdk" - } - ], - "https://amplitude.com/docs/sdks/analytics/ios/ios-sdk": [ - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* price. Defaults to 1.
    Required. NSNumber. The price of the products purchased, and this can be negative. Note: revenue = quantity *" - ], - "url": "https://amplitude.com/docs/sdks/analytics/ios/ios-sdk" - } - ], - "https://amplitude.com/docs/sdks/analytics/react-native/react-native-sdk": [ - { - "type": "emphasis", - "description": "Unrendered emphasis (**bold** or *italic*)", - "count": 1, - "samples": [ - "* price. Defaults to 1
    Required. Double. The price of the products purchased, and this can be negative. Note: revenue = quantity *" - ], - "url": "https://amplitude.com/docs/sdks/analytics/react-native/react-native-sdk" - } - ] - }, - "skippedUrls": [ - "https://amplitude.com/docs/llms" - ] -} \ No newline at end of file