1*d5c09012SAndroid Build Coastguard Worker// Copyright 2023 Google LLC 2*d5c09012SAndroid Build Coastguard Worker// 3*d5c09012SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*d5c09012SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*d5c09012SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*d5c09012SAndroid Build Coastguard Worker// 7*d5c09012SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*d5c09012SAndroid Build Coastguard Worker// 9*d5c09012SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*d5c09012SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*d5c09012SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*d5c09012SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*d5c09012SAndroid Build Coastguard Worker// limitations under the License. 14*d5c09012SAndroid Build Coastguard Worker 15*d5c09012SAndroid Build Coastguard Workersyntax = "proto3"; 16*d5c09012SAndroid Build Coastguard Worker 17*d5c09012SAndroid Build Coastguard Workerpackage google.analytics.data.v1alpha; 18*d5c09012SAndroid Build Coastguard Worker 19*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/duration.proto"; 20*d5c09012SAndroid Build Coastguard Worker 21*d5c09012SAndroid Build Coastguard Workeroption go_package = "google.golang.org/genproto/googleapis/analytics/data/v1alpha;data"; 22*d5c09012SAndroid Build Coastguard Workeroption java_multiple_files = true; 23*d5c09012SAndroid Build Coastguard Workeroption java_outer_classname = "ReportingApiProto"; 24*d5c09012SAndroid Build Coastguard Workeroption java_package = "com.google.analytics.data.v1alpha"; 25*d5c09012SAndroid Build Coastguard Worker 26*d5c09012SAndroid Build Coastguard Worker// A contiguous set of days: `startDate`, `startDate + 1`, ..., `endDate`. 27*d5c09012SAndroid Build Coastguard Worker// Requests are allowed up to 4 date ranges. 28*d5c09012SAndroid Build Coastguard Workermessage DateRange { 29*d5c09012SAndroid Build Coastguard Worker // The inclusive start date for the query in the format `YYYY-MM-DD`. Cannot 30*d5c09012SAndroid Build Coastguard Worker // be after `end_date`. The format `NdaysAgo`, `yesterday`, or `today` is also 31*d5c09012SAndroid Build Coastguard Worker // accepted, and in that case, the date is inferred based on the property's 32*d5c09012SAndroid Build Coastguard Worker // reporting time zone. 33*d5c09012SAndroid Build Coastguard Worker string start_date = 1; 34*d5c09012SAndroid Build Coastguard Worker 35*d5c09012SAndroid Build Coastguard Worker // The inclusive end date for the query in the format `YYYY-MM-DD`. Cannot 36*d5c09012SAndroid Build Coastguard Worker // be before `start_date`. The format `NdaysAgo`, `yesterday`, or `today` is 37*d5c09012SAndroid Build Coastguard Worker // also accepted, and in that case, the date is inferred based on the 38*d5c09012SAndroid Build Coastguard Worker // property's reporting time zone. 39*d5c09012SAndroid Build Coastguard Worker string end_date = 2; 40*d5c09012SAndroid Build Coastguard Worker 41*d5c09012SAndroid Build Coastguard Worker // Assigns a name to this date range. The dimension `dateRange` is valued to 42*d5c09012SAndroid Build Coastguard Worker // this name in a report response. If set, cannot begin with `date_range_` or 43*d5c09012SAndroid Build Coastguard Worker // `RESERVED_`. If not set, date ranges are named by their zero based index in 44*d5c09012SAndroid Build Coastguard Worker // the request: `date_range_0`, `date_range_1`, etc. 45*d5c09012SAndroid Build Coastguard Worker string name = 3; 46*d5c09012SAndroid Build Coastguard Worker} 47*d5c09012SAndroid Build Coastguard Worker 48*d5c09012SAndroid Build Coastguard Worker// Dimensions are attributes of your data. For example, the dimension city 49*d5c09012SAndroid Build Coastguard Worker// indicates the city from which an event originates. Dimension values in report 50*d5c09012SAndroid Build Coastguard Worker// responses are strings; for example, the city could be "Paris" or "New York". 51*d5c09012SAndroid Build Coastguard Workermessage Dimension { 52*d5c09012SAndroid Build Coastguard Worker // The name of the dimension. See the [API 53*d5c09012SAndroid Build Coastguard Worker // Dimensions](https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema#dimensions) 54*d5c09012SAndroid Build Coastguard Worker // for the list of dimension names supported by core reporting methods such 55*d5c09012SAndroid Build Coastguard Worker // as `runReport` and `batchRunReports`. See 56*d5c09012SAndroid Build Coastguard Worker // [Realtime 57*d5c09012SAndroid Build Coastguard Worker // Dimensions](https://developers.google.com/analytics/devguides/reporting/data/v1/realtime-api-schema#dimensions) 58*d5c09012SAndroid Build Coastguard Worker // for the list of dimension names supported by the `runRealtimeReport` 59*d5c09012SAndroid Build Coastguard Worker // method. See 60*d5c09012SAndroid Build Coastguard Worker // [Funnel 61*d5c09012SAndroid Build Coastguard Worker // Dimensions](https://developers.google.com/analytics/devguides/reporting/data/v1/exploration-api-schema#dimensions) 62*d5c09012SAndroid Build Coastguard Worker // for the list of dimension names supported by the `runFunnelReport` 63*d5c09012SAndroid Build Coastguard Worker // method. 64*d5c09012SAndroid Build Coastguard Worker // 65*d5c09012SAndroid Build Coastguard Worker // If `dimensionExpression` is specified, `name` can be any string that you 66*d5c09012SAndroid Build Coastguard Worker // would like within the allowed character set. For example if a 67*d5c09012SAndroid Build Coastguard Worker // `dimensionExpression` concatenates `country` and `city`, you could call 68*d5c09012SAndroid Build Coastguard Worker // that dimension `countryAndCity`. Dimension names that you choose must match 69*d5c09012SAndroid Build Coastguard Worker // the regular expression `^[a-zA-Z0-9_]$`. 70*d5c09012SAndroid Build Coastguard Worker // 71*d5c09012SAndroid Build Coastguard Worker // Dimensions are referenced by `name` in `dimensionFilter`, `orderBys`, 72*d5c09012SAndroid Build Coastguard Worker // `dimensionExpression`, and `pivots`. 73*d5c09012SAndroid Build Coastguard Worker string name = 1; 74*d5c09012SAndroid Build Coastguard Worker 75*d5c09012SAndroid Build Coastguard Worker // One dimension can be the result of an expression of multiple dimensions. 76*d5c09012SAndroid Build Coastguard Worker // For example, dimension "country, city": concatenate(country, ", ", city). 77*d5c09012SAndroid Build Coastguard Worker DimensionExpression dimension_expression = 2; 78*d5c09012SAndroid Build Coastguard Worker} 79*d5c09012SAndroid Build Coastguard Worker 80*d5c09012SAndroid Build Coastguard Worker// Used to express a dimension which is the result of a formula of multiple 81*d5c09012SAndroid Build Coastguard Worker// dimensions. Example usages: 82*d5c09012SAndroid Build Coastguard Worker// 1) lower_case(dimension) 83*d5c09012SAndroid Build Coastguard Worker// 2) concatenate(dimension1, symbol, dimension2). 84*d5c09012SAndroid Build Coastguard Workermessage DimensionExpression { 85*d5c09012SAndroid Build Coastguard Worker // Used to convert a dimension value to a single case. 86*d5c09012SAndroid Build Coastguard Worker message CaseExpression { 87*d5c09012SAndroid Build Coastguard Worker // Name of a dimension. The name must refer back to a name in dimensions 88*d5c09012SAndroid Build Coastguard Worker // field of the request. 89*d5c09012SAndroid Build Coastguard Worker string dimension_name = 1; 90*d5c09012SAndroid Build Coastguard Worker } 91*d5c09012SAndroid Build Coastguard Worker 92*d5c09012SAndroid Build Coastguard Worker // Used to combine dimension values to a single dimension. 93*d5c09012SAndroid Build Coastguard Worker message ConcatenateExpression { 94*d5c09012SAndroid Build Coastguard Worker // Names of dimensions. The names must refer back to names in the dimensions 95*d5c09012SAndroid Build Coastguard Worker // field of the request. 96*d5c09012SAndroid Build Coastguard Worker repeated string dimension_names = 1; 97*d5c09012SAndroid Build Coastguard Worker 98*d5c09012SAndroid Build Coastguard Worker // The delimiter placed between dimension names. 99*d5c09012SAndroid Build Coastguard Worker // 100*d5c09012SAndroid Build Coastguard Worker // Delimiters are often single characters such as "|" or "," but can be 101*d5c09012SAndroid Build Coastguard Worker // longer strings. If a dimension value contains the delimiter, both will be 102*d5c09012SAndroid Build Coastguard Worker // present in response with no distinction. For example if dimension 1 value 103*d5c09012SAndroid Build Coastguard Worker // = "US,FR", dimension 2 value = "JP", and delimiter = ",", then the 104*d5c09012SAndroid Build Coastguard Worker // response will contain "US,FR,JP". 105*d5c09012SAndroid Build Coastguard Worker string delimiter = 2; 106*d5c09012SAndroid Build Coastguard Worker } 107*d5c09012SAndroid Build Coastguard Worker 108*d5c09012SAndroid Build Coastguard Worker // Specify one type of dimension expression for `DimensionExpression`. 109*d5c09012SAndroid Build Coastguard Worker oneof one_expression { 110*d5c09012SAndroid Build Coastguard Worker // Used to convert a dimension value to lower case. 111*d5c09012SAndroid Build Coastguard Worker CaseExpression lower_case = 4; 112*d5c09012SAndroid Build Coastguard Worker 113*d5c09012SAndroid Build Coastguard Worker // Used to convert a dimension value to upper case. 114*d5c09012SAndroid Build Coastguard Worker CaseExpression upper_case = 5; 115*d5c09012SAndroid Build Coastguard Worker 116*d5c09012SAndroid Build Coastguard Worker // Used to combine dimension values to a single dimension. 117*d5c09012SAndroid Build Coastguard Worker // For example, dimension "country, city": concatenate(country, ", ", city). 118*d5c09012SAndroid Build Coastguard Worker ConcatenateExpression concatenate = 6; 119*d5c09012SAndroid Build Coastguard Worker } 120*d5c09012SAndroid Build Coastguard Worker} 121*d5c09012SAndroid Build Coastguard Worker 122*d5c09012SAndroid Build Coastguard Worker// To express dimension or metric filters. The fields in the same 123*d5c09012SAndroid Build Coastguard Worker// FilterExpression need to be either all dimensions or all metrics. 124*d5c09012SAndroid Build Coastguard Workermessage FilterExpression { 125*d5c09012SAndroid Build Coastguard Worker // Specify one type of filter expression for `FilterExpression`. 126*d5c09012SAndroid Build Coastguard Worker oneof expr { 127*d5c09012SAndroid Build Coastguard Worker // The FilterExpressions in and_group have an AND relationship. 128*d5c09012SAndroid Build Coastguard Worker FilterExpressionList and_group = 1; 129*d5c09012SAndroid Build Coastguard Worker 130*d5c09012SAndroid Build Coastguard Worker // The FilterExpressions in or_group have an OR relationship. 131*d5c09012SAndroid Build Coastguard Worker FilterExpressionList or_group = 2; 132*d5c09012SAndroid Build Coastguard Worker 133*d5c09012SAndroid Build Coastguard Worker // The FilterExpression is NOT of not_expression. 134*d5c09012SAndroid Build Coastguard Worker FilterExpression not_expression = 3; 135*d5c09012SAndroid Build Coastguard Worker 136*d5c09012SAndroid Build Coastguard Worker // A primitive filter. In the same FilterExpression, all of the filter's 137*d5c09012SAndroid Build Coastguard Worker // field names need to be either all dimensions or all metrics. 138*d5c09012SAndroid Build Coastguard Worker Filter filter = 4; 139*d5c09012SAndroid Build Coastguard Worker } 140*d5c09012SAndroid Build Coastguard Worker} 141*d5c09012SAndroid Build Coastguard Worker 142*d5c09012SAndroid Build Coastguard Worker// A list of filter expressions. 143*d5c09012SAndroid Build Coastguard Workermessage FilterExpressionList { 144*d5c09012SAndroid Build Coastguard Worker // A list of filter expressions. 145*d5c09012SAndroid Build Coastguard Worker repeated FilterExpression expressions = 1; 146*d5c09012SAndroid Build Coastguard Worker} 147*d5c09012SAndroid Build Coastguard Worker 148*d5c09012SAndroid Build Coastguard Worker// An expression to filter dimension or metric values. 149*d5c09012SAndroid Build Coastguard Workermessage Filter { 150*d5c09012SAndroid Build Coastguard Worker // The dimension name or metric name. Must be a name defined in dimensions 151*d5c09012SAndroid Build Coastguard Worker // or metrics. 152*d5c09012SAndroid Build Coastguard Worker string field_name = 1; 153*d5c09012SAndroid Build Coastguard Worker 154*d5c09012SAndroid Build Coastguard Worker // Specify one type of filter for `Filter`. 155*d5c09012SAndroid Build Coastguard Worker oneof one_filter { 156*d5c09012SAndroid Build Coastguard Worker // Strings related filter. 157*d5c09012SAndroid Build Coastguard Worker StringFilter string_filter = 2; 158*d5c09012SAndroid Build Coastguard Worker 159*d5c09012SAndroid Build Coastguard Worker // A filter for in list values. 160*d5c09012SAndroid Build Coastguard Worker InListFilter in_list_filter = 3; 161*d5c09012SAndroid Build Coastguard Worker 162*d5c09012SAndroid Build Coastguard Worker // A filter for numeric or date values. 163*d5c09012SAndroid Build Coastguard Worker NumericFilter numeric_filter = 4; 164*d5c09012SAndroid Build Coastguard Worker 165*d5c09012SAndroid Build Coastguard Worker // A filter for between two values. 166*d5c09012SAndroid Build Coastguard Worker BetweenFilter between_filter = 5; 167*d5c09012SAndroid Build Coastguard Worker } 168*d5c09012SAndroid Build Coastguard Worker} 169*d5c09012SAndroid Build Coastguard Worker 170*d5c09012SAndroid Build Coastguard Worker// The filter for string 171*d5c09012SAndroid Build Coastguard Workermessage StringFilter { 172*d5c09012SAndroid Build Coastguard Worker // The match type of a string filter 173*d5c09012SAndroid Build Coastguard Worker enum MatchType { 174*d5c09012SAndroid Build Coastguard Worker // Unspecified 175*d5c09012SAndroid Build Coastguard Worker MATCH_TYPE_UNSPECIFIED = 0; 176*d5c09012SAndroid Build Coastguard Worker 177*d5c09012SAndroid Build Coastguard Worker // Exact match of the string value. 178*d5c09012SAndroid Build Coastguard Worker EXACT = 1; 179*d5c09012SAndroid Build Coastguard Worker 180*d5c09012SAndroid Build Coastguard Worker // Begins with the string value. 181*d5c09012SAndroid Build Coastguard Worker BEGINS_WITH = 2; 182*d5c09012SAndroid Build Coastguard Worker 183*d5c09012SAndroid Build Coastguard Worker // Ends with the string value. 184*d5c09012SAndroid Build Coastguard Worker ENDS_WITH = 3; 185*d5c09012SAndroid Build Coastguard Worker 186*d5c09012SAndroid Build Coastguard Worker // Contains the string value. 187*d5c09012SAndroid Build Coastguard Worker CONTAINS = 4; 188*d5c09012SAndroid Build Coastguard Worker 189*d5c09012SAndroid Build Coastguard Worker // Full match for the regular expression with the string value. 190*d5c09012SAndroid Build Coastguard Worker FULL_REGEXP = 5; 191*d5c09012SAndroid Build Coastguard Worker 192*d5c09012SAndroid Build Coastguard Worker // Partial match for the regular expression with the string value. 193*d5c09012SAndroid Build Coastguard Worker PARTIAL_REGEXP = 6; 194*d5c09012SAndroid Build Coastguard Worker } 195*d5c09012SAndroid Build Coastguard Worker 196*d5c09012SAndroid Build Coastguard Worker // The match type for this filter. 197*d5c09012SAndroid Build Coastguard Worker MatchType match_type = 1; 198*d5c09012SAndroid Build Coastguard Worker 199*d5c09012SAndroid Build Coastguard Worker // The string value used for the matching. 200*d5c09012SAndroid Build Coastguard Worker string value = 2; 201*d5c09012SAndroid Build Coastguard Worker 202*d5c09012SAndroid Build Coastguard Worker // If true, the string value is case sensitive. 203*d5c09012SAndroid Build Coastguard Worker bool case_sensitive = 3; 204*d5c09012SAndroid Build Coastguard Worker} 205*d5c09012SAndroid Build Coastguard Worker 206*d5c09012SAndroid Build Coastguard Worker// The result needs to be in a list of string values. 207*d5c09012SAndroid Build Coastguard Workermessage InListFilter { 208*d5c09012SAndroid Build Coastguard Worker // The list of string values. 209*d5c09012SAndroid Build Coastguard Worker // Must be non-empty. 210*d5c09012SAndroid Build Coastguard Worker repeated string values = 1; 211*d5c09012SAndroid Build Coastguard Worker 212*d5c09012SAndroid Build Coastguard Worker // If true, the string value is case sensitive. 213*d5c09012SAndroid Build Coastguard Worker bool case_sensitive = 2; 214*d5c09012SAndroid Build Coastguard Worker} 215*d5c09012SAndroid Build Coastguard Worker 216*d5c09012SAndroid Build Coastguard Worker// Filters for numeric or date values. 217*d5c09012SAndroid Build Coastguard Workermessage NumericFilter { 218*d5c09012SAndroid Build Coastguard Worker // The operation applied to a numeric filter 219*d5c09012SAndroid Build Coastguard Worker enum Operation { 220*d5c09012SAndroid Build Coastguard Worker // Unspecified. 221*d5c09012SAndroid Build Coastguard Worker OPERATION_UNSPECIFIED = 0; 222*d5c09012SAndroid Build Coastguard Worker 223*d5c09012SAndroid Build Coastguard Worker // Equal 224*d5c09012SAndroid Build Coastguard Worker EQUAL = 1; 225*d5c09012SAndroid Build Coastguard Worker 226*d5c09012SAndroid Build Coastguard Worker // Less than 227*d5c09012SAndroid Build Coastguard Worker LESS_THAN = 2; 228*d5c09012SAndroid Build Coastguard Worker 229*d5c09012SAndroid Build Coastguard Worker // Less than or equal 230*d5c09012SAndroid Build Coastguard Worker LESS_THAN_OR_EQUAL = 3; 231*d5c09012SAndroid Build Coastguard Worker 232*d5c09012SAndroid Build Coastguard Worker // Greater than 233*d5c09012SAndroid Build Coastguard Worker GREATER_THAN = 4; 234*d5c09012SAndroid Build Coastguard Worker 235*d5c09012SAndroid Build Coastguard Worker // Greater than or equal 236*d5c09012SAndroid Build Coastguard Worker GREATER_THAN_OR_EQUAL = 5; 237*d5c09012SAndroid Build Coastguard Worker } 238*d5c09012SAndroid Build Coastguard Worker 239*d5c09012SAndroid Build Coastguard Worker // The operation type for this filter. 240*d5c09012SAndroid Build Coastguard Worker Operation operation = 1; 241*d5c09012SAndroid Build Coastguard Worker 242*d5c09012SAndroid Build Coastguard Worker // A numeric value or a date value. 243*d5c09012SAndroid Build Coastguard Worker NumericValue value = 2; 244*d5c09012SAndroid Build Coastguard Worker} 245*d5c09012SAndroid Build Coastguard Worker 246*d5c09012SAndroid Build Coastguard Worker// To express that the result needs to be between two numbers (inclusive). 247*d5c09012SAndroid Build Coastguard Workermessage BetweenFilter { 248*d5c09012SAndroid Build Coastguard Worker // Begins with this number. 249*d5c09012SAndroid Build Coastguard Worker NumericValue from_value = 1; 250*d5c09012SAndroid Build Coastguard Worker 251*d5c09012SAndroid Build Coastguard Worker // Ends with this number. 252*d5c09012SAndroid Build Coastguard Worker NumericValue to_value = 2; 253*d5c09012SAndroid Build Coastguard Worker} 254*d5c09012SAndroid Build Coastguard Worker 255*d5c09012SAndroid Build Coastguard Worker// To represent a number. 256*d5c09012SAndroid Build Coastguard Workermessage NumericValue { 257*d5c09012SAndroid Build Coastguard Worker // One of a numeric value 258*d5c09012SAndroid Build Coastguard Worker oneof one_value { 259*d5c09012SAndroid Build Coastguard Worker // Integer value 260*d5c09012SAndroid Build Coastguard Worker int64 int64_value = 1; 261*d5c09012SAndroid Build Coastguard Worker 262*d5c09012SAndroid Build Coastguard Worker // Double value 263*d5c09012SAndroid Build Coastguard Worker double double_value = 2; 264*d5c09012SAndroid Build Coastguard Worker } 265*d5c09012SAndroid Build Coastguard Worker} 266*d5c09012SAndroid Build Coastguard Worker 267*d5c09012SAndroid Build Coastguard Worker// Describes a dimension column in the report. Dimensions requested in a report 268*d5c09012SAndroid Build Coastguard Worker// produce column entries within rows and DimensionHeaders. However, dimensions 269*d5c09012SAndroid Build Coastguard Worker// used exclusively within filters or expressions do not produce columns in a 270*d5c09012SAndroid Build Coastguard Worker// report; correspondingly, those dimensions do not produce headers. 271*d5c09012SAndroid Build Coastguard Workermessage DimensionHeader { 272*d5c09012SAndroid Build Coastguard Worker // The dimension's name. 273*d5c09012SAndroid Build Coastguard Worker string name = 1; 274*d5c09012SAndroid Build Coastguard Worker} 275*d5c09012SAndroid Build Coastguard Worker 276*d5c09012SAndroid Build Coastguard Worker// Describes a metric column in the report. Visible metrics requested in a 277*d5c09012SAndroid Build Coastguard Worker// report produce column entries within rows and MetricHeaders. However, 278*d5c09012SAndroid Build Coastguard Worker// metrics used exclusively within filters or expressions do not produce columns 279*d5c09012SAndroid Build Coastguard Worker// in a report; correspondingly, those metrics do not produce headers. 280*d5c09012SAndroid Build Coastguard Workermessage MetricHeader { 281*d5c09012SAndroid Build Coastguard Worker // The metric's name. 282*d5c09012SAndroid Build Coastguard Worker string name = 1; 283*d5c09012SAndroid Build Coastguard Worker 284*d5c09012SAndroid Build Coastguard Worker // The metric's data type. 285*d5c09012SAndroid Build Coastguard Worker MetricType type = 2; 286*d5c09012SAndroid Build Coastguard Worker} 287*d5c09012SAndroid Build Coastguard Worker 288*d5c09012SAndroid Build Coastguard Worker// Report data for each row. 289*d5c09012SAndroid Build Coastguard Worker// For example if RunReportRequest contains: 290*d5c09012SAndroid Build Coastguard Worker// 291*d5c09012SAndroid Build Coastguard Worker// ```none 292*d5c09012SAndroid Build Coastguard Worker// "dimensions": [ 293*d5c09012SAndroid Build Coastguard Worker// { 294*d5c09012SAndroid Build Coastguard Worker// "name": "eventName" 295*d5c09012SAndroid Build Coastguard Worker// }, 296*d5c09012SAndroid Build Coastguard Worker// { 297*d5c09012SAndroid Build Coastguard Worker// "name": "countryId" 298*d5c09012SAndroid Build Coastguard Worker// } 299*d5c09012SAndroid Build Coastguard Worker// ], 300*d5c09012SAndroid Build Coastguard Worker// "metrics": [ 301*d5c09012SAndroid Build Coastguard Worker// { 302*d5c09012SAndroid Build Coastguard Worker// "name": "eventCount" 303*d5c09012SAndroid Build Coastguard Worker// } 304*d5c09012SAndroid Build Coastguard Worker// ] 305*d5c09012SAndroid Build Coastguard Worker// ``` 306*d5c09012SAndroid Build Coastguard Worker// 307*d5c09012SAndroid Build Coastguard Worker// One row with 'in_app_purchase' as the eventName, 'JP' as the countryId, and 308*d5c09012SAndroid Build Coastguard Worker// 15 as the eventCount, would be: 309*d5c09012SAndroid Build Coastguard Worker// 310*d5c09012SAndroid Build Coastguard Worker// ```none 311*d5c09012SAndroid Build Coastguard Worker// "dimensionValues": [ 312*d5c09012SAndroid Build Coastguard Worker// { 313*d5c09012SAndroid Build Coastguard Worker// "value": "in_app_purchase" 314*d5c09012SAndroid Build Coastguard Worker// }, 315*d5c09012SAndroid Build Coastguard Worker// { 316*d5c09012SAndroid Build Coastguard Worker// "value": "JP" 317*d5c09012SAndroid Build Coastguard Worker// } 318*d5c09012SAndroid Build Coastguard Worker// ], 319*d5c09012SAndroid Build Coastguard Worker// "metricValues": [ 320*d5c09012SAndroid Build Coastguard Worker// { 321*d5c09012SAndroid Build Coastguard Worker// "value": "15" 322*d5c09012SAndroid Build Coastguard Worker// } 323*d5c09012SAndroid Build Coastguard Worker// ] 324*d5c09012SAndroid Build Coastguard Worker// ``` 325*d5c09012SAndroid Build Coastguard Workermessage Row { 326*d5c09012SAndroid Build Coastguard Worker // List of requested dimension values. In a PivotReport, dimension_values 327*d5c09012SAndroid Build Coastguard Worker // are only listed for dimensions included in a pivot. 328*d5c09012SAndroid Build Coastguard Worker repeated DimensionValue dimension_values = 1; 329*d5c09012SAndroid Build Coastguard Worker 330*d5c09012SAndroid Build Coastguard Worker // List of requested visible metric values. 331*d5c09012SAndroid Build Coastguard Worker repeated MetricValue metric_values = 2; 332*d5c09012SAndroid Build Coastguard Worker} 333*d5c09012SAndroid Build Coastguard Worker 334*d5c09012SAndroid Build Coastguard Worker// The value of a dimension. 335*d5c09012SAndroid Build Coastguard Workermessage DimensionValue { 336*d5c09012SAndroid Build Coastguard Worker // One kind of dimension value 337*d5c09012SAndroid Build Coastguard Worker oneof one_value { 338*d5c09012SAndroid Build Coastguard Worker // Value as a string if the dimension type is a string. 339*d5c09012SAndroid Build Coastguard Worker string value = 1; 340*d5c09012SAndroid Build Coastguard Worker } 341*d5c09012SAndroid Build Coastguard Worker} 342*d5c09012SAndroid Build Coastguard Worker 343*d5c09012SAndroid Build Coastguard Worker// The value of a metric. 344*d5c09012SAndroid Build Coastguard Workermessage MetricValue { 345*d5c09012SAndroid Build Coastguard Worker // One of metric value 346*d5c09012SAndroid Build Coastguard Worker oneof one_value { 347*d5c09012SAndroid Build Coastguard Worker // Measurement value. See MetricHeader for type. 348*d5c09012SAndroid Build Coastguard Worker string value = 4; 349*d5c09012SAndroid Build Coastguard Worker } 350*d5c09012SAndroid Build Coastguard Worker} 351*d5c09012SAndroid Build Coastguard Worker 352*d5c09012SAndroid Build Coastguard Worker// Current state of all quotas for this Analytics Property. If any quota for a 353*d5c09012SAndroid Build Coastguard Worker// property is exhausted, all requests to that property will return Resource 354*d5c09012SAndroid Build Coastguard Worker// Exhausted errors. 355*d5c09012SAndroid Build Coastguard Workermessage PropertyQuota { 356*d5c09012SAndroid Build Coastguard Worker // Standard Analytics Properties can use up to 200,000 tokens per day; 357*d5c09012SAndroid Build Coastguard Worker // Analytics 360 Properties can use 2,000,000 tokens per day. Most requests 358*d5c09012SAndroid Build Coastguard Worker // consume fewer than 10 tokens. 359*d5c09012SAndroid Build Coastguard Worker QuotaStatus tokens_per_day = 1; 360*d5c09012SAndroid Build Coastguard Worker 361*d5c09012SAndroid Build Coastguard Worker // Standard Analytics Properties can use up to 40,000 tokens per hour; 362*d5c09012SAndroid Build Coastguard Worker // Analytics 360 Properties can use 400,000 tokens per hour. An API request 363*d5c09012SAndroid Build Coastguard Worker // consumes a single number of tokens, and that number is deducted from all of 364*d5c09012SAndroid Build Coastguard Worker // the hourly, daily, and per project hourly quotas. 365*d5c09012SAndroid Build Coastguard Worker QuotaStatus tokens_per_hour = 2; 366*d5c09012SAndroid Build Coastguard Worker 367*d5c09012SAndroid Build Coastguard Worker // Standard Analytics Properties can send up to 10 concurrent requests; 368*d5c09012SAndroid Build Coastguard Worker // Analytics 360 Properties can use up to 50 concurrent requests. 369*d5c09012SAndroid Build Coastguard Worker QuotaStatus concurrent_requests = 3; 370*d5c09012SAndroid Build Coastguard Worker 371*d5c09012SAndroid Build Coastguard Worker // Standard Analytics Properties and cloud project pairs can have up to 10 372*d5c09012SAndroid Build Coastguard Worker // server errors per hour; Analytics 360 Properties and cloud project pairs 373*d5c09012SAndroid Build Coastguard Worker // can have up to 50 server errors per hour. 374*d5c09012SAndroid Build Coastguard Worker QuotaStatus server_errors_per_project_per_hour = 4; 375*d5c09012SAndroid Build Coastguard Worker 376*d5c09012SAndroid Build Coastguard Worker // Analytics Properties can send up to 120 requests with potentially 377*d5c09012SAndroid Build Coastguard Worker // thresholded dimensions per hour. In a batch request, each report request 378*d5c09012SAndroid Build Coastguard Worker // is individually counted for this quota if the request contains potentially 379*d5c09012SAndroid Build Coastguard Worker // thresholded dimensions. 380*d5c09012SAndroid Build Coastguard Worker QuotaStatus potentially_thresholded_requests_per_hour = 5; 381*d5c09012SAndroid Build Coastguard Worker 382*d5c09012SAndroid Build Coastguard Worker // Analytics Properties can use up to 35% of their tokens per project per 383*d5c09012SAndroid Build Coastguard Worker // hour. This amounts to standard Analytics Properties can use up to 14,000 384*d5c09012SAndroid Build Coastguard Worker // tokens per project per hour, and Analytics 360 Properties can use 140,000 385*d5c09012SAndroid Build Coastguard Worker // tokens per project per hour. An API request consumes a single number of 386*d5c09012SAndroid Build Coastguard Worker // tokens, and that number is deducted from all of the hourly, daily, and per 387*d5c09012SAndroid Build Coastguard Worker // project hourly quotas. 388*d5c09012SAndroid Build Coastguard Worker QuotaStatus tokens_per_project_per_hour = 6; 389*d5c09012SAndroid Build Coastguard Worker} 390*d5c09012SAndroid Build Coastguard Worker 391*d5c09012SAndroid Build Coastguard Worker// Current state for a particular quota group. 392*d5c09012SAndroid Build Coastguard Workermessage QuotaStatus { 393*d5c09012SAndroid Build Coastguard Worker // Quota consumed by this request. 394*d5c09012SAndroid Build Coastguard Worker int32 consumed = 1; 395*d5c09012SAndroid Build Coastguard Worker 396*d5c09012SAndroid Build Coastguard Worker // Quota remaining after this request. 397*d5c09012SAndroid Build Coastguard Worker int32 remaining = 2; 398*d5c09012SAndroid Build Coastguard Worker} 399*d5c09012SAndroid Build Coastguard Worker 400*d5c09012SAndroid Build Coastguard Worker// Breakdowns add a dimension to the funnel table sub report response. 401*d5c09012SAndroid Build Coastguard Workermessage FunnelBreakdown { 402*d5c09012SAndroid Build Coastguard Worker // The dimension column added to the funnel table sub report response. The 403*d5c09012SAndroid Build Coastguard Worker // breakdown dimension breaks down each funnel step. A valid 404*d5c09012SAndroid Build Coastguard Worker // `breakdownDimension` is required if `funnelBreakdown` is specified. 405*d5c09012SAndroid Build Coastguard Worker Dimension breakdown_dimension = 1; 406*d5c09012SAndroid Build Coastguard Worker 407*d5c09012SAndroid Build Coastguard Worker // The maximum number of distinct values of the breakdown dimension to return 408*d5c09012SAndroid Build Coastguard Worker // in the response. A `limit` of `5` is used if limit is not specified. Limit 409*d5c09012SAndroid Build Coastguard Worker // must exceed zero and cannot exceed 15. 410*d5c09012SAndroid Build Coastguard Worker optional int64 limit = 2; 411*d5c09012SAndroid Build Coastguard Worker} 412*d5c09012SAndroid Build Coastguard Worker 413*d5c09012SAndroid Build Coastguard Worker// Next actions state the value for a dimension after the user has achieved 414*d5c09012SAndroid Build Coastguard Worker// a step but before the same user has achieved the next step. For example if 415*d5c09012SAndroid Build Coastguard Worker// the `nextActionDimension` is `eventName`, then `nextActionDimension` in the 416*d5c09012SAndroid Build Coastguard Worker// `i`th funnel step row will return first event after the event that qualified 417*d5c09012SAndroid Build Coastguard Worker// the user into the `i`th funnel step but before the user achieved the `i+1`th 418*d5c09012SAndroid Build Coastguard Worker// funnel step. 419*d5c09012SAndroid Build Coastguard Workermessage FunnelNextAction { 420*d5c09012SAndroid Build Coastguard Worker // The dimension column added to the funnel visualization sub report response. 421*d5c09012SAndroid Build Coastguard Worker // The next action dimension returns the next dimension value of this 422*d5c09012SAndroid Build Coastguard Worker // dimension after the user has attained the `i`th funnel step. 423*d5c09012SAndroid Build Coastguard Worker // 424*d5c09012SAndroid Build Coastguard Worker // `nextActionDimension` currently only supports `eventName` and most Page / 425*d5c09012SAndroid Build Coastguard Worker // Screen dimensions like `pageTitle` and `pagePath`. `nextActionDimension` 426*d5c09012SAndroid Build Coastguard Worker // cannot be a dimension expression. 427*d5c09012SAndroid Build Coastguard Worker Dimension next_action_dimension = 1; 428*d5c09012SAndroid Build Coastguard Worker 429*d5c09012SAndroid Build Coastguard Worker // The maximum number of distinct values of the breakdown dimension to return 430*d5c09012SAndroid Build Coastguard Worker // in the response. A `limit` of `5` is used if limit is not specified. Limit 431*d5c09012SAndroid Build Coastguard Worker // must exceed zero and cannot exceed 5. 432*d5c09012SAndroid Build Coastguard Worker optional int64 limit = 2; 433*d5c09012SAndroid Build Coastguard Worker} 434*d5c09012SAndroid Build Coastguard Worker 435*d5c09012SAndroid Build Coastguard Worker// Configures the funnel in a funnel report request. A funnel reports on users 436*d5c09012SAndroid Build Coastguard Worker// as they pass through a sequence of steps. 437*d5c09012SAndroid Build Coastguard Worker// 438*d5c09012SAndroid Build Coastguard Worker// Funnel exploration lets you visualize the steps your users take to complete a 439*d5c09012SAndroid Build Coastguard Worker// task and quickly see how well they are succeeding or failing at each step. 440*d5c09012SAndroid Build Coastguard Worker// For example, how do prospects become shoppers and then become buyers? How do 441*d5c09012SAndroid Build Coastguard Worker// one time buyers become repeat buyers? With this information, you can improve 442*d5c09012SAndroid Build Coastguard Worker// inefficient or abandoned customer journeys. 443*d5c09012SAndroid Build Coastguard Workermessage Funnel { 444*d5c09012SAndroid Build Coastguard Worker // In an open funnel, users can enter the funnel in any step, and in a closed 445*d5c09012SAndroid Build Coastguard Worker // funnel, users must enter the funnel in the first step. Optional. If 446*d5c09012SAndroid Build Coastguard Worker // unspecified, a closed funnel is used. 447*d5c09012SAndroid Build Coastguard Worker bool is_open_funnel = 1; 448*d5c09012SAndroid Build Coastguard Worker 449*d5c09012SAndroid Build Coastguard Worker // The sequential steps of this funnel. 450*d5c09012SAndroid Build Coastguard Worker repeated FunnelStep steps = 2; 451*d5c09012SAndroid Build Coastguard Worker} 452*d5c09012SAndroid Build Coastguard Worker 453*d5c09012SAndroid Build Coastguard Worker// Steps define the user journey you want to measure. Steps contain one or 454*d5c09012SAndroid Build Coastguard Worker// more conditions that your users must meet to be included in that step of 455*d5c09012SAndroid Build Coastguard Worker// the funnel journey. 456*d5c09012SAndroid Build Coastguard Workermessage FunnelStep { 457*d5c09012SAndroid Build Coastguard Worker // The distinctive name for this step. If unspecified, steps will be named 458*d5c09012SAndroid Build Coastguard Worker // by a 1 based indexed name (for example "0. ", "1. ", etc.). This name 459*d5c09012SAndroid Build Coastguard Worker // defines string value returned by the `funnelStepName` dimension. For 460*d5c09012SAndroid Build Coastguard Worker // example, specifying `name = Purchase` in the request's third funnel step 461*d5c09012SAndroid Build Coastguard Worker // will produce `3. Purchase` in the funnel report response. 462*d5c09012SAndroid Build Coastguard Worker string name = 1; 463*d5c09012SAndroid Build Coastguard Worker 464*d5c09012SAndroid Build Coastguard Worker // If true, this step must directly follow the previous step. If false, 465*d5c09012SAndroid Build Coastguard Worker // there can be events between the previous step and this step. If 466*d5c09012SAndroid Build Coastguard Worker // unspecified, `isDirectlyFollowedBy` is treated as false. 467*d5c09012SAndroid Build Coastguard Worker bool is_directly_followed_by = 2; 468*d5c09012SAndroid Build Coastguard Worker 469*d5c09012SAndroid Build Coastguard Worker // If specified, this step must complete within this duration of the 470*d5c09012SAndroid Build Coastguard Worker // completion of the prior step. `withinDurationFromPriorStep` is inclusive 471*d5c09012SAndroid Build Coastguard Worker // of the endpoint at the microsecond granularity. For example a duration of 472*d5c09012SAndroid Build Coastguard Worker // 5 seconds can be completed at 4.9 or 5.0 seconds, but not 5 seconds and 1 473*d5c09012SAndroid Build Coastguard Worker // microsecond. 474*d5c09012SAndroid Build Coastguard Worker // 475*d5c09012SAndroid Build Coastguard Worker // `withinDurationFromPriorStep` is optional, and if unspecified, steps may 476*d5c09012SAndroid Build Coastguard Worker // be separated by any time duration. 477*d5c09012SAndroid Build Coastguard Worker optional google.protobuf.Duration within_duration_from_prior_step = 3; 478*d5c09012SAndroid Build Coastguard Worker 479*d5c09012SAndroid Build Coastguard Worker // The condition that your users must meet to be included in this step of 480*d5c09012SAndroid Build Coastguard Worker // the funnel journey. 481*d5c09012SAndroid Build Coastguard Worker FunnelFilterExpression filter_expression = 4; 482*d5c09012SAndroid Build Coastguard Worker} 483*d5c09012SAndroid Build Coastguard Worker 484*d5c09012SAndroid Build Coastguard Worker// Funnel sub reports contain the dimension and metric data values. For example, 485*d5c09012SAndroid Build Coastguard Worker// 12 users reached the second step of the funnel. 486*d5c09012SAndroid Build Coastguard Workermessage FunnelSubReport { 487*d5c09012SAndroid Build Coastguard Worker // Describes dimension columns. Funnel reports always include the funnel step 488*d5c09012SAndroid Build Coastguard Worker // dimension in sub report responses. Additional dimensions like breakdowns, 489*d5c09012SAndroid Build Coastguard Worker // dates, and next actions may be present in the response if requested. 490*d5c09012SAndroid Build Coastguard Worker repeated DimensionHeader dimension_headers = 1; 491*d5c09012SAndroid Build Coastguard Worker 492*d5c09012SAndroid Build Coastguard Worker // Describes metric columns. Funnel reports always include active users in sub 493*d5c09012SAndroid Build Coastguard Worker // report responses. The funnel table includes additional metrics like 494*d5c09012SAndroid Build Coastguard Worker // completion rate, abandonments, and abandonments rate. 495*d5c09012SAndroid Build Coastguard Worker repeated MetricHeader metric_headers = 2; 496*d5c09012SAndroid Build Coastguard Worker 497*d5c09012SAndroid Build Coastguard Worker // Rows of dimension value combinations and metric values in the report. 498*d5c09012SAndroid Build Coastguard Worker repeated Row rows = 3; 499*d5c09012SAndroid Build Coastguard Worker 500*d5c09012SAndroid Build Coastguard Worker // Metadata for the funnel report. 501*d5c09012SAndroid Build Coastguard Worker FunnelResponseMetadata metadata = 4; 502*d5c09012SAndroid Build Coastguard Worker} 503*d5c09012SAndroid Build Coastguard Worker 504*d5c09012SAndroid Build Coastguard Worker// User segments are subsets of users who engaged with your site or app. For 505*d5c09012SAndroid Build Coastguard Worker// example, users who have previously purchased; users who added items to their 506*d5c09012SAndroid Build Coastguard Worker// shopping carts, but didn’t complete a purchase. 507*d5c09012SAndroid Build Coastguard Workermessage UserSegment { 508*d5c09012SAndroid Build Coastguard Worker // Defines which users are included in this segment. Optional. 509*d5c09012SAndroid Build Coastguard Worker UserSegmentCriteria user_inclusion_criteria = 1; 510*d5c09012SAndroid Build Coastguard Worker 511*d5c09012SAndroid Build Coastguard Worker // Defines which users are excluded in this segment. Optional. 512*d5c09012SAndroid Build Coastguard Worker UserSegmentExclusion exclusion = 2; 513*d5c09012SAndroid Build Coastguard Worker} 514*d5c09012SAndroid Build Coastguard Worker 515*d5c09012SAndroid Build Coastguard Worker// A user matches a criteria if the user's events meet the conditions in the 516*d5c09012SAndroid Build Coastguard Worker// criteria. 517*d5c09012SAndroid Build Coastguard Workermessage UserSegmentCriteria { 518*d5c09012SAndroid Build Coastguard Worker // A user matches this criteria if the user matches each of these 519*d5c09012SAndroid Build Coastguard Worker // `andConditionGroups` and each of the `andSequenceGroups`. 520*d5c09012SAndroid Build Coastguard Worker // `andConditionGroups` may be empty if `andSequenceGroups` are specified. 521*d5c09012SAndroid Build Coastguard Worker repeated UserSegmentConditionGroup and_condition_groups = 1; 522*d5c09012SAndroid Build Coastguard Worker 523*d5c09012SAndroid Build Coastguard Worker // A user matches this criteria if the user matches each of these 524*d5c09012SAndroid Build Coastguard Worker // `andSequenceGroups` and each of the `andConditionGroups`. 525*d5c09012SAndroid Build Coastguard Worker // `andSequenceGroups` may be empty if `andConditionGroups` are specified. 526*d5c09012SAndroid Build Coastguard Worker repeated UserSegmentSequenceGroup and_sequence_groups = 2; 527*d5c09012SAndroid Build Coastguard Worker} 528*d5c09012SAndroid Build Coastguard Worker 529*d5c09012SAndroid Build Coastguard Worker// Scoping specifies which events are considered when evaluating if a user 530*d5c09012SAndroid Build Coastguard Worker// meets a criteria. 531*d5c09012SAndroid Build Coastguard Workerenum UserCriteriaScoping { 532*d5c09012SAndroid Build Coastguard Worker // Unspecified criteria scoping. Do not specify. 533*d5c09012SAndroid Build Coastguard Worker USER_CRITERIA_SCOPING_UNSPECIFIED = 0; 534*d5c09012SAndroid Build Coastguard Worker 535*d5c09012SAndroid Build Coastguard Worker // If the criteria is satisfied within one event, the user matches the 536*d5c09012SAndroid Build Coastguard Worker // criteria. 537*d5c09012SAndroid Build Coastguard Worker USER_CRITERIA_WITHIN_SAME_EVENT = 1; 538*d5c09012SAndroid Build Coastguard Worker 539*d5c09012SAndroid Build Coastguard Worker // If the criteria is satisfied within one session, the user matches the 540*d5c09012SAndroid Build Coastguard Worker // criteria. 541*d5c09012SAndroid Build Coastguard Worker USER_CRITERIA_WITHIN_SAME_SESSION = 2; 542*d5c09012SAndroid Build Coastguard Worker 543*d5c09012SAndroid Build Coastguard Worker // If the criteria is satisfied by any events for the user, the user 544*d5c09012SAndroid Build Coastguard Worker // matches the criteria. 545*d5c09012SAndroid Build Coastguard Worker USER_CRITERIA_ACROSS_ALL_SESSIONS = 3; 546*d5c09012SAndroid Build Coastguard Worker} 547*d5c09012SAndroid Build Coastguard Worker 548*d5c09012SAndroid Build Coastguard Worker// Conditions tell Analytics what data to include in or exclude from the 549*d5c09012SAndroid Build Coastguard Worker// segment. 550*d5c09012SAndroid Build Coastguard Workermessage UserSegmentConditionGroup { 551*d5c09012SAndroid Build Coastguard Worker // Data is included or excluded from the segment based on if it matches 552*d5c09012SAndroid Build Coastguard Worker // the condition group. This scoping defines how many events the 553*d5c09012SAndroid Build Coastguard Worker // `segmentFilterExpression` is evaluated on before the condition group 554*d5c09012SAndroid Build Coastguard Worker // is determined to be matched or not. For example if `conditionScoping = 555*d5c09012SAndroid Build Coastguard Worker // USER_CRITERIA_WITHIN_SAME_SESSION`, the expression is evaluated on all 556*d5c09012SAndroid Build Coastguard Worker // events in a session, and then, the condition group is determined to be 557*d5c09012SAndroid Build Coastguard Worker // matched or not for this user. For example if `conditionScoping = 558*d5c09012SAndroid Build Coastguard Worker // USER_CRITERIA_WITHIN_SAME_EVENT`, the expression is evaluated on a single 559*d5c09012SAndroid Build Coastguard Worker // event, and then, the condition group is determined to be matched or not for 560*d5c09012SAndroid Build Coastguard Worker // this user. 561*d5c09012SAndroid Build Coastguard Worker // 562*d5c09012SAndroid Build Coastguard Worker // Optional. If unspecified, `conditionScoping = ACROSS_ALL_SESSIONS` is 563*d5c09012SAndroid Build Coastguard Worker // used. 564*d5c09012SAndroid Build Coastguard Worker UserCriteriaScoping condition_scoping = 1; 565*d5c09012SAndroid Build Coastguard Worker 566*d5c09012SAndroid Build Coastguard Worker // Data is included or excluded from the segment based on if it matches 567*d5c09012SAndroid Build Coastguard Worker // this expression. Expressions express criteria on dimension, metrics, 568*d5c09012SAndroid Build Coastguard Worker // and/or parameters. 569*d5c09012SAndroid Build Coastguard Worker SegmentFilterExpression segment_filter_expression = 2; 570*d5c09012SAndroid Build Coastguard Worker} 571*d5c09012SAndroid Build Coastguard Worker 572*d5c09012SAndroid Build Coastguard Worker// Define conditions that must occur in a specific order for the user to be 573*d5c09012SAndroid Build Coastguard Worker// a member of the segment. 574*d5c09012SAndroid Build Coastguard Workermessage UserSegmentSequenceGroup { 575*d5c09012SAndroid Build Coastguard Worker // All sequence steps must be satisfied in the scoping for the user to 576*d5c09012SAndroid Build Coastguard Worker // match the sequence. For example if `sequenceScoping = 577*d5c09012SAndroid Build Coastguard Worker // USER_CRITERIA_WITHIN_SAME_SESSION`, all sequence steps must complete within 578*d5c09012SAndroid Build Coastguard Worker // one session for the user to match the sequence. `sequenceScoping = 579*d5c09012SAndroid Build Coastguard Worker // USER_CRITERIA_WITHIN_SAME_EVENT` is not supported. 580*d5c09012SAndroid Build Coastguard Worker // 581*d5c09012SAndroid Build Coastguard Worker // Optional. If unspecified, `conditionScoping = ACROSS_ALL_SESSIONS` is 582*d5c09012SAndroid Build Coastguard Worker // used. 583*d5c09012SAndroid Build Coastguard Worker UserCriteriaScoping sequence_scoping = 1; 584*d5c09012SAndroid Build Coastguard Worker 585*d5c09012SAndroid Build Coastguard Worker // Defines the time period in which the whole sequence must occur; for 586*d5c09012SAndroid Build Coastguard Worker // example, 30 Minutes. `sequenceMaximumDuration` is inclusive 587*d5c09012SAndroid Build Coastguard Worker // of the endpoint at the microsecond granularity. For example a sequence 588*d5c09012SAndroid Build Coastguard Worker // with a maximum duration of 5 seconds can be completed at 4.9 or 5.0 589*d5c09012SAndroid Build Coastguard Worker // seconds, but not 5 seconds and 1 microsecond. 590*d5c09012SAndroid Build Coastguard Worker // 591*d5c09012SAndroid Build Coastguard Worker // `sequenceMaximumDuration` is optional, and if unspecified, sequences can 592*d5c09012SAndroid Build Coastguard Worker // be completed in any time duration. 593*d5c09012SAndroid Build Coastguard Worker google.protobuf.Duration sequence_maximum_duration = 2; 594*d5c09012SAndroid Build Coastguard Worker 595*d5c09012SAndroid Build Coastguard Worker // An ordered sequence of condition steps. A user's events must complete 596*d5c09012SAndroid Build Coastguard Worker // each step in order for the user to match the 597*d5c09012SAndroid Build Coastguard Worker // `UserSegmentSequenceGroup`. 598*d5c09012SAndroid Build Coastguard Worker repeated UserSequenceStep user_sequence_steps = 3; 599*d5c09012SAndroid Build Coastguard Worker} 600*d5c09012SAndroid Build Coastguard Worker 601*d5c09012SAndroid Build Coastguard Worker// A condition that must occur in the specified step order for this user 602*d5c09012SAndroid Build Coastguard Worker// to match the sequence. 603*d5c09012SAndroid Build Coastguard Workermessage UserSequenceStep { 604*d5c09012SAndroid Build Coastguard Worker // If true, the event satisfying this step must be the very next event 605*d5c09012SAndroid Build Coastguard Worker // after the event satifying the last step. If false, this step indirectly 606*d5c09012SAndroid Build Coastguard Worker // follows the prior step; for example, there may be events between the 607*d5c09012SAndroid Build Coastguard Worker // prior step and this step. `isDirectlyFollowedBy` must be false for 608*d5c09012SAndroid Build Coastguard Worker // the first step. 609*d5c09012SAndroid Build Coastguard Worker bool is_directly_followed_by = 1; 610*d5c09012SAndroid Build Coastguard Worker 611*d5c09012SAndroid Build Coastguard Worker // This sequence step must be satisfied in the scoping for the user to 612*d5c09012SAndroid Build Coastguard Worker // match the sequence. For example if `sequenceScoping = 613*d5c09012SAndroid Build Coastguard Worker // WITHIN_SAME_SESSION`, this sequence steps must complete within one 614*d5c09012SAndroid Build Coastguard Worker // session for the user to match the sequence. `stepScoping = 615*d5c09012SAndroid Build Coastguard Worker // ACROSS_ALL_SESSIONS` is only allowed if the `sequenceScoping = 616*d5c09012SAndroid Build Coastguard Worker // ACROSS_ALL_SESSIONS`. 617*d5c09012SAndroid Build Coastguard Worker // 618*d5c09012SAndroid Build Coastguard Worker // Optional. If unspecified, `stepScoping` uses the same 619*d5c09012SAndroid Build Coastguard Worker // `UserCriteriaScoping` as the `sequenceScoping`. 620*d5c09012SAndroid Build Coastguard Worker UserCriteriaScoping step_scoping = 2; 621*d5c09012SAndroid Build Coastguard Worker 622*d5c09012SAndroid Build Coastguard Worker // A user matches this sequence step if their events match this 623*d5c09012SAndroid Build Coastguard Worker // expression. Expressions express criteria on dimension, metrics, 624*d5c09012SAndroid Build Coastguard Worker // and/or parameters. 625*d5c09012SAndroid Build Coastguard Worker SegmentFilterExpression segment_filter_expression = 3; 626*d5c09012SAndroid Build Coastguard Worker} 627*d5c09012SAndroid Build Coastguard Worker 628*d5c09012SAndroid Build Coastguard Worker// Specifies which users are excluded in this segment. 629*d5c09012SAndroid Build Coastguard Workermessage UserSegmentExclusion { 630*d5c09012SAndroid Build Coastguard Worker // Specifies how long an exclusion will last if a user matches the 631*d5c09012SAndroid Build Coastguard Worker // `userExclusionCriteria`. 632*d5c09012SAndroid Build Coastguard Worker // 633*d5c09012SAndroid Build Coastguard Worker // Optional. If unspecified, `userExclusionDuration` of 634*d5c09012SAndroid Build Coastguard Worker // `USER_EXCLUSION_TEMPORARY` is used. 635*d5c09012SAndroid Build Coastguard Worker UserExclusionDuration user_exclusion_duration = 1; 636*d5c09012SAndroid Build Coastguard Worker 637*d5c09012SAndroid Build Coastguard Worker // If a user meets this condition, the user is excluded from membership in 638*d5c09012SAndroid Build Coastguard Worker // the segment for the `userExclusionDuration`. 639*d5c09012SAndroid Build Coastguard Worker UserSegmentCriteria user_exclusion_criteria = 2; 640*d5c09012SAndroid Build Coastguard Worker} 641*d5c09012SAndroid Build Coastguard Worker 642*d5c09012SAndroid Build Coastguard Worker// Enumerates options for how long an exclusion will last if a user matches 643*d5c09012SAndroid Build Coastguard Worker// the `userExclusionCriteria`. 644*d5c09012SAndroid Build Coastguard Workerenum UserExclusionDuration { 645*d5c09012SAndroid Build Coastguard Worker // Unspecified exclusion duration. Do not specify. 646*d5c09012SAndroid Build Coastguard Worker USER_EXCLUSION_DURATION_UNSPECIFIED = 0; 647*d5c09012SAndroid Build Coastguard Worker 648*d5c09012SAndroid Build Coastguard Worker // Temporarily exclude users from the segment during periods when the 649*d5c09012SAndroid Build Coastguard Worker // user meets the `userExclusionCriteria` condition. 650*d5c09012SAndroid Build Coastguard Worker USER_EXCLUSION_TEMPORARY = 1; 651*d5c09012SAndroid Build Coastguard Worker 652*d5c09012SAndroid Build Coastguard Worker // Permanently exclude users from the segment if the user ever meets the 653*d5c09012SAndroid Build Coastguard Worker // `userExclusionCriteria` condition. 654*d5c09012SAndroid Build Coastguard Worker USER_EXCLUSION_PERMANENT = 2; 655*d5c09012SAndroid Build Coastguard Worker} 656*d5c09012SAndroid Build Coastguard Worker 657*d5c09012SAndroid Build Coastguard Worker// Session segments are subsets of the sessions that occurred on your site or 658*d5c09012SAndroid Build Coastguard Worker// app: for example, all the sessions that originated from a particular 659*d5c09012SAndroid Build Coastguard Worker// advertising campaign. 660*d5c09012SAndroid Build Coastguard Workermessage SessionSegment { 661*d5c09012SAndroid Build Coastguard Worker // Defines which sessions are included in this segment. Optional. 662*d5c09012SAndroid Build Coastguard Worker SessionSegmentCriteria session_inclusion_criteria = 1; 663*d5c09012SAndroid Build Coastguard Worker 664*d5c09012SAndroid Build Coastguard Worker // Defines which sessions are excluded in this segment. Optional. 665*d5c09012SAndroid Build Coastguard Worker SessionSegmentExclusion exclusion = 2; 666*d5c09012SAndroid Build Coastguard Worker} 667*d5c09012SAndroid Build Coastguard Worker 668*d5c09012SAndroid Build Coastguard Worker// A session matches a criteria if the session's events meet the conditions in 669*d5c09012SAndroid Build Coastguard Worker// the criteria. 670*d5c09012SAndroid Build Coastguard Workermessage SessionSegmentCriteria { 671*d5c09012SAndroid Build Coastguard Worker // A session matches this criteria if the session matches each of these 672*d5c09012SAndroid Build Coastguard Worker // `andConditionGroups`. 673*d5c09012SAndroid Build Coastguard Worker repeated SessionSegmentConditionGroup and_condition_groups = 1; 674*d5c09012SAndroid Build Coastguard Worker} 675*d5c09012SAndroid Build Coastguard Worker 676*d5c09012SAndroid Build Coastguard Worker// Scoping specifies which events are considered when evaluating if a 677*d5c09012SAndroid Build Coastguard Worker// session meets a criteria. 678*d5c09012SAndroid Build Coastguard Workerenum SessionCriteriaScoping { 679*d5c09012SAndroid Build Coastguard Worker // Unspecified criteria scoping. Do not specify. 680*d5c09012SAndroid Build Coastguard Worker SESSION_CRITERIA_SCOPING_UNSPECIFIED = 0; 681*d5c09012SAndroid Build Coastguard Worker 682*d5c09012SAndroid Build Coastguard Worker // If the criteria is satisfied within one event, the session matches the 683*d5c09012SAndroid Build Coastguard Worker // criteria. 684*d5c09012SAndroid Build Coastguard Worker SESSION_CRITERIA_WITHIN_SAME_EVENT = 1; 685*d5c09012SAndroid Build Coastguard Worker 686*d5c09012SAndroid Build Coastguard Worker // If the criteria is satisfied within one session, the session matches 687*d5c09012SAndroid Build Coastguard Worker // the criteria. 688*d5c09012SAndroid Build Coastguard Worker SESSION_CRITERIA_WITHIN_SAME_SESSION = 2; 689*d5c09012SAndroid Build Coastguard Worker} 690*d5c09012SAndroid Build Coastguard Worker 691*d5c09012SAndroid Build Coastguard Worker// Conditions tell Analytics what data to include in or exclude from the 692*d5c09012SAndroid Build Coastguard Worker// segment. 693*d5c09012SAndroid Build Coastguard Workermessage SessionSegmentConditionGroup { 694*d5c09012SAndroid Build Coastguard Worker // Data is included or excluded from the segment based on if it matches 695*d5c09012SAndroid Build Coastguard Worker // the condition group. This scoping defines how many events the 696*d5c09012SAndroid Build Coastguard Worker // `segmentFilterExpression` is evaluated on before the condition group 697*d5c09012SAndroid Build Coastguard Worker // is determined to be matched or not. For example if `conditionScoping = 698*d5c09012SAndroid Build Coastguard Worker // SESSION_CRITERIA_WITHIN_SAME_SESSION`, the expression is evaluated on all 699*d5c09012SAndroid Build Coastguard Worker // events in a session, and then, the condition group is determined to be 700*d5c09012SAndroid Build Coastguard Worker // matched or not for this session. For example if `conditionScoping = 701*d5c09012SAndroid Build Coastguard Worker // SESSION_CRITERIA_WITHIN_SAME_EVENT`, the expression is evaluated on a 702*d5c09012SAndroid Build Coastguard Worker // single event, and then, the condition group is determined to be matched or 703*d5c09012SAndroid Build Coastguard Worker // not for this session. 704*d5c09012SAndroid Build Coastguard Worker // 705*d5c09012SAndroid Build Coastguard Worker // Optional. If unspecified, a `conditionScoping` of `WITHIN_SAME_SESSION` 706*d5c09012SAndroid Build Coastguard Worker // is used. 707*d5c09012SAndroid Build Coastguard Worker SessionCriteriaScoping condition_scoping = 1; 708*d5c09012SAndroid Build Coastguard Worker 709*d5c09012SAndroid Build Coastguard Worker // Data is included or excluded from the segment based on if it matches 710*d5c09012SAndroid Build Coastguard Worker // this expression. Expressions express criteria on dimension, metrics, 711*d5c09012SAndroid Build Coastguard Worker // and/or parameters. 712*d5c09012SAndroid Build Coastguard Worker SegmentFilterExpression segment_filter_expression = 2; 713*d5c09012SAndroid Build Coastguard Worker} 714*d5c09012SAndroid Build Coastguard Worker 715*d5c09012SAndroid Build Coastguard Worker// Specifies which sessions are excluded in this segment. 716*d5c09012SAndroid Build Coastguard Workermessage SessionSegmentExclusion { 717*d5c09012SAndroid Build Coastguard Worker // Specifies how long an exclusion will last if a session matches the 718*d5c09012SAndroid Build Coastguard Worker // `sessionExclusionCriteria`. 719*d5c09012SAndroid Build Coastguard Worker // 720*d5c09012SAndroid Build Coastguard Worker // Optional. If unspecified, a `sessionExclusionDuration` of 721*d5c09012SAndroid Build Coastguard Worker // `SESSION_EXCLUSION_TEMPORARY` is used. 722*d5c09012SAndroid Build Coastguard Worker SessionExclusionDuration session_exclusion_duration = 1; 723*d5c09012SAndroid Build Coastguard Worker 724*d5c09012SAndroid Build Coastguard Worker // If a session meets this condition, the session is excluded from 725*d5c09012SAndroid Build Coastguard Worker // membership in the segment for the `sessionExclusionDuration`. 726*d5c09012SAndroid Build Coastguard Worker SessionSegmentCriteria session_exclusion_criteria = 2; 727*d5c09012SAndroid Build Coastguard Worker} 728*d5c09012SAndroid Build Coastguard Worker 729*d5c09012SAndroid Build Coastguard Worker// Enumerates options for how long an exclusion will last if a session 730*d5c09012SAndroid Build Coastguard Worker// matches the `sessionExclusionCriteria`. 731*d5c09012SAndroid Build Coastguard Workerenum SessionExclusionDuration { 732*d5c09012SAndroid Build Coastguard Worker // Unspecified exclusion duration. Do not specify. 733*d5c09012SAndroid Build Coastguard Worker SESSION_EXCLUSION_DURATION_UNSPECIFIED = 0; 734*d5c09012SAndroid Build Coastguard Worker 735*d5c09012SAndroid Build Coastguard Worker // Temporarily exclude sessions from the segment during periods when the 736*d5c09012SAndroid Build Coastguard Worker // session meets the `sessionExclusionCriteria` condition. 737*d5c09012SAndroid Build Coastguard Worker SESSION_EXCLUSION_TEMPORARY = 1; 738*d5c09012SAndroid Build Coastguard Worker 739*d5c09012SAndroid Build Coastguard Worker // Permanently exclude sessions from the segment if the session ever meets 740*d5c09012SAndroid Build Coastguard Worker // the `sessionExclusionCriteria` condition. 741*d5c09012SAndroid Build Coastguard Worker SESSION_EXCLUSION_PERMANENT = 2; 742*d5c09012SAndroid Build Coastguard Worker} 743*d5c09012SAndroid Build Coastguard Worker 744*d5c09012SAndroid Build Coastguard Worker// Event segments are subsets of events that were triggered on your site or app. 745*d5c09012SAndroid Build Coastguard Worker// for example, all purchase events made in a particular location; app_exception 746*d5c09012SAndroid Build Coastguard Worker// events that occurred on a specific operating system. 747*d5c09012SAndroid Build Coastguard Workermessage EventSegment { 748*d5c09012SAndroid Build Coastguard Worker // Defines which events are included in this segment. Optional. 749*d5c09012SAndroid Build Coastguard Worker EventSegmentCriteria event_inclusion_criteria = 1; 750*d5c09012SAndroid Build Coastguard Worker 751*d5c09012SAndroid Build Coastguard Worker // Defines which events are excluded in this segment. Optional. 752*d5c09012SAndroid Build Coastguard Worker EventSegmentExclusion exclusion = 2; 753*d5c09012SAndroid Build Coastguard Worker} 754*d5c09012SAndroid Build Coastguard Worker 755*d5c09012SAndroid Build Coastguard Worker// An event matches a criteria if the event meet the conditions in the 756*d5c09012SAndroid Build Coastguard Worker// criteria. 757*d5c09012SAndroid Build Coastguard Workermessage EventSegmentCriteria { 758*d5c09012SAndroid Build Coastguard Worker // An event matches this criteria if the event matches each of these 759*d5c09012SAndroid Build Coastguard Worker // `andConditionGroups`. 760*d5c09012SAndroid Build Coastguard Worker repeated EventSegmentConditionGroup and_condition_groups = 1; 761*d5c09012SAndroid Build Coastguard Worker} 762*d5c09012SAndroid Build Coastguard Worker 763*d5c09012SAndroid Build Coastguard Worker// Scoping specifies which events are considered when evaluating if an event 764*d5c09012SAndroid Build Coastguard Worker// meets a criteria. 765*d5c09012SAndroid Build Coastguard Workerenum EventCriteriaScoping { 766*d5c09012SAndroid Build Coastguard Worker // Unspecified criteria scoping. Do not specify. 767*d5c09012SAndroid Build Coastguard Worker EVENT_CRITERIA_SCOPING_UNSPECIFIED = 0; 768*d5c09012SAndroid Build Coastguard Worker 769*d5c09012SAndroid Build Coastguard Worker // If the criteria is satisfied within one event, the event matches the 770*d5c09012SAndroid Build Coastguard Worker // criteria. 771*d5c09012SAndroid Build Coastguard Worker EVENT_CRITERIA_WITHIN_SAME_EVENT = 1; 772*d5c09012SAndroid Build Coastguard Worker} 773*d5c09012SAndroid Build Coastguard Worker 774*d5c09012SAndroid Build Coastguard Worker// Conditions tell Analytics what data to include in or exclude from the 775*d5c09012SAndroid Build Coastguard Worker// segment. 776*d5c09012SAndroid Build Coastguard Workermessage EventSegmentConditionGroup { 777*d5c09012SAndroid Build Coastguard Worker // `conditionScoping` should always be `EVENT_CRITERIA_WITHIN_SAME_EVENT`. 778*d5c09012SAndroid Build Coastguard Worker // 779*d5c09012SAndroid Build Coastguard Worker // Optional. If unspecified, a `conditionScoping` of 780*d5c09012SAndroid Build Coastguard Worker // `EVENT_CRITERIA_WITHIN_SAME_EVENT` is used. 781*d5c09012SAndroid Build Coastguard Worker EventCriteriaScoping condition_scoping = 1; 782*d5c09012SAndroid Build Coastguard Worker 783*d5c09012SAndroid Build Coastguard Worker // Data is included or excluded from the segment based on if it matches 784*d5c09012SAndroid Build Coastguard Worker // this expression. Expressions express criteria on dimension, metrics, 785*d5c09012SAndroid Build Coastguard Worker // and/or parameters. 786*d5c09012SAndroid Build Coastguard Worker SegmentFilterExpression segment_filter_expression = 2; 787*d5c09012SAndroid Build Coastguard Worker} 788*d5c09012SAndroid Build Coastguard Worker 789*d5c09012SAndroid Build Coastguard Worker// Specifies which events are excluded in this segment. 790*d5c09012SAndroid Build Coastguard Workermessage EventSegmentExclusion { 791*d5c09012SAndroid Build Coastguard Worker // `eventExclusionDuration` should always be `PERMANENTLY_EXCLUDE`. 792*d5c09012SAndroid Build Coastguard Worker // 793*d5c09012SAndroid Build Coastguard Worker // Optional. If unspecified, an `eventExclusionDuration` of 794*d5c09012SAndroid Build Coastguard Worker // `EVENT_EXCLUSION_PERMANENT` is used. 795*d5c09012SAndroid Build Coastguard Worker EventExclusionDuration event_exclusion_duration = 1; 796*d5c09012SAndroid Build Coastguard Worker 797*d5c09012SAndroid Build Coastguard Worker // If an event meets this condition, the event is excluded from membership 798*d5c09012SAndroid Build Coastguard Worker // in the segment for the `eventExclusionDuration`. 799*d5c09012SAndroid Build Coastguard Worker EventSegmentCriteria event_exclusion_criteria = 2; 800*d5c09012SAndroid Build Coastguard Worker} 801*d5c09012SAndroid Build Coastguard Worker 802*d5c09012SAndroid Build Coastguard Worker// Enumerates options for how long an exclusion will last if an event 803*d5c09012SAndroid Build Coastguard Worker// matches the `eventExclusionCriteria`. 804*d5c09012SAndroid Build Coastguard Workerenum EventExclusionDuration { 805*d5c09012SAndroid Build Coastguard Worker // Unspecified exclusion duration. Do not specify. 806*d5c09012SAndroid Build Coastguard Worker EVENT_EXCLUSION_DURATION_UNSPECIFIED = 0; 807*d5c09012SAndroid Build Coastguard Worker 808*d5c09012SAndroid Build Coastguard Worker // Permanently exclude events from the segment if the event ever meets 809*d5c09012SAndroid Build Coastguard Worker // the `eventExclusionCriteria` condition. 810*d5c09012SAndroid Build Coastguard Worker EVENT_EXCLUSION_PERMANENT = 1; 811*d5c09012SAndroid Build Coastguard Worker} 812*d5c09012SAndroid Build Coastguard Worker 813*d5c09012SAndroid Build Coastguard Worker// A segment is a subset of your Analytics data. For example, of your entire set 814*d5c09012SAndroid Build Coastguard Worker// of users, one segment might be users from a particular country or city. 815*d5c09012SAndroid Build Coastguard Worker// Another segment might be users who purchase a particular line of products or 816*d5c09012SAndroid Build Coastguard Worker// who visit a specific part of your site or trigger certain events in your app. 817*d5c09012SAndroid Build Coastguard Worker// 818*d5c09012SAndroid Build Coastguard Worker// To learn more, see [GA4 Segment 819*d5c09012SAndroid Build Coastguard Worker// Builder](https://support.google.com/analytics/answer/9304353). 820*d5c09012SAndroid Build Coastguard Workermessage Segment { 821*d5c09012SAndroid Build Coastguard Worker // The name for this segment. If unspecified, segments are named "Segment". 822*d5c09012SAndroid Build Coastguard Worker // This name defines string value returned by the `segment` dimension. The 823*d5c09012SAndroid Build Coastguard Worker // `segment` dimension prefixes segment names by the 1-based index number of 824*d5c09012SAndroid Build Coastguard Worker // the segment in the request (for example "1. Segment", "2. Segment", etc.). 825*d5c09012SAndroid Build Coastguard Worker string name = 1; 826*d5c09012SAndroid Build Coastguard Worker 827*d5c09012SAndroid Build Coastguard Worker // A segment is specified in one scope. 828*d5c09012SAndroid Build Coastguard Worker oneof one_segment_scope { 829*d5c09012SAndroid Build Coastguard Worker // User segments are subsets of users who engaged with your site or app. 830*d5c09012SAndroid Build Coastguard Worker UserSegment user_segment = 2; 831*d5c09012SAndroid Build Coastguard Worker 832*d5c09012SAndroid Build Coastguard Worker // Session segments are subsets of the sessions that occurred on your site 833*d5c09012SAndroid Build Coastguard Worker // or app. 834*d5c09012SAndroid Build Coastguard Worker SessionSegment session_segment = 3; 835*d5c09012SAndroid Build Coastguard Worker 836*d5c09012SAndroid Build Coastguard Worker // Event segments are subsets of events that were triggered on your site or 837*d5c09012SAndroid Build Coastguard Worker // app. 838*d5c09012SAndroid Build Coastguard Worker EventSegment event_segment = 4; 839*d5c09012SAndroid Build Coastguard Worker } 840*d5c09012SAndroid Build Coastguard Worker} 841*d5c09012SAndroid Build Coastguard Worker 842*d5c09012SAndroid Build Coastguard Worker// Expresses combinations of segment filters. 843*d5c09012SAndroid Build Coastguard Workermessage SegmentFilterExpression { 844*d5c09012SAndroid Build Coastguard Worker // Specify one type of filter for `SegmentFilterExpression`. 845*d5c09012SAndroid Build Coastguard Worker oneof expr { 846*d5c09012SAndroid Build Coastguard Worker // The SegmentFilterExpression in `andGroup` have an AND relationship. 847*d5c09012SAndroid Build Coastguard Worker SegmentFilterExpressionList and_group = 1; 848*d5c09012SAndroid Build Coastguard Worker 849*d5c09012SAndroid Build Coastguard Worker // The SegmentFilterExpression in `orGroup` have an OR relationship. 850*d5c09012SAndroid Build Coastguard Worker SegmentFilterExpressionList or_group = 2; 851*d5c09012SAndroid Build Coastguard Worker 852*d5c09012SAndroid Build Coastguard Worker // The SegmentFilterExpression is NOT of `notExpression`. 853*d5c09012SAndroid Build Coastguard Worker SegmentFilterExpression not_expression = 3; 854*d5c09012SAndroid Build Coastguard Worker 855*d5c09012SAndroid Build Coastguard Worker // A primitive segment filter. 856*d5c09012SAndroid Build Coastguard Worker SegmentFilter segment_filter = 4; 857*d5c09012SAndroid Build Coastguard Worker 858*d5c09012SAndroid Build Coastguard Worker // Creates a filter that matches events of a single event name. If a 859*d5c09012SAndroid Build Coastguard Worker // parameter filter expression is specified, only the subset of events that 860*d5c09012SAndroid Build Coastguard Worker // match both the single event name and the parameter filter expressions 861*d5c09012SAndroid Build Coastguard Worker // match this event filter. 862*d5c09012SAndroid Build Coastguard Worker SegmentEventFilter segment_event_filter = 5; 863*d5c09012SAndroid Build Coastguard Worker } 864*d5c09012SAndroid Build Coastguard Worker} 865*d5c09012SAndroid Build Coastguard Worker 866*d5c09012SAndroid Build Coastguard Worker// A list of segment filter expressions. 867*d5c09012SAndroid Build Coastguard Workermessage SegmentFilterExpressionList { 868*d5c09012SAndroid Build Coastguard Worker // The list of segment filter expressions 869*d5c09012SAndroid Build Coastguard Worker repeated SegmentFilterExpression expressions = 1; 870*d5c09012SAndroid Build Coastguard Worker} 871*d5c09012SAndroid Build Coastguard Worker 872*d5c09012SAndroid Build Coastguard Worker// An expression to filter dimension or metric values. 873*d5c09012SAndroid Build Coastguard Workermessage SegmentFilter { 874*d5c09012SAndroid Build Coastguard Worker // The dimension name or metric name. 875*d5c09012SAndroid Build Coastguard Worker string field_name = 1; 876*d5c09012SAndroid Build Coastguard Worker 877*d5c09012SAndroid Build Coastguard Worker // Specify one type of filter for `Filter`. 878*d5c09012SAndroid Build Coastguard Worker oneof one_filter { 879*d5c09012SAndroid Build Coastguard Worker // Strings related filter. 880*d5c09012SAndroid Build Coastguard Worker StringFilter string_filter = 4; 881*d5c09012SAndroid Build Coastguard Worker 882*d5c09012SAndroid Build Coastguard Worker // A filter for in list values. 883*d5c09012SAndroid Build Coastguard Worker InListFilter in_list_filter = 5; 884*d5c09012SAndroid Build Coastguard Worker 885*d5c09012SAndroid Build Coastguard Worker // A filter for numeric or date values. 886*d5c09012SAndroid Build Coastguard Worker NumericFilter numeric_filter = 6; 887*d5c09012SAndroid Build Coastguard Worker 888*d5c09012SAndroid Build Coastguard Worker // A filter for between two values. 889*d5c09012SAndroid Build Coastguard Worker BetweenFilter between_filter = 7; 890*d5c09012SAndroid Build Coastguard Worker } 891*d5c09012SAndroid Build Coastguard Worker 892*d5c09012SAndroid Build Coastguard Worker // Specifies the scope for the filter. 893*d5c09012SAndroid Build Coastguard Worker SegmentFilterScoping filter_scoping = 8; 894*d5c09012SAndroid Build Coastguard Worker} 895*d5c09012SAndroid Build Coastguard Worker 896*d5c09012SAndroid Build Coastguard Worker// Scopings specify how the dimensions & metrics of multiple events 897*d5c09012SAndroid Build Coastguard Worker// should be considered when evaluating a segment filter. 898*d5c09012SAndroid Build Coastguard Workermessage SegmentFilterScoping { 899*d5c09012SAndroid Build Coastguard Worker // If `atAnyPointInTime` is true, this filter evaluates to true for all 900*d5c09012SAndroid Build Coastguard Worker // events if it evaluates to true for any event in the date range of the 901*d5c09012SAndroid Build Coastguard Worker // request. 902*d5c09012SAndroid Build Coastguard Worker // 903*d5c09012SAndroid Build Coastguard Worker // This `atAnyPointInTime` parameter does not extend the date range of 904*d5c09012SAndroid Build Coastguard Worker // events in the report. If `atAnyPointInTime` is true, only events within 905*d5c09012SAndroid Build Coastguard Worker // the report's date range are considered when evaluating this filter. 906*d5c09012SAndroid Build Coastguard Worker // 907*d5c09012SAndroid Build Coastguard Worker // This `atAnyPointInTime` is only able to be specified if the criteria 908*d5c09012SAndroid Build Coastguard Worker // scoping is `ACROSS_ALL_SESSIONS` and is not able to be specified in 909*d5c09012SAndroid Build Coastguard Worker // sequences. 910*d5c09012SAndroid Build Coastguard Worker // 911*d5c09012SAndroid Build Coastguard Worker // If the criteria scoping is `ACROSS_ALL_SESSIONS`, `atAnyPointInTime` = 912*d5c09012SAndroid Build Coastguard Worker // false is used if unspecified. 913*d5c09012SAndroid Build Coastguard Worker optional bool at_any_point_in_time = 1; 914*d5c09012SAndroid Build Coastguard Worker} 915*d5c09012SAndroid Build Coastguard Worker 916*d5c09012SAndroid Build Coastguard Worker// Creates a filter that matches events of a single event name. If a parameter 917*d5c09012SAndroid Build Coastguard Worker// filter expression is specified, only the subset of events that match both the 918*d5c09012SAndroid Build Coastguard Worker// single event name and the parameter filter expressions match this event 919*d5c09012SAndroid Build Coastguard Worker// filter. 920*d5c09012SAndroid Build Coastguard Workermessage SegmentEventFilter { 921*d5c09012SAndroid Build Coastguard Worker // This filter matches events of this single event name. Event name is 922*d5c09012SAndroid Build Coastguard Worker // required. 923*d5c09012SAndroid Build Coastguard Worker optional string event_name = 1; 924*d5c09012SAndroid Build Coastguard Worker 925*d5c09012SAndroid Build Coastguard Worker // If specified, this filter matches events that match both the single event 926*d5c09012SAndroid Build Coastguard Worker // name and the parameter filter expressions. 927*d5c09012SAndroid Build Coastguard Worker // 928*d5c09012SAndroid Build Coastguard Worker // Inside the parameter filter expression, only parameter filters are 929*d5c09012SAndroid Build Coastguard Worker // available. 930*d5c09012SAndroid Build Coastguard Worker optional SegmentParameterFilterExpression 931*d5c09012SAndroid Build Coastguard Worker segment_parameter_filter_expression = 2; 932*d5c09012SAndroid Build Coastguard Worker} 933*d5c09012SAndroid Build Coastguard Worker 934*d5c09012SAndroid Build Coastguard Worker// Expresses combinations of segment filter on parameters. 935*d5c09012SAndroid Build Coastguard Workermessage SegmentParameterFilterExpression { 936*d5c09012SAndroid Build Coastguard Worker // Specify one type of filter for `SegmentParameterFilterExpression`. 937*d5c09012SAndroid Build Coastguard Worker oneof expr { 938*d5c09012SAndroid Build Coastguard Worker // The SegmentParameterFilterExpression in `andGroup` have an AND 939*d5c09012SAndroid Build Coastguard Worker // relationship. 940*d5c09012SAndroid Build Coastguard Worker SegmentParameterFilterExpressionList and_group = 1; 941*d5c09012SAndroid Build Coastguard Worker 942*d5c09012SAndroid Build Coastguard Worker // The SegmentParameterFilterExpression in `orGroup` have an OR 943*d5c09012SAndroid Build Coastguard Worker // relationship. 944*d5c09012SAndroid Build Coastguard Worker SegmentParameterFilterExpressionList or_group = 2; 945*d5c09012SAndroid Build Coastguard Worker 946*d5c09012SAndroid Build Coastguard Worker // The SegmentParameterFilterExpression is NOT of `notExpression`. 947*d5c09012SAndroid Build Coastguard Worker SegmentParameterFilterExpression not_expression = 3; 948*d5c09012SAndroid Build Coastguard Worker 949*d5c09012SAndroid Build Coastguard Worker // A primitive segment parameter filter. 950*d5c09012SAndroid Build Coastguard Worker SegmentParameterFilter segment_parameter_filter = 4; 951*d5c09012SAndroid Build Coastguard Worker } 952*d5c09012SAndroid Build Coastguard Worker} 953*d5c09012SAndroid Build Coastguard Worker 954*d5c09012SAndroid Build Coastguard Worker// A list of segment parameter filter expressions. 955*d5c09012SAndroid Build Coastguard Workermessage SegmentParameterFilterExpressionList { 956*d5c09012SAndroid Build Coastguard Worker // The list of segment parameter filter expressions. 957*d5c09012SAndroid Build Coastguard Worker repeated SegmentParameterFilterExpression expressions = 1; 958*d5c09012SAndroid Build Coastguard Worker} 959*d5c09012SAndroid Build Coastguard Worker 960*d5c09012SAndroid Build Coastguard Worker// An expression to filter parameter values in a segment. 961*d5c09012SAndroid Build Coastguard Workermessage SegmentParameterFilter { 962*d5c09012SAndroid Build Coastguard Worker // The field that is being filtered. 963*d5c09012SAndroid Build Coastguard Worker oneof one_parameter { 964*d5c09012SAndroid Build Coastguard Worker // This filter will be evaluated on the specified event parameter. Event 965*d5c09012SAndroid Build Coastguard Worker // parameters are logged as parameters of the event. Event parameters 966*d5c09012SAndroid Build Coastguard Worker // include fields like "firebase_screen" & "currency". 967*d5c09012SAndroid Build Coastguard Worker // 968*d5c09012SAndroid Build Coastguard Worker // Event parameters can only be used in segments & funnels and can only be 969*d5c09012SAndroid Build Coastguard Worker // used in a descendent filter from an EventFilter. In a descendent filter 970*d5c09012SAndroid Build Coastguard Worker // from an EventFilter either event or item parameters should be used. 971*d5c09012SAndroid Build Coastguard Worker string event_parameter_name = 1; 972*d5c09012SAndroid Build Coastguard Worker 973*d5c09012SAndroid Build Coastguard Worker // This filter will be evaluated on the specified item parameter. Item 974*d5c09012SAndroid Build Coastguard Worker // parameters are logged as parameters in the item array. Item parameters 975*d5c09012SAndroid Build Coastguard Worker // include fields like "item_name" & "item_category". 976*d5c09012SAndroid Build Coastguard Worker // 977*d5c09012SAndroid Build Coastguard Worker // Item parameters can only be used in segments & funnels and can only be 978*d5c09012SAndroid Build Coastguard Worker // used in a descendent filter from an EventFilter. In a descendent filter 979*d5c09012SAndroid Build Coastguard Worker // from an EventFilter either event or item parameters should be used. 980*d5c09012SAndroid Build Coastguard Worker // 981*d5c09012SAndroid Build Coastguard Worker // Item parameters are only available in ecommerce events. To learn more 982*d5c09012SAndroid Build Coastguard Worker // about ecommerce events, see the [Measure ecommerce] 983*d5c09012SAndroid Build Coastguard Worker // (https://developers.google.com/analytics/devguides/collection/ga4/ecommerce) 984*d5c09012SAndroid Build Coastguard Worker // guide. 985*d5c09012SAndroid Build Coastguard Worker string item_parameter_name = 2; 986*d5c09012SAndroid Build Coastguard Worker } 987*d5c09012SAndroid Build Coastguard Worker 988*d5c09012SAndroid Build Coastguard Worker // Specify one type of filter. 989*d5c09012SAndroid Build Coastguard Worker oneof one_filter { 990*d5c09012SAndroid Build Coastguard Worker // Strings related filter. 991*d5c09012SAndroid Build Coastguard Worker StringFilter string_filter = 4; 992*d5c09012SAndroid Build Coastguard Worker 993*d5c09012SAndroid Build Coastguard Worker // A filter for in list values. 994*d5c09012SAndroid Build Coastguard Worker InListFilter in_list_filter = 5; 995*d5c09012SAndroid Build Coastguard Worker 996*d5c09012SAndroid Build Coastguard Worker // A filter for numeric or date values. 997*d5c09012SAndroid Build Coastguard Worker NumericFilter numeric_filter = 6; 998*d5c09012SAndroid Build Coastguard Worker 999*d5c09012SAndroid Build Coastguard Worker // A filter for between two values. 1000*d5c09012SAndroid Build Coastguard Worker BetweenFilter between_filter = 7; 1001*d5c09012SAndroid Build Coastguard Worker } 1002*d5c09012SAndroid Build Coastguard Worker 1003*d5c09012SAndroid Build Coastguard Worker // Specifies the scope for the filter. 1004*d5c09012SAndroid Build Coastguard Worker SegmentParameterFilterScoping filter_scoping = 8; 1005*d5c09012SAndroid Build Coastguard Worker} 1006*d5c09012SAndroid Build Coastguard Worker 1007*d5c09012SAndroid Build Coastguard Worker// Scopings specify how multiple events should be considered when evaluating a 1008*d5c09012SAndroid Build Coastguard Worker// segment parameter filter. 1009*d5c09012SAndroid Build Coastguard Workermessage SegmentParameterFilterScoping { 1010*d5c09012SAndroid Build Coastguard Worker // Accumulates the parameter over the specified period of days before 1011*d5c09012SAndroid Build Coastguard Worker // applying the filter. Only supported if criteria scoping is 1012*d5c09012SAndroid Build Coastguard Worker // `ACROSS_ALL_SESSIONS` or `WITHIN_SAME_SESSION`. Only supported if the 1013*d5c09012SAndroid Build Coastguard Worker // parameter is `event_count`. 1014*d5c09012SAndroid Build Coastguard Worker // 1015*d5c09012SAndroid Build Coastguard Worker // For example if `inAnyNDayPeriod` is 3, the event_name is "purchase", 1016*d5c09012SAndroid Build Coastguard Worker // the event parameter is "event_count", and the Filter's criteria is 1017*d5c09012SAndroid Build Coastguard Worker // greater than 5, this filter will accumulate the event count of purchase 1018*d5c09012SAndroid Build Coastguard Worker // events over every 3 consecutive day period in the report's date range; a 1019*d5c09012SAndroid Build Coastguard Worker // user will pass this Filter's criteria to be included in this segment if 1020*d5c09012SAndroid Build Coastguard Worker // their count of purchase events exceeds 5 in any 3 consecutive day period. 1021*d5c09012SAndroid Build Coastguard Worker // For example, the periods 2021-11-01 to 2021-11-03, 2021-11-02 to 1022*d5c09012SAndroid Build Coastguard Worker // 2021-11-04, 2021-11-03 to 2021-11-05, and etc. will be considered. 1023*d5c09012SAndroid Build Coastguard Worker // 1024*d5c09012SAndroid Build Coastguard Worker // The date range is not extended for the purpose of having a full N day 1025*d5c09012SAndroid Build Coastguard Worker // window near the start of the date range. For example if a report is for 1026*d5c09012SAndroid Build Coastguard Worker // 2021-11-01 to 2021-11-10 and `inAnyNDayPeriod` = 3, the first two day 1027*d5c09012SAndroid Build Coastguard Worker // period will be effectively shortened because no event data outside the 1028*d5c09012SAndroid Build Coastguard Worker // report's date range will be read. For example, the first four periods 1029*d5c09012SAndroid Build Coastguard Worker // will effectively be: 2021-11-01 to 2021-11-01, 2021-11-01 to 2021-11-02, 1030*d5c09012SAndroid Build Coastguard Worker // 2021-11-01 to 2021-11-03, and 2021-11-02 to 2021-11-04. 1031*d5c09012SAndroid Build Coastguard Worker // 1032*d5c09012SAndroid Build Coastguard Worker // `inAnyNDayPeriod` is optional. If not specified, the 1033*d5c09012SAndroid Build Coastguard Worker // `segmentParameterFilter` is applied to each event individually. 1034*d5c09012SAndroid Build Coastguard Worker optional int64 in_any_n_day_period = 1; 1035*d5c09012SAndroid Build Coastguard Worker} 1036*d5c09012SAndroid Build Coastguard Worker 1037*d5c09012SAndroid Build Coastguard Worker// Expresses combinations of funnel filters. 1038*d5c09012SAndroid Build Coastguard Workermessage FunnelFilterExpression { 1039*d5c09012SAndroid Build Coastguard Worker // Specify one type of filter for `FunnelFilterExpression`. 1040*d5c09012SAndroid Build Coastguard Worker oneof expr { 1041*d5c09012SAndroid Build Coastguard Worker // The FunnelFilterExpression in `andGroup` have an AND relationship. 1042*d5c09012SAndroid Build Coastguard Worker FunnelFilterExpressionList and_group = 1; 1043*d5c09012SAndroid Build Coastguard Worker 1044*d5c09012SAndroid Build Coastguard Worker // The FunnelFilterExpression in `orGroup` have an OR relationship. 1045*d5c09012SAndroid Build Coastguard Worker FunnelFilterExpressionList or_group = 2; 1046*d5c09012SAndroid Build Coastguard Worker 1047*d5c09012SAndroid Build Coastguard Worker // The FunnelFilterExpression is NOT of `notExpression`. 1048*d5c09012SAndroid Build Coastguard Worker FunnelFilterExpression not_expression = 3; 1049*d5c09012SAndroid Build Coastguard Worker 1050*d5c09012SAndroid Build Coastguard Worker // A funnel filter for a dimension or metric. 1051*d5c09012SAndroid Build Coastguard Worker FunnelFieldFilter funnel_field_filter = 4; 1052*d5c09012SAndroid Build Coastguard Worker 1053*d5c09012SAndroid Build Coastguard Worker // Creates a filter that matches events of a single event name. If a 1054*d5c09012SAndroid Build Coastguard Worker // parameter filter expression is specified, only the subset of events that 1055*d5c09012SAndroid Build Coastguard Worker // match both the single event name and the parameter filter expressions 1056*d5c09012SAndroid Build Coastguard Worker // match this event filter. 1057*d5c09012SAndroid Build Coastguard Worker FunnelEventFilter funnel_event_filter = 5; 1058*d5c09012SAndroid Build Coastguard Worker } 1059*d5c09012SAndroid Build Coastguard Worker} 1060*d5c09012SAndroid Build Coastguard Worker 1061*d5c09012SAndroid Build Coastguard Worker// A list of funnel filter expressions. 1062*d5c09012SAndroid Build Coastguard Workermessage FunnelFilterExpressionList { 1063*d5c09012SAndroid Build Coastguard Worker // The list of funnel filter expressions. 1064*d5c09012SAndroid Build Coastguard Worker repeated FunnelFilterExpression expressions = 1; 1065*d5c09012SAndroid Build Coastguard Worker} 1066*d5c09012SAndroid Build Coastguard Worker 1067*d5c09012SAndroid Build Coastguard Worker// An expression to filter dimension or metric values. 1068*d5c09012SAndroid Build Coastguard Workermessage FunnelFieldFilter { 1069*d5c09012SAndroid Build Coastguard Worker // The dimension name or metric name. 1070*d5c09012SAndroid Build Coastguard Worker string field_name = 1; 1071*d5c09012SAndroid Build Coastguard Worker 1072*d5c09012SAndroid Build Coastguard Worker // Specify one type of filter. 1073*d5c09012SAndroid Build Coastguard Worker oneof one_filter { 1074*d5c09012SAndroid Build Coastguard Worker // Strings related filter. 1075*d5c09012SAndroid Build Coastguard Worker StringFilter string_filter = 4; 1076*d5c09012SAndroid Build Coastguard Worker 1077*d5c09012SAndroid Build Coastguard Worker // A filter for in list values. 1078*d5c09012SAndroid Build Coastguard Worker InListFilter in_list_filter = 5; 1079*d5c09012SAndroid Build Coastguard Worker 1080*d5c09012SAndroid Build Coastguard Worker // A filter for numeric or date values. 1081*d5c09012SAndroid Build Coastguard Worker NumericFilter numeric_filter = 6; 1082*d5c09012SAndroid Build Coastguard Worker 1083*d5c09012SAndroid Build Coastguard Worker // A filter for between two values. 1084*d5c09012SAndroid Build Coastguard Worker BetweenFilter between_filter = 7; 1085*d5c09012SAndroid Build Coastguard Worker } 1086*d5c09012SAndroid Build Coastguard Worker} 1087*d5c09012SAndroid Build Coastguard Worker 1088*d5c09012SAndroid Build Coastguard Worker// Creates a filter that matches events of a single event name. If a parameter 1089*d5c09012SAndroid Build Coastguard Worker// filter expression is specified, only the subset of events that match both the 1090*d5c09012SAndroid Build Coastguard Worker// single event name and the parameter filter expressions match this event 1091*d5c09012SAndroid Build Coastguard Worker// filter. 1092*d5c09012SAndroid Build Coastguard Workermessage FunnelEventFilter { 1093*d5c09012SAndroid Build Coastguard Worker // This filter matches events of this single event name. Event name is 1094*d5c09012SAndroid Build Coastguard Worker // required. 1095*d5c09012SAndroid Build Coastguard Worker optional string event_name = 1; 1096*d5c09012SAndroid Build Coastguard Worker 1097*d5c09012SAndroid Build Coastguard Worker // If specified, this filter matches events that match both the single event 1098*d5c09012SAndroid Build Coastguard Worker // name and the parameter filter expressions. 1099*d5c09012SAndroid Build Coastguard Worker // 1100*d5c09012SAndroid Build Coastguard Worker // Inside the parameter filter expression, only parameter filters are 1101*d5c09012SAndroid Build Coastguard Worker // available. 1102*d5c09012SAndroid Build Coastguard Worker optional FunnelParameterFilterExpression funnel_parameter_filter_expression = 1103*d5c09012SAndroid Build Coastguard Worker 2; 1104*d5c09012SAndroid Build Coastguard Worker} 1105*d5c09012SAndroid Build Coastguard Worker 1106*d5c09012SAndroid Build Coastguard Worker// Expresses combinations of funnel filters on parameters. 1107*d5c09012SAndroid Build Coastguard Workermessage FunnelParameterFilterExpression { 1108*d5c09012SAndroid Build Coastguard Worker // Specify one type of filter for `FunnelParameterFilterExpression`. 1109*d5c09012SAndroid Build Coastguard Worker oneof expr { 1110*d5c09012SAndroid Build Coastguard Worker // The FunnelParameterFilterExpression in `andGroup` have an AND 1111*d5c09012SAndroid Build Coastguard Worker // relationship. 1112*d5c09012SAndroid Build Coastguard Worker FunnelParameterFilterExpressionList and_group = 1; 1113*d5c09012SAndroid Build Coastguard Worker 1114*d5c09012SAndroid Build Coastguard Worker // The FunnelParameterFilterExpression in `orGroup` have an OR 1115*d5c09012SAndroid Build Coastguard Worker // relationship. 1116*d5c09012SAndroid Build Coastguard Worker FunnelParameterFilterExpressionList or_group = 2; 1117*d5c09012SAndroid Build Coastguard Worker 1118*d5c09012SAndroid Build Coastguard Worker // The FunnelParameterFilterExpression is NOT of `notExpression`. 1119*d5c09012SAndroid Build Coastguard Worker FunnelParameterFilterExpression not_expression = 3; 1120*d5c09012SAndroid Build Coastguard Worker 1121*d5c09012SAndroid Build Coastguard Worker // A primitive funnel parameter filter. 1122*d5c09012SAndroid Build Coastguard Worker FunnelParameterFilter funnel_parameter_filter = 4; 1123*d5c09012SAndroid Build Coastguard Worker } 1124*d5c09012SAndroid Build Coastguard Worker} 1125*d5c09012SAndroid Build Coastguard Worker 1126*d5c09012SAndroid Build Coastguard Worker// A list of funnel parameter filter expressions. 1127*d5c09012SAndroid Build Coastguard Workermessage FunnelParameterFilterExpressionList { 1128*d5c09012SAndroid Build Coastguard Worker // The list of funnel parameter filter expressions. 1129*d5c09012SAndroid Build Coastguard Worker repeated FunnelParameterFilterExpression expressions = 1; 1130*d5c09012SAndroid Build Coastguard Worker} 1131*d5c09012SAndroid Build Coastguard Worker 1132*d5c09012SAndroid Build Coastguard Worker// An expression to filter parameter values in a funnel. 1133*d5c09012SAndroid Build Coastguard Workermessage FunnelParameterFilter { 1134*d5c09012SAndroid Build Coastguard Worker // The field that is being filtered. 1135*d5c09012SAndroid Build Coastguard Worker oneof one_parameter { 1136*d5c09012SAndroid Build Coastguard Worker // This filter will be evaluated on the specified event parameter. Event 1137*d5c09012SAndroid Build Coastguard Worker // parameters are logged as parameters of the event. Event parameters 1138*d5c09012SAndroid Build Coastguard Worker // include fields like "firebase_screen" & "currency". 1139*d5c09012SAndroid Build Coastguard Worker // 1140*d5c09012SAndroid Build Coastguard Worker // Event parameters can only be used in segments & funnels and can only be 1141*d5c09012SAndroid Build Coastguard Worker // used in a descendent filter from an EventFilter. In a descendent filter 1142*d5c09012SAndroid Build Coastguard Worker // from an EventFilter either event or item parameters should be used. 1143*d5c09012SAndroid Build Coastguard Worker string event_parameter_name = 1; 1144*d5c09012SAndroid Build Coastguard Worker 1145*d5c09012SAndroid Build Coastguard Worker // This filter will be evaluated on the specified item parameter. Item 1146*d5c09012SAndroid Build Coastguard Worker // parameters are logged as parameters in the item array. Item parameters 1147*d5c09012SAndroid Build Coastguard Worker // include fields like "item_name" & "item_category". 1148*d5c09012SAndroid Build Coastguard Worker // 1149*d5c09012SAndroid Build Coastguard Worker // Item parameters can only be used in segments & funnels and can only be 1150*d5c09012SAndroid Build Coastguard Worker // used in a descendent filter from an EventFilter. In a descendent filter 1151*d5c09012SAndroid Build Coastguard Worker // from an EventFilter either event or item parameters should be used. 1152*d5c09012SAndroid Build Coastguard Worker // 1153*d5c09012SAndroid Build Coastguard Worker // Item parameters are only available in ecommerce events. To learn more 1154*d5c09012SAndroid Build Coastguard Worker // about ecommerce events, see the [Measure ecommerce] 1155*d5c09012SAndroid Build Coastguard Worker // (https://developers.google.com/analytics/devguides/collection/ga4/ecommerce) 1156*d5c09012SAndroid Build Coastguard Worker // guide. 1157*d5c09012SAndroid Build Coastguard Worker string item_parameter_name = 2; 1158*d5c09012SAndroid Build Coastguard Worker } 1159*d5c09012SAndroid Build Coastguard Worker 1160*d5c09012SAndroid Build Coastguard Worker // Specify one type of filter. 1161*d5c09012SAndroid Build Coastguard Worker oneof one_filter { 1162*d5c09012SAndroid Build Coastguard Worker // Strings related filter. 1163*d5c09012SAndroid Build Coastguard Worker StringFilter string_filter = 4; 1164*d5c09012SAndroid Build Coastguard Worker 1165*d5c09012SAndroid Build Coastguard Worker // A filter for in list values. 1166*d5c09012SAndroid Build Coastguard Worker InListFilter in_list_filter = 5; 1167*d5c09012SAndroid Build Coastguard Worker 1168*d5c09012SAndroid Build Coastguard Worker // A filter for numeric or date values. 1169*d5c09012SAndroid Build Coastguard Worker NumericFilter numeric_filter = 6; 1170*d5c09012SAndroid Build Coastguard Worker 1171*d5c09012SAndroid Build Coastguard Worker // A filter for between two values. 1172*d5c09012SAndroid Build Coastguard Worker BetweenFilter between_filter = 7; 1173*d5c09012SAndroid Build Coastguard Worker } 1174*d5c09012SAndroid Build Coastguard Worker} 1175*d5c09012SAndroid Build Coastguard Worker 1176*d5c09012SAndroid Build Coastguard Worker// The funnel report's response metadata carries additional information about 1177*d5c09012SAndroid Build Coastguard Worker// the funnel report. 1178*d5c09012SAndroid Build Coastguard Workermessage FunnelResponseMetadata { 1179*d5c09012SAndroid Build Coastguard Worker // If funnel report results are 1180*d5c09012SAndroid Build Coastguard Worker // [sampled](https://support.google.com/analytics/answer/13331292), this 1181*d5c09012SAndroid Build Coastguard Worker // describes what percentage of events were used in this funnel report. One 1182*d5c09012SAndroid Build Coastguard Worker // `samplingMetadatas` is populated for each date range. Each 1183*d5c09012SAndroid Build Coastguard Worker // `samplingMetadatas` corresponds to a date range in order that date ranges 1184*d5c09012SAndroid Build Coastguard Worker // were specified in the request. 1185*d5c09012SAndroid Build Coastguard Worker // 1186*d5c09012SAndroid Build Coastguard Worker // However if the results are not sampled, this field will not be defined. 1187*d5c09012SAndroid Build Coastguard Worker repeated SamplingMetadata sampling_metadatas = 1; 1188*d5c09012SAndroid Build Coastguard Worker} 1189*d5c09012SAndroid Build Coastguard Worker 1190*d5c09012SAndroid Build Coastguard Worker// If funnel report results are 1191*d5c09012SAndroid Build Coastguard Worker// [sampled](https://support.google.com/analytics/answer/13331292), this 1192*d5c09012SAndroid Build Coastguard Worker// metadata describes what percentage of events were used in this funnel 1193*d5c09012SAndroid Build Coastguard Worker// report for a date range. Sampling is the practice of analyzing a subset of 1194*d5c09012SAndroid Build Coastguard Worker// all data in order to uncover the meaningful information in the larger data 1195*d5c09012SAndroid Build Coastguard Worker// set. 1196*d5c09012SAndroid Build Coastguard Workermessage SamplingMetadata { 1197*d5c09012SAndroid Build Coastguard Worker // The total number of events read in this sampled report for a date range. 1198*d5c09012SAndroid Build Coastguard Worker // This is the size of the subset this property's data that was analyzed in 1199*d5c09012SAndroid Build Coastguard Worker // this funnel report. 1200*d5c09012SAndroid Build Coastguard Worker int64 samples_read_count = 1; 1201*d5c09012SAndroid Build Coastguard Worker 1202*d5c09012SAndroid Build Coastguard Worker // The total number of events present in this property's data that could 1203*d5c09012SAndroid Build Coastguard Worker // have been analyzed in this funnel report for a date range. Sampling 1204*d5c09012SAndroid Build Coastguard Worker // uncovers the meaningful information about the larger data set, and this 1205*d5c09012SAndroid Build Coastguard Worker // is the size of the larger data set. 1206*d5c09012SAndroid Build Coastguard Worker // 1207*d5c09012SAndroid Build Coastguard Worker // To calculate the percentage of available data that was used in this 1208*d5c09012SAndroid Build Coastguard Worker // funnel report, compute `samplesReadCount/samplingSpaceSize`. 1209*d5c09012SAndroid Build Coastguard Worker int64 sampling_space_size = 2; 1210*d5c09012SAndroid Build Coastguard Worker} 1211*d5c09012SAndroid Build Coastguard Worker 1212*d5c09012SAndroid Build Coastguard Worker// A metric's value type. 1213*d5c09012SAndroid Build Coastguard Workerenum MetricType { 1214*d5c09012SAndroid Build Coastguard Worker // Unspecified type. 1215*d5c09012SAndroid Build Coastguard Worker METRIC_TYPE_UNSPECIFIED = 0; 1216*d5c09012SAndroid Build Coastguard Worker 1217*d5c09012SAndroid Build Coastguard Worker // Integer type. 1218*d5c09012SAndroid Build Coastguard Worker TYPE_INTEGER = 1; 1219*d5c09012SAndroid Build Coastguard Worker 1220*d5c09012SAndroid Build Coastguard Worker // Floating point type. 1221*d5c09012SAndroid Build Coastguard Worker TYPE_FLOAT = 2; 1222*d5c09012SAndroid Build Coastguard Worker 1223*d5c09012SAndroid Build Coastguard Worker // A duration of seconds; a special floating point type. 1224*d5c09012SAndroid Build Coastguard Worker TYPE_SECONDS = 4; 1225*d5c09012SAndroid Build Coastguard Worker 1226*d5c09012SAndroid Build Coastguard Worker // A duration in milliseconds; a special floating point type. 1227*d5c09012SAndroid Build Coastguard Worker TYPE_MILLISECONDS = 5; 1228*d5c09012SAndroid Build Coastguard Worker 1229*d5c09012SAndroid Build Coastguard Worker // A duration in minutes; a special floating point type. 1230*d5c09012SAndroid Build Coastguard Worker TYPE_MINUTES = 6; 1231*d5c09012SAndroid Build Coastguard Worker 1232*d5c09012SAndroid Build Coastguard Worker // A duration in hours; a special floating point type. 1233*d5c09012SAndroid Build Coastguard Worker TYPE_HOURS = 7; 1234*d5c09012SAndroid Build Coastguard Worker 1235*d5c09012SAndroid Build Coastguard Worker // A custom metric of standard type; a special floating point type. 1236*d5c09012SAndroid Build Coastguard Worker TYPE_STANDARD = 8; 1237*d5c09012SAndroid Build Coastguard Worker 1238*d5c09012SAndroid Build Coastguard Worker // An amount of money; a special floating point type. 1239*d5c09012SAndroid Build Coastguard Worker TYPE_CURRENCY = 9; 1240*d5c09012SAndroid Build Coastguard Worker 1241*d5c09012SAndroid Build Coastguard Worker // A length in feet; a special floating point type. 1242*d5c09012SAndroid Build Coastguard Worker TYPE_FEET = 10; 1243*d5c09012SAndroid Build Coastguard Worker 1244*d5c09012SAndroid Build Coastguard Worker // A length in miles; a special floating point type. 1245*d5c09012SAndroid Build Coastguard Worker TYPE_MILES = 11; 1246*d5c09012SAndroid Build Coastguard Worker 1247*d5c09012SAndroid Build Coastguard Worker // A length in meters; a special floating point type. 1248*d5c09012SAndroid Build Coastguard Worker TYPE_METERS = 12; 1249*d5c09012SAndroid Build Coastguard Worker 1250*d5c09012SAndroid Build Coastguard Worker // A length in kilometers; a special floating point type. 1251*d5c09012SAndroid Build Coastguard Worker TYPE_KILOMETERS = 13; 1252*d5c09012SAndroid Build Coastguard Worker} 1253