{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "#/components/schemas/RunReportRequest",
  "title": "RunReportRequest",
  "description": "The request to generate a report.",
  "properties": {
    "cohortSpec": {
      "$ref": "#/components/schemas/CohortSpec",
      "description": "Cohort group associated with this request. If there is a cohort group in the request the 'cohort' dimension must be present."
    },
    "currencyCode": {
      "description": "A currency code in ISO4217 format, such as \"AED\", \"USD\", \"JPY\". If the field is empty, the report uses the property's default currency.",
      "type": "string"
    },
    "dateRanges": {
      "description": "Date ranges of data to read. If multiple date ranges are requested, each response row will contain a zero based date range index. If two date ranges overlap, the event data for the overlapping days is included in the response rows for both date ranges. In a cohort request, this `dateRanges` must be unspecified.",
      "items": {
        "$ref": "#/components/schemas/DateRange"
      },
      "type": "array"
    },
    "dimensionFilter": {
      "$ref": "#/components/schemas/FilterExpression",
      "description": "Dimension filters let you ask for only specific dimension values in the report. To learn more, see [Fundamentals of Dimension Filters](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#dimension_filters) for examples. Metrics cannot be used in this filter."
    },
    "dimensions": {
      "description": "The dimensions requested and displayed.",
      "items": {
        "$ref": "#/components/schemas/Dimension"
      },
      "type": "array"
    },
    "keepEmptyRows": {
      "description": "If false or unspecified, each row with all metrics equal to 0 will not be returned. If true, these rows will be returned if they are not separately removed by a filter. Regardless of this `keep_empty_rows` setting, only data recorded by the Google Analytics (GA4) property can be displayed in a report. For example if a property never logs a `purchase` event, then a query for the `eventName` dimension and `eventCount` metric will not have a row eventName: \"purchase\" and eventCount: 0.",
      "type": "boolean"
    },
    "limit": {
      "description": "The number of rows to return. If unspecified, 10,000 rows are returned. The API returns a maximum of 250,000 rows per request, no matter how many you ask for. `limit` must be positive. The API can also return fewer rows than the requested `limit`, if there aren't as many dimension values as the `limit`. For instance, there are fewer than 300 possible values for the dimension `country`, so when reporting on only `country`, you can't get more than 300 rows, even if you set `limit` to a higher value. To learn more about this pagination parameter, see [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination).",
      "format": "int64",
      "type": "string"
    },
    "metricAggregations": {
      "description": "Aggregation of metrics. Aggregated metric values will be shown in rows where the dimension_values are set to \"RESERVED_(MetricAggregation)\".",
      "items": {
        "enum": [
          "METRIC_AGGREGATION_UNSPECIFIED",
          "TOTAL",
          "MINIMUM",
          "MAXIMUM",
          "COUNT"
        ],
        "type": "string"
      },
      "type": "array"
    },
    "metricFilter": {
      "$ref": "#/components/schemas/FilterExpression",
      "description": "The filter clause of metrics. Applied after aggregating the report's rows, similar to SQL having-clause. Dimensions cannot be used in this filter."
    },
    "metrics": {
      "description": "The metrics requested and displayed.",
      "items": {
        "$ref": "#/components/schemas/Metric"
      },
      "type": "array"
    },
    "offset": {
      "description": "The row count of the start row. The first row is counted as row 0. When paging, the first request does not specify offset; or equivalently, sets offset to 0; the first request returns the first `limit` of rows. The second request sets offset to the `limit` of the first request; the second request returns the second `limit` of rows. To learn more about this pagination parameter, see [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination).",
      "format": "int64",
      "type": "string"
    },
    "orderBys": {
      "description": "Specifies how rows are ordered in the response.",
      "items": {
        "$ref": "#/components/schemas/OrderBy"
      },
      "type": "array"
    },
    "property": {
      "description": "A Google Analytics GA4 property identifier whose events are tracked. Specified in the URL path and not the body. To learn more, see [where to find your Property ID](https://developers.google.com/analytics/devguides/reporting/data/v1/property-id). Within a batch request, this property should either be unspecified or consistent with the batch-level property. Example: properties/1234",
      "type": "string"
    },
    "returnPropertyQuota": {
      "description": "Toggles whether to return the current state of this Analytics Property's quota. Quota is returned in [PropertyQuota](#PropertyQuota).",
      "type": "boolean"
    }
  },
  "type": "object"
}