ANALYTICSDATA

analyticsdata.batchRunPivotReports

enum_CohortsRangeGranularity := [ "GRANULARITY_UNSPECIFIED", "DAILY", "WEEKLY", "MONTHLY" ]
enum_DimensionOrderByOrderType := [ "ORDER_TYPE_UNSPECIFIED", "ALPHANUMERIC", "CASE_INSENSITIVE_ALPHANUMERIC", "NUMERIC" ]
enum_NumericFilterOperation := [ "OPERATION_UNSPECIFIED", "EQUAL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "GREATER_THAN", "GREATER_THAN_OR_EQUAL" ]
enum_PivotMetricAggregations := [ "METRIC_AGGREGATION_UNSPECIFIED", "TOTAL", "MINIMUM", "MAXIMUM", "COUNT" ]
enum_StringFilterMatchType := [ "MATCH_TYPE_UNSPECIFIED", "EXACT", "BEGINS_WITH", "ENDS_WITH", "CONTAINS", "FULL_REGEXP", "PARTIAL_REGEXP" ]

valid {
    input.Body.entity.propertyId == STRING
    input.Body.requests[_].cohortSpec.cohortReportSettings.accumulate == BOOLEAN
    input.Body.requests[_].cohortSpec.cohorts[_].dateRange.endDate == STRING
    input.Body.requests[_].cohortSpec.cohorts[_].dateRange.name == STRING
    input.Body.requests[_].cohortSpec.cohorts[_].dateRange.startDate == STRING
    input.Body.requests[_].cohortSpec.cohorts[_].dimension == STRING
    input.Body.requests[_].cohortSpec.cohorts[_].name == STRING
    input.Body.requests[_].cohortSpec.cohortsRange.endOffset == INTEGER
    input.Body.requests[_].cohortSpec.cohortsRange.granularity == enum_CohortsRangeGranularity[_]
    input.Body.requests[_].cohortSpec.cohortsRange.startOffset == INTEGER
    input.Body.requests[_].currencyCode == STRING
    input.Body.requests[_].dateRanges[_].endDate == STRING
    input.Body.requests[_].dateRanges[_].name == STRING
    input.Body.requests[_].dateRanges[_].startDate == STRING
    input.Body.requests[_].dimensionFilter.andGroup.expressions[_] == NESTED
    input.Body.requests[_].dimensionFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.requests[_].dimensionFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.requests[_].dimensionFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.requests[_].dimensionFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.requests[_].dimensionFilter.filter.fieldName == STRING
    input.Body.requests[_].dimensionFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.requests[_].dimensionFilter.filter.inListFilter.values[_] == STRING
    input.Body.requests[_].dimensionFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.requests[_].dimensionFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.requests[_].dimensionFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.requests[_].dimensionFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.requests[_].dimensionFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.requests[_].dimensionFilter.filter.stringFilter.value == STRING
    input.Body.requests[_].dimensionFilter.notExpression == NESTED
    input.Body.requests[_].dimensionFilter.orGroup.expressions[_] == NESTED
    input.Body.requests[_].dimensions[_].dimensionExpression.concatenate.delimiter == STRING
    input.Body.requests[_].dimensions[_].dimensionExpression.concatenate.dimensionNames[_] == STRING
    input.Body.requests[_].dimensions[_].dimensionExpression.lowerCase.dimensionName == STRING
    input.Body.requests[_].dimensions[_].dimensionExpression.upperCase.dimensionName == STRING
    input.Body.requests[_].dimensions[_].name == STRING
    input.Body.requests[_].entity.propertyId == STRING
    input.Body.requests[_].keepEmptyRows == BOOLEAN
    input.Body.requests[_].metricFilter.andGroup.expressions[_] == NESTED
    input.Body.requests[_].metricFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.requests[_].metricFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.requests[_].metricFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.requests[_].metricFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.requests[_].metricFilter.filter.fieldName == STRING
    input.Body.requests[_].metricFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.requests[_].metricFilter.filter.inListFilter.values[_] == STRING
    input.Body.requests[_].metricFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.requests[_].metricFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.requests[_].metricFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.requests[_].metricFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.requests[_].metricFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.requests[_].metricFilter.filter.stringFilter.value == STRING
    input.Body.requests[_].metricFilter.notExpression == NESTED
    input.Body.requests[_].metricFilter.orGroup.expressions[_] == NESTED
    input.Body.requests[_].metrics[_].expression == STRING
    input.Body.requests[_].metrics[_].invisible == BOOLEAN
    input.Body.requests[_].metrics[_].name == STRING
    input.Body.requests[_].pivots[_].fieldNames[_] == STRING
    input.Body.requests[_].pivots[_].limit == STRING
    input.Body.requests[_].pivots[_].metricAggregations[_] == enum_PivotMetricAggregations[_]
    input.Body.requests[_].pivots[_].offset == STRING
    input.Body.requests[_].pivots[_].orderBys[_].desc == BOOLEAN
    input.Body.requests[_].pivots[_].orderBys[_].dimension.dimensionName == STRING
    input.Body.requests[_].pivots[_].orderBys[_].dimension.orderType == enum_DimensionOrderByOrderType[_]
    input.Body.requests[_].pivots[_].orderBys[_].metric.metricName == STRING
    input.Body.requests[_].pivots[_].orderBys[_].pivot.metricName == STRING
    input.Body.requests[_].pivots[_].orderBys[_].pivot.pivotSelections[_].dimensionName == STRING
    input.Body.requests[_].pivots[_].orderBys[_].pivot.pivotSelections[_].dimensionValue == STRING
    input.Body.requests[_].returnPropertyQuota == BOOLEAN
    input.ProviderMetadata.Region == STRING
}

analyticsdata.batchRunReports

enum_CohortsRangeGranularity := [ "GRANULARITY_UNSPECIFIED", "DAILY", "WEEKLY", "MONTHLY" ]
enum_DimensionOrderByOrderType := [ "ORDER_TYPE_UNSPECIFIED", "ALPHANUMERIC", "CASE_INSENSITIVE_ALPHANUMERIC", "NUMERIC" ]
enum_NumericFilterOperation := [ "OPERATION_UNSPECIFIED", "EQUAL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "GREATER_THAN", "GREATER_THAN_OR_EQUAL" ]
enum_RunReportRequestMetricAggregations := [ "METRIC_AGGREGATION_UNSPECIFIED", "TOTAL", "MINIMUM", "MAXIMUM", "COUNT" ]
enum_StringFilterMatchType := [ "MATCH_TYPE_UNSPECIFIED", "EXACT", "BEGINS_WITH", "ENDS_WITH", "CONTAINS", "FULL_REGEXP", "PARTIAL_REGEXP" ]

valid {
    input.Body.entity.propertyId == STRING
    input.Body.requests[_].cohortSpec.cohortReportSettings.accumulate == BOOLEAN
    input.Body.requests[_].cohortSpec.cohorts[_].dateRange.endDate == STRING
    input.Body.requests[_].cohortSpec.cohorts[_].dateRange.name == STRING
    input.Body.requests[_].cohortSpec.cohorts[_].dateRange.startDate == STRING
    input.Body.requests[_].cohortSpec.cohorts[_].dimension == STRING
    input.Body.requests[_].cohortSpec.cohorts[_].name == STRING
    input.Body.requests[_].cohortSpec.cohortsRange.endOffset == INTEGER
    input.Body.requests[_].cohortSpec.cohortsRange.granularity == enum_CohortsRangeGranularity[_]
    input.Body.requests[_].cohortSpec.cohortsRange.startOffset == INTEGER
    input.Body.requests[_].currencyCode == STRING
    input.Body.requests[_].dateRanges[_].endDate == STRING
    input.Body.requests[_].dateRanges[_].name == STRING
    input.Body.requests[_].dateRanges[_].startDate == STRING
    input.Body.requests[_].dimensionFilter.andGroup.expressions[_] == NESTED
    input.Body.requests[_].dimensionFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.requests[_].dimensionFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.requests[_].dimensionFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.requests[_].dimensionFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.requests[_].dimensionFilter.filter.fieldName == STRING
    input.Body.requests[_].dimensionFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.requests[_].dimensionFilter.filter.inListFilter.values[_] == STRING
    input.Body.requests[_].dimensionFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.requests[_].dimensionFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.requests[_].dimensionFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.requests[_].dimensionFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.requests[_].dimensionFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.requests[_].dimensionFilter.filter.stringFilter.value == STRING
    input.Body.requests[_].dimensionFilter.notExpression == NESTED
    input.Body.requests[_].dimensionFilter.orGroup.expressions[_] == NESTED
    input.Body.requests[_].dimensions[_].dimensionExpression.concatenate.delimiter == STRING
    input.Body.requests[_].dimensions[_].dimensionExpression.concatenate.dimensionNames[_] == STRING
    input.Body.requests[_].dimensions[_].dimensionExpression.lowerCase.dimensionName == STRING
    input.Body.requests[_].dimensions[_].dimensionExpression.upperCase.dimensionName == STRING
    input.Body.requests[_].dimensions[_].name == STRING
    input.Body.requests[_].entity.propertyId == STRING
    input.Body.requests[_].keepEmptyRows == BOOLEAN
    input.Body.requests[_].limit == STRING
    input.Body.requests[_].metricAggregations[_] == enum_RunReportRequestMetricAggregations[_]
    input.Body.requests[_].metricFilter.andGroup.expressions[_] == NESTED
    input.Body.requests[_].metricFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.requests[_].metricFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.requests[_].metricFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.requests[_].metricFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.requests[_].metricFilter.filter.fieldName == STRING
    input.Body.requests[_].metricFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.requests[_].metricFilter.filter.inListFilter.values[_] == STRING
    input.Body.requests[_].metricFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.requests[_].metricFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.requests[_].metricFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.requests[_].metricFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.requests[_].metricFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.requests[_].metricFilter.filter.stringFilter.value == STRING
    input.Body.requests[_].metricFilter.notExpression == NESTED
    input.Body.requests[_].metricFilter.orGroup.expressions[_] == NESTED
    input.Body.requests[_].metrics[_].expression == STRING
    input.Body.requests[_].metrics[_].invisible == BOOLEAN
    input.Body.requests[_].metrics[_].name == STRING
    input.Body.requests[_].offset == STRING
    input.Body.requests[_].orderBys[_].desc == BOOLEAN
    input.Body.requests[_].orderBys[_].dimension.dimensionName == STRING
    input.Body.requests[_].orderBys[_].dimension.orderType == enum_DimensionOrderByOrderType[_]
    input.Body.requests[_].orderBys[_].metric.metricName == STRING
    input.Body.requests[_].orderBys[_].pivot.metricName == STRING
    input.Body.requests[_].orderBys[_].pivot.pivotSelections[_].dimensionName == STRING
    input.Body.requests[_].orderBys[_].pivot.pivotSelections[_].dimensionValue == STRING
    input.Body.requests[_].returnPropertyQuota == BOOLEAN
    input.ProviderMetadata.Region == STRING
}

analyticsdata.properties.audienceExports.create

valid {
    input.Body.audience == STRING
    input.Body.dimensions[_].dimensionName == STRING
    input.ReqMap.parent == STRING
    input.ProviderMetadata.Region == STRING
}

analyticsdata.properties.audienceExports.get

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

analyticsdata.properties.audienceExports.list

valid {
    input.ReqMap.parent == STRING
    input.Qs.pageSize == INTEGER
    input.Qs.pageToken == STRING
    input.ProviderMetadata.Region == STRING
}

analyticsdata.properties.audienceExports.query

valid {
    input.Body.limit == STRING
    input.Body.offset == STRING
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

analyticsdata.properties.batchRunPivotReports

enum_CohortsRangeGranularity := [ "GRANULARITY_UNSPECIFIED", "DAILY", "WEEKLY", "MONTHLY" ]
enum_DimensionOrderByOrderType := [ "ORDER_TYPE_UNSPECIFIED", "ALPHANUMERIC", "CASE_INSENSITIVE_ALPHANUMERIC", "NUMERIC" ]
enum_NumericFilterOperation := [ "OPERATION_UNSPECIFIED", "EQUAL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "GREATER_THAN", "GREATER_THAN_OR_EQUAL" ]
enum_PivotMetricAggregations := [ "METRIC_AGGREGATION_UNSPECIFIED", "TOTAL", "MINIMUM", "MAXIMUM", "COUNT" ]
enum_StringFilterMatchType := [ "MATCH_TYPE_UNSPECIFIED", "EXACT", "BEGINS_WITH", "ENDS_WITH", "CONTAINS", "FULL_REGEXP", "PARTIAL_REGEXP" ]

valid {
    input.Body.requests[_].cohortSpec.cohortReportSettings.accumulate == BOOLEAN
    input.Body.requests[_].cohortSpec.cohorts[_].dateRange.endDate == STRING
    input.Body.requests[_].cohortSpec.cohorts[_].dateRange.name == STRING
    input.Body.requests[_].cohortSpec.cohorts[_].dateRange.startDate == STRING
    input.Body.requests[_].cohortSpec.cohorts[_].dimension == STRING
    input.Body.requests[_].cohortSpec.cohorts[_].name == STRING
    input.Body.requests[_].cohortSpec.cohortsRange.endOffset == INTEGER
    input.Body.requests[_].cohortSpec.cohortsRange.granularity == enum_CohortsRangeGranularity[_]
    input.Body.requests[_].cohortSpec.cohortsRange.startOffset == INTEGER
    input.Body.requests[_].currencyCode == STRING
    input.Body.requests[_].dateRanges[_].endDate == STRING
    input.Body.requests[_].dateRanges[_].name == STRING
    input.Body.requests[_].dateRanges[_].startDate == STRING
    input.Body.requests[_].dimensionFilter.andGroup.expressions[_] == NESTED
    input.Body.requests[_].dimensionFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.requests[_].dimensionFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.requests[_].dimensionFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.requests[_].dimensionFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.requests[_].dimensionFilter.filter.fieldName == STRING
    input.Body.requests[_].dimensionFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.requests[_].dimensionFilter.filter.inListFilter.values[_] == STRING
    input.Body.requests[_].dimensionFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.requests[_].dimensionFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.requests[_].dimensionFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.requests[_].dimensionFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.requests[_].dimensionFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.requests[_].dimensionFilter.filter.stringFilter.value == STRING
    input.Body.requests[_].dimensionFilter.notExpression == NESTED
    input.Body.requests[_].dimensionFilter.orGroup.expressions[_] == NESTED
    input.Body.requests[_].dimensions[_].dimensionExpression.concatenate.delimiter == STRING
    input.Body.requests[_].dimensions[_].dimensionExpression.concatenate.dimensionNames[_] == STRING
    input.Body.requests[_].dimensions[_].dimensionExpression.lowerCase.dimensionName == STRING
    input.Body.requests[_].dimensions[_].dimensionExpression.upperCase.dimensionName == STRING
    input.Body.requests[_].dimensions[_].name == STRING
    input.Body.requests[_].keepEmptyRows == BOOLEAN
    input.Body.requests[_].metricFilter.andGroup.expressions[_] == NESTED
    input.Body.requests[_].metricFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.requests[_].metricFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.requests[_].metricFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.requests[_].metricFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.requests[_].metricFilter.filter.fieldName == STRING
    input.Body.requests[_].metricFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.requests[_].metricFilter.filter.inListFilter.values[_] == STRING
    input.Body.requests[_].metricFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.requests[_].metricFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.requests[_].metricFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.requests[_].metricFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.requests[_].metricFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.requests[_].metricFilter.filter.stringFilter.value == STRING
    input.Body.requests[_].metricFilter.notExpression == NESTED
    input.Body.requests[_].metricFilter.orGroup.expressions[_] == NESTED
    input.Body.requests[_].metrics[_].expression == STRING
    input.Body.requests[_].metrics[_].invisible == BOOLEAN
    input.Body.requests[_].metrics[_].name == STRING
    input.Body.requests[_].pivots[_].fieldNames[_] == STRING
    input.Body.requests[_].pivots[_].limit == STRING
    input.Body.requests[_].pivots[_].metricAggregations[_] == enum_PivotMetricAggregations[_]
    input.Body.requests[_].pivots[_].offset == STRING
    input.Body.requests[_].pivots[_].orderBys[_].desc == BOOLEAN
    input.Body.requests[_].pivots[_].orderBys[_].dimension.dimensionName == STRING
    input.Body.requests[_].pivots[_].orderBys[_].dimension.orderType == enum_DimensionOrderByOrderType[_]
    input.Body.requests[_].pivots[_].orderBys[_].metric.metricName == STRING
    input.Body.requests[_].pivots[_].orderBys[_].pivot.metricName == STRING
    input.Body.requests[_].pivots[_].orderBys[_].pivot.pivotSelections[_].dimensionName == STRING
    input.Body.requests[_].pivots[_].orderBys[_].pivot.pivotSelections[_].dimensionValue == STRING
    input.Body.requests[_].property == STRING
    input.Body.requests[_].returnPropertyQuota == BOOLEAN
    input.ReqMap.property == STRING
    input.ProviderMetadata.Region == STRING
}

analyticsdata.properties.batchRunReports

enum_CohortsRangeGranularity := [ "GRANULARITY_UNSPECIFIED", "DAILY", "WEEKLY", "MONTHLY" ]
enum_DimensionOrderByOrderType := [ "ORDER_TYPE_UNSPECIFIED", "ALPHANUMERIC", "CASE_INSENSITIVE_ALPHANUMERIC", "NUMERIC" ]
enum_NumericFilterOperation := [ "OPERATION_UNSPECIFIED", "EQUAL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "GREATER_THAN", "GREATER_THAN_OR_EQUAL" ]
enum_RunReportRequestMetricAggregations := [ "METRIC_AGGREGATION_UNSPECIFIED", "TOTAL", "MINIMUM", "MAXIMUM", "COUNT" ]
enum_StringFilterMatchType := [ "MATCH_TYPE_UNSPECIFIED", "EXACT", "BEGINS_WITH", "ENDS_WITH", "CONTAINS", "FULL_REGEXP", "PARTIAL_REGEXP" ]

valid {
    input.Body.requests[_].cohortSpec.cohortReportSettings.accumulate == BOOLEAN
    input.Body.requests[_].cohortSpec.cohorts[_].dateRange.endDate == STRING
    input.Body.requests[_].cohortSpec.cohorts[_].dateRange.name == STRING
    input.Body.requests[_].cohortSpec.cohorts[_].dateRange.startDate == STRING
    input.Body.requests[_].cohortSpec.cohorts[_].dimension == STRING
    input.Body.requests[_].cohortSpec.cohorts[_].name == STRING
    input.Body.requests[_].cohortSpec.cohortsRange.endOffset == INTEGER
    input.Body.requests[_].cohortSpec.cohortsRange.granularity == enum_CohortsRangeGranularity[_]
    input.Body.requests[_].cohortSpec.cohortsRange.startOffset == INTEGER
    input.Body.requests[_].currencyCode == STRING
    input.Body.requests[_].dateRanges[_].endDate == STRING
    input.Body.requests[_].dateRanges[_].name == STRING
    input.Body.requests[_].dateRanges[_].startDate == STRING
    input.Body.requests[_].dimensionFilter.andGroup.expressions[_] == NESTED
    input.Body.requests[_].dimensionFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.requests[_].dimensionFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.requests[_].dimensionFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.requests[_].dimensionFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.requests[_].dimensionFilter.filter.fieldName == STRING
    input.Body.requests[_].dimensionFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.requests[_].dimensionFilter.filter.inListFilter.values[_] == STRING
    input.Body.requests[_].dimensionFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.requests[_].dimensionFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.requests[_].dimensionFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.requests[_].dimensionFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.requests[_].dimensionFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.requests[_].dimensionFilter.filter.stringFilter.value == STRING
    input.Body.requests[_].dimensionFilter.notExpression == NESTED
    input.Body.requests[_].dimensionFilter.orGroup.expressions[_] == NESTED
    input.Body.requests[_].dimensions[_].dimensionExpression.concatenate.delimiter == STRING
    input.Body.requests[_].dimensions[_].dimensionExpression.concatenate.dimensionNames[_] == STRING
    input.Body.requests[_].dimensions[_].dimensionExpression.lowerCase.dimensionName == STRING
    input.Body.requests[_].dimensions[_].dimensionExpression.upperCase.dimensionName == STRING
    input.Body.requests[_].dimensions[_].name == STRING
    input.Body.requests[_].keepEmptyRows == BOOLEAN
    input.Body.requests[_].limit == STRING
    input.Body.requests[_].metricAggregations[_] == enum_RunReportRequestMetricAggregations[_]
    input.Body.requests[_].metricFilter.andGroup.expressions[_] == NESTED
    input.Body.requests[_].metricFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.requests[_].metricFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.requests[_].metricFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.requests[_].metricFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.requests[_].metricFilter.filter.fieldName == STRING
    input.Body.requests[_].metricFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.requests[_].metricFilter.filter.inListFilter.values[_] == STRING
    input.Body.requests[_].metricFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.requests[_].metricFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.requests[_].metricFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.requests[_].metricFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.requests[_].metricFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.requests[_].metricFilter.filter.stringFilter.value == STRING
    input.Body.requests[_].metricFilter.notExpression == NESTED
    input.Body.requests[_].metricFilter.orGroup.expressions[_] == NESTED
    input.Body.requests[_].metrics[_].expression == STRING
    input.Body.requests[_].metrics[_].invisible == BOOLEAN
    input.Body.requests[_].metrics[_].name == STRING
    input.Body.requests[_].offset == STRING
    input.Body.requests[_].orderBys[_].desc == BOOLEAN
    input.Body.requests[_].orderBys[_].dimension.dimensionName == STRING
    input.Body.requests[_].orderBys[_].dimension.orderType == enum_DimensionOrderByOrderType[_]
    input.Body.requests[_].orderBys[_].metric.metricName == STRING
    input.Body.requests[_].orderBys[_].pivot.metricName == STRING
    input.Body.requests[_].orderBys[_].pivot.pivotSelections[_].dimensionName == STRING
    input.Body.requests[_].orderBys[_].pivot.pivotSelections[_].dimensionValue == STRING
    input.Body.requests[_].property == STRING
    input.Body.requests[_].returnPropertyQuota == BOOLEAN
    input.ReqMap.property == STRING
    input.ProviderMetadata.Region == STRING
}

analyticsdata.properties.checkCompatibility

enum_CheckCompatibilityRequestCompatibilityFilter := [ "COMPATIBILITY_UNSPECIFIED", "COMPATIBLE", "INCOMPATIBLE" ]
enum_NumericFilterOperation := [ "OPERATION_UNSPECIFIED", "EQUAL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "GREATER_THAN", "GREATER_THAN_OR_EQUAL" ]
enum_StringFilterMatchType := [ "MATCH_TYPE_UNSPECIFIED", "EXACT", "BEGINS_WITH", "ENDS_WITH", "CONTAINS", "FULL_REGEXP", "PARTIAL_REGEXP" ]

valid {
    input.Body.compatibilityFilter == enum_CheckCompatibilityRequestCompatibilityFilter[_]
    input.Body.dimensionFilter.andGroup.expressions[_] == NESTED
    input.Body.dimensionFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.dimensionFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.dimensionFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.dimensionFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.dimensionFilter.filter.fieldName == STRING
    input.Body.dimensionFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.dimensionFilter.filter.inListFilter.values[_] == STRING
    input.Body.dimensionFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.dimensionFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.dimensionFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.dimensionFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.dimensionFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.dimensionFilter.filter.stringFilter.value == STRING
    input.Body.dimensionFilter.notExpression == NESTED
    input.Body.dimensionFilter.orGroup.expressions[_] == NESTED
    input.Body.dimensions[_].dimensionExpression.concatenate.delimiter == STRING
    input.Body.dimensions[_].dimensionExpression.concatenate.dimensionNames[_] == STRING
    input.Body.dimensions[_].dimensionExpression.lowerCase.dimensionName == STRING
    input.Body.dimensions[_].dimensionExpression.upperCase.dimensionName == STRING
    input.Body.dimensions[_].name == STRING
    input.Body.metricFilter.andGroup.expressions[_] == NESTED
    input.Body.metricFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.metricFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.metricFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.metricFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.metricFilter.filter.fieldName == STRING
    input.Body.metricFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.metricFilter.filter.inListFilter.values[_] == STRING
    input.Body.metricFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.metricFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.metricFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.metricFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.metricFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.metricFilter.filter.stringFilter.value == STRING
    input.Body.metricFilter.notExpression == NESTED
    input.Body.metricFilter.orGroup.expressions[_] == NESTED
    input.Body.metrics[_].expression == STRING
    input.Body.metrics[_].invisible == BOOLEAN
    input.Body.metrics[_].name == STRING
    input.ReqMap.property == STRING
    input.ProviderMetadata.Region == STRING
}

analyticsdata.properties.getMetadata

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

analyticsdata.properties.runPivotReport

enum_CohortsRangeGranularity := [ "GRANULARITY_UNSPECIFIED", "DAILY", "WEEKLY", "MONTHLY" ]
enum_DimensionOrderByOrderType := [ "ORDER_TYPE_UNSPECIFIED", "ALPHANUMERIC", "CASE_INSENSITIVE_ALPHANUMERIC", "NUMERIC" ]
enum_NumericFilterOperation := [ "OPERATION_UNSPECIFIED", "EQUAL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "GREATER_THAN", "GREATER_THAN_OR_EQUAL" ]
enum_PivotMetricAggregations := [ "METRIC_AGGREGATION_UNSPECIFIED", "TOTAL", "MINIMUM", "MAXIMUM", "COUNT" ]
enum_StringFilterMatchType := [ "MATCH_TYPE_UNSPECIFIED", "EXACT", "BEGINS_WITH", "ENDS_WITH", "CONTAINS", "FULL_REGEXP", "PARTIAL_REGEXP" ]

valid {
    input.Body.cohortSpec.cohortReportSettings.accumulate == BOOLEAN
    input.Body.cohortSpec.cohorts[_].dateRange.endDate == STRING
    input.Body.cohortSpec.cohorts[_].dateRange.name == STRING
    input.Body.cohortSpec.cohorts[_].dateRange.startDate == STRING
    input.Body.cohortSpec.cohorts[_].dimension == STRING
    input.Body.cohortSpec.cohorts[_].name == STRING
    input.Body.cohortSpec.cohortsRange.endOffset == INTEGER
    input.Body.cohortSpec.cohortsRange.granularity == enum_CohortsRangeGranularity[_]
    input.Body.cohortSpec.cohortsRange.startOffset == INTEGER
    input.Body.currencyCode == STRING
    input.Body.dateRanges[_].endDate == STRING
    input.Body.dateRanges[_].name == STRING
    input.Body.dateRanges[_].startDate == STRING
    input.Body.dimensionFilter.andGroup.expressions[_] == NESTED
    input.Body.dimensionFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.dimensionFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.dimensionFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.dimensionFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.dimensionFilter.filter.fieldName == STRING
    input.Body.dimensionFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.dimensionFilter.filter.inListFilter.values[_] == STRING
    input.Body.dimensionFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.dimensionFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.dimensionFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.dimensionFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.dimensionFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.dimensionFilter.filter.stringFilter.value == STRING
    input.Body.dimensionFilter.notExpression == NESTED
    input.Body.dimensionFilter.orGroup.expressions[_] == NESTED
    input.Body.dimensions[_].dimensionExpression.concatenate.delimiter == STRING
    input.Body.dimensions[_].dimensionExpression.concatenate.dimensionNames[_] == STRING
    input.Body.dimensions[_].dimensionExpression.lowerCase.dimensionName == STRING
    input.Body.dimensions[_].dimensionExpression.upperCase.dimensionName == STRING
    input.Body.dimensions[_].name == STRING
    input.Body.keepEmptyRows == BOOLEAN
    input.Body.metricFilter.andGroup.expressions[_] == NESTED
    input.Body.metricFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.metricFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.metricFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.metricFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.metricFilter.filter.fieldName == STRING
    input.Body.metricFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.metricFilter.filter.inListFilter.values[_] == STRING
    input.Body.metricFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.metricFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.metricFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.metricFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.metricFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.metricFilter.filter.stringFilter.value == STRING
    input.Body.metricFilter.notExpression == NESTED
    input.Body.metricFilter.orGroup.expressions[_] == NESTED
    input.Body.metrics[_].expression == STRING
    input.Body.metrics[_].invisible == BOOLEAN
    input.Body.metrics[_].name == STRING
    input.Body.pivots[_].fieldNames[_] == STRING
    input.Body.pivots[_].limit == STRING
    input.Body.pivots[_].metricAggregations[_] == enum_PivotMetricAggregations[_]
    input.Body.pivots[_].offset == STRING
    input.Body.pivots[_].orderBys[_].desc == BOOLEAN
    input.Body.pivots[_].orderBys[_].dimension.dimensionName == STRING
    input.Body.pivots[_].orderBys[_].dimension.orderType == enum_DimensionOrderByOrderType[_]
    input.Body.pivots[_].orderBys[_].metric.metricName == STRING
    input.Body.pivots[_].orderBys[_].pivot.metricName == STRING
    input.Body.pivots[_].orderBys[_].pivot.pivotSelections[_].dimensionName == STRING
    input.Body.pivots[_].orderBys[_].pivot.pivotSelections[_].dimensionValue == STRING
    input.Body.property == STRING
    input.Body.returnPropertyQuota == BOOLEAN
    input.ReqMap.property == STRING
    input.ProviderMetadata.Region == STRING
}

analyticsdata.properties.runRealtimeReport

enum_DimensionOrderByOrderType := [ "ORDER_TYPE_UNSPECIFIED", "ALPHANUMERIC", "CASE_INSENSITIVE_ALPHANUMERIC", "NUMERIC" ]
enum_NumericFilterOperation := [ "OPERATION_UNSPECIFIED", "EQUAL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "GREATER_THAN", "GREATER_THAN_OR_EQUAL" ]
enum_RunRealtimeReportRequestMetricAggregations := [ "METRIC_AGGREGATION_UNSPECIFIED", "TOTAL", "MINIMUM", "MAXIMUM", "COUNT" ]
enum_StringFilterMatchType := [ "MATCH_TYPE_UNSPECIFIED", "EXACT", "BEGINS_WITH", "ENDS_WITH", "CONTAINS", "FULL_REGEXP", "PARTIAL_REGEXP" ]

valid {
    input.Body.dimensionFilter.andGroup.expressions[_] == NESTED
    input.Body.dimensionFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.dimensionFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.dimensionFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.dimensionFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.dimensionFilter.filter.fieldName == STRING
    input.Body.dimensionFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.dimensionFilter.filter.inListFilter.values[_] == STRING
    input.Body.dimensionFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.dimensionFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.dimensionFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.dimensionFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.dimensionFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.dimensionFilter.filter.stringFilter.value == STRING
    input.Body.dimensionFilter.notExpression == NESTED
    input.Body.dimensionFilter.orGroup.expressions[_] == NESTED
    input.Body.dimensions[_].dimensionExpression.concatenate.delimiter == STRING
    input.Body.dimensions[_].dimensionExpression.concatenate.dimensionNames[_] == STRING
    input.Body.dimensions[_].dimensionExpression.lowerCase.dimensionName == STRING
    input.Body.dimensions[_].dimensionExpression.upperCase.dimensionName == STRING
    input.Body.dimensions[_].name == STRING
    input.Body.limit == STRING
    input.Body.metricAggregations[_] == enum_RunRealtimeReportRequestMetricAggregations[_]
    input.Body.metricFilter.andGroup.expressions[_] == NESTED
    input.Body.metricFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.metricFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.metricFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.metricFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.metricFilter.filter.fieldName == STRING
    input.Body.metricFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.metricFilter.filter.inListFilter.values[_] == STRING
    input.Body.metricFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.metricFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.metricFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.metricFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.metricFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.metricFilter.filter.stringFilter.value == STRING
    input.Body.metricFilter.notExpression == NESTED
    input.Body.metricFilter.orGroup.expressions[_] == NESTED
    input.Body.metrics[_].expression == STRING
    input.Body.metrics[_].invisible == BOOLEAN
    input.Body.metrics[_].name == STRING
    input.Body.minuteRanges[_].endMinutesAgo == INTEGER
    input.Body.minuteRanges[_].name == STRING
    input.Body.minuteRanges[_].startMinutesAgo == INTEGER
    input.Body.orderBys[_].desc == BOOLEAN
    input.Body.orderBys[_].dimension.dimensionName == STRING
    input.Body.orderBys[_].dimension.orderType == enum_DimensionOrderByOrderType[_]
    input.Body.orderBys[_].metric.metricName == STRING
    input.Body.orderBys[_].pivot.metricName == STRING
    input.Body.orderBys[_].pivot.pivotSelections[_].dimensionName == STRING
    input.Body.orderBys[_].pivot.pivotSelections[_].dimensionValue == STRING
    input.Body.returnPropertyQuota == BOOLEAN
    input.ReqMap.property == STRING
    input.ProviderMetadata.Region == STRING
}

analyticsdata.properties.runReport

enum_CohortsRangeGranularity := [ "GRANULARITY_UNSPECIFIED", "DAILY", "WEEKLY", "MONTHLY" ]
enum_DimensionOrderByOrderType := [ "ORDER_TYPE_UNSPECIFIED", "ALPHANUMERIC", "CASE_INSENSITIVE_ALPHANUMERIC", "NUMERIC" ]
enum_NumericFilterOperation := [ "OPERATION_UNSPECIFIED", "EQUAL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "GREATER_THAN", "GREATER_THAN_OR_EQUAL" ]
enum_RunReportRequestMetricAggregations := [ "METRIC_AGGREGATION_UNSPECIFIED", "TOTAL", "MINIMUM", "MAXIMUM", "COUNT" ]
enum_StringFilterMatchType := [ "MATCH_TYPE_UNSPECIFIED", "EXACT", "BEGINS_WITH", "ENDS_WITH", "CONTAINS", "FULL_REGEXP", "PARTIAL_REGEXP" ]

valid {
    input.Body.cohortSpec.cohortReportSettings.accumulate == BOOLEAN
    input.Body.cohortSpec.cohorts[_].dateRange.endDate == STRING
    input.Body.cohortSpec.cohorts[_].dateRange.name == STRING
    input.Body.cohortSpec.cohorts[_].dateRange.startDate == STRING
    input.Body.cohortSpec.cohorts[_].dimension == STRING
    input.Body.cohortSpec.cohorts[_].name == STRING
    input.Body.cohortSpec.cohortsRange.endOffset == INTEGER
    input.Body.cohortSpec.cohortsRange.granularity == enum_CohortsRangeGranularity[_]
    input.Body.cohortSpec.cohortsRange.startOffset == INTEGER
    input.Body.currencyCode == STRING
    input.Body.dateRanges[_].endDate == STRING
    input.Body.dateRanges[_].name == STRING
    input.Body.dateRanges[_].startDate == STRING
    input.Body.dimensionFilter.andGroup.expressions[_] == NESTED
    input.Body.dimensionFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.dimensionFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.dimensionFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.dimensionFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.dimensionFilter.filter.fieldName == STRING
    input.Body.dimensionFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.dimensionFilter.filter.inListFilter.values[_] == STRING
    input.Body.dimensionFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.dimensionFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.dimensionFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.dimensionFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.dimensionFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.dimensionFilter.filter.stringFilter.value == STRING
    input.Body.dimensionFilter.notExpression == NESTED
    input.Body.dimensionFilter.orGroup.expressions[_] == NESTED
    input.Body.dimensions[_].dimensionExpression.concatenate.delimiter == STRING
    input.Body.dimensions[_].dimensionExpression.concatenate.dimensionNames[_] == STRING
    input.Body.dimensions[_].dimensionExpression.lowerCase.dimensionName == STRING
    input.Body.dimensions[_].dimensionExpression.upperCase.dimensionName == STRING
    input.Body.dimensions[_].name == STRING
    input.Body.keepEmptyRows == BOOLEAN
    input.Body.limit == STRING
    input.Body.metricAggregations[_] == enum_RunReportRequestMetricAggregations[_]
    input.Body.metricFilter.andGroup.expressions[_] == NESTED
    input.Body.metricFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.metricFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.metricFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.metricFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.metricFilter.filter.fieldName == STRING
    input.Body.metricFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.metricFilter.filter.inListFilter.values[_] == STRING
    input.Body.metricFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.metricFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.metricFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.metricFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.metricFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.metricFilter.filter.stringFilter.value == STRING
    input.Body.metricFilter.notExpression == NESTED
    input.Body.metricFilter.orGroup.expressions[_] == NESTED
    input.Body.metrics[_].expression == STRING
    input.Body.metrics[_].invisible == BOOLEAN
    input.Body.metrics[_].name == STRING
    input.Body.offset == STRING
    input.Body.orderBys[_].desc == BOOLEAN
    input.Body.orderBys[_].dimension.dimensionName == STRING
    input.Body.orderBys[_].dimension.orderType == enum_DimensionOrderByOrderType[_]
    input.Body.orderBys[_].metric.metricName == STRING
    input.Body.orderBys[_].pivot.metricName == STRING
    input.Body.orderBys[_].pivot.pivotSelections[_].dimensionName == STRING
    input.Body.orderBys[_].pivot.pivotSelections[_].dimensionValue == STRING
    input.Body.property == STRING
    input.Body.returnPropertyQuota == BOOLEAN
    input.ReqMap.property == STRING
    input.ProviderMetadata.Region == STRING
}

analyticsdata.runPivotReport

enum_CohortsRangeGranularity := [ "GRANULARITY_UNSPECIFIED", "DAILY", "WEEKLY", "MONTHLY" ]
enum_DimensionOrderByOrderType := [ "ORDER_TYPE_UNSPECIFIED", "ALPHANUMERIC", "CASE_INSENSITIVE_ALPHANUMERIC", "NUMERIC" ]
enum_NumericFilterOperation := [ "OPERATION_UNSPECIFIED", "EQUAL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "GREATER_THAN", "GREATER_THAN_OR_EQUAL" ]
enum_PivotMetricAggregations := [ "METRIC_AGGREGATION_UNSPECIFIED", "TOTAL", "MINIMUM", "MAXIMUM", "COUNT" ]
enum_StringFilterMatchType := [ "MATCH_TYPE_UNSPECIFIED", "EXACT", "BEGINS_WITH", "ENDS_WITH", "CONTAINS", "FULL_REGEXP", "PARTIAL_REGEXP" ]

valid {
    input.Body.cohortSpec.cohortReportSettings.accumulate == BOOLEAN
    input.Body.cohortSpec.cohorts[_].dateRange.endDate == STRING
    input.Body.cohortSpec.cohorts[_].dateRange.name == STRING
    input.Body.cohortSpec.cohorts[_].dateRange.startDate == STRING
    input.Body.cohortSpec.cohorts[_].dimension == STRING
    input.Body.cohortSpec.cohorts[_].name == STRING
    input.Body.cohortSpec.cohortsRange.endOffset == INTEGER
    input.Body.cohortSpec.cohortsRange.granularity == enum_CohortsRangeGranularity[_]
    input.Body.cohortSpec.cohortsRange.startOffset == INTEGER
    input.Body.currencyCode == STRING
    input.Body.dateRanges[_].endDate == STRING
    input.Body.dateRanges[_].name == STRING
    input.Body.dateRanges[_].startDate == STRING
    input.Body.dimensionFilter.andGroup.expressions[_] == NESTED
    input.Body.dimensionFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.dimensionFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.dimensionFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.dimensionFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.dimensionFilter.filter.fieldName == STRING
    input.Body.dimensionFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.dimensionFilter.filter.inListFilter.values[_] == STRING
    input.Body.dimensionFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.dimensionFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.dimensionFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.dimensionFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.dimensionFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.dimensionFilter.filter.stringFilter.value == STRING
    input.Body.dimensionFilter.notExpression == NESTED
    input.Body.dimensionFilter.orGroup.expressions[_] == NESTED
    input.Body.dimensions[_].dimensionExpression.concatenate.delimiter == STRING
    input.Body.dimensions[_].dimensionExpression.concatenate.dimensionNames[_] == STRING
    input.Body.dimensions[_].dimensionExpression.lowerCase.dimensionName == STRING
    input.Body.dimensions[_].dimensionExpression.upperCase.dimensionName == STRING
    input.Body.dimensions[_].name == STRING
    input.Body.entity.propertyId == STRING
    input.Body.keepEmptyRows == BOOLEAN
    input.Body.metricFilter.andGroup.expressions[_] == NESTED
    input.Body.metricFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.metricFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.metricFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.metricFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.metricFilter.filter.fieldName == STRING
    input.Body.metricFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.metricFilter.filter.inListFilter.values[_] == STRING
    input.Body.metricFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.metricFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.metricFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.metricFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.metricFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.metricFilter.filter.stringFilter.value == STRING
    input.Body.metricFilter.notExpression == NESTED
    input.Body.metricFilter.orGroup.expressions[_] == NESTED
    input.Body.metrics[_].expression == STRING
    input.Body.metrics[_].invisible == BOOLEAN
    input.Body.metrics[_].name == STRING
    input.Body.pivots[_].fieldNames[_] == STRING
    input.Body.pivots[_].limit == STRING
    input.Body.pivots[_].metricAggregations[_] == enum_PivotMetricAggregations[_]
    input.Body.pivots[_].offset == STRING
    input.Body.pivots[_].orderBys[_].desc == BOOLEAN
    input.Body.pivots[_].orderBys[_].dimension.dimensionName == STRING
    input.Body.pivots[_].orderBys[_].dimension.orderType == enum_DimensionOrderByOrderType[_]
    input.Body.pivots[_].orderBys[_].metric.metricName == STRING
    input.Body.pivots[_].orderBys[_].pivot.metricName == STRING
    input.Body.pivots[_].orderBys[_].pivot.pivotSelections[_].dimensionName == STRING
    input.Body.pivots[_].orderBys[_].pivot.pivotSelections[_].dimensionValue == STRING
    input.Body.returnPropertyQuota == BOOLEAN
    input.ProviderMetadata.Region == STRING
}

analyticsdata.runReport

enum_CohortsRangeGranularity := [ "GRANULARITY_UNSPECIFIED", "DAILY", "WEEKLY", "MONTHLY" ]
enum_DimensionOrderByOrderType := [ "ORDER_TYPE_UNSPECIFIED", "ALPHANUMERIC", "CASE_INSENSITIVE_ALPHANUMERIC", "NUMERIC" ]
enum_NumericFilterOperation := [ "OPERATION_UNSPECIFIED", "EQUAL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "GREATER_THAN", "GREATER_THAN_OR_EQUAL" ]
enum_RunReportRequestMetricAggregations := [ "METRIC_AGGREGATION_UNSPECIFIED", "TOTAL", "MINIMUM", "MAXIMUM", "COUNT" ]
enum_StringFilterMatchType := [ "MATCH_TYPE_UNSPECIFIED", "EXACT", "BEGINS_WITH", "ENDS_WITH", "CONTAINS", "FULL_REGEXP", "PARTIAL_REGEXP" ]

valid {
    input.Body.cohortSpec.cohortReportSettings.accumulate == BOOLEAN
    input.Body.cohortSpec.cohorts[_].dateRange.endDate == STRING
    input.Body.cohortSpec.cohorts[_].dateRange.name == STRING
    input.Body.cohortSpec.cohorts[_].dateRange.startDate == STRING
    input.Body.cohortSpec.cohorts[_].dimension == STRING
    input.Body.cohortSpec.cohorts[_].name == STRING
    input.Body.cohortSpec.cohortsRange.endOffset == INTEGER
    input.Body.cohortSpec.cohortsRange.granularity == enum_CohortsRangeGranularity[_]
    input.Body.cohortSpec.cohortsRange.startOffset == INTEGER
    input.Body.currencyCode == STRING
    input.Body.dateRanges[_].endDate == STRING
    input.Body.dateRanges[_].name == STRING
    input.Body.dateRanges[_].startDate == STRING
    input.Body.dimensionFilter.andGroup.expressions[_] == NESTED
    input.Body.dimensionFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.dimensionFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.dimensionFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.dimensionFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.dimensionFilter.filter.fieldName == STRING
    input.Body.dimensionFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.dimensionFilter.filter.inListFilter.values[_] == STRING
    input.Body.dimensionFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.dimensionFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.dimensionFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.dimensionFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.dimensionFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.dimensionFilter.filter.stringFilter.value == STRING
    input.Body.dimensionFilter.notExpression == NESTED
    input.Body.dimensionFilter.orGroup.expressions[_] == NESTED
    input.Body.dimensions[_].dimensionExpression.concatenate.delimiter == STRING
    input.Body.dimensions[_].dimensionExpression.concatenate.dimensionNames[_] == STRING
    input.Body.dimensions[_].dimensionExpression.lowerCase.dimensionName == STRING
    input.Body.dimensions[_].dimensionExpression.upperCase.dimensionName == STRING
    input.Body.dimensions[_].name == STRING
    input.Body.entity.propertyId == STRING
    input.Body.keepEmptyRows == BOOLEAN
    input.Body.limit == STRING
    input.Body.metricAggregations[_] == enum_RunReportRequestMetricAggregations[_]
    input.Body.metricFilter.andGroup.expressions[_] == NESTED
    input.Body.metricFilter.filter.betweenFilter.fromValue.doubleValue == NUMBER
    input.Body.metricFilter.filter.betweenFilter.fromValue.int64Value == STRING
    input.Body.metricFilter.filter.betweenFilter.toValue.doubleValue == NUMBER
    input.Body.metricFilter.filter.betweenFilter.toValue.int64Value == STRING
    input.Body.metricFilter.filter.fieldName == STRING
    input.Body.metricFilter.filter.inListFilter.caseSensitive == BOOLEAN
    input.Body.metricFilter.filter.inListFilter.values[_] == STRING
    input.Body.metricFilter.filter.numericFilter.operation == enum_NumericFilterOperation[_]
    input.Body.metricFilter.filter.numericFilter.value.doubleValue == NUMBER
    input.Body.metricFilter.filter.numericFilter.value.int64Value == STRING
    input.Body.metricFilter.filter.stringFilter.caseSensitive == BOOLEAN
    input.Body.metricFilter.filter.stringFilter.matchType == enum_StringFilterMatchType[_]
    input.Body.metricFilter.filter.stringFilter.value == STRING
    input.Body.metricFilter.notExpression == NESTED
    input.Body.metricFilter.orGroup.expressions[_] == NESTED
    input.Body.metrics[_].expression == STRING
    input.Body.metrics[_].invisible == BOOLEAN
    input.Body.metrics[_].name == STRING
    input.Body.offset == STRING
    input.Body.orderBys[_].desc == BOOLEAN
    input.Body.orderBys[_].dimension.dimensionName == STRING
    input.Body.orderBys[_].dimension.orderType == enum_DimensionOrderByOrderType[_]
    input.Body.orderBys[_].metric.metricName == STRING
    input.Body.orderBys[_].pivot.metricName == STRING
    input.Body.orderBys[_].pivot.pivotSelections[_].dimensionName == STRING
    input.Body.orderBys[_].pivot.pivotSelections[_].dimensionValue == STRING
    input.Body.returnPropertyQuota == BOOLEAN
    input.ProviderMetadata.Region == STRING
}