# Copyright 2015 Google Inc. # # 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 # # http://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. require 'date' require 'google/apis/core/base_service' require 'google/apis/core/json_representation' require 'google/apis/core/hashable' require 'google/apis/errors' module Google module Apis module AnalyticsreportingV4 # The headers for the each of the metric column corresponding to the metrics # requested in the pivots section of the response. class PivotHeaderEntry include Google::Apis::Core::Hashable # The name of the dimensions in the pivot response. # Corresponds to the JSON property `dimensionNames` # @return [Array] attr_accessor :dimension_names # Header for the metrics. # Corresponds to the JSON property `metric` # @return [Google::Apis::AnalyticsreportingV4::MetricHeaderEntry] attr_accessor :metric # The values for the dimensions in the pivot. # Corresponds to the JSON property `dimensionValues` # @return [Array] attr_accessor :dimension_values def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @dimension_names = args[:dimension_names] if args.key?(:dimension_names) @metric = args[:metric] if args.key?(:metric) @dimension_values = args[:dimension_values] if args.key?(:dimension_values) end end # SegmentFilter defines the segment to be either a simple or a sequence # segment. A simple segment condition contains dimension and metric conditions # to select the sessions or users. A sequence segment condition can be used to # select users or sessions based on sequential conditions. class SegmentFilter include Google::Apis::Core::Hashable # If true, match the complement of simple or sequence segment. # For example, to match all visits not from "New York", we can define the # segment as follows: # "sessionSegment": ` # "segmentFilters": [` # "simpleSegment" :` # "orFiltersForSegment": [` # "segmentFilterClauses":[` # "dimensionFilter": ` # "dimensionName": "ga:city", # "expressions": ["New York"] # ` # `] # `] # `, # "not": "True" # `] # `, # Corresponds to the JSON property `not` # @return [Boolean] attr_accessor :not alias_method :not?, :not # A Simple segment conditions consist of one or more dimension/metric # conditions that can be combined. # Corresponds to the JSON property `simpleSegment` # @return [Google::Apis::AnalyticsreportingV4::SimpleSegment] attr_accessor :simple_segment # Sequence conditions consist of one or more steps, where each step is defined # by one or more dimension/metric conditions. Multiple steps can be combined # with special sequence operators. # Corresponds to the JSON property `sequenceSegment` # @return [Google::Apis::AnalyticsreportingV4::SequenceSegment] attr_accessor :sequence_segment def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @not = args[:not] if args.key?(:not) @simple_segment = args[:simple_segment] if args.key?(:simple_segment) @sequence_segment = args[:sequence_segment] if args.key?(:sequence_segment) end end # SegmentDefinition defines the segment to be a set of SegmentFilters which # are combined together with a logical `AND` operation. class SegmentDefinition include Google::Apis::Core::Hashable # A segment is defined by a set of segment filters which are combined # together with a logical `AND` operation. # Corresponds to the JSON property `segmentFilters` # @return [Array] attr_accessor :segment_filters def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @segment_filters = args[:segment_filters] if args.key?(:segment_filters) end end # Header for the metrics. class MetricHeaderEntry include Google::Apis::Core::Hashable # The name of the header. # Corresponds to the JSON property `name` # @return [String] attr_accessor :name # The type of the metric, for example `INTEGER`. # Corresponds to the JSON property `type` # @return [String] attr_accessor :type def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @name = args[:name] if args.key?(:name) @type = args[:type] if args.key?(:type) end end # The data part of the report. class ReportData include Google::Apis::Core::Hashable # If the results are # [sampled](https://support.google.com/analytics/answer/2637192), # this returns the total number of # samples present, one entry per date range. If the results are not sampled # this field will not be defined. See # [developer guide](/analytics/devguides/reporting/core/v4/basics#sampling) # for details. # Corresponds to the JSON property `samplingSpaceSizes` # @return [Array] attr_accessor :sampling_space_sizes # Minimum and maximum values seen over all matching rows. These are both # empty when `hideValueRanges` in the request is false, or when # rowCount is zero. # Corresponds to the JSON property `minimums` # @return [Array] attr_accessor :minimums # For each requested date range, for the set of all rows that match # the query, every requested value format gets a total. The total # for a value format is computed by first totaling the metrics # mentioned in the value format and then evaluating the value # format as a scalar expression. E.g., The "totals" for # `3 / (ga:sessions + 2)` we compute # `3 / ((sum of all relevant ga:sessions) + 2)`. # Totals are computed before pagination. # Corresponds to the JSON property `totals` # @return [Array] attr_accessor :totals # If the results are # [sampled](https://support.google.com/analytics/answer/2637192), # this returns the total number of samples read, one entry per date range. # If the results are not sampled this field will not be defined. See # [developer guide](/analytics/devguides/reporting/core/v4/basics#sampling) # for details. # Corresponds to the JSON property `samplesReadCounts` # @return [Array] attr_accessor :samples_read_counts # Total number of matching rows for this query. # Corresponds to the JSON property `rowCount` # @return [Fixnum] attr_accessor :row_count # There's one ReportRow for every unique combination of dimensions. # Corresponds to the JSON property `rows` # @return [Array] attr_accessor :rows # Indicates if response to this request is golden or not. Data is # golden when the exact same request will not produce any new results if # asked at a later point in time. # Corresponds to the JSON property `isDataGolden` # @return [Boolean] attr_accessor :is_data_golden alias_method :is_data_golden?, :is_data_golden # The last time the data in the report was refreshed. All the hits received # before this timestamp are included in the calculation of the report. # Corresponds to the JSON property `dataLastRefreshed` # @return [String] attr_accessor :data_last_refreshed # Minimum and maximum values seen over all matching rows. These are both # empty when `hideValueRanges` in the request is false, or when # rowCount is zero. # Corresponds to the JSON property `maximums` # @return [Array] attr_accessor :maximums def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @sampling_space_sizes = args[:sampling_space_sizes] if args.key?(:sampling_space_sizes) @minimums = args[:minimums] if args.key?(:minimums) @totals = args[:totals] if args.key?(:totals) @samples_read_counts = args[:samples_read_counts] if args.key?(:samples_read_counts) @row_count = args[:row_count] if args.key?(:row_count) @rows = args[:rows] if args.key?(:rows) @is_data_golden = args[:is_data_golden] if args.key?(:is_data_golden) @data_last_refreshed = args[:data_last_refreshed] if args.key?(:data_last_refreshed) @maximums = args[:maximums] if args.key?(:maximums) end end # Dimension filter specifies the filtering options on a dimension. class DimensionFilter include Google::Apis::Core::Hashable # The dimension to filter on. A DimensionFilter must contain a dimension. # Corresponds to the JSON property `dimensionName` # @return [String] attr_accessor :dimension_name # How to match the dimension to the expression. The default is REGEXP. # Corresponds to the JSON property `operator` # @return [String] attr_accessor :operator # Logical `NOT` operator. If this boolean is set to true, then the matching # dimension values will be excluded in the report. The default is false. # Corresponds to the JSON property `not` # @return [Boolean] attr_accessor :not alias_method :not?, :not # Strings or regular expression to match against. Only the first value of # the list is used for comparison unless the operator is `IN_LIST`. # If `IN_LIST` operator, then the entire list is used to filter the # dimensions as explained in the description of the `IN_LIST` operator. # Corresponds to the JSON property `expressions` # @return [Array] attr_accessor :expressions # Should the match be case sensitive? Default is false. # Corresponds to the JSON property `caseSensitive` # @return [Boolean] attr_accessor :case_sensitive alias_method :case_sensitive?, :case_sensitive def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @dimension_name = args[:dimension_name] if args.key?(:dimension_name) @operator = args[:operator] if args.key?(:operator) @not = args[:not] if args.key?(:not) @expressions = args[:expressions] if args.key?(:expressions) @case_sensitive = args[:case_sensitive] if args.key?(:case_sensitive) end end # The segment definition, if the report needs to be segmented. # A Segment is a subset of the Analytics data. For example, of the entire # set of users, one Segment might be users from a particular country or city. class Segment include Google::Apis::Core::Hashable # Dynamic segment definition for defining the segment within the request. # A segment can select users, sessions or both. # Corresponds to the JSON property `dynamicSegment` # @return [Google::Apis::AnalyticsreportingV4::DynamicSegment] attr_accessor :dynamic_segment # The segment ID of a built-in or custom segment, for example `gaid::-3`. # Corresponds to the JSON property `segmentId` # @return [String] attr_accessor :segment_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @dynamic_segment = args[:dynamic_segment] if args.key?(:dynamic_segment) @segment_id = args[:segment_id] if args.key?(:segment_id) end end # Specifies the sorting options. class OrderBy include Google::Apis::Core::Hashable # The field which to sort by. The default sort order is ascending. Example: # `ga:browser`. # Note, that you can only specify one field for sort here. For example, # `ga:browser, ga:city` is not valid. # Corresponds to the JSON property `fieldName` # @return [String] attr_accessor :field_name # The order type. The default orderType is `VALUE`. # Corresponds to the JSON property `orderType` # @return [String] attr_accessor :order_type # The sorting order for the field. # Corresponds to the JSON property `sortOrder` # @return [String] attr_accessor :sort_order def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @field_name = args[:field_name] if args.key?(:field_name) @order_type = args[:order_type] if args.key?(:order_type) @sort_order = args[:sort_order] if args.key?(:sort_order) end end # Dimension filter specifies the filtering options on a dimension. class SegmentDimensionFilter include Google::Apis::Core::Hashable # Should the match be case sensitive, ignored for `IN_LIST` operator. # Corresponds to the JSON property `caseSensitive` # @return [Boolean] attr_accessor :case_sensitive alias_method :case_sensitive?, :case_sensitive # Minimum comparison values for `BETWEEN` match type. # Corresponds to the JSON property `minComparisonValue` # @return [String] attr_accessor :min_comparison_value # Maximum comparison values for `BETWEEN` match type. # Corresponds to the JSON property `maxComparisonValue` # @return [String] attr_accessor :max_comparison_value # Name of the dimension for which the filter is being applied. # Corresponds to the JSON property `dimensionName` # @return [String] attr_accessor :dimension_name # The operator to use to match the dimension with the expressions. # Corresponds to the JSON property `operator` # @return [String] attr_accessor :operator # The list of expressions, only the first element is used for all operators # Corresponds to the JSON property `expressions` # @return [Array] attr_accessor :expressions def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @case_sensitive = args[:case_sensitive] if args.key?(:case_sensitive) @min_comparison_value = args[:min_comparison_value] if args.key?(:min_comparison_value) @max_comparison_value = args[:max_comparison_value] if args.key?(:max_comparison_value) @dimension_name = args[:dimension_name] if args.key?(:dimension_name) @operator = args[:operator] if args.key?(:operator) @expressions = args[:expressions] if args.key?(:expressions) end end # A segment sequence definition. class SegmentSequenceStep include Google::Apis::Core::Hashable # A sequence is specified with a list of Or grouped filters which are # combined with `AND` operator. # Corresponds to the JSON property `orFiltersForSegment` # @return [Array] attr_accessor :or_filters_for_segment # Specifies if the step immediately precedes or can be any time before the # next step. # Corresponds to the JSON property `matchType` # @return [String] attr_accessor :match_type def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @or_filters_for_segment = args[:or_filters_for_segment] if args.key?(:or_filters_for_segment) @match_type = args[:match_type] if args.key?(:match_type) end end # [Metrics](https://support.google.com/analytics/answer/1033861) # are the quantitative measurements. For example, the metric `ga:users` # indicates the total number of users for the requested time period. class Metric include Google::Apis::Core::Hashable # A metric expression in the request. An expression is constructed from one # or more metrics and numbers. Accepted operators include: Plus (+), Minus # (-), Negation (Unary -), Divided by (/), Multiplied by (*), Parenthesis, # Positive cardinal numbers (0-9), can include decimals and is limited to # 1024 characters. Example `ga:totalRefunds/ga:users`, in most cases the # metric expression is just a single metric name like `ga:users`. # Adding mixed `MetricType` (E.g., `CURRENCY` + `PERCENTAGE`) metrics # will result in unexpected results. # Corresponds to the JSON property `expression` # @return [String] attr_accessor :expression # Specifies how the metric expression should be formatted, for example # `INTEGER`. # Corresponds to the JSON property `formattingType` # @return [String] attr_accessor :formatting_type # An alias for the metric expression is an alternate name for the # expression. The alias can be used for filtering and sorting. This field # is optional and is useful if the expression is not a single metric but # a complex expression which cannot be used in filtering and sorting. # The alias is also used in the response column header. # Corresponds to the JSON property `alias` # @return [String] attr_accessor :alias def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @expression = args[:expression] if args.key?(:expression) @formatting_type = args[:formatting_type] if args.key?(:formatting_type) @alias = args[:alias] if args.key?(:alias) end end # The metric values in the pivot region. class PivotValueRegion include Google::Apis::Core::Hashable # The values of the metrics in each of the pivot regions. # Corresponds to the JSON property `values` # @return [Array] attr_accessor :values def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @values = args[:values] if args.key?(:values) end end # The data response corresponding to the request. class Report include Google::Apis::Core::Hashable # Column headers. # Corresponds to the JSON property `columnHeader` # @return [Google::Apis::AnalyticsreportingV4::ColumnHeader] attr_accessor :column_header # The data part of the report. # Corresponds to the JSON property `data` # @return [Google::Apis::AnalyticsreportingV4::ReportData] attr_accessor :data # Page token to retrieve the next page of results in the list. # Corresponds to the JSON property `nextPageToken` # @return [String] attr_accessor :next_page_token def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @column_header = args[:column_header] if args.key?(:column_header) @data = args[:data] if args.key?(:data) @next_page_token = args[:next_page_token] if args.key?(:next_page_token) end end # The headers for each of the pivot sections defined in the request. class PivotHeader include Google::Apis::Core::Hashable # A single pivot section header. # Corresponds to the JSON property `pivotHeaderEntries` # @return [Array] attr_accessor :pivot_header_entries # The total number of groups for this pivot. # Corresponds to the JSON property `totalPivotGroupsCount` # @return [Fixnum] attr_accessor :total_pivot_groups_count def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @pivot_header_entries = args[:pivot_header_entries] if args.key?(:pivot_header_entries) @total_pivot_groups_count = args[:total_pivot_groups_count] if args.key?(:total_pivot_groups_count) end end # A contiguous set of days: startDate, startDate + 1 day, ..., endDate. # The start and end dates are specified in # [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) date format `YYYY-MM-DD`. class DateRange include Google::Apis::Core::Hashable # The start date for the query in the format `YYYY-MM-DD`. # Corresponds to the JSON property `startDate` # @return [String] attr_accessor :start_date # The end date for the query in the format `YYYY-MM-DD`. # Corresponds to the JSON property `endDate` # @return [String] attr_accessor :end_date def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @start_date = args[:start_date] if args.key?(:start_date) @end_date = args[:end_date] if args.key?(:end_date) end end # The main request class which specifies the Reporting API request. class ReportRequest include Google::Apis::Core::Hashable # The metric filter clauses. They are logically combined with the `AND` # operator. Metric filters look at only the first date range and not the # comparing date range. Note that filtering on metrics occurs after the # metrics are aggregated. # Corresponds to the JSON property `metricFilterClauses` # @return [Array] attr_accessor :metric_filter_clauses # Page size is for paging and specifies the maximum number of returned rows. # Page size should be >= 0. A query returns the default of 1,000 rows. # The Analytics Core Reporting API returns a maximum of 10,000 rows per # request, no matter how many you ask for. It can also return fewer rows # than requested, if there aren't as many dimension segments as you expect. # For instance, there are fewer than 300 possible values for `ga:country`, # so when segmenting only by country, you can't get more than 300 rows, # even if you set `pageSize` to a higher value. # Corresponds to the JSON property `pageSize` # @return [Fixnum] attr_accessor :page_size # If set to true, hides the minimum and maximum across all matching rows. # The default is false and the value ranges are returned. # Corresponds to the JSON property `hideValueRanges` # @return [Boolean] attr_accessor :hide_value_ranges alias_method :hide_value_ranges?, :hide_value_ranges # If set to true, hides the total of all metrics for all the matching rows, # for every date range. The default false and will return the totals. # Corresponds to the JSON property `hideTotals` # @return [Boolean] attr_accessor :hide_totals alias_method :hide_totals?, :hide_totals # Dimension or metric filters that restrict the data returned for your # request. To use the `filtersExpression`, supply a dimension or metric on # which to filter, followed by the filter expression. For example, the # following expression selects `ga:browser` dimension which starts with # Firefox; `ga:browser=~^Firefox`. For more information on dimensions # and metric filters, see # [Filters reference](https://developers.google.com/analytics/devguides/ # reporting/core/v3/reference#filters). # Corresponds to the JSON property `filtersExpression` # @return [String] attr_accessor :filters_expression # Defines a cohort group. # For example: # "cohortGroup": ` # "cohorts": [` # "name": "cohort 1", # "type": "FIRST_VISIT_DATE", # "dateRange": ` "startDate": "2015-08-01", "endDate": "2015-08-01" ` # `,` # "name": "cohort 2" # "type": "FIRST_VISIT_DATE" # "dateRange": ` "startDate": "2015-07-01", "endDate": "2015-07-01" ` # `] # ` # Corresponds to the JSON property `cohortGroup` # @return [Google::Apis::AnalyticsreportingV4::CohortGroup] attr_accessor :cohort_group # The Analytics # [view ID](https://support.google.com/analytics/answer/1009618) # from which to retrieve data. Every [ReportRequest](#ReportRequest) # within a `batchGet` method must contain the same `viewId`. # Corresponds to the JSON property `viewId` # @return [String] attr_accessor :view_id # The metrics requested. # Requests must specify at least one metric. Requests can have a # total of 10 metrics. # Corresponds to the JSON property `metrics` # @return [Array] attr_accessor :metrics # The dimension filter clauses for filtering Dimension Values. They are # logically combined with the `AND` operator. Note that filtering occurs # before any dimensions are aggregated, so that the returned metrics # represent the total for only the relevant dimensions. # Corresponds to the JSON property `dimensionFilterClauses` # @return [Array] attr_accessor :dimension_filter_clauses # Sort order on output rows. To compare two rows, the elements of the # following are applied in order until a difference is found. All date # ranges in the output get the same row order. # Corresponds to the JSON property `orderBys` # @return [Array] attr_accessor :order_bys # Segment the data returned for the request. A segment definition helps look # at a subset of the segment request. A request can contain up to four # segments. Every [ReportRequest](#ReportRequest) within a # `batchGet` method must contain the same `segments` definition. Requests # with segments must have the `ga:segment` dimension. # Corresponds to the JSON property `segments` # @return [Array] attr_accessor :segments # The desired report # [sample](https://support.google.com/analytics/answer/2637192) size. # If the the `samplingLevel` field is unspecified the `DEFAULT` sampling # level is used. Every [ReportRequest](#ReportRequest) within a # `batchGet` method must contain the same `samplingLevel` definition. See # [developer guide](/analytics/devguides/reporting/core/v4/basics#sampling) # for details. # Corresponds to the JSON property `samplingLevel` # @return [String] attr_accessor :sampling_level # The dimensions requested. # Requests can have a total of 7 dimensions. # Corresponds to the JSON property `dimensions` # @return [Array] attr_accessor :dimensions # A continuation token to get the next page of the results. Adding this to # the request will return the rows after the pageToken. The pageToken should # be the value returned in the nextPageToken parameter in the response to # the GetReports request. # Corresponds to the JSON property `pageToken` # @return [String] attr_accessor :page_token # Date ranges in the request. The request can have a maximum of 2 date # ranges. The response will contain a set of metric values for each # combination of the dimensions for each date range in the request. So, if # there are two date ranges, there will be two set of metric values, one for # the original date range and one for the second date range. # The `reportRequest.dateRanges` field should not be specified for cohorts # or Lifetime value requests. # If a date range is not provided, the default date range is (startDate: # current date - 7 days, endDate: current date - 1 day). Every # [ReportRequest](#ReportRequest) within a `batchGet` method must # contain the same `dateRanges` definition. # Corresponds to the JSON property `dateRanges` # @return [Array] attr_accessor :date_ranges # The pivot definitions. Requests can have a maximum of 2 pivots. # Corresponds to the JSON property `pivots` # @return [Array] attr_accessor :pivots # If set to false, the response does not include rows if all the retrieved # metrics are equal to zero. The default is false which will exclude these # rows. # Corresponds to the JSON property `includeEmptyRows` # @return [Boolean] attr_accessor :include_empty_rows alias_method :include_empty_rows?, :include_empty_rows def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @metric_filter_clauses = args[:metric_filter_clauses] if args.key?(:metric_filter_clauses) @page_size = args[:page_size] if args.key?(:page_size) @hide_value_ranges = args[:hide_value_ranges] if args.key?(:hide_value_ranges) @hide_totals = args[:hide_totals] if args.key?(:hide_totals) @filters_expression = args[:filters_expression] if args.key?(:filters_expression) @cohort_group = args[:cohort_group] if args.key?(:cohort_group) @view_id = args[:view_id] if args.key?(:view_id) @metrics = args[:metrics] if args.key?(:metrics) @dimension_filter_clauses = args[:dimension_filter_clauses] if args.key?(:dimension_filter_clauses) @order_bys = args[:order_bys] if args.key?(:order_bys) @segments = args[:segments] if args.key?(:segments) @sampling_level = args[:sampling_level] if args.key?(:sampling_level) @dimensions = args[:dimensions] if args.key?(:dimensions) @page_token = args[:page_token] if args.key?(:page_token) @date_ranges = args[:date_ranges] if args.key?(:date_ranges) @pivots = args[:pivots] if args.key?(:pivots) @include_empty_rows = args[:include_empty_rows] if args.key?(:include_empty_rows) end end # MetricFilter specifies the filter on a metric. class MetricFilter include Google::Apis::Core::Hashable # The metric that will be filtered on. A metricFilter must contain a metric # name. A metric name can be an alias earlier defined as a metric or it can # also be a metric expression. # Corresponds to the JSON property `metricName` # @return [String] attr_accessor :metric_name # The value to compare against. # Corresponds to the JSON property `comparisonValue` # @return [String] attr_accessor :comparison_value # Is the metric `EQUAL`, `LESS_THAN` or `GREATER_THAN` the # comparisonValue, the default is `EQUAL`. If the operator is # `IS_MISSING`, checks if the metric is missing and would ignore the # comparisonValue. # Corresponds to the JSON property `operator` # @return [String] attr_accessor :operator # Logical `NOT` operator. If this boolean is set to true, then the matching # metric values will be excluded in the report. The default is false. # Corresponds to the JSON property `not` # @return [Boolean] attr_accessor :not alias_method :not?, :not def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @metric_name = args[:metric_name] if args.key?(:metric_name) @comparison_value = args[:comparison_value] if args.key?(:comparison_value) @operator = args[:operator] if args.key?(:operator) @not = args[:not] if args.key?(:not) end end # [Dimensions](https://support.google.com/analytics/answer/1033861) # are attributes of your data. For example, the dimension `ga:city` # indicates the city, for example, "Paris" or "New York", from which # a session originates. class Dimension include Google::Apis::Core::Hashable # If non-empty, we place dimension values into buckets after string to # int64. Dimension values that are not the string representation of an # integral value will be converted to zero. The bucket values have to be in # increasing order. Each bucket is closed on the lower end, and open on the # upper end. The "first" bucket includes all values less than the first # boundary, the "last" bucket includes all values up to infinity. Dimension # values that fall in a bucket get transformed to a new dimension value. For # example, if one gives a list of "0, 1, 3, 4, 7", then we return the # following buckets: # - bucket #1: values < 0, dimension value "<0" # - bucket #2: values in [0,1), dimension value "0" # - bucket #3: values in [1,3), dimension value "1-2" # - bucket #4: values in [3,4), dimension value "3" # - bucket #5: values in [4,7), dimension value "4-6" # - bucket #6: values >= 7, dimension value "7+" # NOTE: If you are applying histogram mutation on any dimension, and using # that dimension in sort, you will want to use the sort type # `HISTOGRAM_BUCKET` for that purpose. Without that the dimension values # will be sorted according to dictionary # (lexicographic) order. For example the ascending dictionary order is: # "<50", "1001+", "121-1000", "50-120" # And the ascending `HISTOGRAM_BUCKET` order is: # "<50", "50-120", "121-1000", "1001+" # The client has to explicitly request `"orderType": "HISTOGRAM_BUCKET"` # for a histogram-mutated dimension. # Corresponds to the JSON property `histogramBuckets` # @return [Array] attr_accessor :histogram_buckets # Name of the dimension to fetch, for example `ga:browser`. # Corresponds to the JSON property `name` # @return [String] attr_accessor :name def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @histogram_buckets = args[:histogram_buckets] if args.key?(:histogram_buckets) @name = args[:name] if args.key?(:name) end end # Dynamic segment definition for defining the segment within the request. # A segment can select users, sessions or both. class DynamicSegment include Google::Apis::Core::Hashable # SegmentDefinition defines the segment to be a set of SegmentFilters which # are combined together with a logical `AND` operation. # Corresponds to the JSON property `sessionSegment` # @return [Google::Apis::AnalyticsreportingV4::SegmentDefinition] attr_accessor :session_segment # The name of the dynamic segment. # Corresponds to the JSON property `name` # @return [String] attr_accessor :name # SegmentDefinition defines the segment to be a set of SegmentFilters which # are combined together with a logical `AND` operation. # Corresponds to the JSON property `userSegment` # @return [Google::Apis::AnalyticsreportingV4::SegmentDefinition] attr_accessor :user_segment def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @session_segment = args[:session_segment] if args.key?(:session_segment) @name = args[:name] if args.key?(:name) @user_segment = args[:user_segment] if args.key?(:user_segment) end end # A Simple segment conditions consist of one or more dimension/metric # conditions that can be combined. class SimpleSegment include Google::Apis::Core::Hashable # A list of segment filters groups which are combined with logical `AND` # operator. # Corresponds to the JSON property `orFiltersForSegment` # @return [Array] attr_accessor :or_filters_for_segment def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @or_filters_for_segment = args[:or_filters_for_segment] if args.key?(:or_filters_for_segment) end end # Column headers. class ColumnHeader include Google::Apis::Core::Hashable # The headers for the metrics. # Corresponds to the JSON property `metricHeader` # @return [Google::Apis::AnalyticsreportingV4::MetricHeader] attr_accessor :metric_header # The dimension names in the response. # Corresponds to the JSON property `dimensions` # @return [Array] attr_accessor :dimensions def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @metric_header = args[:metric_header] if args.key?(:metric_header) @dimensions = args[:dimensions] if args.key?(:dimensions) end end # Filter Clause to be used in a segment definition, can be wither a metric or # a dimension filter. class SegmentFilterClause include Google::Apis::Core::Hashable # Matches the complement (`!`) of the filter. # Corresponds to the JSON property `not` # @return [Boolean] attr_accessor :not alias_method :not?, :not # Dimension filter specifies the filtering options on a dimension. # Corresponds to the JSON property `dimensionFilter` # @return [Google::Apis::AnalyticsreportingV4::SegmentDimensionFilter] attr_accessor :dimension_filter # Metric filter to be used in a segment filter clause. # Corresponds to the JSON property `metricFilter` # @return [Google::Apis::AnalyticsreportingV4::SegmentMetricFilter] attr_accessor :metric_filter def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @not = args[:not] if args.key?(:not) @dimension_filter = args[:dimension_filter] if args.key?(:dimension_filter) @metric_filter = args[:metric_filter] if args.key?(:metric_filter) end end # Represents a group of metric filters. # Set the operator value to specify how the filters are logically combined. class MetricFilterClause include Google::Apis::Core::Hashable # The operator for combining multiple metric filters. If unspecified, it is # treated as an `OR`. # Corresponds to the JSON property `operator` # @return [String] attr_accessor :operator # The repeated set of filters. They are logically combined based on the # operator specified. # Corresponds to the JSON property `filters` # @return [Array] attr_accessor :filters def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @operator = args[:operator] if args.key?(:operator) @filters = args[:filters] if args.key?(:filters) end end # Defines a cohort. A cohort is a group of users who share a common # characteristic. For example, all users with the same acquisition date # belong to the same cohort. class Cohort include Google::Apis::Core::Hashable # Type of the cohort. The only supported type as of now is # `FIRST_VISIT_DATE`. If this field is unspecified the cohort is treated # as `FIRST_VISIT_DATE` type cohort. # Corresponds to the JSON property `type` # @return [String] attr_accessor :type # A unique name for the cohort. If not defined name will be auto-generated # with values cohort_[1234...]. # Corresponds to the JSON property `name` # @return [String] attr_accessor :name # A contiguous set of days: startDate, startDate + 1 day, ..., endDate. # The start and end dates are specified in # [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) date format `YYYY-MM-DD`. # Corresponds to the JSON property `dateRange` # @return [Google::Apis::AnalyticsreportingV4::DateRange] attr_accessor :date_range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @type = args[:type] if args.key?(:type) @name = args[:name] if args.key?(:name) @date_range = args[:date_range] if args.key?(:date_range) end end # A row in the report. class ReportRow include Google::Apis::Core::Hashable # List of metrics for each requested DateRange. # Corresponds to the JSON property `metrics` # @return [Array] attr_accessor :metrics # List of requested dimensions. # Corresponds to the JSON property `dimensions` # @return [Array] attr_accessor :dimensions def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @metrics = args[:metrics] if args.key?(:metrics) @dimensions = args[:dimensions] if args.key?(:dimensions) end end # A list of segment filters in the `OR` group are combined with the logical OR # operator. class OrFiltersForSegment include Google::Apis::Core::Hashable # List of segment filters to be combined with a `OR` operator. # Corresponds to the JSON property `segmentFilterClauses` # @return [Array] attr_accessor :segment_filter_clauses def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @segment_filter_clauses = args[:segment_filter_clauses] if args.key?(:segment_filter_clauses) end end # The headers for the metrics. class MetricHeader include Google::Apis::Core::Hashable # Headers for the metrics in the response. # Corresponds to the JSON property `metricHeaderEntries` # @return [Array] attr_accessor :metric_header_entries # Headers for the pivots in the response. # Corresponds to the JSON property `pivotHeaders` # @return [Array] attr_accessor :pivot_headers def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @metric_header_entries = args[:metric_header_entries] if args.key?(:metric_header_entries) @pivot_headers = args[:pivot_headers] if args.key?(:pivot_headers) end end # A group of dimension filters. Set the operator value to specify how # the filters are logically combined. class DimensionFilterClause include Google::Apis::Core::Hashable # The operator for combining multiple dimension filters. If unspecified, it # is treated as an `OR`. # Corresponds to the JSON property `operator` # @return [String] attr_accessor :operator # The repeated set of filters. They are logically combined based on the # operator specified. # Corresponds to the JSON property `filters` # @return [Array] attr_accessor :filters def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @operator = args[:operator] if args.key?(:operator) @filters = args[:filters] if args.key?(:filters) end end # The main response class which holds the reports from the Reporting API # `batchGet` call. class GetReportsResponse include Google::Apis::Core::Hashable # Responses corresponding to each of the request. # Corresponds to the JSON property `reports` # @return [Array] attr_accessor :reports def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @reports = args[:reports] if args.key?(:reports) end end # Sequence conditions consist of one or more steps, where each step is defined # by one or more dimension/metric conditions. Multiple steps can be combined # with special sequence operators. class SequenceSegment include Google::Apis::Core::Hashable # If set, first step condition must match the first hit of the visitor (in # the date range). # Corresponds to the JSON property `firstStepShouldMatchFirstHit` # @return [Boolean] attr_accessor :first_step_should_match_first_hit alias_method :first_step_should_match_first_hit?, :first_step_should_match_first_hit # The list of steps in the sequence. # Corresponds to the JSON property `segmentSequenceSteps` # @return [Array] attr_accessor :segment_sequence_steps def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @first_step_should_match_first_hit = args[:first_step_should_match_first_hit] if args.key?(:first_step_should_match_first_hit) @segment_sequence_steps = args[:segment_sequence_steps] if args.key?(:segment_sequence_steps) end end # Metric filter to be used in a segment filter clause. class SegmentMetricFilter include Google::Apis::Core::Hashable # The metric that will be filtered on. A `metricFilter` must contain a # metric name. # Corresponds to the JSON property `metricName` # @return [String] attr_accessor :metric_name # Scope for a metric defines the level at which that metric is defined. The # specified metric scope must be equal to or greater than its primary scope # as defined in the data model. The primary scope is defined by if the # segment is selecting users or sessions. # Corresponds to the JSON property `scope` # @return [String] attr_accessor :scope # Max comparison value is only used for `BETWEEN` operator. # Corresponds to the JSON property `maxComparisonValue` # @return [String] attr_accessor :max_comparison_value # The value to compare against. If the operator is `BETWEEN`, this value is # treated as minimum comparison value. # Corresponds to the JSON property `comparisonValue` # @return [String] attr_accessor :comparison_value # Specifies is the operation to perform to compare the metric. The default # is `EQUAL`. # Corresponds to the JSON property `operator` # @return [String] attr_accessor :operator def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @metric_name = args[:metric_name] if args.key?(:metric_name) @scope = args[:scope] if args.key?(:scope) @max_comparison_value = args[:max_comparison_value] if args.key?(:max_comparison_value) @comparison_value = args[:comparison_value] if args.key?(:comparison_value) @operator = args[:operator] if args.key?(:operator) end end # Used to return a list of metrics for a single DateRange / dimension # combination class DateRangeValues include Google::Apis::Core::Hashable # Each value corresponds to each Metric in the request. # Corresponds to the JSON property `values` # @return [Array] attr_accessor :values # The values of each pivot region. # Corresponds to the JSON property `pivotValueRegions` # @return [Array] attr_accessor :pivot_value_regions def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @values = args[:values] if args.key?(:values) @pivot_value_regions = args[:pivot_value_regions] if args.key?(:pivot_value_regions) end end # Defines a cohort group. # For example: # "cohortGroup": ` # "cohorts": [` # "name": "cohort 1", # "type": "FIRST_VISIT_DATE", # "dateRange": ` "startDate": "2015-08-01", "endDate": "2015-08-01" ` # `,` # "name": "cohort 2" # "type": "FIRST_VISIT_DATE" # "dateRange": ` "startDate": "2015-07-01", "endDate": "2015-07-01" ` # `] # ` class CohortGroup include Google::Apis::Core::Hashable # The definition for the cohort. # Corresponds to the JSON property `cohorts` # @return [Array] attr_accessor :cohorts # Enable Life Time Value (LTV). LTV measures lifetime value for users # acquired through different channels. # Please see: # [Cohort Analysis](https://support.google.com/analytics/answer/6074676) and # [Lifetime Value](https://support.google.com/analytics/answer/6182550) # If the value of lifetimeValue is false: # - The metric values are similar to the values in the web interface cohort # report. # - The cohort definition date ranges must be aligned to the calendar week # and month. i.e. while requesting `ga:cohortNthWeek` the `startDate` in # the cohort definition should be a Sunday and the `endDate` should be the # following Saturday, and for `ga:cohortNthMonth`, the `startDate` # should be the 1st of the month and `endDate` should be the last day # of the month. # When the lifetimeValue is true: # - The metric values will correspond to the values in the web interface # LifeTime value report. # - The Lifetime Value report shows you how user value (Revenue) and # engagement (Appviews, Goal Completions, Sessions, and Session Duration) # grow during the 90 days after a user is acquired. # - The metrics are calculated as a cumulative average per user per the time # increment. # - The cohort definition date ranges need not be aligned to the calendar # week and month boundaries. # - The `viewId` must be an # [app view ID](https://support.google.com/analytics/answer/2649553# # WebVersusAppViews) # Corresponds to the JSON property `lifetimeValue` # @return [Boolean] attr_accessor :lifetime_value alias_method :lifetime_value?, :lifetime_value def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @cohorts = args[:cohorts] if args.key?(:cohorts) @lifetime_value = args[:lifetime_value] if args.key?(:lifetime_value) end end # The batch request containing multiple report request. class GetReportsRequest include Google::Apis::Core::Hashable # Requests, each request will have a separate response. # There can be a maximum of 5 requests. All requests should have the same # `dateRanges`, `viewId`, `segments`, `samplingLevel`, and `cohortGroup`. # Corresponds to the JSON property `reportRequests` # @return [Array] attr_accessor :report_requests def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @report_requests = args[:report_requests] if args.key?(:report_requests) end end # The Pivot describes the pivot section in the request. # The Pivot helps rearrange the information in the table for certain reports # by pivoting your data on a second dimension. class Pivot include Google::Apis::Core::Hashable # Specifies the maximum number of groups to return. # The default value is 10, also the maximum value is 1,000. # Corresponds to the JSON property `maxGroupCount` # @return [Fixnum] attr_accessor :max_group_count # If k metrics were requested, then the response will contain some # data-dependent multiple of k columns in the report. E.g., if you pivoted # on the dimension `ga:browser` then you'd get k columns for "Firefox", k # columns for "IE", k columns for "Chrome", etc. The ordering of the groups # of columns is determined by descending order of "total" for the first of # the k values. Ties are broken by lexicographic ordering of the first # pivot dimension, then lexicographic ordering of the second pivot # dimension, and so on. E.g., if the totals for the first value for # Firefox, IE, and Chrome were 8, 2, 8, respectively, the order of columns # would be Chrome, Firefox, IE. # The following let you choose which of the groups of k columns are # included in the response. # Corresponds to the JSON property `startGroup` # @return [Fixnum] attr_accessor :start_group # The pivot metrics. Pivot metrics are part of the # restriction on total number of metrics allowed in the request. # Corresponds to the JSON property `metrics` # @return [Array] attr_accessor :metrics # A list of dimensions to show as pivot columns. A Pivot can have a maximum # of 4 dimensions. Pivot dimensions are part of the restriction on the # total number of dimensions allowed in the request. # Corresponds to the JSON property `dimensions` # @return [Array] attr_accessor :dimensions # DimensionFilterClauses are logically combined with an `AND` operator: only # data that is included by all these DimensionFilterClauses contributes to # the values in this pivot region. Dimension filters can be used to restrict # the columns shown in the pivot region. For example if you have # `ga:browser` as the requested dimension in the pivot region, and you # specify key filters to restrict `ga:browser` to only "IE" or "Firefox", # then only those two browsers would show up as columns. # Corresponds to the JSON property `dimensionFilterClauses` # @return [Array] attr_accessor :dimension_filter_clauses def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @max_group_count = args[:max_group_count] if args.key?(:max_group_count) @start_group = args[:start_group] if args.key?(:start_group) @metrics = args[:metrics] if args.key?(:metrics) @dimensions = args[:dimensions] if args.key?(:dimensions) @dimension_filter_clauses = args[:dimension_filter_clauses] if args.key?(:dimension_filter_clauses) end end end end end