changedInput schema / properties / formula / anyOf
Previous value: -[
- {
- "items": {
- "additionalProperties": true,
- "properties": {
- "id": {
- "description": "Unique token id within the formula, e.g. \"t1\"",
- "type": "string"
- },
- "number": {
- "description": "Required when type is NUMBER",
- "type": [
- "number",
- "null"
- ]
- },
- "operator": {
- "anyOf": [
- {
- "enum": [
- "+",
- "-",
- "*",
- "/",
- "×",
- "÷",
- "(",
- ")"
- ],
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
- },
- "query": {
- "anyOf": [
- {
- "additionalProperties": true,
- "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
- "properties": {
- "advanced": {
- "additionalProperties": {},
- "description": "Datasource-specific settings — describe_datasource lists required keys per view",
- "type": "object"
- },
- "data_view": {
- "description": "Data view (from describe_datasource), e.g. ACCOUNT",
- "type": "string"
- },
- "datasource_id": {
- "description": "Datasource alias, e.g. gadw (from datasources)",
- "enum": [
- "advanced-web-ranking",
- "ac",
- "adroll",
- "ahrefs",
- "basecamp",
- "brightlocal",
- "call-rail",
- "drip",
- "keywords",
- "sendin-blue",
- "sendgrid",
- "moosend",
- "mailer-lite",
- "pingdom",
- "uptime-robot",
- "piwik-pro",
- "wordpress",
- "pabbly-connect",
- "ment",
- "twilio",
- "switchy",
- "vimeo",
- "pinterest",
- "pinterest-ads",
- "gtres",
- "paypal",
- "gps",
- "gs",
- "CUSTOM_IMPORT",
- "CUSTOM_DATA",
- "CALCULATION",
- "GOALS",
- "str",
- "wistia",
- "ca-mon",
- "convertkit",
- "woocommerce",
- "xero",
- "matomo",
- "go-high-level",
- "wcs",
- "bing-webmaster-tools",
- "pipedrive",
- "salesforce",
- "tiktok",
- "tiktok-ads",
- "twr",
- "twr-ads",
- "spf",
- "ytbe",
- "google-local-services-ads",
- "klaviyo",
- "gsh",
- "ga4",
- "lkdin-ads",
- "lkdin-pg",
- "mlchmp",
- "inst-ads",
- "inst",
- "fb-ads",
- "fb-pg",
- "gmb",
- "serpstat",
- "hubspot",
- "gadw",
- "sem-rush",
- "se-ranking",
- "microsoft-ads",
- "plausible",
- "snapchat-ads",
- "amazon-advertising",
- "microsoft-clarity",
- "serp-watch",
- "vbout",
- "moz",
- "chatgpt-ads",
- "omnisend",
- "airtable",
- "nozzle",
- "surnex",
- "clickup",
- "make",
- "freshdesk",
- "chart-mogul",
- "amplitude",
- "harvest",
- "zoho-crm",
- "clockify",
- "demo"
- ],
- "type": "string"
- },
- "dimensions": {
- "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
- "items": {
- "additionalProperties": true,
- "properties": {
- "custom": {
- "description": "A dynamic dimension absent from the static catalog",
- "type": "boolean"
- },
- "data_view": {
- "description": "Data view the dimension belongs to; filled from the catalog when omitted",
- "type": "string"
- },
- "label": {
- "description": "Display name — renames the dimension on the widget",
- "type": "string"
- },
- "selector": {
- "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
- "type": "string"
- },
- "value": {
- "description": "Dimension id (from describe_datasource)",
- "type": "string"
- }
- },
- "required": [
- "value"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "filters": {
- "description": "Row filters",
- "items": {
- "additionalProperties": true,
- "properties": {
- "field": {
- "description": "Metric or dimension id to filter on",
- "type": "string"
- },
- "logicalOperator": {
- "anyOf": [
- {
- "enum": [
- "and",
- "or"
- ],
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "How this row joins the previous one — 'and' (default) or 'or'"
- },
- "operator": {
- "description": "Operator id — the valid list per datasource comes from describe_datasource",
- "type": "string"
- },
- "value": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "number"
- },
- {
- "type": "boolean"
- },
- {
- "items": {},
- "type": "array"
- }
- ],
- "description": "Value to compare against"
- }
- },
- "required": [
- "field",
- "operator",
- "value"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "metrics": {
- "description": "Metrics to compute over — must belong to the data view",
- "items": {
- "additionalProperties": true,
- "properties": {
- "action_type": {
- "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
- "type": "string"
- },
- "custom": {
- "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
- "type": "boolean"
- },
- "data_view": {
- "description": "Data view the metric belongs to; resolved from the catalog when omitted",
- "type": "string"
- },
- "invert_comparison": {
- "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
- "type": "boolean"
- },
- "label": {
- "description": "Display name — renames the metric on the widget",
- "type": "string"
- },
- "request_metrics": {
- "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "selector": {
- "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
- "type": "string"
- },
- "summary": {
- "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
- "enum": [
- "SUM",
- "AVG",
- "MAX",
- "MIN"
- ],
- "type": "string"
- },
- "symbol": {
- "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
- "enum": [
- "number",
- "decimal",
- "percent",
- "%",
- "currency",
- "$",
- "text",
- "link",
- "date",
- "s",
- "ms",
- "time",
- "seconds",
- "minutes",
- "milliseconds"
- ],
- "type": "string"
- },
- "value": {
- "description": "Metric id (from describe_datasource)",
- "type": "string"
- }
- },
- "required": [
- "value"
- ],
- "type": "object"
- },
- "type": "array"
- }
- },
- "type": "object"
- },
- {
- "type": "null"
- }
- ],
- "description": "Required when type is METRIC — the query whose value this token contributes"
- },
- "type": {
- "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
- "enum": [
- "METRIC",
- "NUMBER",
- "OPERATOR"
- ],
- "type": "string"
- }
- },
- "required": [
- "id",
- "type"
- ],
- "type": "object"
- },
- "type": "array"
- },
- {
- "type": "string"
- }
-]New value: +[
+ {
+ "items": {
+ "additionalProperties": true,
+ "properties": {
+ "id": {
+ "description": "Unique token id within the formula, e.g. \"t1\"",
+ "type": "string"
+ },
+ "number": {
+ "description": "Required when type is NUMBER",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "operator": {
+ "anyOf": [
+ {
+ "enum": [
+ "+",
+ "-",
+ "*",
+ "/",
+ "×",
+ "÷",
+ "(",
+ ")"
+ ],
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
+ },
+ "query": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
+ "properties": {
+ "advanced": {
+ "additionalProperties": {},
+ "description": "Datasource-specific settings — describe_datasource lists required keys per view",
+ "type": "object"
+ },
+ "data_view": {
+ "description": "Data view (from describe_datasource), e.g. ACCOUNT",
+ "type": "string"
+ },
+ "datasource_id": {
+ "description": "Datasource alias, e.g. gadw (from datasources)",
+ "enum": [
+ "advanced-web-ranking",
+ "ac",
+ "adroll",
+ "ahrefs",
+ "basecamp",
+ "brightlocal",
+ "call-rail",
+ "drip",
+ "keywords",
+ "sendin-blue",
+ "sendgrid",
+ "moosend",
+ "mailer-lite",
+ "pingdom",
+ "uptime-robot",
+ "piwik-pro",
+ "wordpress",
+ "pabbly-connect",
+ "ment",
+ "twilio",
+ "switchy",
+ "vimeo",
+ "pinterest",
+ "pinterest-ads",
+ "gtres",
+ "paypal",
+ "gps",
+ "gs",
+ "CUSTOM_IMPORT",
+ "CUSTOM_DATA",
+ "CALCULATION",
+ "GOALS",
+ "str",
+ "wistia",
+ "ca-mon",
+ "convertkit",
+ "woocommerce",
+ "xero",
+ "matomo",
+ "go-high-level",
+ "wcs",
+ "bing-webmaster-tools",
+ "pipedrive",
+ "salesforce",
+ "tiktok",
+ "tiktok-ads",
+ "twr",
+ "twr-ads",
+ "spf",
+ "ytbe",
+ "google-local-services-ads",
+ "klaviyo",
+ "gsh",
+ "ga4",
+ "lkdin-ads",
+ "lkdin-pg",
+ "mlchmp",
+ "inst-ads",
+ "inst",
+ "fb-ads",
+ "fb-pg",
+ "gmb",
+ "serpstat",
+ "hubspot",
+ "gadw",
+ "sem-rush",
+ "se-ranking",
+ "microsoft-ads",
+ "plausible",
+ "snapchat-ads",
+ "amazon-advertising",
+ "microsoft-clarity",
+ "serp-watch",
+ "vbout",
+ "moz",
+ "chatgpt-ads",
+ "omnisend",
+ "airtable",
+ "nozzle",
+ "surnex",
+ "clickup",
+ "make",
+ "freshdesk",
+ "chart-mogul",
+ "amplitude",
+ "harvest",
+ "zoho-crm",
+ "clockify",
+ "adtraction",
+ "demo"
+ ],
+ "type": "string"
+ },
+ "dimensions": {
+ "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
+ "items": {
+ "additionalProperties": true,
+ "properties": {
+ "custom": {
+ "description": "A dynamic dimension absent from the static catalog",
+ "type": "boolean"
+ },
+ "data_view": {
+ "description": "Data view the dimension belongs to; filled from the catalog when omitted",
+ "type": "string"
+ },
+ "label": {
+ "description": "Display name — renames the dimension on the widget",
+ "type": "string"
+ },
+ "selector": {
+ "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
+ "type": "string"
+ },
+ "value": {
+ "description": "Dimension id (from describe_datasource)",
+ "type": "string"
+ }
+ },
+ "required": [
+ "value"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "filters": {
+ "description": "Row filters",
+ "items": {
+ "additionalProperties": true,
+ "properties": {
+ "field": {
+ "description": "Metric or dimension id to filter on",
+ "type": "string"
+ },
+ "logicalOperator": {
+ "anyOf": [
+ {
+ "enum": [
+ "and",
+ "or"
+ ],
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "How this row joins the previous one — 'and' (default) or 'or'"
+ },
+ "operator": {
+ "description": "Operator id — the valid list per datasource comes from describe_datasource",
+ "type": "string"
+ },
+ "value": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "boolean"
+ },
+ {
+ "items": {},
+ "type": "array"
+ }
+ ],
+ "description": "Value to compare against"
+ }
+ },
+ "required": [
+ "field",
+ "operator",
+ "value"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "metrics": {
+ "description": "Metrics to compute over — must belong to the data view",
+ "items": {
+ "additionalProperties": true,
+ "properties": {
+ "action_type": {
+ "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
+ "type": "string"
+ },
+ "custom": {
+ "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
+ "type": "boolean"
+ },
+ "data_view": {
+ "description": "Data view the metric belongs to; resolved from the catalog when omitted",
+ "type": "string"
+ },
+ "invert_comparison": {
+ "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
+ "type": "boolean"
+ },
+ "label": {
+ "description": "Display name — renames the metric on the widget",
+ "type": "string"
+ },
+ "request_metrics": {
+ "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "selector": {
+ "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
+ "type": "string"
+ },
+ "summary": {
+ "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
+ "enum": [
+ "SUM",
+ "AVG",
+ "MAX",
+ "MIN"
+ ],
+ "type": "string"
+ },
+ "symbol": {
+ "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
+ "enum": [
+ "number",
+ "decimal",
+ "percent",
+ "%",
+ "currency",
+ "$",
+ "text",
+ "link",
+ "date",
+ "s",
+ "ms",
+ "time",
+ "seconds",
+ "minutes",
+ "milliseconds"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "Metric id (from describe_datasource)",
+ "type": "string"
+ }
+ },
+ "required": [
+ "value"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Required when type is METRIC — the query whose value this token contributes"
+ },
+ "type": {
+ "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
+ "enum": [
+ "METRIC",
+ "NUMBER",
+ "OPERATOR"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "type"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ {
+ "type": "string"
+ }
+]