# frozen_string_literal: true

# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Auto-generated by gapic-generator-ruby. DO NOT EDIT!


module Google
  module Analytics
    module Data
      module V1beta
        # A contiguous set of days: startDate, startDate + 1, ..., endDate. Requests
        # are allowed up to 4 date ranges.
        # @!attribute [rw] start_date
        #   @return [::String]
        #     The inclusive start date for the query in the format `YYYY-MM-DD`. Cannot
        #     be after `end_date`. The format `NdaysAgo`, `yesterday`, or `today` is also
        #     accepted, and in that case, the date is inferred based on the property's
        #     reporting time zone.
        # @!attribute [rw] end_date
        #   @return [::String]
        #     The inclusive end date for the query in the format `YYYY-MM-DD`. Cannot
        #     be before `start_date`. The format `NdaysAgo`, `yesterday`, or `today` is
        #     also accepted, and in that case, the date is inferred based on the
        #     property's reporting time zone.
        # @!attribute [rw] name
        #   @return [::String]
        #     Assigns a name to this date range. The dimension `dateRange` is valued to
        #     this name in a report response. If set, cannot begin with `date_range_` or
        #     `RESERVED_`. If not set, date ranges are named by their zero based index in
        #     the request: `date_range_0`, `date_range_1`, etc.
        class DateRange
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A contiguous set of minutes: startMinutesAgo, startMinutesAgo + 1, ...,
        # endMinutesAgo. Requests are allowed up to 2 minute ranges.
        # @!attribute [rw] start_minutes_ago
        #   @return [::Integer]
        #     The inclusive start minute for the query as a number of minutes before now.
        #     For example, `"startMinutesAgo": 29` specifies the report should include
        #     event data from 29 minutes ago and after. Cannot be after `endMinutesAgo`.
        #
        #     If unspecified, `startMinutesAgo` is defaulted to 29. Standard Analytics
        #     properties can request up to the last 30 minutes of event data
        #     (`startMinutesAgo <= 29`), and 360 Analytics properties can request up to
        #     the last 60 minutes of event data (`startMinutesAgo <= 59`).
        # @!attribute [rw] end_minutes_ago
        #   @return [::Integer]
        #     The inclusive end minute for the query as a number of minutes before now.
        #     Cannot be before `startMinutesAgo`. For example, `"endMinutesAgo": 15`
        #     specifies the report should include event data from prior to 15 minutes
        #     ago.
        #
        #     If unspecified, `endMinutesAgo` is defaulted to 0. Standard Analytics
        #     properties can request any minute in the last 30 minutes of event data
        #     (`endMinutesAgo <= 29`), and 360 Analytics properties can request any
        #     minute in the last 60 minutes of event data (`endMinutesAgo <= 59`).
        # @!attribute [rw] name
        #   @return [::String]
        #     Assigns a name to this minute range. The dimension `dateRange` is valued to
        #     this name in a report response. If set, cannot begin with `date_range_` or
        #     `RESERVED_`. If not set, minute ranges are named by their zero based index
        #     in the request: `date_range_0`, `date_range_1`, etc.
        class MinuteRange
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Dimensions are attributes of your data. For example, the dimension city
        # indicates the city from which an event originates. Dimension values in report
        # responses are strings; for example, the city could be "Paris" or "New York".
        # Requests are allowed up to 9 dimensions.
        # @!attribute [rw] name
        #   @return [::String]
        #     The name of the dimension. See the [API
        #     Dimensions](https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema#dimensions)
        #     for the list of dimension names.
        #
        #     If `dimensionExpression` is specified, `name` can be any string that you
        #     would like within the allowed character set. For example if a
        #     `dimensionExpression` concatenates `country` and `city`, you could call
        #     that dimension `countryAndCity`. Dimension names that you choose must match
        #     the regular expression `^[a-zA-Z0-9_]$`.
        #
        #     Dimensions are referenced by `name` in `dimensionFilter`, `orderBys`,
        #     `dimensionExpression`, and `pivots`.
        # @!attribute [rw] dimension_expression
        #   @return [::Google::Analytics::Data::V1beta::DimensionExpression]
        #     One dimension can be the result of an expression of multiple dimensions.
        #     For example, dimension "country, city": concatenate(country, ", ", city).
        class Dimension
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Used to express a dimension which is the result of a formula of multiple
        # dimensions. Example usages:
        # 1) lower_case(dimension)
        # 2) concatenate(dimension1, symbol, dimension2).
        # @!attribute [rw] lower_case
        #   @return [::Google::Analytics::Data::V1beta::DimensionExpression::CaseExpression]
        #     Used to convert a dimension value to lower case.
        # @!attribute [rw] upper_case
        #   @return [::Google::Analytics::Data::V1beta::DimensionExpression::CaseExpression]
        #     Used to convert a dimension value to upper case.
        # @!attribute [rw] concatenate
        #   @return [::Google::Analytics::Data::V1beta::DimensionExpression::ConcatenateExpression]
        #     Used to combine dimension values to a single dimension.
        #     For example, dimension "country, city": concatenate(country, ", ", city).
        class DimensionExpression
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # Used to convert a dimension value to a single case.
          # @!attribute [rw] dimension_name
          #   @return [::String]
          #     Name of a dimension. The name must refer back to a name in dimensions
          #     field of the request.
          class CaseExpression
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # Used to combine dimension values to a single dimension.
          # @!attribute [rw] dimension_names
          #   @return [::Array<::String>]
          #     Names of dimensions. The names must refer back to names in the dimensions
          #     field of the request.
          # @!attribute [rw] delimiter
          #   @return [::String]
          #     The delimiter placed between dimension names.
          #
          #     Delimiters are often single characters such as "|" or "," but can be
          #     longer strings. If a dimension value contains the delimiter, both will be
          #     present in response with no distinction. For example if dimension 1 value
          #     = "US,FR", dimension 2 value = "JP", and delimiter = ",", then the
          #     response will contain "US,FR,JP".
          class ConcatenateExpression
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end
        end

        # The quantitative measurements of a report. For example, the metric
        # `eventCount` is the total number of events. Requests are allowed up to 10
        # metrics.
        # @!attribute [rw] name
        #   @return [::String]
        #     The name of the metric. See the [API
        #     Metrics](https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema#metrics)
        #     for the list of metric names.
        #
        #     If `expression` is specified, `name` can be any string that you would like
        #     within the allowed character set. For example if `expression` is
        #     `screenPageViews/sessions`, you could call that metric's name =
        #     `viewsPerSession`. Metric names that you choose must match the regular
        #     expression `^[a-zA-Z0-9_]$`.
        #
        #     Metrics are referenced by `name` in `metricFilter`, `orderBys`, and metric
        #     `expression`.
        # @!attribute [rw] expression
        #   @return [::String]
        #     A mathematical expression for derived metrics. For example, the metric
        #     Event count per user is `eventCount/totalUsers`.
        # @!attribute [rw] invisible
        #   @return [::Boolean]
        #     Indicates if a metric is invisible in the report response. If a metric is
        #     invisible, the metric will not produce a column in the response, but can be
        #     used in `metricFilter`, `orderBys`, or a metric `expression`.
        class Metric
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # To express dimension or metric filters. The fields in the same
        # FilterExpression need to be either all dimensions or all metrics.
        # @!attribute [rw] and_group
        #   @return [::Google::Analytics::Data::V1beta::FilterExpressionList]
        #     The FilterExpressions in and_group have an AND relationship.
        # @!attribute [rw] or_group
        #   @return [::Google::Analytics::Data::V1beta::FilterExpressionList]
        #     The FilterExpressions in or_group have an OR relationship.
        # @!attribute [rw] not_expression
        #   @return [::Google::Analytics::Data::V1beta::FilterExpression]
        #     The FilterExpression is NOT of not_expression.
        # @!attribute [rw] filter
        #   @return [::Google::Analytics::Data::V1beta::Filter]
        #     A primitive filter. In the same FilterExpression, all of the filter's
        #     field names need to be either all dimensions or all metrics.
        class FilterExpression
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A list of filter expressions.
        # @!attribute [rw] expressions
        #   @return [::Array<::Google::Analytics::Data::V1beta::FilterExpression>]
        #     A list of filter expressions.
        class FilterExpressionList
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # An expression to filter dimension or metric values.
        # @!attribute [rw] field_name
        #   @return [::String]
        #     The dimension name or metric name.
        #
        #     In most methods, dimensions & metrics can be used for the first time in
        #     this field. However in a RunPivotReportRequest, this field must be
        #     additionally specified by name in the RunPivotReportRequest's dimensions or
        #     metrics.
        # @!attribute [rw] string_filter
        #   @return [::Google::Analytics::Data::V1beta::Filter::StringFilter]
        #     Strings related filter.
        # @!attribute [rw] in_list_filter
        #   @return [::Google::Analytics::Data::V1beta::Filter::InListFilter]
        #     A filter for in list values.
        # @!attribute [rw] numeric_filter
        #   @return [::Google::Analytics::Data::V1beta::Filter::NumericFilter]
        #     A filter for numeric or date values.
        # @!attribute [rw] between_filter
        #   @return [::Google::Analytics::Data::V1beta::Filter::BetweenFilter]
        #     A filter for two values.
        class Filter
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # The filter for string
          # @!attribute [rw] match_type
          #   @return [::Google::Analytics::Data::V1beta::Filter::StringFilter::MatchType]
          #     The match type for this filter.
          # @!attribute [rw] value
          #   @return [::String]
          #     The string value used for the matching.
          # @!attribute [rw] case_sensitive
          #   @return [::Boolean]
          #     If true, the string value is case sensitive.
          class StringFilter
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods

            # The match type of a string filter
            module MatchType
              # Unspecified
              MATCH_TYPE_UNSPECIFIED = 0

              # Exact match of the string value.
              EXACT = 1

              # Begins with the string value.
              BEGINS_WITH = 2

              # Ends with the string value.
              ENDS_WITH = 3

              # Contains the string value.
              CONTAINS = 4

              # Full match for the regular expression with the string value.
              FULL_REGEXP = 5

              # Partial match for the regular expression with the string value.
              PARTIAL_REGEXP = 6
            end
          end

          # The result needs to be in a list of string values.
          # @!attribute [rw] values
          #   @return [::Array<::String>]
          #     The list of string values.
          #     Must be non-empty.
          # @!attribute [rw] case_sensitive
          #   @return [::Boolean]
          #     If true, the string value is case sensitive.
          class InListFilter
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # Filters for numeric or date values.
          # @!attribute [rw] operation
          #   @return [::Google::Analytics::Data::V1beta::Filter::NumericFilter::Operation]
          #     The operation type for this filter.
          # @!attribute [rw] value
          #   @return [::Google::Analytics::Data::V1beta::NumericValue]
          #     A numeric value or a date value.
          class NumericFilter
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods

            # The operation applied to a numeric filter
            module Operation
              # Unspecified.
              OPERATION_UNSPECIFIED = 0

              # Equal
              EQUAL = 1

              # Less than
              LESS_THAN = 2

              # Less than or equal
              LESS_THAN_OR_EQUAL = 3

              # Greater than
              GREATER_THAN = 4

              # Greater than or equal
              GREATER_THAN_OR_EQUAL = 5
            end
          end

          # To express that the result needs to be between two numbers (inclusive).
          # @!attribute [rw] from_value
          #   @return [::Google::Analytics::Data::V1beta::NumericValue]
          #     Begins with this number.
          # @!attribute [rw] to_value
          #   @return [::Google::Analytics::Data::V1beta::NumericValue]
          #     Ends with this number.
          class BetweenFilter
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end
        end

        # Order bys define how rows will be sorted in the response. For example,
        # ordering rows by descending event count is one ordering, and ordering rows by
        # the event name string is a different ordering.
        # @!attribute [rw] metric
        #   @return [::Google::Analytics::Data::V1beta::OrderBy::MetricOrderBy]
        #     Sorts results by a metric's values.
        # @!attribute [rw] dimension
        #   @return [::Google::Analytics::Data::V1beta::OrderBy::DimensionOrderBy]
        #     Sorts results by a dimension's values.
        # @!attribute [rw] pivot
        #   @return [::Google::Analytics::Data::V1beta::OrderBy::PivotOrderBy]
        #     Sorts results by a metric's values within a pivot column group.
        # @!attribute [rw] desc
        #   @return [::Boolean]
        #     If true, sorts by descending order.
        class OrderBy
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # Sorts by metric values.
          # @!attribute [rw] metric_name
          #   @return [::String]
          #     A metric name in the request to order by.
          class MetricOrderBy
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # Sorts by dimension values.
          # @!attribute [rw] dimension_name
          #   @return [::String]
          #     A dimension name in the request to order by.
          # @!attribute [rw] order_type
          #   @return [::Google::Analytics::Data::V1beta::OrderBy::DimensionOrderBy::OrderType]
          #     Controls the rule for dimension value ordering.
          class DimensionOrderBy
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods

            # Rule to order the string dimension values by.
            module OrderType
              # Unspecified.
              ORDER_TYPE_UNSPECIFIED = 0

              # Alphanumeric sort by Unicode code point. For example, "2" < "A" < "X" <
              # "b" < "z".
              ALPHANUMERIC = 1

              # Case insensitive alphanumeric sort by lower case Unicode code point.
              # For example, "2" < "A" < "b" < "X" < "z".
              CASE_INSENSITIVE_ALPHANUMERIC = 2

              # Dimension values are converted to numbers before sorting. For example
              # in NUMERIC sort, "25" < "100", and in `ALPHANUMERIC` sort, "100" <
              # "25". Non-numeric dimension values all have equal ordering value below
              # all numeric values.
              NUMERIC = 3
            end
          end

          # Sorts by a pivot column group.
          # @!attribute [rw] metric_name
          #   @return [::String]
          #     In the response to order by, order rows by this column. Must be a metric
          #     name from the request.
          # @!attribute [rw] pivot_selections
          #   @return [::Array<::Google::Analytics::Data::V1beta::OrderBy::PivotOrderBy::PivotSelection>]
          #     Used to select a dimension name and value pivot. If multiple pivot
          #     selections are given, the sort occurs on rows where all pivot selection
          #     dimension name and value pairs match the row's dimension name and value
          #     pair.
          class PivotOrderBy
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods

            # A pair of dimension names and values. Rows with this dimension pivot pair
            # are ordered by the metric's value.
            #
            # For example if pivots = \\{\\{"browser", "Chrome"}} and
            # metric_name = "Sessions",
            # then the rows will be sorted based on Sessions in Chrome.
            #
            #     ---------|----------|----------------|----------|----------------
            #              |  Chrome  |    Chrome      |  Safari  |     Safari
            #     ---------|----------|----------------|----------|----------------
            #      Country | Sessions | Pages/Sessions | Sessions | Pages/Sessions
            #     ---------|----------|----------------|----------|----------------
            #         US   |    2     |       2        |     3    |        1
            #     ---------|----------|----------------|----------|----------------
            #       Canada |    3     |       1        |     4    |        1
            #     ---------|----------|----------------|----------|----------------
            # @!attribute [rw] dimension_name
            #   @return [::String]
            #     Must be a dimension name from the request.
            # @!attribute [rw] dimension_value
            #   @return [::String]
            #     Order by only when the named dimension is this value.
            class PivotSelection
              include ::Google::Protobuf::MessageExts
              extend ::Google::Protobuf::MessageExts::ClassMethods
            end
          end
        end

        # Describes the visible dimension columns and rows in the report response.
        # @!attribute [rw] field_names
        #   @return [::Array<::String>]
        #     Dimension names for visible columns in the report response. Including
        #     "dateRange" produces a date range column; for each row in the response,
        #     dimension values in the date range column will indicate the corresponding
        #     date range from the request.
        # @!attribute [rw] order_bys
        #   @return [::Array<::Google::Analytics::Data::V1beta::OrderBy>]
        #     Specifies how dimensions are ordered in the pivot. In the first Pivot, the
        #     OrderBys determine Row and PivotDimensionHeader ordering; in subsequent
        #     Pivots, the OrderBys determine only PivotDimensionHeader ordering.
        #     Dimensions specified in these OrderBys must be a subset of
        #     Pivot.field_names.
        # @!attribute [rw] offset
        #   @return [::Integer]
        #     The row count of the start row. The first row is counted as row 0.
        # @!attribute [rw] limit
        #   @return [::Integer]
        #     The number of unique combinations of dimension values to return in this
        #     pivot. The `limit` parameter is required. A `limit` of 10,000 is common for
        #     single pivot requests.
        #
        #     The product of the `limit` for each `pivot` in a `RunPivotReportRequest`
        #     must not exceed 100,000. For example, a two pivot request with `limit:
        #     1000` in each pivot will fail because the product is `1,000,000`.
        # @!attribute [rw] metric_aggregations
        #   @return [::Array<::Google::Analytics::Data::V1beta::MetricAggregation>]
        #     Aggregate the metrics by dimensions in this pivot using the specified
        #     metric_aggregations.
        class Pivot
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # The specification of cohorts for a cohort report.
        #
        # Cohort reports create a time series of user retention for the cohort. For
        # example, you could select the cohort of users that were acquired in the first
        # week of September and follow that cohort for the next six weeks. Selecting
        # the users acquired in the first week of September cohort is specified in the
        # `cohort` object. Following that cohort for the next six weeks is specified in
        # the `cohortsRange` object.
        #
        # For examples, see [Cohort Report
        # Examples](https://developers.google.com/analytics/devguides/reporting/data/v1/advanced#cohort_report_examples).
        #
        # The report response could show a weekly time series where say your app has
        # retained 60% of this cohort after three weeks and 25% of this cohort after
        # six weeks. These two percentages can be calculated by the metric
        # `cohortActiveUsers/cohortTotalUsers` and will be separate rows in the report.
        # @!attribute [rw] cohorts
        #   @return [::Array<::Google::Analytics::Data::V1beta::Cohort>]
        #     Defines the selection criteria to group users into cohorts.
        #
        #     Most cohort reports define only a single cohort. If multiple cohorts are
        #     specified, each cohort can be recognized in the report by their name.
        # @!attribute [rw] cohorts_range
        #   @return [::Google::Analytics::Data::V1beta::CohortsRange]
        #     Cohort reports follow cohorts over an extended reporting date range. This
        #     range specifies an offset duration to follow the cohorts over.
        # @!attribute [rw] cohort_report_settings
        #   @return [::Google::Analytics::Data::V1beta::CohortReportSettings]
        #     Optional settings for a cohort report.
        class CohortSpec
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Defines a cohort selection criteria. A cohort is a group of users who share
        # a common characteristic. For example, users with the same `firstSessionDate`
        # belong to the same cohort.
        # @!attribute [rw] name
        #   @return [::String]
        #     Assigns a name to this cohort. The dimension `cohort` is valued to this
        #     name in a report response. If set, cannot begin with `cohort_` or
        #     `RESERVED_`. If not set, cohorts are named by their zero based index
        #     `cohort_0`, `cohort_1`, etc.
        # @!attribute [rw] dimension
        #   @return [::String]
        #     Dimension used by the cohort. Required and only supports
        #     `firstSessionDate`.
        # @!attribute [rw] date_range
        #   @return [::Google::Analytics::Data::V1beta::DateRange]
        #     The cohort selects users whose first touch date is between start date and
        #     end date defined in the `dateRange`. This `dateRange` does not specify the
        #     full date range of event data that is present in a cohort report. In a
        #     cohort report, this `dateRange` is extended by the granularity and offset
        #     present in the `cohortsRange`; event data for the extended reporting date
        #     range is present in a cohort report.
        #
        #     In a cohort request, this `dateRange` is required and the `dateRanges` in
        #     the `RunReportRequest` or `RunPivotReportRequest` must be unspecified.
        #
        #     This `dateRange` should generally be aligned with the cohort's granularity.
        #     If `CohortsRange` uses daily granularity, this `dateRange` can be a single
        #     day. If `CohortsRange` uses weekly granularity, this `dateRange` can be
        #     aligned to a week boundary, starting at Sunday and ending Saturday. If
        #     `CohortsRange` uses monthly granularity, this `dateRange` can be aligned to
        #     a month, starting at the first and ending on the last day of the month.
        class Cohort
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Configures the extended reporting date range for a cohort report. Specifies
        # an offset duration to follow the cohorts over.
        # @!attribute [rw] granularity
        #   @return [::Google::Analytics::Data::V1beta::CohortsRange::Granularity]
        #     Required. The granularity used to interpret the `startOffset` and
        #     `endOffset` for the extended reporting date range for a cohort report.
        # @!attribute [rw] start_offset
        #   @return [::Integer]
        #     `startOffset` specifies the start date of the extended reporting date range
        #     for a cohort report. `startOffset` is commonly set to 0 so that reports
        #     contain data from the acquisition of the cohort forward.
        #
        #     If `granularity` is `DAILY`, the `startDate` of the extended reporting date
        #     range is `startDate` of the cohort plus `startOffset` days.
        #
        #     If `granularity` is `WEEKLY`, the `startDate` of the extended reporting
        #     date range is `startDate` of the cohort plus `startOffset * 7` days.
        #
        #     If `granularity` is `MONTHLY`, the `startDate` of the extended reporting
        #     date range is `startDate` of the cohort plus `startOffset * 30` days.
        # @!attribute [rw] end_offset
        #   @return [::Integer]
        #     Required. `endOffset` specifies the end date of the extended reporting date
        #     range for a cohort report. `endOffset` can be any positive integer but is
        #     commonly set to 5 to 10 so that reports contain data on the cohort for the
        #     next several granularity time periods.
        #
        #     If `granularity` is `DAILY`, the `endDate` of the extended reporting date
        #     range is `endDate` of the cohort plus `endOffset` days.
        #
        #     If `granularity` is `WEEKLY`, the `endDate` of the extended reporting date
        #     range is `endDate` of the cohort plus `endOffset * 7` days.
        #
        #     If `granularity` is `MONTHLY`, the `endDate` of the extended reporting date
        #     range is `endDate` of the cohort plus `endOffset * 30` days.
        class CohortsRange
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # The granularity used to interpret the `startOffset` and `endOffset` for the
          # extended reporting date range for a cohort report.
          module Granularity
            # Should never be specified.
            GRANULARITY_UNSPECIFIED = 0

            # Daily granularity. Commonly used if the cohort's `dateRange` is a single
            # day and the request contains `cohortNthDay`.
            DAILY = 1

            # Weekly granularity. Commonly used if the cohort's `dateRange` is a week
            # in duration (starting on Sunday and ending on Saturday) and the request
            # contains `cohortNthWeek`.
            WEEKLY = 2

            # Monthly granularity. Commonly used if the cohort's `dateRange` is a month
            # in duration and the request contains `cohortNthMonth`.
            MONTHLY = 3
          end
        end

        # Optional settings of a cohort report.
        # @!attribute [rw] accumulate
        #   @return [::Boolean]
        #     If true, accumulates the result from first touch day to the end day. Not
        #     supported in `RunReportRequest`.
        class CohortReportSettings
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Response's metadata carrying additional information about the report content.
        # @!attribute [rw] data_loss_from_other_row
        #   @return [::Boolean]
        #     If true, indicates some buckets of dimension combinations are rolled into
        #     "(other)" row. This can happen for high cardinality reports.
        # @!attribute [rw] schema_restriction_response
        #   @return [::Google::Analytics::Data::V1beta::ResponseMetaData::SchemaRestrictionResponse]
        #     Describes the schema restrictions actively enforced in creating this
        #     report. To learn more, see [Access and data-restriction
        #     management](https://support.google.com/analytics/answer/10851388).
        # @!attribute [rw] currency_code
        #   @return [::String]
        #     The currency code used in this report. Intended to be used in formatting
        #     currency metrics like `purchaseRevenue` for visualization. If currency_code
        #     was specified in the request, this response parameter will echo the request
        #     parameter; otherwise, this response parameter is the property's current
        #     currency_code.
        #
        #     Currency codes are string encodings of currency types from the ISO 4217
        #     standard (https://en.wikipedia.org/wiki/ISO_4217); for example "USD",
        #     "EUR", "JPY". To learn more, see
        #     https://support.google.com/analytics/answer/9796179.
        # @!attribute [rw] time_zone
        #   @return [::String]
        #     The property's current timezone. Intended to be used to interpret
        #     time-based dimensions like `hour` and `minute`. Formatted as strings from
        #     the IANA Time Zone database (https://www.iana.org/time-zones); for example
        #     "America/New_York" or "Asia/Tokyo".
        # @!attribute [rw] empty_reason
        #   @return [::String]
        #     If empty reason is specified, the report is empty for this reason.
        # @!attribute [rw] subject_to_thresholding
        #   @return [::Boolean]
        #     If `subjectToThresholding` is true, this report is subject to thresholding
        #     and only returns data that meets the minimum aggregation thresholds. It is
        #     possible for a request to be subject to thresholding thresholding and no
        #     data is absent from the report, and this happens when all data is above the
        #     thresholds. To learn more, see [Data
        #     thresholds](https://support.google.com/analytics/answer/9383630) and [About
        #     Demographics and
        #     Interests](https://support.google.com/analytics/answer/2799357).
        class ResponseMetaData
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # The schema restrictions actively enforced in creating this report. To learn
          # more, see [Access and data-restriction
          # management](https://support.google.com/analytics/answer/10851388).
          # @!attribute [rw] active_metric_restrictions
          #   @return [::Array<::Google::Analytics::Data::V1beta::ResponseMetaData::SchemaRestrictionResponse::ActiveMetricRestriction>]
          #     All restrictions actively enforced in creating the report. For example,
          #     `purchaseRevenue` always has the restriction type `REVENUE_DATA`.
          #     However, this active response restriction is only populated if the user's
          #     custom role disallows access to `REVENUE_DATA`.
          class SchemaRestrictionResponse
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods

            # A metric actively restricted in creating the report.
            # @!attribute [rw] metric_name
            #   @return [::String]
            #     The name of the restricted metric.
            # @!attribute [rw] restricted_metric_types
            #   @return [::Array<::Google::Analytics::Data::V1beta::RestrictedMetricType>]
            #     The reason for this metric's restriction.
            class ActiveMetricRestriction
              include ::Google::Protobuf::MessageExts
              extend ::Google::Protobuf::MessageExts::ClassMethods
            end
          end
        end

        # Describes a dimension column in the report. Dimensions requested in a report
        # produce column entries within rows and DimensionHeaders. However, dimensions
        # used exclusively within filters or expressions do not produce columns in a
        # report; correspondingly, those dimensions do not produce headers.
        # @!attribute [rw] name
        #   @return [::String]
        #     The dimension's name.
        class DimensionHeader
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Describes a metric column in the report. Visible metrics requested in a
        # report produce column entries within rows and MetricHeaders. However,
        # metrics used exclusively within filters or expressions do not produce columns
        # in a report; correspondingly, those metrics do not produce headers.
        # @!attribute [rw] name
        #   @return [::String]
        #     The metric's name.
        # @!attribute [rw] type
        #   @return [::Google::Analytics::Data::V1beta::MetricType]
        #     The metric's data type.
        class MetricHeader
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Dimensions' values in a single pivot.
        # @!attribute [rw] pivot_dimension_headers
        #   @return [::Array<::Google::Analytics::Data::V1beta::PivotDimensionHeader>]
        #     The size is the same as the cardinality of the corresponding dimension
        #     combinations.
        # @!attribute [rw] row_count
        #   @return [::Integer]
        #     The cardinality of the pivot. The total number of rows for this pivot's
        #     fields regardless of how the parameters `offset` and `limit` are specified
        #     in the request.
        class PivotHeader
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Summarizes dimension values from a row for this pivot.
        # @!attribute [rw] dimension_values
        #   @return [::Array<::Google::Analytics::Data::V1beta::DimensionValue>]
        #     Values of multiple dimensions in a pivot.
        class PivotDimensionHeader
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Report data for each row.
        # For example if RunReportRequest contains:
        #
        # ```none
        # "dimensions": [
        #   {
        #     "name": "eventName"
        #   },
        #   {
        #     "name": "countryId"
        #   }
        # ],
        # "metrics": [
        #   {
        #     "name": "eventCount"
        #   }
        # ]
        # ```
        #
        # One row with 'in_app_purchase' as the eventName, 'JP' as the countryId, and
        # 15 as the eventCount, would be:
        #
        # ```none
        # "dimensionValues": [
        #   {
        #     "value": "in_app_purchase"
        #   },
        #   {
        #     "value": "JP"
        #   }
        # ],
        # "metricValues": [
        #   {
        #     "value": "15"
        #   }
        # ]
        # ```
        # @!attribute [rw] dimension_values
        #   @return [::Array<::Google::Analytics::Data::V1beta::DimensionValue>]
        #     List of requested dimension values. In a PivotReport, dimension_values
        #     are only listed for dimensions included in a pivot.
        # @!attribute [rw] metric_values
        #   @return [::Array<::Google::Analytics::Data::V1beta::MetricValue>]
        #     List of requested visible metric values.
        class Row
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # The value of a dimension.
        # @!attribute [rw] value
        #   @return [::String]
        #     Value as a string if the dimension type is a string.
        class DimensionValue
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # The value of a metric.
        # @!attribute [rw] value
        #   @return [::String]
        #     Measurement value. See MetricHeader for type.
        class MetricValue
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # To represent a number.
        # @!attribute [rw] int64_value
        #   @return [::Integer]
        #     Integer value
        # @!attribute [rw] double_value
        #   @return [::Float]
        #     Double value
        class NumericValue
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Current state of all quotas for this Analytics Property. If any quota for a
        # property is exhausted, all requests to that property will return Resource
        # Exhausted errors.
        # @!attribute [rw] tokens_per_day
        #   @return [::Google::Analytics::Data::V1beta::QuotaStatus]
        #     Standard Analytics Properties can use up to 25,000 tokens per day;
        #     Analytics 360 Properties can use 250,000 tokens per day. Most requests
        #     consume fewer than 10 tokens.
        # @!attribute [rw] tokens_per_hour
        #   @return [::Google::Analytics::Data::V1beta::QuotaStatus]
        #     Standard Analytics Properties can use up to 5,000 tokens per hour;
        #     Analytics 360 Properties can use 50,000 tokens per hour. An API request
        #     consumes a single number of tokens, and that number is deducted from all of
        #     the hourly, daily, and per project hourly quotas.
        # @!attribute [rw] concurrent_requests
        #   @return [::Google::Analytics::Data::V1beta::QuotaStatus]
        #     Standard Analytics Properties can send up to 10 concurrent requests;
        #     Analytics 360 Properties can use up to 50 concurrent requests.
        # @!attribute [rw] server_errors_per_project_per_hour
        #   @return [::Google::Analytics::Data::V1beta::QuotaStatus]
        #     Standard Analytics Properties and cloud project pairs can have up to 10
        #     server errors per hour; Analytics 360 Properties and cloud project pairs
        #     can have up to 50 server errors per hour.
        # @!attribute [rw] potentially_thresholded_requests_per_hour
        #   @return [::Google::Analytics::Data::V1beta::QuotaStatus]
        #     Analytics Properties can send up to 120 requests with potentially
        #     thresholded dimensions per hour. In a batch request, each report request
        #     is individually counted for this quota if the request contains potentially
        #     thresholded dimensions.
        # @!attribute [rw] tokens_per_project_per_hour
        #   @return [::Google::Analytics::Data::V1beta::QuotaStatus]
        #     Analytics Properties can use up to 25% of their tokens per project per
        #     hour. This amounts to standard Analytics Properties can use up to 1,250
        #     tokens per project per hour, and Analytics 360 Properties can use 12,500
        #     tokens per project per hour. An API request consumes a single number of
        #     tokens, and that number is deducted from all of the hourly, daily, and per
        #     project hourly quotas.
        class PropertyQuota
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Current state for a particular quota group.
        # @!attribute [rw] consumed
        #   @return [::Integer]
        #     Quota consumed by this request.
        # @!attribute [rw] remaining
        #   @return [::Integer]
        #     Quota remaining after this request.
        class QuotaStatus
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Explains a dimension.
        # @!attribute [rw] api_name
        #   @return [::String]
        #     This dimension's name. Useable in [Dimension](#Dimension)'s `name`. For
        #     example, `eventName`.
        # @!attribute [rw] ui_name
        #   @return [::String]
        #     This dimension's name within the Google Analytics user interface. For
        #     example, `Event name`.
        # @!attribute [rw] description
        #   @return [::String]
        #     Description of how this dimension is used and calculated.
        # @!attribute [rw] deprecated_api_names
        #   @return [::Array<::String>]
        #     Still usable but deprecated names for this dimension. If populated, this
        #     dimension is available by either `apiName` or one of `deprecatedApiNames`
        #     for a period of time. After the deprecation period, the dimension will be
        #     available only by `apiName`.
        # @!attribute [rw] custom_definition
        #   @return [::Boolean]
        #     True if the dimension is a custom dimension for this property.
        # @!attribute [rw] category
        #   @return [::String]
        #     The display name of the category that this dimension belongs to. Similar
        #     dimensions and metrics are categorized together.
        class DimensionMetadata
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Explains a metric.
        # @!attribute [rw] api_name
        #   @return [::String]
        #     A metric name. Useable in [Metric](#Metric)'s `name`. For example,
        #     `eventCount`.
        # @!attribute [rw] ui_name
        #   @return [::String]
        #     This metric's name within the Google Analytics user interface. For example,
        #     `Event count`.
        # @!attribute [rw] description
        #   @return [::String]
        #     Description of how this metric is used and calculated.
        # @!attribute [rw] deprecated_api_names
        #   @return [::Array<::String>]
        #     Still usable but deprecated names for this metric. If populated, this
        #     metric is available by either `apiName` or one of `deprecatedApiNames`
        #     for a period of time. After the deprecation period, the metric will be
        #     available only by `apiName`.
        # @!attribute [rw] type
        #   @return [::Google::Analytics::Data::V1beta::MetricType]
        #     The type of this metric.
        # @!attribute [rw] expression
        #   @return [::String]
        #     The mathematical expression for this derived metric. Can be used in
        #     [Metric](#Metric)'s `expression` field for equivalent reports. Most metrics
        #     are not expressions, and for non-expressions, this field is empty.
        # @!attribute [rw] custom_definition
        #   @return [::Boolean]
        #     True if the metric is a custom metric for this property.
        # @!attribute [rw] blocked_reasons
        #   @return [::Array<::Google::Analytics::Data::V1beta::MetricMetadata::BlockedReason>]
        #     If reasons are specified, your access is blocked to this metric for this
        #     property. API requests from you to this property for this metric will
        #     succeed; however, the report will contain only zeros for this metric. API
        #     requests with metric filters on blocked metrics will fail. If reasons are
        #     empty, you have access to this metric.
        #
        #     To learn more, see [Access and data-restriction
        #     management](https://support.google.com/analytics/answer/10851388).
        # @!attribute [rw] category
        #   @return [::String]
        #     The display name of the category that this metrics belongs to. Similar
        #     dimensions and metrics are categorized together.
        class MetricMetadata
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # Justifications for why this metric is blocked.
          module BlockedReason
            # Will never be specified in API response.
            BLOCKED_REASON_UNSPECIFIED = 0

            # If present, your access is blocked to revenue related metrics for this
            # property, and this metric is revenue related.
            NO_REVENUE_METRICS = 1

            # If present, your access is blocked to cost related metrics for this
            # property, and this metric is cost related.
            NO_COST_METRICS = 2
          end
        end

        # The compatibility for a single dimension.
        # @!attribute [rw] dimension_metadata
        #   @return [::Google::Analytics::Data::V1beta::DimensionMetadata]
        #     The dimension metadata contains the API name for this compatibility
        #     information. The dimension metadata also contains other helpful information
        #     like the UI name and description.
        # @!attribute [rw] compatibility
        #   @return [::Google::Analytics::Data::V1beta::Compatibility]
        #     The compatibility of this dimension. If the compatibility is COMPATIBLE,
        #     this dimension can be successfully added to the report.
        class DimensionCompatibility
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # The compatibility for a single metric.
        # @!attribute [rw] metric_metadata
        #   @return [::Google::Analytics::Data::V1beta::MetricMetadata]
        #     The metric metadata contains the API name for this compatibility
        #     information. The metric metadata also contains other helpful information
        #     like the UI name and description.
        # @!attribute [rw] compatibility
        #   @return [::Google::Analytics::Data::V1beta::Compatibility]
        #     The compatibility of this metric. If the compatibility is COMPATIBLE,
        #     this metric can be successfully added to the report.
        class MetricCompatibility
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Represents aggregation of metrics.
        module MetricAggregation
          # Unspecified operator.
          METRIC_AGGREGATION_UNSPECIFIED = 0

          # SUM operator.
          TOTAL = 1

          # Minimum operator.
          MINIMUM = 5

          # Maximum operator.
          MAXIMUM = 6

          # Count operator.
          COUNT = 4
        end

        # A metric's value type.
        module MetricType
          # Unspecified type.
          METRIC_TYPE_UNSPECIFIED = 0

          # Integer type.
          TYPE_INTEGER = 1

          # Floating point type.
          TYPE_FLOAT = 2

          # A duration of seconds; a special floating point type.
          TYPE_SECONDS = 4

          # A duration in milliseconds; a special floating point type.
          TYPE_MILLISECONDS = 5

          # A duration in minutes; a special floating point type.
          TYPE_MINUTES = 6

          # A duration in hours; a special floating point type.
          TYPE_HOURS = 7

          # A custom metric of standard type; a special floating point type.
          TYPE_STANDARD = 8

          # An amount of money; a special floating point type.
          TYPE_CURRENCY = 9

          # A length in feet; a special floating point type.
          TYPE_FEET = 10

          # A length in miles; a special floating point type.
          TYPE_MILES = 11

          # A length in meters; a special floating point type.
          TYPE_METERS = 12

          # A length in kilometers; a special floating point type.
          TYPE_KILOMETERS = 13
        end

        # Categories of data that you may be restricted from viewing on certain GA4
        # properties.
        module RestrictedMetricType
          # Unspecified type.
          RESTRICTED_METRIC_TYPE_UNSPECIFIED = 0

          # Cost metrics such as `adCost`.
          COST_DATA = 1

          # Revenue metrics such as `purchaseRevenue`.
          REVENUE_DATA = 2
        end

        # The compatibility types for a single dimension or metric.
        module Compatibility
          # Unspecified compatibility.
          COMPATIBILITY_UNSPECIFIED = 0

          # The dimension or metric is compatible. This dimension or metric can be
          # successfully added to a report.
          COMPATIBLE = 1

          # The dimension or metric is incompatible. This dimension or metric cannot be
          # successfully added to a report.
          INCOMPATIBLE = 2
        end
      end
    end
  end
end