Use this guide to generate minimal event analysis request parameters. Requests should be compact, stable, and name-driven.
Generate requests with stable names:
eventName for events.analysis[0] or property names inside customEvents for event properties.columnName for filter and group properties.customEvents for formula metrics.Do not generate:
eventIDidMinimal shape:
{
"eventsSelect": [],
"eventsFilter": {
"relation": "and",
"filterType": "SIMPLE",
"filters": []
},
"eventsGroup": {
"globalization": []
},
"eventsView": {
"timeParticleSize": "day",
"recentDay": "0$$6",
"dynamicDate": ""
},
"timeZoneOffset": 0,
"dataBase": "dt_xxx"
}
dataBase is required and must use the dt_xxx format.
Event count:
{
"eventType": "default",
"eventName": "$app_install",
"eventDisplayName": "App Install Count",
"analysis": ["A100"],
"relation": "and",
"filterType": "SIMPLE",
"filters": []
}
Event property aggregation:
{
"eventType": "default",
"eventName": "#ad_paid",
"eventDisplayName": "Ad Revenue",
"analysis": ["#ad_value", "A103"],
"relation": "and",
"filterType": "SIMPLE",
"filters": []
}
Use customEvents for formula metrics.
{
"eventType": "customized",
"eventDisplayName": "ROAS",
"customEvents": "#ad_paid.#ad_value.A103 / DT@first_install.vep$cac.A103",
"format": "PERCENTAGE",
"relation": "and",
"filterType": "SIMPLE",
"filters": [],
"customFilters": [
{
"relation": "and",
"filterType": "SIMPLE",
"filters": []
},
{
"relation": "and",
"filterType": "SIMPLE",
"filters": []
}
]
}
Rules:
customEvents must have one matching item in customFilters.customFilters must match the order of event factors in customEvents.format to control formula result formatting.eventSplitIndex to the formula metric.Example:
{
"eventSplitIndex": [0, 1]
}
Empty filter container:
{
"relation": "and",
"filterType": "SIMPLE",
"filters": []
}
Simple filter:
{
"relation": "and",
"filterType": "SIMPLE",
"filters": [
{
"columnName": "$uid",
"columnDesc": "DT User ID",
"columnType": "string",
"tableType": "event",
"type": 0,
"comparator": "C06",
"filterValue": [],
"extra": {
"parent_column_type": null
}
}
]
}
Nested filter:
{
"relation": "and",
"filterType": "SIMPLE",
"filters": [
{
"relation": "and",
"filterType": "SIMPLE",
"filters": [
{
"columnName": "#active_device_brand",
"columnDesc": "Device Brand",
"columnType": "string",
"tableType": "user",
"type": 1,
"comparator": "C01",
"filterValue": ["WIKO", "FCNT"],
"extra": {
"parent_column_type": null
}
}
]
}
]
}
A dimension property uses type: 4 and requires a minimal extra object.
{
"columnName": "$active_country_code@full_name@zh-CN",
"columnDesc": "Country/Region",
"columnType": "string",
"tableType": "user",
"type": 4,
"comparator": "C00",
"filterValue": ["美国(US)"],
"extra": {
"bound_prop": "$active_country_code",
"dimension_app_id": "conf",
"dimension_table_type_code": 1
}
}
Do not generate dimension_id or bound_prop_id for dimension properties.
Object child properties must include extra.parent_column_type.
Object child property:
{
"columnName": "item.price",
"columnDesc": "Item Price",
"columnType": "number",
"tableType": "event",
"type": 2,
"comparator": "C04",
"filterValue": ["10"],
"extra": {
"parent_column_type": "object"
}
}
ObjectArray child property:
{
"columnName": "items.price",
"columnDesc": "Item Price",
"columnType": "number",
"tableType": "event",
"type": 2,
"comparator": "C04",
"filterValue": ["10"],
"extra": {
"parent_column_type": "objectArray"
}
}
ObjectArray matching uses C25, C26, or C27, and must include a nested filter:
C25: the objectArray contains at least one object matching the nested filter.C26: the objectArray contains no object matching the nested filter.C27: all objects in the objectArray match the nested filter.{
"columnName": "items",
"columnDesc": "Items",
"columnType": "objectArray",
"tableType": "event",
"type": 2,
"comparator": "C25",
"filterValue": [],
"extra": {
"parent_column_type": null
},
"filter": {
"relation": "and",
"filterType": "SIMPLE",
"filters": [
{
"columnName": "items.price",
"columnDesc": "Item Price",
"columnType": "number",
"tableType": "event",
"type": 2,
"comparator": "C04",
"filterValue": ["10"],
"extra": {
"parent_column_type": "objectArray"
}
}
]
}
}
When a dimension property is bound to an object or objectArray child, keep parent property metadata:
{
"columnName": "items.country@full_name@zh-CN",
"columnDesc": "Item Country",
"columnType": "string",
"tableType": "event",
"type": 4,
"comparator": "C00",
"filterValue": ["美国(US)"],
"extra": {
"bound_prop": "country",
"dimension_app_id": "conf",
"dimension_table_type_code": 0,
"bound_parent_prop": "items",
"bound_parent_prop_type": "objectArray"
}
}
If an object or objectArray child property is used in event property aggregation, also include boundProp:
{
"eventType": "default",
"eventName": "#purchase",
"eventDisplayName": "Item Revenue",
"analysis": ["items.price", "A103"],
"relation": "and",
"filterType": "SIMPLE",
"filters": [],
"boundProp": [
{
"name": "items.price",
"parent_column_type": "objectArray"
}
]
}
No grouping:
{
"eventsGroup": {
"globalization": []
}
}
Simple grouping:
{
"columnName": "#active_screen_height",
"columnType": "number",
"tableType": "user",
"type": 1,
"displayName": "Screen Height",
"propertyRangeType": 2,
"propertyRange": [800],
"timeGroupType": "daily",
"extra": {
"parent_column_type": null
}
}
Rules:
displayName.propertyRangeType and propertyRange.tagVersion and tagHistoryDate when needed.Dynamic time range:
{
"eventsView": {
"timeParticleSize": "day",
"recentDay": "0$$6",
"dynamicDate": ""
}
}
Static time range:
{
"eventsView": {
"timeParticleSize": "day",
"recentDay": "",
"dateList": ["2026-06-18", "2026-06-24"],
"dynamicDate": ""
}
}
Comparison time range:
{
"eventsView": {
"timeParticleSize": "day",
"recentDay": "0$$6",
"dynamicDate": "",
"comparedDate": [
{
"recentDay": "4$$7",
"dynamicDate": ""
}
]
}
}
Rules:
recentDay for dynamic time ranges.dateList only for static time ranges.comparedDate[].key.{
"eventsSpliter": {
"eventsToSplit": [
{
"eventName": "$app_install"
},
{
"eventName": "#session_start"
}
],
"splitPriority": "first",
"propertyGroup": [
{
"columnName": "#event_name",
"columnType": "string",
"tableType": "event",
"type": 1,
"displayName": "Event Name",
"propertyRangeType": 1,
"propertyRange": [0],
"timeGroupType": "daily",
"extra": {
"parent_column_type": null
}
}
]
}
}
Rules:
eventsToSplit only needs eventName.eventsToSplit[].eventID.eventSplitIndex to the formula metric.When generating minimal requests, do not include:
key
eventID
id
has_dimension
name
display_name
describe
data_type
table_type_code
table_type
calcu_symbol
defaultOpen
presetEventDisplayName
boundProp when empty
retention_metrics when empty
update_time
debugQuery
eventsGroup.individuality
comparedDate[].key
empty filter.filter
dimension_id
bound_prop_id
eventsToSplit[].eventID
Before returning a request, verify:
eventType.eventName, eventDisplayName, analysis, relation, filterType, and filters.customEvents, eventDisplayName, format, and customFilters.customFilters items matches the number of event factors in customEvents.columnName, columnType, tableType, type, comparator, filterValue, and extra.columnName, columnType, tableType, type, and displayName.eventID or property id.