xref: /aosp_15_r20/external/googleapis/google/analytics/data/v1alpha/data.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
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