> ## Documentation Index
> Fetch the complete documentation index at: https://confidence.spotify.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List Metric

> List metrics. The metrics are in no particular order.



## OpenAPI

````yaml /api/metrics/api/metric.openapi.json get /v1/metrics
openapi: 3.1.0
info:
  title: Confidence Metric API
  version: 1.0.0
  description: API documentation for metric
servers: []
security: []
paths:
  /v1/metrics:
    get:
      summary: List Metric
      description: List metrics. The metrics are in no particular order.
      operationId: Metric.list
      parameters:
        - name: pageSize
          in: query
          required: false
          description: The maximum number of metrics to fetch.
          schema:
            type: object
        - name: pageToken
          in: query
          required: false
          description: Token used for pagination.
          schema:
            type: string
        - name: filter
          in: query
          required: false
          description: |-
            Filtering for metrics, follows the lucene query string format for
             example 'name: "metrics/abc"', see Metric type for available fields.
          schema:
            type: string
        - name: showDeleted
          in: query
          required: false
          description: If deleted metrics should be included.
          schema:
            type: boolean
        - name: orderBy
          in: query
          required: false
          description: >-
            Provide fields and direction to sort by. Will always tiebreak on
            name.
             Format: {"<"}field_0{">"}:{"<"}direction{">"}, {"<"}field_1{">"}:{"<"}direction{">"}
             Example: name:desc,age:asc
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  metrics:
                    type: array
                    items:
                      $ref: '#/components/schemas/confidence.metrics.v1.Metric'
                    description: >-
                      [Metric](/api-reference/schemas/metric): List of matching
                      metrics.
                  nextPageToken:
                    type: string
                    description: Token to fetch the next page, empty if no more pages.
                required:
                  - metrics
      security:
        - admin: []
      servers:
        - url: https://metrics.eu.confidence.dev
        - url: https://metrics.us.confidence.dev
        - url: https://metrics.confidence.dev
components:
  schemas:
    confidence.metrics.v1.Metric:
      title: Metric
      type: object
      description: >-
        A general description of how to aggregate a measurement from a fact
        table
         across entities.
      properties:
        name:
          type: string
          description: |-
            Unique identifier of the metric.
             For example: `metrics/0smva5nxuhv4yts6paxt`
        displayName:
          type: string
          description: Human friendly name of the metric.
        description:
          type: string
          description: Description of the metric.
        entity:
          type: string
          description: Resource name of the entity that the metric is defined on.
        factTable:
          type: string
          description: Resource name of the fact table that the metric is based on.
        aggregationWindow:
          type: object
          description: >-
            Size of the window that the measurements are aggregated within the
            user.
        exposureOffset:
          type: object
          description: >-
            Offset relative to the first exposure that measurements should start
            to be
             collected.
        typeSpec:
          type: object
          properties:
            averageMetricSpec:
              type: object
              properties:
                measurement:
                  type: object
                  properties:
                    name:
                      type: string
                      description: Name of the column.
                    type:
                      type: string
                      enum:
                        - COLUMN_TYPE_UNSPECIFIED
                        - COLUMN_TYPE_STRING
                        - COLUMN_TYPE_INT32
                        - COLUMN_TYPE_INT64
                        - COLUMN_TYPE_DOUBLE
                        - COLUMN_TYPE_BOOLEAN
                        - COLUMN_TYPE_DATE
                        - COLUMN_TYPE_TIMESTAMP
                        - COLUMN_TYPE_BYTES
                        - COLUMN_TYPE_TIMESTAMP_WITHOUT_TIMEZONE
                        - COLUMN_TYPE_DECIMAL
                        - COLUMN_TYPE_HLL_SKETCH
                      description: >-
                        Type of the column, will be converted to a data
                        warehouse-specific type.
                    repeated:
                      type: boolean
                      description: Determined whether the column is an array.
                  required:
                    - name
                  description: A mapping to the column that will be aggregated.
                aggregation:
                  type: object
                  properties:
                    type:
                      type: string
                      enum:
                        - AGGREGATION_TYPE_UNSPECIFIED
                        - AGGREGATION_TYPE_SUM
                        - AGGREGATION_TYPE_AVG
                        - AGGREGATION_TYPE_MAX
                        - AGGREGATION_TYPE_MIN
                        - AGGREGATION_TYPE_COUNT
                        - AGGREGATION_TYPE_COUNT_DISTINCT
                        - AGGREGATION_TYPE_APPROX_COUNT_DISTINCT
                      description: The operator of the aggregation, like sum or max.
                    threshold:
                      type: object
                      properties:
                        threshold:
                          type: object
                          properties:
                            value:
                              type: string
                              description: |-
                                The decimal value, as a string.

                                 The string representation consists of an optional sign, `+` (`U+002B`)
                                 or `-` (`U+002D`), followed by a sequence of zero or more decimal digits
                                 ("the integer"), optionally followed by a fraction, optionally followed
                                 by an exponent.

                                 The fraction consists of a decimal point followed by zero or more decimal
                                 digits. The string must contain at least one digit in either the integer
                                 or the fraction. The number formed by the sign, the integer and the
                                 fraction is referred to as the significand.

                                 The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`)
                                 followed by one or more decimal digits.

                                 Services **should** normalize decimal values before storing them by:

                                   - Removing an explicitly-provided `+` sign (`+2.5` -{">"} `2.5`).
                                   - Replacing a zero-length integer value with `0` (`.5` -{">"} `0.5`).
                                   - Coercing the exponent character to lower-case (`2.5E8` -{">"} `2.5e8`).
                                   - Removing an explicitly-provided zero exponent (`2.5e0` -{">"} `2.5`).

                                 Services **may** perform additional normalization based on its own needs
                                 and the internal decimal implementation selected, such as shifting the
                                 decimal point and exponent value together (example: `2.5e-1` {"<"}-{">"} `0.25`).
                                 Additionally, services **may** preserve trailing zeroes in the fraction
                                 to indicate increased precision, but are not required to do so.

                                 Note that only the `.` character is supported to divide the integer
                                 and the fraction; `,` **should not** be supported regardless of locale.
                                 Additionally, thousand separators **should not** be supported. If a
                                 service does support them, values **must** be normalized.

                                 The ENBF grammar is:

                                     DecimalString =
                                       [Sign] Significand [Exponent];

                                     Sign = '+' | '-';

                                     Significand =
                                       Digits ['.'] [Digits] | [Digits] '.' Digits;

                                     Exponent = ('e' | 'E') [Sign] Digits;

                                     Digits = \{ '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };

                                 Services **should** clearly document the range of supported values, the
                                 maximum supported precision (total number of digits), and, if applicable,
                                 the scale (number of digits after the decimal point), as well as how it
                                 behaves when receiving out-of-bounds values.

                                 Services **may** choose to accept values passed as input even when the
                                 value has a higher precision or scale than the service supports, and
                                 **should** round the value to fit the supported scale. Alternatively, the
                                 service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC)
                                 if precision would be lost.

                                 Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in
                                 gRPC) if the service receives a value outside of the supported range.
                          description: Threshold.
                        direction:
                          type: string
                          enum:
                            - AGGREGATION_THRESHOLD_DIRECTION_UNSPECIFIED
                            - AGGREGATION_THRESHOLD_DIRECTION_GT
                            - AGGREGATION_THRESHOLD_DIRECTION_GTE
                            - AGGREGATION_THRESHOLD_DIRECTION_LT
                            - AGGREGATION_THRESHOLD_DIRECTION_LTE
                            - AGGREGATION_THRESHOLD_DIRECTION_EQ
                          description: The operator {"<"}, ≤, =, {">"}, or ≥.
                      required:
                        - threshold
                        - direction
                      description: >-
                        Converts the measurement into a boolean value after the
                        within-entity
                         aggregation.
                    cap:
                      type: object
                      properties:
                        min:
                          type: object
                          properties:
                            value:
                              type: string
                              description: |-
                                The decimal value, as a string.

                                 The string representation consists of an optional sign, `+` (`U+002B`)
                                 or `-` (`U+002D`), followed by a sequence of zero or more decimal digits
                                 ("the integer"), optionally followed by a fraction, optionally followed
                                 by an exponent.

                                 The fraction consists of a decimal point followed by zero or more decimal
                                 digits. The string must contain at least one digit in either the integer
                                 or the fraction. The number formed by the sign, the integer and the
                                 fraction is referred to as the significand.

                                 The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`)
                                 followed by one or more decimal digits.

                                 Services **should** normalize decimal values before storing them by:

                                   - Removing an explicitly-provided `+` sign (`+2.5` -{">"} `2.5`).
                                   - Replacing a zero-length integer value with `0` (`.5` -{">"} `0.5`).
                                   - Coercing the exponent character to lower-case (`2.5E8` -{">"} `2.5e8`).
                                   - Removing an explicitly-provided zero exponent (`2.5e0` -{">"} `2.5`).

                                 Services **may** perform additional normalization based on its own needs
                                 and the internal decimal implementation selected, such as shifting the
                                 decimal point and exponent value together (example: `2.5e-1` {"<"}-{">"} `0.25`).
                                 Additionally, services **may** preserve trailing zeroes in the fraction
                                 to indicate increased precision, but are not required to do so.

                                 Note that only the `.` character is supported to divide the integer
                                 and the fraction; `,` **should not** be supported regardless of locale.
                                 Additionally, thousand separators **should not** be supported. If a
                                 service does support them, values **must** be normalized.

                                 The ENBF grammar is:

                                     DecimalString =
                                       [Sign] Significand [Exponent];

                                     Sign = '+' | '-';

                                     Significand =
                                       Digits ['.'] [Digits] | [Digits] '.' Digits;

                                     Exponent = ('e' | 'E') [Sign] Digits;

                                     Digits = \{ '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };

                                 Services **should** clearly document the range of supported values, the
                                 maximum supported precision (total number of digits), and, if applicable,
                                 the scale (number of digits after the decimal point), as well as how it
                                 behaves when receiving out-of-bounds values.

                                 Services **may** choose to accept values passed as input even when the
                                 value has a higher precision or scale than the service supports, and
                                 **should** round the value to fit the supported scale. Alternatively, the
                                 service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC)
                                 if precision would be lost.

                                 Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in
                                 gRPC) if the service receives a value outside of the supported range.
                          description: Values {"<"} min will be replaced with min.
                        max:
                          type: object
                          properties:
                            value:
                              type: string
                              description: |-
                                The decimal value, as a string.

                                 The string representation consists of an optional sign, `+` (`U+002B`)
                                 or `-` (`U+002D`), followed by a sequence of zero or more decimal digits
                                 ("the integer"), optionally followed by a fraction, optionally followed
                                 by an exponent.

                                 The fraction consists of a decimal point followed by zero or more decimal
                                 digits. The string must contain at least one digit in either the integer
                                 or the fraction. The number formed by the sign, the integer and the
                                 fraction is referred to as the significand.

                                 The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`)
                                 followed by one or more decimal digits.

                                 Services **should** normalize decimal values before storing them by:

                                   - Removing an explicitly-provided `+` sign (`+2.5` -{">"} `2.5`).
                                   - Replacing a zero-length integer value with `0` (`.5` -{">"} `0.5`).
                                   - Coercing the exponent character to lower-case (`2.5E8` -{">"} `2.5e8`).
                                   - Removing an explicitly-provided zero exponent (`2.5e0` -{">"} `2.5`).

                                 Services **may** perform additional normalization based on its own needs
                                 and the internal decimal implementation selected, such as shifting the
                                 decimal point and exponent value together (example: `2.5e-1` {"<"}-{">"} `0.25`).
                                 Additionally, services **may** preserve trailing zeroes in the fraction
                                 to indicate increased precision, but are not required to do so.

                                 Note that only the `.` character is supported to divide the integer
                                 and the fraction; `,` **should not** be supported regardless of locale.
                                 Additionally, thousand separators **should not** be supported. If a
                                 service does support them, values **must** be normalized.

                                 The ENBF grammar is:

                                     DecimalString =
                                       [Sign] Significand [Exponent];

                                     Sign = '+' | '-';

                                     Significand =
                                       Digits ['.'] [Digits] | [Digits] '.' Digits;

                                     Exponent = ('e' | 'E') [Sign] Digits;

                                     Digits = \{ '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };

                                 Services **should** clearly document the range of supported values, the
                                 maximum supported precision (total number of digits), and, if applicable,
                                 the scale (number of digits after the decimal point), as well as how it
                                 behaves when receiving out-of-bounds values.

                                 Services **may** choose to accept values passed as input even when the
                                 value has a higher precision or scale than the service supports, and
                                 **should** round the value to fit the supported scale. Alternatively, the
                                 service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC)
                                 if precision would be lost.

                                 Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in
                                 gRPC) if the service receives a value outside of the supported range.
                          description: Values {">"} max will be replaced with max.
                      description: Cap the values after aggregation.
                  required:
                    - type
                  description: The aggregation that will occur within the entity.
              required:
                - aggregation
              description: A metric that is an average across entities.
            ratioMetricSpec:
              type: object
              properties:
                numerator:
                  type: object
                  properties:
                    name:
                      type: string
                      description: Name of the column.
                    type:
                      type: string
                      enum:
                        - COLUMN_TYPE_UNSPECIFIED
                        - COLUMN_TYPE_STRING
                        - COLUMN_TYPE_INT32
                        - COLUMN_TYPE_INT64
                        - COLUMN_TYPE_DOUBLE
                        - COLUMN_TYPE_BOOLEAN
                        - COLUMN_TYPE_DATE
                        - COLUMN_TYPE_TIMESTAMP
                        - COLUMN_TYPE_BYTES
                        - COLUMN_TYPE_TIMESTAMP_WITHOUT_TIMEZONE
                        - COLUMN_TYPE_DECIMAL
                        - COLUMN_TYPE_HLL_SKETCH
                      description: >-
                        Type of the column, will be converted to a data
                        warehouse-specific type.
                    repeated:
                      type: boolean
                      description: Determined whether the column is an array.
                  required:
                    - name
                  description: A mapping to the column that represents the numerator.
                numeratorAggregation:
                  type: object
                  properties:
                    type:
                      type: string
                      enum:
                        - AGGREGATION_TYPE_UNSPECIFIED
                        - AGGREGATION_TYPE_SUM
                        - AGGREGATION_TYPE_AVG
                        - AGGREGATION_TYPE_MAX
                        - AGGREGATION_TYPE_MIN
                        - AGGREGATION_TYPE_COUNT
                        - AGGREGATION_TYPE_COUNT_DISTINCT
                        - AGGREGATION_TYPE_APPROX_COUNT_DISTINCT
                      description: The operator of the aggregation, like sum or max.
                    threshold:
                      type: object
                      properties:
                        threshold:
                          type: object
                          properties:
                            value:
                              type: string
                              description: |-
                                The decimal value, as a string.

                                 The string representation consists of an optional sign, `+` (`U+002B`)
                                 or `-` (`U+002D`), followed by a sequence of zero or more decimal digits
                                 ("the integer"), optionally followed by a fraction, optionally followed
                                 by an exponent.

                                 The fraction consists of a decimal point followed by zero or more decimal
                                 digits. The string must contain at least one digit in either the integer
                                 or the fraction. The number formed by the sign, the integer and the
                                 fraction is referred to as the significand.

                                 The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`)
                                 followed by one or more decimal digits.

                                 Services **should** normalize decimal values before storing them by:

                                   - Removing an explicitly-provided `+` sign (`+2.5` -{">"} `2.5`).
                                   - Replacing a zero-length integer value with `0` (`.5` -{">"} `0.5`).
                                   - Coercing the exponent character to lower-case (`2.5E8` -{">"} `2.5e8`).
                                   - Removing an explicitly-provided zero exponent (`2.5e0` -{">"} `2.5`).

                                 Services **may** perform additional normalization based on its own needs
                                 and the internal decimal implementation selected, such as shifting the
                                 decimal point and exponent value together (example: `2.5e-1` {"<"}-{">"} `0.25`).
                                 Additionally, services **may** preserve trailing zeroes in the fraction
                                 to indicate increased precision, but are not required to do so.

                                 Note that only the `.` character is supported to divide the integer
                                 and the fraction; `,` **should not** be supported regardless of locale.
                                 Additionally, thousand separators **should not** be supported. If a
                                 service does support them, values **must** be normalized.

                                 The ENBF grammar is:

                                     DecimalString =
                                       [Sign] Significand [Exponent];

                                     Sign = '+' | '-';

                                     Significand =
                                       Digits ['.'] [Digits] | [Digits] '.' Digits;

                                     Exponent = ('e' | 'E') [Sign] Digits;

                                     Digits = \{ '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };

                                 Services **should** clearly document the range of supported values, the
                                 maximum supported precision (total number of digits), and, if applicable,
                                 the scale (number of digits after the decimal point), as well as how it
                                 behaves when receiving out-of-bounds values.

                                 Services **may** choose to accept values passed as input even when the
                                 value has a higher precision or scale than the service supports, and
                                 **should** round the value to fit the supported scale. Alternatively, the
                                 service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC)
                                 if precision would be lost.

                                 Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in
                                 gRPC) if the service receives a value outside of the supported range.
                          description: Threshold.
                        direction:
                          type: string
                          enum:
                            - AGGREGATION_THRESHOLD_DIRECTION_UNSPECIFIED
                            - AGGREGATION_THRESHOLD_DIRECTION_GT
                            - AGGREGATION_THRESHOLD_DIRECTION_GTE
                            - AGGREGATION_THRESHOLD_DIRECTION_LT
                            - AGGREGATION_THRESHOLD_DIRECTION_LTE
                            - AGGREGATION_THRESHOLD_DIRECTION_EQ
                          description: The operator {"<"}, ≤, =, {">"}, or ≥.
                      required:
                        - threshold
                        - direction
                      description: >-
                        Converts the measurement into a boolean value after the
                        within-entity
                         aggregation.
                    cap:
                      type: object
                      properties:
                        min:
                          type: object
                          properties:
                            value:
                              type: string
                              description: |-
                                The decimal value, as a string.

                                 The string representation consists of an optional sign, `+` (`U+002B`)
                                 or `-` (`U+002D`), followed by a sequence of zero or more decimal digits
                                 ("the integer"), optionally followed by a fraction, optionally followed
                                 by an exponent.

                                 The fraction consists of a decimal point followed by zero or more decimal
                                 digits. The string must contain at least one digit in either the integer
                                 or the fraction. The number formed by the sign, the integer and the
                                 fraction is referred to as the significand.

                                 The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`)
                                 followed by one or more decimal digits.

                                 Services **should** normalize decimal values before storing them by:

                                   - Removing an explicitly-provided `+` sign (`+2.5` -{">"} `2.5`).
                                   - Replacing a zero-length integer value with `0` (`.5` -{">"} `0.5`).
                                   - Coercing the exponent character to lower-case (`2.5E8` -{">"} `2.5e8`).
                                   - Removing an explicitly-provided zero exponent (`2.5e0` -{">"} `2.5`).

                                 Services **may** perform additional normalization based on its own needs
                                 and the internal decimal implementation selected, such as shifting the
                                 decimal point and exponent value together (example: `2.5e-1` {"<"}-{">"} `0.25`).
                                 Additionally, services **may** preserve trailing zeroes in the fraction
                                 to indicate increased precision, but are not required to do so.

                                 Note that only the `.` character is supported to divide the integer
                                 and the fraction; `,` **should not** be supported regardless of locale.
                                 Additionally, thousand separators **should not** be supported. If a
                                 service does support them, values **must** be normalized.

                                 The ENBF grammar is:

                                     DecimalString =
                                       [Sign] Significand [Exponent];

                                     Sign = '+' | '-';

                                     Significand =
                                       Digits ['.'] [Digits] | [Digits] '.' Digits;

                                     Exponent = ('e' | 'E') [Sign] Digits;

                                     Digits = \{ '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };

                                 Services **should** clearly document the range of supported values, the
                                 maximum supported precision (total number of digits), and, if applicable,
                                 the scale (number of digits after the decimal point), as well as how it
                                 behaves when receiving out-of-bounds values.

                                 Services **may** choose to accept values passed as input even when the
                                 value has a higher precision or scale than the service supports, and
                                 **should** round the value to fit the supported scale. Alternatively, the
                                 service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC)
                                 if precision would be lost.

                                 Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in
                                 gRPC) if the service receives a value outside of the supported range.
                          description: Values {"<"} min will be replaced with min.
                        max:
                          type: object
                          properties:
                            value:
                              type: string
                              description: |-
                                The decimal value, as a string.

                                 The string representation consists of an optional sign, `+` (`U+002B`)
                                 or `-` (`U+002D`), followed by a sequence of zero or more decimal digits
                                 ("the integer"), optionally followed by a fraction, optionally followed
                                 by an exponent.

                                 The fraction consists of a decimal point followed by zero or more decimal
                                 digits. The string must contain at least one digit in either the integer
                                 or the fraction. The number formed by the sign, the integer and the
                                 fraction is referred to as the significand.

                                 The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`)
                                 followed by one or more decimal digits.

                                 Services **should** normalize decimal values before storing them by:

                                   - Removing an explicitly-provided `+` sign (`+2.5` -{">"} `2.5`).
                                   - Replacing a zero-length integer value with `0` (`.5` -{">"} `0.5`).
                                   - Coercing the exponent character to lower-case (`2.5E8` -{">"} `2.5e8`).
                                   - Removing an explicitly-provided zero exponent (`2.5e0` -{">"} `2.5`).

                                 Services **may** perform additional normalization based on its own needs
                                 and the internal decimal implementation selected, such as shifting the
                                 decimal point and exponent value together (example: `2.5e-1` {"<"}-{">"} `0.25`).
                                 Additionally, services **may** preserve trailing zeroes in the fraction
                                 to indicate increased precision, but are not required to do so.

                                 Note that only the `.` character is supported to divide the integer
                                 and the fraction; `,` **should not** be supported regardless of locale.
                                 Additionally, thousand separators **should not** be supported. If a
                                 service does support them, values **must** be normalized.

                                 The ENBF grammar is:

                                     DecimalString =
                                       [Sign] Significand [Exponent];

                                     Sign = '+' | '-';

                                     Significand =
                                       Digits ['.'] [Digits] | [Digits] '.' Digits;

                                     Exponent = ('e' | 'E') [Sign] Digits;

                                     Digits = \{ '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };

                                 Services **should** clearly document the range of supported values, the
                                 maximum supported precision (total number of digits), and, if applicable,
                                 the scale (number of digits after the decimal point), as well as how it
                                 behaves when receiving out-of-bounds values.

                                 Services **may** choose to accept values passed as input even when the
                                 value has a higher precision or scale than the service supports, and
                                 **should** round the value to fit the supported scale. Alternatively, the
                                 service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC)
                                 if precision would be lost.

                                 Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in
                                 gRPC) if the service receives a value outside of the supported range.
                          description: Values {">"} max will be replaced with max.
                      description: Cap the values after aggregation.
                  required:
                    - type
                  description: Within-entity aggregation for the numerator.
                denominator:
                  type: object
                  properties:
                    name:
                      type: string
                      description: Name of the column.
                    type:
                      type: string
                      enum:
                        - COLUMN_TYPE_UNSPECIFIED
                        - COLUMN_TYPE_STRING
                        - COLUMN_TYPE_INT32
                        - COLUMN_TYPE_INT64
                        - COLUMN_TYPE_DOUBLE
                        - COLUMN_TYPE_BOOLEAN
                        - COLUMN_TYPE_DATE
                        - COLUMN_TYPE_TIMESTAMP
                        - COLUMN_TYPE_BYTES
                        - COLUMN_TYPE_TIMESTAMP_WITHOUT_TIMEZONE
                        - COLUMN_TYPE_DECIMAL
                        - COLUMN_TYPE_HLL_SKETCH
                      description: >-
                        Type of the column, will be converted to a data
                        warehouse-specific type.
                    repeated:
                      type: boolean
                      description: Determined whether the column is an array.
                  required:
                    - name
                  description: Denominator column that will be aggregated.
                denominatorAggregation:
                  type: object
                  properties:
                    type:
                      type: string
                      enum:
                        - AGGREGATION_TYPE_UNSPECIFIED
                        - AGGREGATION_TYPE_SUM
                        - AGGREGATION_TYPE_AVG
                        - AGGREGATION_TYPE_MAX
                        - AGGREGATION_TYPE_MIN
                        - AGGREGATION_TYPE_COUNT
                        - AGGREGATION_TYPE_COUNT_DISTINCT
                        - AGGREGATION_TYPE_APPROX_COUNT_DISTINCT
                      description: The operator of the aggregation, like sum or max.
                    threshold:
                      type: object
                      properties:
                        threshold:
                          type: object
                          properties:
                            value:
                              type: string
                              description: |-
                                The decimal value, as a string.

                                 The string representation consists of an optional sign, `+` (`U+002B`)
                                 or `-` (`U+002D`), followed by a sequence of zero or more decimal digits
                                 ("the integer"), optionally followed by a fraction, optionally followed
                                 by an exponent.

                                 The fraction consists of a decimal point followed by zero or more decimal
                                 digits. The string must contain at least one digit in either the integer
                                 or the fraction. The number formed by the sign, the integer and the
                                 fraction is referred to as the significand.

                                 The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`)
                                 followed by one or more decimal digits.

                                 Services **should** normalize decimal values before storing them by:

                                   - Removing an explicitly-provided `+` sign (`+2.5` -{">"} `2.5`).
                                   - Replacing a zero-length integer value with `0` (`.5` -{">"} `0.5`).
                                   - Coercing the exponent character to lower-case (`2.5E8` -{">"} `2.5e8`).
                                   - Removing an explicitly-provided zero exponent (`2.5e0` -{">"} `2.5`).

                                 Services **may** perform additional normalization based on its own needs
                                 and the internal decimal implementation selected, such as shifting the
                                 decimal point and exponent value together (example: `2.5e-1` {"<"}-{">"} `0.25`).
                                 Additionally, services **may** preserve trailing zeroes in the fraction
                                 to indicate increased precision, but are not required to do so.

                                 Note that only the `.` character is supported to divide the integer
                                 and the fraction; `,` **should not** be supported regardless of locale.
                                 Additionally, thousand separators **should not** be supported. If a
                                 service does support them, values **must** be normalized.

                                 The ENBF grammar is:

                                     DecimalString =
                                       [Sign] Significand [Exponent];

                                     Sign = '+' | '-';

                                     Significand =
                                       Digits ['.'] [Digits] | [Digits] '.' Digits;

                                     Exponent = ('e' | 'E') [Sign] Digits;

                                     Digits = \{ '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };

                                 Services **should** clearly document the range of supported values, the
                                 maximum supported precision (total number of digits), and, if applicable,
                                 the scale (number of digits after the decimal point), as well as how it
                                 behaves when receiving out-of-bounds values.

                                 Services **may** choose to accept values passed as input even when the
                                 value has a higher precision or scale than the service supports, and
                                 **should** round the value to fit the supported scale. Alternatively, the
                                 service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC)
                                 if precision would be lost.

                                 Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in
                                 gRPC) if the service receives a value outside of the supported range.
                          description: Threshold.
                        direction:
                          type: string
                          enum:
                            - AGGREGATION_THRESHOLD_DIRECTION_UNSPECIFIED
                            - AGGREGATION_THRESHOLD_DIRECTION_GT
                            - AGGREGATION_THRESHOLD_DIRECTION_GTE
                            - AGGREGATION_THRESHOLD_DIRECTION_LT
                            - AGGREGATION_THRESHOLD_DIRECTION_LTE
                            - AGGREGATION_THRESHOLD_DIRECTION_EQ
                          description: The operator {"<"}, ≤, =, {">"}, or ≥.
                      required:
                        - threshold
                        - direction
                      description: >-
                        Converts the measurement into a boolean value after the
                        within-entity
                         aggregation.
                    cap:
                      type: object
                      properties:
                        min:
                          type: object
                          properties:
                            value:
                              type: string
                              description: |-
                                The decimal value, as a string.

                                 The string representation consists of an optional sign, `+` (`U+002B`)
                                 or `-` (`U+002D`), followed by a sequence of zero or more decimal digits
                                 ("the integer"), optionally followed by a fraction, optionally followed
                                 by an exponent.

                                 The fraction consists of a decimal point followed by zero or more decimal
                                 digits. The string must contain at least one digit in either the integer
                                 or the fraction. The number formed by the sign, the integer and the
                                 fraction is referred to as the significand.

                                 The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`)
                                 followed by one or more decimal digits.

                                 Services **should** normalize decimal values before storing them by:

                                   - Removing an explicitly-provided `+` sign (`+2.5` -{">"} `2.5`).
                                   - Replacing a zero-length integer value with `0` (`.5` -{">"} `0.5`).
                                   - Coercing the exponent character to lower-case (`2.5E8` -{">"} `2.5e8`).
                                   - Removing an explicitly-provided zero exponent (`2.5e0` -{">"} `2.5`).

                                 Services **may** perform additional normalization based on its own needs
                                 and the internal decimal implementation selected, such as shifting the
                                 decimal point and exponent value together (example: `2.5e-1` {"<"}-{">"} `0.25`).
                                 Additionally, services **may** preserve trailing zeroes in the fraction
                                 to indicate increased precision, but are not required to do so.

                                 Note that only the `.` character is supported to divide the integer
                                 and the fraction; `,` **should not** be supported regardless of locale.
                                 Additionally, thousand separators **should not** be supported. If a
                                 service does support them, values **must** be normalized.

                                 The ENBF grammar is:

                                     DecimalString =
                                       [Sign] Significand [Exponent];

                                     Sign = '+' | '-';

                                     Significand =
                                       Digits ['.'] [Digits] | [Digits] '.' Digits;

                                     Exponent = ('e' | 'E') [Sign] Digits;

                                     Digits = \{ '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };

                                 Services **should** clearly document the range of supported values, the
                                 maximum supported precision (total number of digits), and, if applicable,
                                 the scale (number of digits after the decimal point), as well as how it
                                 behaves when receiving out-of-bounds values.

                                 Services **may** choose to accept values passed as input even when the
                                 value has a higher precision or scale than the service supports, and
                                 **should** round the value to fit the supported scale. Alternatively, the
                                 service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC)
                                 if precision would be lost.

                                 Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in
                                 gRPC) if the service receives a value outside of the supported range.
                          description: Values {"<"} min will be replaced with min.
                        max:
                          type: object
                          properties:
                            value:
                              type: string
                              description: |-
                                The decimal value, as a string.

                                 The string representation consists of an optional sign, `+` (`U+002B`)
                                 or `-` (`U+002D`), followed by a sequence of zero or more decimal digits
                                 ("the integer"), optionally followed by a fraction, optionally followed
                                 by an exponent.

                                 The fraction consists of a decimal point followed by zero or more decimal
                                 digits. The string must contain at least one digit in either the integer
                                 or the fraction. The number formed by the sign, the integer and the
                                 fraction is referred to as the significand.

                                 The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`)
                                 followed by one or more decimal digits.

                                 Services **should** normalize decimal values before storing them by:

                                   - Removing an explicitly-provided `+` sign (`+2.5` -{">"} `2.5`).
                                   - Replacing a zero-length integer value with `0` (`.5` -{">"} `0.5`).
                                   - Coercing the exponent character to lower-case (`2.5E8` -{">"} `2.5e8`).
                                   - Removing an explicitly-provided zero exponent (`2.5e0` -{">"} `2.5`).

                                 Services **may** perform additional normalization based on its own needs
                                 and the internal decimal implementation selected, such as shifting the
                                 decimal point and exponent value together (example: `2.5e-1` {"<"}-{">"} `0.25`).
                                 Additionally, services **may** preserve trailing zeroes in the fraction
                                 to indicate increased precision, but are not required to do so.

                                 Note that only the `.` character is supported to divide the integer
                                 and the fraction; `,` **should not** be supported regardless of locale.
                                 Additionally, thousand separators **should not** be supported. If a
                                 service does support them, values **must** be normalized.

                                 The ENBF grammar is:

                                     DecimalString =
                                       [Sign] Significand [Exponent];

                                     Sign = '+' | '-';

                                     Significand =
                                       Digits ['.'] [Digits] | [Digits] '.' Digits;

                                     Exponent = ('e' | 'E') [Sign] Digits;

                                     Digits = \{ '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };

                                 Services **should** clearly document the range of supported values, the
                                 maximum supported precision (total number of digits), and, if applicable,
                                 the scale (number of digits after the decimal point), as well as how it
                                 behaves when receiving out-of-bounds values.

                                 Services **may** choose to accept values passed as input even when the
                                 value has a higher precision or scale than the service supports, and
                                 **should** round the value to fit the supported scale. Alternatively, the
                                 service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC)
                                 if precision would be lost.

                                 Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in
                                 gRPC) if the service receives a value outside of the supported range.
                          description: Values {">"} max will be replaced with max.
                      description: Cap the values after aggregation.
                  required:
                    - type
                  description: Within-entity aggregation for the denominator.
                numeratorFilter:
                  type: object
                  properties:
                    criteria:
                      type: array
                      items:
                        type: object
                        additionalProperties:
                          type: object
                          properties:
                            attribute:
                              type: object
                              properties:
                                attribute:
                                  type: string
                                  description: The name of the attribute
                                eqRule:
                                  type: object
                                  properties:
                                    value:
                                      type: object
                                      properties:
                                        boolValue:
                                          type: boolean
                                        numberValue:
                                          type: number
                                        stringValue:
                                          type: string
                                        timestampValue:
                                          type: object
                                        nullValue:
                                          type: object
                                          properties:
                                            dummyField:
                                              type: string
                                              description: Dummy field to make the type not empty
                                      description: >-
                                        equality (==, !=, ∈) defined for all
                                        types
                                         comparison ({"<"}, {"<"}=, {">"}, {">"}=) defined for number, timestamp, version
                                         
                                  required:
                                    - value
                                  description: The value must be equal to the criterion
                                setRule:
                                  type: object
                                  properties:
                                    values:
                                      type: array
                                      items:
                                        type: object
                                        properties:
                                          boolValue:
                                            type: boolean
                                          numberValue:
                                            type: number
                                          stringValue:
                                            type: string
                                          timestampValue:
                                            type: object
                                          nullValue:
                                            type: object
                                            properties:
                                              dummyField:
                                                type: string
                                                description: Dummy field to make the type not empty
                                      description: >-
                                        equality (==, !=, ∈) defined for all
                                        types
                                         comparison ({"<"}, {"<"}=, {">"}, {">"}=) defined for number, timestamp, version
                                         
                                  required:
                                    - values
                                  description: The value must be in the set of values
                                rangeRule:
                                  type: object
                                  properties:
                                    startInclusive:
                                      type: object
                                      properties:
                                        boolValue:
                                          type: boolean
                                        numberValue:
                                          type: number
                                        stringValue:
                                          type: string
                                        timestampValue:
                                          type: object
                                        nullValue:
                                          type: object
                                          properties:
                                            dummyField:
                                              type: string
                                              description: Dummy field to make the type not empty
                                      description: >-
                                        equality (==, !=, ∈) defined for all
                                        types
                                         comparison ({"<"}, {"<"}=, {">"}, {">"}=) defined for number, timestamp, version
                                         
                                    startExclusive:
                                      type: object
                                      properties:
                                        boolValue:
                                          type: boolean
                                        numberValue:
                                          type: number
                                        stringValue:
                                          type: string
                                        timestampValue:
                                          type: object
                                        nullValue:
                                          type: object
                                          properties:
                                            dummyField:
                                              type: string
                                              description: Dummy field to make the type not empty
                                      description: >-
                                        equality (==, !=, ∈) defined for all
                                        types
                                         comparison ({"<"}, {"<"}=, {">"}, {">"}=) defined for number, timestamp, version
                                         
                                    endInclusive:
                                      type: object
                                      properties:
                                        boolValue:
                                          type: boolean
                                        numberValue:
                                          type: number
                                        stringValue:
                                          type: string
                                        timestampValue:
                                          type: object
                                        nullValue:
                                          type: object
                                          properties:
                                            dummyField:
                                              type: string
                                              description: Dummy field to make the type not empty
                                      description: >-
                                        equality (==, !=, ∈) defined for all
                                        types
                                         comparison ({"<"}, {"<"}=, {">"}, {">"}=) defined for number, timestamp, version
                                         
                                    endExclusive:
                                      type: object
                                      properties:
                                        boolValue:
                                          type: boolean
                                        numberValue:
                                          type: number
                                        stringValue:
                                          type: string
                                        timestampValue:
                                          type: object
                                        nullValue:
                                          type: object
                                          properties:
                                            dummyField:
                                              type: string
                                              description: Dummy field to make the type not empty
                                      description: >-
                                        equality (==, !=, ∈) defined for all
                                        types
                                         comparison ({"<"}, {"<"}=, {">"}, {">"}=) defined for number, timestamp, version
                                         
                                  description: The value must be in the range
                              required:
                                - attribute
                              description: >-
                                A criterion for an attribute (typically a table
                                column)
                      description: The filter criteria
                    expression:
                      type: object
                      properties:
                        ref:
                          type: string
                        not:
                          type: object
                          description: >-
                            A boolean expression with leaf nodes that reference
                            criteria elements
                             
                        and:
                          type: object
                          properties:
                            operands:
                              type: array
                              items:
                                type: object
                              description: >-
                                A boolean expression with leaf nodes that
                                reference criteria elements
                                 
                          required:
                            - operands
                        or:
                          type: object
                          properties:
                            operands:
                              type: array
                              items:
                                type: object
                              description: >-
                                A boolean expression with leaf nodes that
                                reference criteria elements
                                 
                          required:
                            - operands
                      description: The filter expressions
                  required:
                    - criteria
                    - expression
                  description: Optional filter applied only to the numerator measurement.
              required:
                - numeratorAggregation
                - denominatorAggregation
              description: >-
                A metric that aggregated a numerator and denominator separately
                and
                 combined the result by division.
          description: The kind of metric.
        measurementConfig:
          type: object
          properties:
            closedWindow:
              type: object
              properties:
                aggregationWindow:
                  type: object
                  description: >-
                    Size of the window that the measurements are aggregated
                    within the user.
                exposureOffset:
                  type: object
                  description: >-
                    Offset relative to the first exposure that measurements
                    should start to be
                     collected.
              required:
                - aggregationWindow
                - exposureOffset
              description: >-
                Aggregate measurements within a fixed window, don't include the
                entity until it has
                 measurements for the full window.
            semiOpenWindow:
              type: object
              properties:
                aggregationWindow:
                  type: object
                  description: >-
                    Size of the window that the measurements are aggregated
                    within the user.
                exposureOffset:
                  type: object
                  description: >-
                    Offset relative to the first exposure that measurements
                    should start to be
                     collected.
              required:
                - aggregationWindow
              description: >-
                Aggregate measurements within a fixed window, include the entity
                directly even if it
                 hasn't been observed for the full window, but stop including measurements after the window
                 is full.
            openWindow:
              type: object
              description: Aggregate measurements unbounded.
          description: Defines on what time window measurements are aggregated on.
        varianceReductionConfig:
          type: object
          properties:
            disabled:
              type: boolean
              description: If true no additional summary statistics will be collected.
            aggregationWindowOverride:
              type: object
              description: >-
                Changes the size of the aggregation window for the pre exposure
                summary
                 statistics compared to the metric aggregation window.
          description: Configuration for variance reduction of the metric.
        nullHandling:
          type: object
          properties:
            replaceMeasureNullWithZero:
              type: boolean
              description: |2-

                 If true then NULL values on the fact table level will be replaced with 0, otherwise
                 these measurements will be ignored.
            replaceEntityNullWithZero:
              type: boolean
              description: |2-

                 If true then entities that have no, or only null, measurements will be given a value of 0,
                 otherwise these entities will be ignored.
          description: Determines how NULLs should be handled.
        derivedUnit:
          type: object
          properties:
            numerator:
              type: object
              properties:
                baseUnitMultiplier:
                  type: number
                  description: >-
                    The multiplier to convert the unit to the base unit. For
                    example, if the underlying data is
                     in hours, the multiplier would be 1/3600.
                baseUnit:
                  type: string
                  enum:
                    - BASE_UNIT_UNSPECIFIED
                    - NONE
                    - PERCENT
                    - SECOND
                    - BYTE
                    - BIT
                  description: A standardized base unit.
                currencyCode:
                  type: string
                  description: The ISO 4217 code for the currency. For example 'USD'.
                customUnit:
                  type: string
                  description: A custom unit. For example 'Click'.
                entity:
                  type: string
                  description: The unit is an entity like 'User'.
                factTable:
                  type: string
                  description: The unit is a fact event like 'Conversion'.
              description: The unit of the numerator.
            denominator:
              type: object
              properties:
                baseUnitMultiplier:
                  type: number
                  description: >-
                    The multiplier to convert the unit to the base unit. For
                    example, if the underlying data is
                     in hours, the multiplier would be 1/3600.
                baseUnit:
                  type: string
                  enum:
                    - BASE_UNIT_UNSPECIFIED
                    - NONE
                    - PERCENT
                    - SECOND
                    - BYTE
                    - BIT
                  description: A standardized base unit.
                currencyCode:
                  type: string
                  description: The ISO 4217 code for the currency. For example 'USD'.
                customUnit:
                  type: string
                  description: A custom unit. For example 'Click'.
                entity:
                  type: string
                  description: The unit is an entity like 'User'.
                factTable:
                  type: string
                  description: The unit is a fact event like 'Conversion'.
              description: The unit of the denominator.
          required:
            - numerator
          description: >-
            The unit inferred for this metric based on the input units of the
            measures.
        preferredDirection:
          type: string
          enum:
            - PREFERRED_DIRECTION_UNSPECIFIED
            - INCREASE
            - DECREASE
          description: The preferred direction for this metric.
        defaultEffectSize:
          type: object
          properties:
            value:
              type: string
              description: |-
                The decimal value, as a string.

                 The string representation consists of an optional sign, `+` (`U+002B`)
                 or `-` (`U+002D`), followed by a sequence of zero or more decimal digits
                 ("the integer"), optionally followed by a fraction, optionally followed
                 by an exponent.

                 The fraction consists of a decimal point followed by zero or more decimal
                 digits. The string must contain at least one digit in either the integer
                 or the fraction. The number formed by the sign, the integer and the
                 fraction is referred to as the significand.

                 The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`)
                 followed by one or more decimal digits.

                 Services **should** normalize decimal values before storing them by:

                   - Removing an explicitly-provided `+` sign (`+2.5` -{">"} `2.5`).
                   - Replacing a zero-length integer value with `0` (`.5` -{">"} `0.5`).
                   - Coercing the exponent character to lower-case (`2.5E8` -{">"} `2.5e8`).
                   - Removing an explicitly-provided zero exponent (`2.5e0` -{">"} `2.5`).

                 Services **may** perform additional normalization based on its own needs
                 and the internal decimal implementation selected, such as shifting the
                 decimal point and exponent value together (example: `2.5e-1` {"<"}-{">"} `0.25`).
                 Additionally, services **may** preserve trailing zeroes in the fraction
                 to indicate increased precision, but are not required to do so.

                 Note that only the `.` character is supported to divide the integer
                 and the fraction; `,` **should not** be supported regardless of locale.
                 Additionally, thousand separators **should not** be supported. If a
                 service does support them, values **must** be normalized.

                 The ENBF grammar is:

                     DecimalString =
                       [Sign] Significand [Exponent];

                     Sign = '+' | '-';

                     Significand =
                       Digits ['.'] [Digits] | [Digits] '.' Digits;

                     Exponent = ('e' | 'E') [Sign] Digits;

                     Digits = \{ '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };

                 Services **should** clearly document the range of supported values, the
                 maximum supported precision (total number of digits), and, if applicable,
                 the scale (number of digits after the decimal point), as well as how it
                 behaves when receiving out-of-bounds values.

                 Services **may** choose to accept values passed as input even when the
                 value has a higher precision or scale than the service supports, and
                 **should** round the value to fit the supported scale. Alternatively, the
                 service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC)
                 if precision would be lost.

                 Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in
                 gRPC) if the service receives a value outside of the supported range.
          description: >-
            The default relative effect size (MDE/NIM) for this metric. Will be
            used to auto-populate
             with the effect size when creating a new experiment.
        filter:
          type: object
          properties:
            criteria:
              type: array
              items:
                type: object
                additionalProperties:
                  type: object
                  properties:
                    attribute:
                      type: object
                      properties:
                        attribute:
                          type: string
                          description: The name of the attribute
                        eqRule:
                          type: object
                          properties:
                            value:
                              type: object
                              properties:
                                boolValue:
                                  type: boolean
                                numberValue:
                                  type: number
                                stringValue:
                                  type: string
                                timestampValue:
                                  type: object
                                nullValue:
                                  type: object
                                  properties:
                                    dummyField:
                                      type: string
                                      description: Dummy field to make the type not empty
                              description: |-
                                equality (==, !=, ∈) defined for all types
                                 comparison ({"<"}, {"<"}=, {">"}, {">"}=) defined for number, timestamp, version
                                 
                          required:
                            - value
                          description: The value must be equal to the criterion
                        setRule:
                          type: object
                          properties:
                            values:
                              type: array
                              items:
                                type: object
                                properties:
                                  boolValue:
                                    type: boolean
                                  numberValue:
                                    type: number
                                  stringValue:
                                    type: string
                                  timestampValue:
                                    type: object
                                  nullValue:
                                    type: object
                                    properties:
                                      dummyField:
                                        type: string
                                        description: Dummy field to make the type not empty
                              description: |-
                                equality (==, !=, ∈) defined for all types
                                 comparison ({"<"}, {"<"}=, {">"}, {">"}=) defined for number, timestamp, version
                                 
                          required:
                            - values
                          description: The value must be in the set of values
                        rangeRule:
                          type: object
                          properties:
                            startInclusive:
                              type: object
                              properties:
                                boolValue:
                                  type: boolean
                                numberValue:
                                  type: number
                                stringValue:
                                  type: string
                                timestampValue:
                                  type: object
                                nullValue:
                                  type: object
                                  properties:
                                    dummyField:
                                      type: string
                                      description: Dummy field to make the type not empty
                              description: |-
                                equality (==, !=, ∈) defined for all types
                                 comparison ({"<"}, {"<"}=, {">"}, {">"}=) defined for number, timestamp, version
                                 
                            startExclusive:
                              type: object
                              properties:
                                boolValue:
                                  type: boolean
                                numberValue:
                                  type: number
                                stringValue:
                                  type: string
                                timestampValue:
                                  type: object
                                nullValue:
                                  type: object
                                  properties:
                                    dummyField:
                                      type: string
                                      description: Dummy field to make the type not empty
                              description: |-
                                equality (==, !=, ∈) defined for all types
                                 comparison ({"<"}, {"<"}=, {">"}, {">"}=) defined for number, timestamp, version
                                 
                            endInclusive:
                              type: object
                              properties:
                                boolValue:
                                  type: boolean
                                numberValue:
                                  type: number
                                stringValue:
                                  type: string
                                timestampValue:
                                  type: object
                                nullValue:
                                  type: object
                                  properties:
                                    dummyField:
                                      type: string
                                      description: Dummy field to make the type not empty
                              description: |-
                                equality (==, !=, ∈) defined for all types
                                 comparison ({"<"}, {"<"}=, {">"}, {">"}=) defined for number, timestamp, version
                                 
                            endExclusive:
                              type: object
                              properties:
                                boolValue:
                                  type: boolean
                                numberValue:
                                  type: number
                                stringValue:
                                  type: string
                                timestampValue:
                                  type: object
                                nullValue:
                                  type: object
                                  properties:
                                    dummyField:
                                      type: string
                                      description: Dummy field to make the type not empty
                              description: |-
                                equality (==, !=, ∈) defined for all types
                                 comparison ({"<"}, {"<"}=, {">"}, {">"}=) defined for number, timestamp, version
                                 
                          description: The value must be in the range
                      required:
                        - attribute
                      description: A criterion for an attribute (typically a table column)
              description: The filter criteria
            expression:
              type: object
              properties:
                ref:
                  type: string
                not:
                  type: object
                  description: >-
                    A boolean expression with leaf nodes that reference criteria
                    elements
                     
                and:
                  type: object
                  properties:
                    operands:
                      type: array
                      items:
                        type: object
                      description: >-
                        A boolean expression with leaf nodes that reference
                        criteria elements
                         
                  required:
                    - operands
                or:
                  type: object
                  properties:
                    operands:
                      type: array
                      items:
                        type: object
                      description: >-
                        A boolean expression with leaf nodes that reference
                        criteria elements
                         
                  required:
                    - operands
              description: The filter expressions
          required:
            - criteria
            - expression
          description: >-
            An optional metric filter that will be used to filter the fact table
            the metric is derived from.
        filterString:
          type: string
          description: >-
            A SQL string version of the metric filter. Set either this or
            `filter` when updating the metric.
        createTime:
          type: object
          description: Time when the metric was first created.
        updateTime:
          type: object
          description: Time when the metric was last updated.
        deleteTime:
          type: object
          description: Time when the metric was deleted.
        labels:
          type: array
          items:
            type: object
            additionalProperties:
              type: string
          description: Custom labels for this metric.
        creator:
          type: string
          description: Reference to the identity that created this metric.
        updater:
          type: string
          description: Reference to the identity that last updated this metric.
        systemCreated:
          type: boolean
          description: If this metric is an automatically created internal metric.
        owner:
          type: string
          description: The owner of the resource. If not set will default to the creator.
        etag:
          type: string
          description: The etag for this metric. Used for optimistic concurrency control.
        measurement:
          type: string
          description: Reference to the measurement that this metric is based on.
      required:
        - displayName
        - entity
        - factTable
        - typeSpec
        - createTime
        - updateTime
        - creator
        - updater
  securitySchemes:
    admin:
      type: http
      scheme: bearer

````