diff --git a/_docs/master/README.md b/_docs/master/README.md index 68bb4559e2..c83b4ec1bd 100644 --- a/_docs/master/README.md +++ b/_docs/master/README.md @@ -135,7 +135,7 @@ Metabase's reference documentation. - [Model persistence](./data-modeling/model-persistence) - [Metrics](./data-modeling/metrics) - [Table metadata admin settings](./data-modeling/metadata-editing) -- [Field types](./data-modeling/semantic-types) +- [Field types](./data-modeling/field-types) - [Formatting defaults](./data-modeling/formatting) - [Working with JSON](./data-modeling/json-unfolding) - [Segments](./data-modeling/segments) diff --git a/_docs/master/api.html b/_docs/master/api.html index d94a040518..c96928f667 100644 --- a/_docs/master/api.html +++ b/_docs/master/api.html @@ -113,105 +113,6 @@ }, "required" : [ "zoom", "x", "y", "lat-field", "lon-field" ] }, - "gsheets.response" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "error" : { - "type" : "boolean" - }, - "message" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "error", "message" ] - }, { - "oneOf" : [ { - "type" : "object", - "properties" : { } - }, { - "type" : "object", - "properties" : { - "created_at" : { - "type" : "integer", - "minimum" : 1 - }, - "created_by_id" : { - "type" : "integer", - "minimum" : 1 - }, - "db_id" : { - "type" : "integer", - "minimum" : 1 - }, - "sync_started_at" : { - "type" : "integer", - "minimum" : 1 - }, - "url" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "url", "created_at", "sync_started_at", "created_by_id", "db_id" ] - }, { - "type" : "object", - "properties" : { - "created_at" : { - "type" : "integer", - "minimum" : 1 - }, - "created_by_id" : { - "type" : "integer", - "minimum" : 1 - }, - "db_id" : { - "type" : "integer", - "minimum" : 1 - }, - "last_sync_at" : { - "type" : "integer", - "minimum" : 1 - }, - "next_sync_at" : { - "type" : "integer", - "minimum" : 1 - }, - "url" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "url", "created_at", "last_sync_at", "next_sync_at", "created_by_id", "db_id" ] - }, { - "type" : "object", - "properties" : { - "created_at" : { - "type" : "integer", - "minimum" : 1 - }, - "created_by_id" : { - "type" : "integer", - "minimum" : 1 - }, - "db_id" : { - "type" : "integer", - "minimum" : 1 - }, - "error_message" : { - "type" : "string", - "minLength" : 1 - }, - "url" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "url", "created_at", "error_message", "created_by_id", "db_id" ] - } ] - } ] - }, "metabase-enterprise.metabot-v3.client.schema.message" : { "allOf" : [ { "type" : "object", @@ -297,126 +198,10 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.answer-sources-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "type" : "object", - "properties" : { - "metrics" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.full-metric" - } - }, - "models" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.full-table" - } - } - }, - "required" : [ "metrics", "models" ] - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.basic-metric" : { - "type" : "object", - "properties" : { - "default_time_dimension_field_id" : { - "type" : "string" - }, - "description" : { - "type" : "string" - }, - "id" : { - "type" : "integer" - }, - "name" : { - "type" : "string" - }, - "type" : { - "const" : "metric" - } - }, - "required" : [ "id", "type", "name" ] - }, - "metabase-enterprise.metabot-v3.tools.api.basic-table" : { - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "fields" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" - }, - "id" : { - "type" : "integer" - }, - "metrics" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.basic-metric" - } - }, - "name" : { - "type" : "string" - }, - "type" : { - "type" : "string", - "enum" : [ "model", "table" ] - } - }, - "required" : [ "id", "type", "name", "fields" ] - }, "metabase-enterprise.metabot-v3.tools.api.bucket" : { "type" : "string", "enum" : [ "millisecond", "second", "minute", "hour", "day", "week", "month", "quarter", "year", "second-of-minute", "minute-of-hour", "hour-of-day", "day-of-week", "day-of-month", "day-of-year", "week-of-year", "month-of-year", "quarter-of-year", "year-of-era" ] }, - "metabase-enterprise.metabot-v3.tools.api.column" : { - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "field_id" : { - "type" : "string" - }, - "field_values" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.field-values" - }, - "name" : { - "type" : "string" - }, - "semantic_type" : { - "type" : "string" - }, - "type" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.field-type" - } - }, - "required" : [ "field_id", "name" ] - }, - "metabase-enterprise.metabot-v3.tools.api.columns" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.column" - } - }, - "metabase-enterprise.metabot-v3.tools.api.count" : { - "type" : "integer" - }, "metabase-enterprise.metabot-v3.tools.api.create-dashboard-subscription-arguments" : { "allOf" : [ { "type" : "object", @@ -579,28 +364,6 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.field-type" : { - "type" : "string", - "enum" : [ "boolean", "date", "datetime", "time", "number", "string" ] - }, - "metabase-enterprise.metabot-v3.tools.api.field-values" : { - "anyOf" : [ { - "type" : "array", - "items" : { - "type" : "boolean" - } - }, { - "type" : "array", - "items" : { - "type" : "number" - } - }, { - "type" : "array", - "items" : { - "type" : "string" - } - } ] - }, "metabase-enterprise.metabot-v3.tools.api.field-values-arguments" : { "allOf" : [ { "type" : "object", @@ -625,38 +388,6 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.field-values-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "type" : "object", - "properties" : { - "field_id" : { - "type" : "string" - }, - "statistics" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.statistics" - }, - "values" : { - "type" : "array", - "items" : { } - } - }, - "required" : [ "field_id" ] - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, "metabase-enterprise.metabot-v3.tools.api.filter" : { "anyOf" : [ { "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.existence-filter" @@ -736,86 +467,6 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.filtering-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "type" : "object", - "properties" : { - "query" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Query" - }, - "query_id" : { - "type" : "string" - }, - "result_columns" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.column" - } - }, - "type" : { - "const" : "query" - } - }, - "required" : [ "type", "query_id", "query", "result_columns" ] - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.find-metric-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "type" : "object", - "properties" : { - "default_time_dimension_field_id" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.column" - }, - "description" : { - "type" : "string" - }, - "id" : { - "type" : "integer" - }, - "name" : { - "type" : "string" - }, - "queryable_dimensions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.column" - } - }, - "type" : { - "const" : "metric" - } - }, - "required" : [ "id", "type", "name", "queryable_dimensions" ] - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, "metabase-enterprise.metabot-v3.tools.api.find-outliers-arguments" : { "allOf" : [ { "type" : "object", @@ -885,97 +536,6 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.find-outliers-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "dimension" : { }, - "value" : { - "anyOf" : [ { - "type" : "integer" - }, { - "type" : "number" - } ] - } - }, - "required" : [ "dimension", "value" ] - } - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.full-metric" : { - "type" : "object", - "properties" : { - "default_time_dimension_field_id" : { - "type" : "string" - }, - "description" : { - "type" : "string" - }, - "id" : { - "type" : "integer" - }, - "name" : { - "type" : "string" - }, - "queryable_dimensions" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" - }, - "type" : { - "const" : "metric" - } - }, - "required" : [ "id", "type", "name" ] - }, - "metabase-enterprise.metabot-v3.tools.api.full-table" : { - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "fields" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" - }, - "id" : { - "type" : "integer" - }, - "metrics" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.basic-metric" - } - }, - "name" : { - "type" : "string" - }, - "queryable_foreign_key_tables" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.basic-table" - } - }, - "type" : { - "type" : "string", - "enum" : [ "model", "table" ] - } - }, - "required" : [ "id", "type", "name", "fields" ] - }, "metabase-enterprise.metabot-v3.tools.api.generate-insights-arguments" : { "type" : "object", "properties" : { @@ -1018,74 +578,6 @@ }, "required" : [ "for" ] }, - "metabase-enterprise.metabot-v3.tools.api.get-current-user-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "type" : "object", - "properties" : { - "email_address" : { - "type" : "string" - }, - "id" : { - "type" : "integer" - }, - "name" : { - "type" : "string" - }, - "type" : { - "const" : "user" - } - }, - "required" : [ "id", "type", "name", "email_address" ] - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.get-dashboard-details-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "id" : { - "type" : "integer" - }, - "name" : { - "type" : "string" - }, - "type" : { - "const" : "dashboard" - } - }, - "required" : [ "id", "type", "name" ] - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, "metabase-enterprise.metabot-v3.tools.api.get-metric-details-arguments" : { "allOf" : [ { "type" : "object", @@ -1112,60 +604,6 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.get-metric-details-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.full-metric" - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.get-query-details-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "type" : "object", - "properties" : { - "query" : { - "type" : "object", - "properties" : { } - }, - "query_id" : { - "type" : "string" - }, - "result_columns" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" - }, - "type" : { - "const" : "query" - } - }, - "required" : [ "type", "query_id", "query", "result_columns" ] - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, "metabase-enterprise.metabot-v3.tools.api.get-report-details-arguments" : { "allOf" : [ { "type" : "object", @@ -1188,43 +626,6 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.get-report-details-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "id" : { - "type" : "integer" - }, - "name" : { - "type" : "string" - }, - "result_columns" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" - }, - "type" : { - "const" : "question" - } - }, - "required" : [ "id", "type", "name", "result_columns" ] - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, "metabase-enterprise.metabot-v3.tools.api.get-table-details-arguments" : { "allOf" : [ { "type" : "object", @@ -1261,25 +662,6 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.get-table-details-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.full-table" - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, "metabase-enterprise.metabot-v3.tools.api.group-by" : { "allOf" : [ { "type" : "object", @@ -1323,9 +705,6 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.proportion" : { - "type" : "number" - }, "metabase-enterprise.metabot-v3.tools.api.query-metric-arguments" : { "allOf" : [ { "type" : "object", @@ -1409,59 +788,6 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.statistics" : { - "type" : "object", - "properties" : { - "values" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.field-values" - }, - "min" : { - "type" : "number" - }, - "percent_url" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" - }, - "average_length" : { - "type" : "number" - }, - "earliest" : { - "type" : "string" - }, - "q1" : { - "type" : "number" - }, - "max" : { - "type" : "number" - }, - "distinct_count" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.count" - }, - "percent_state" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" - }, - "percent_null" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" - }, - "avg" : { - "type" : "number" - }, - "sd" : { - "type" : "number" - }, - "percent_email" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" - }, - "latest" : { - "type" : "string" - }, - "q3" : { - "type" : "number" - }, - "percent_json" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" - } - } - }, "metabase-enterprise.metabot-v3.tools.api.string-filter" : { "allOf" : [ { "type" : "object", @@ -1600,53 +926,192 @@ }, "required" : [ "conversation_id" ] }, - "metabase.analyze.query-results.ResultsMetadata" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.legacy-column-metadata" - }, - "description" : "value must be an array of valid results column metadata maps.", - "optional" : true - }, - "metabase.cache.api..cache-strategy.base" : { + "metabase.analyze.fingerprint.schema.Fingerprint" : { "type" : "object", "properties" : { + "experimental" : { + "type" : "object", + "properties" : { } + }, + "global" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.GlobalFingerprint" + }, "type" : { - "type" : "string", - "enum" : [ "nocache", "ttl", "duration", "schedule" ] + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.TypeSpecificFingerprint" } - }, - "required" : [ "type" ] - }, - "metabase.cache.api..cache-strategy.ee" : { - "description" : "Schema for a caching strategy in EE when we have an premium token with `:cache-granular-controls`.", - "allOf" : [ { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.base" - }, { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.nocache" - }, { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ttl" - }, { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ee.duration" - }, { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ee.schedule" - } ] - } ] + } }, - "metabase.cache.api..cache-strategy.ee.duration" : { + "metabase.analyze.fingerprint.schema.GlobalFingerprint" : { "type" : "object", "properties" : { - "duration" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "refresh_automatically" : { - "type" : "boolean" - }, - "type" : { - "const" : "duration" + "distinct-count" : { + "type" : "integer" + }, + "nil%" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" + } + } + }, + "metabase.analyze.fingerprint.schema.NumberFingerprint" : { + "type" : "object", + "properties" : { + "avg" : { + "type" : "number" + }, + "max" : { + "type" : "number" + }, + "min" : { + "type" : "number" + }, + "q1" : { + "type" : "number" + }, + "q3" : { + "type" : "number" + }, + "sd" : { + "type" : "number" + } + } + }, + "metabase.analyze.fingerprint.schema.Percent" : { + "type" : "number" + }, + "metabase.analyze.fingerprint.schema.TemporalFingerprint" : { + "type" : "object", + "properties" : { + "earliest" : { + "type" : "string" + }, + "latest" : { + "type" : "string" + } + } + }, + "metabase.analyze.fingerprint.schema.TextFingerprint" : { + "type" : "object", + "properties" : { + "average-length" : { + "type" : "number" + }, + "percent-email" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" + }, + "percent-json" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" + }, + "percent-state" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" + }, + "percent-url" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" + } + } + }, + "metabase.analyze.fingerprint.schema.TypeSpecificFingerprint" : { + "type" : "object", + "properties" : { + "type/DateTime" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.TemporalFingerprint" + }, + "type/Number" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.NumberFingerprint" + }, + "type/Text" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.TextFingerprint" + } + } + }, + "metabase.analyze.query-results.MaybeUnnormalizedReference" : { }, + "metabase.analyze.query-results.ResultColumnMetadata" : { + "type" : "object", + "properties" : { + "field_ref" : { + "$ref" : "#/components/schemas/metabase.analyze.query-results.MaybeUnnormalizedReference" + }, + "fingerprint" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Fingerprint" + }, + "base_type" : { + "description" : "value must be a valid field data type (keyword or string)." + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "name" : { + "type" : "string" + }, + "semantic_type" : { + "description" : "value must be a valid field semantic or relation type (keyword or string)." + }, + "display_name" : { + "type" : "string" + }, + "converted_timezone" : { + "$ref" : "#/components/schemas/metabase.lib.schema.expression.temporal.timezone-id" + }, + "unit" : { + "description" : "value must be a keyword or string.", + "anyOf" : [ { + "type" : "string" + }, { + "type" : "string" + } ] + }, + "description" : { + "type" : "string" + } + }, + "required" : [ "name", "display_name", "base_type" ] + }, + "metabase.analyze.query-results.ResultsMetadata" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.analyze.query-results.ResultColumnMetadata" + }, + "description" : "value must be an array of valid results column metadata maps.", + "optional" : true + }, + "metabase.cache.api..cache-strategy.base" : { + "type" : "object", + "properties" : { + "type" : { + "type" : "string", + "enum" : [ "nocache", "ttl", "duration", "schedule" ] + } + }, + "required" : [ "type" ] + }, + "metabase.cache.api..cache-strategy.ee" : { + "description" : "Schema for a caching strategy in EE when we have an premium token with `:cache-granular-controls`.", + "allOf" : [ { + "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.base" + }, { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.nocache" + }, { + "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ttl" + }, { + "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ee.duration" + }, { + "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ee.schedule" + } ] + } ] + }, + "metabase.cache.api..cache-strategy.ee.duration" : { + "type" : "object", + "properties" : { + "duration" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "refresh_automatically" : { + "type" : "boolean" + }, + "type" : { + "const" : "duration" }, "unit" : { "type" : "string", @@ -1762,2470 +1227,82 @@ "properties" : { "path" : { "type" : "string" - }, - "recipient-type" : { - "enum" : [ "cc", "bcc", "cc", "bcc" ] - }, - "subject" : { - "type" : "string" - }, - "type" : { - "enum" : [ "email/handlebars-resource", "email/handlebars-text", "email/handlebars-resource", "email/handlebars-text" ] - } - }, - "required" : [ "type", "subject", "path" ] - }, { - "type" : "object", - "properties" : { - "body" : { - "type" : "string" - }, - "recipient-type" : { - "enum" : [ "cc", "bcc", "cc", "bcc" ] - }, - "subject" : { - "type" : "string" - }, - "type" : { - "enum" : [ "email/handlebars-resource", "email/handlebars-text", "email/handlebars-resource", "email/handlebars-text" ] - } - }, - "required" : [ "type", "subject", "body" ] - } ] - }, - "metabase.collections.api.DashboardQuestionCandidate" : { - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "id" : { - "type" : "integer", - "minimum" : 1 - }, - "name" : { - "type" : "string" - }, - "sole_dashboard_info" : { - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "id" : { - "type" : "integer", - "minimum" : 1 - }, - "name" : { - "type" : "string" - } - }, - "required" : [ "id", "name" ] - } - }, - "required" : [ "id", "name", "sole_dashboard_info" ] - }, - "metabase.collections.api.DashboardQuestionCandidatesResponse" : { - "type" : "object", - "properties" : { - "data" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.collections.api.DashboardQuestionCandidate" - } - }, - "total" : { - "type" : "integer" - } - }, - "required" : [ "data", "total" ] - }, - "metabase.collections.api.MoveDashboardQuestionCandidatesResponse" : { - "type" : "object", - "properties" : { - "moved" : { - "type" : "array", - "items" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - } - }, - "required" : [ "moved" ] - }, - "metabase.legacy-mbql.schema.!=" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.*" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.+" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.-" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema./" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.<" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.<=" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.=" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.>" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.>=" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.Addable" : { - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateTimeExpressionArg" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.interval" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpressionArg" - } ] - }, - "metabase.legacy-mbql.schema.Aggregation" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.aggregation-options" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.UnnamedAggregation" - } ] - }, - "metabase.legacy-mbql.schema.BooleanExpression" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.and" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.or" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.not" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.=" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.!=" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.<" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.>" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.<=" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.>=" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.between" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.starts-with" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ends-with" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.contains" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.in" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.not-in" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.does-not-contain" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.inside" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.is-empty" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.not-empty" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.is-null" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.not-null" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.relative-time-interval" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.time-interval" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.during" - } ] - }, - "metabase.legacy-mbql.schema.Constraints" : { - "description" : "Additional constraints added to a query limiting the maximum number of rows that can be returned. Mostly useful\n because native queries don't support the MBQL `:limit` clause. For MBQL queries, if `:limit` is set, it will\n override these values.", - "type" : "object", - "properties" : { - "max-results" : { - "description" : "Maximum number of results to allow for a query with aggregations. If `max-results-bare-rows` is unset, this\n applies to all queries", - "$ref" : "#/components/schemas/metabase.lib.schema.common.int-greater-than-or-equal-to-zero" - }, - "max-results-bare-rows" : { - "description" : "Maximum number of results to allow for a query with no aggregations. If set, this should be LOWER than\n `:max-results`.", - "$ref" : "#/components/schemas/metabase.lib.schema.common.int-greater-than-or-equal-to-zero" - } - } - }, - "metabase.legacy-mbql.schema.DatabaseID" : { - "description" : "Schema for a valid `:database` ID, in the top-level 'outer' query. Either a positive integer (referring to an\n actual Database), or the saved questions virtual ID, which is a placeholder used for queries using the\n `:source-table \"card__id\"` shorthand for a source query resolved by middleware (since clients might not know the\n actual DB for that source query.)", - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.id.saved-questions-virtual-database" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.id.database" - } ] - }, - "metabase.legacy-mbql.schema.DateOrDatetimeLiteral" : { - "description" : "Schema for a valid date or datetime literal.", - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.relative-datetime" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.absolute-datetime" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.literal.datetime" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.literal.date" - } ] - }, - "metabase.legacy-mbql.schema.DateTimeExpressionArg" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Aggregation" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatetimeExpression" - }, { - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateOrDatetimeLiteral" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - } ] - } ] - }, - "metabase.legacy-mbql.schema.DateTimeUnit" : { - "description" : "Valid unit for *datetime* bucketing.", - "type" : "string", - "enum" : [ "quarter", "day", "hour", "week", "second", "default", "day-of-week", "hour-of-day", "month", "month-of-year", "day-of-month", "year", "day-of-year", "millisecond", "year-of-era", "week-of-year", "quarter-of-year", "minute-of-hour", "minute" ] - }, - "metabase.legacy-mbql.schema.DateUnit" : { - "description" : "Valid unit for date bucketing.", - "type" : "string", - "enum" : [ "quarter", "day", "week", "default", "day-of-week", "month", "month-of-year", "day-of-month", "year", "day-of-year", "year-of-era", "week-of-year", "quarter-of-year" ] - }, - "metabase.legacy-mbql.schema.DatetimeDiffUnit" : { - "description" : "Valid units for a datetime-diff clause.", - "type" : "string", - "enum" : [ "second", "minute", "hour", "day", "week", "month", "quarter", "year" ] - }, - "metabase.legacy-mbql.schema.DatetimeExpression" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.+" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.datetime-add" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.datetime-subtract" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.convert-timezone" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.now" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.date" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.datetime" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.today" - } ] - }, - "metabase.legacy-mbql.schema.EqualityComparable" : { - "anyOf" : [ { - "type" : "boolean" - }, { - "type" : "number" - }, { - "type" : "string" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemporalLiteral" - }, { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.relative-datetime" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - } ] - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ExpressionArg" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" - } ], - "optional" : true - }, - "metabase.legacy-mbql.schema.ExpressionArg" : { - "oneOf" : [ { - "type" : "number" - }, { - "type" : "boolean" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.BooleanExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatetimeExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Aggregation" - }, { - "type" : "string" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.StringExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - } ] - }, - "metabase.legacy-mbql.schema.ExtractWeekMode" : { - "description" : "Valid modes to extract weeks.", - "type" : "string", - "enum" : [ "iso", "us", "instance" ] - }, - "metabase.legacy-mbql.schema.FieldOptions" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "base-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "binning" : { - "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning", - "description" : "Replaces `binning-strategy`.\n\n Using binning requires the driver to support the `:binning` feature." - }, - "inherited-temporal-unit" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateTimeUnit" - }, - "join-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.join.alias", - "description" : "Replaces `joined-field`.\n\n `:join-alias` is used to refer to a FieldOrExpression from a different Table/nested query that you are EXPLICITLY\n JOINING against." - }, - "source-field" : { - "description" : "Replaces `fk->`.\n\n `:source-field` is used to refer to a FieldOrExpression from a different Table you would like IMPLICITLY JOINED to\n the source table.\n\n If both `:source-field` and `:join-alias` are supplied, `:join-alias` should be used to perform the join;\n `:source-field` should be for information purposes only.", - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "source-field-join-alias" : { - "description" : "The join alias of the source field used for an implicit join.", - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "source-field-name" : { - "description" : "The name or desired alias of the field used for an implicit join.", - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "temporal-unit" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateTimeUnit", - "description" : "`:temporal-unit` is used to specify DATE BUCKETING for a FieldOrExpression that represents a moment in time of\n some sort.\n\n There is no requirement that all `:type/Temporal` derived FieldOrExpressions specify a `:temporal-unit`, but for\n legacy reasons `:field` clauses that refer to `:type/DateTime` FieldOrExpressions will be automatically \"bucketed\"\n in the `:breakout` and `:filter` clauses, but nowhere else. Auto-bucketing only applies to `:filter` clauses when\n values for comparison are `yyyy-MM-dd` date strings. See the `auto-bucket-datetimes` middleware for more details.\n `:field` clauses elsewhere will not be automatically bucketed, so drivers still need to make sure they do any\n special datetime handling for plain `:field` clauses when their FieldOrExpression derives from `:type/DateTime`." - } - } - }, { - "description" : "If `:base-type` is specified, the `:temporal-unit` must make sense, e.g. no bucketing by `:year`for\n a `:type/Time` column.", - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.validate-temporal-unit" - }, { - "description" : "You cannot use `:binning` keys like `:strategy` in the top level.", - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.no-binning-options-at-top-level" - } ] - }, - "metabase.legacy-mbql.schema.FieldOrExpressionDef" : { - "description" : "Schema for anything that is accepted as a top-level expression definition, either an arithmetic expression such as a\n `:+` clause or a `:field` or `:value` clause.", - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.StringExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.BooleanExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatetimeExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case:if" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.offset" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - } ] - }, - "metabase.legacy-mbql.schema.Fields" : { - "allOf" : [ { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - }, - "minItems" : 1 - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.helpers.distinct" - } ] - }, - "metabase.legacy-mbql.schema.Filter" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatetimeExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.StringExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.BooleanExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.segment" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - } ] - }, - "metabase.legacy-mbql.schema.Ident" : { - "description" : "Unique identifier string for new `:column` refs. The new refs aren't used in legacy MBQL (currently) but the\n idents for column-introducing new clauses (joins, aggregations, breakouts, expressions) are randomly generated when\n the clauses are created, so the idents must be preserved in legacy MBQL.\n\n These are opaque strings under the initial design; I've made them a separate schema for documentation and\n future-proofing.", - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, { - "type" : "string" - } ] - }, - "metabase.legacy-mbql.schema.IntGreaterThanZeroOrNumericExpression" : { - "oneOf" : [ { - "description" : "Must be a positive integer.", - "type" : "integer", - "minimum" : 1 - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" - } ] - }, - "metabase.legacy-mbql.schema.Join" : { - "description" : "Perform the equivalent of a SQL `JOIN` with another Table or nested `:source-query`. JOINs are either explicitly\n specified in the incoming query, or implicitly generated when one uses a `:field` clause with `:source-field`.\n\n In the top-level query, you can reference Fields from the joined table or nested query by including `:source-field`\n in the `:field` options (known as implicit joins); for explicit joins, you *must* specify `:join-alias` yourself; in\n the `:field` options, e.g.\n\n ;; for joins against other Tables/MBQL source queries\n [:field 1 {:join-alias \"my_join_alias\"}]\n\n ;; for joins against native queries\n [:field \"my_field\" {:base-type :field/Integer, :join-alias \"my_join_alias\"}]", - "type" : "object", - "properties" : { - "ident" : { - "description" : "An opaque string used as a unique identifier for this join clause, even if it evolves. This string is randomly\n generated when a join clause is created, so it can never be confused with another join of the same table.", - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Ident" - }, - "strategy" : { - "description" : "Defaults to `:left-join`; used for all automatically-generated JOINs\n\n Driver implementations: this is guaranteed to be present after pre-processing.", - "type" : "string", - "enum" : [ "full-join", "right-join", "left-join", "inner-join" ] - }, - "source-metadata" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.legacy-column-metadata" - }, - "description" : "Metadata about the source query being used, if pulled in from a Card via the\n `:source-table \"card__id\"` syntax. added automatically by the `resolve-card-id-source-tables` middleware." - }, - "condition" : { - "description" : "The condition on which to JOIN. Can be anything that is a valid `:filter` clause. For automatically-generated\n JOINs this is usually something like\n\n [:= [:field {:join-alias }]]", - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Filter" - }, - "source-query" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.SourceQuery" - }, - "fk-field-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field", - "description" : "Mostly used only internally. When a join is implicitly generated via a `:field` clause with\n `:source-field`, the ID of the foreign key field in the source Table will be recorded here. This information is used\n to add `fk_field_id` information to the `:cols` in the query results, and also for drill-thru. When generating\n explicit joins by hand you can usually omit this information, altho it doesn't hurt to include it if you know it.\n\n Don't set this information yourself. It will have no effect." - }, - "fields" : { - "description" : "The Fields from this join to include in parent-level results. This can be either `:none`, `:all`, or a sequence\n of `:field` clauses.\n\n * `:none`: no Fields from the joined table or nested query are included (unless indirectly included by breakouts or\n other clauses). This is the default, and what is used for automatically-generated joins.\n\n * `:all`: will include all of the Field from the joined table or query\n\n * a sequence of Field clauses: include only the Fields specified. Valid clauses are the same as the top-level\n `:fields` clause. This should be non-empty and all elements should be distinct. The normalizer will automatically\n remove duplicate fields for you, and replace empty clauses with `:none`.\n\n Driver implementations: you can ignore this clause. Relevant fields will be added to top-level `:fields` clause with\n appropriate aliases.", - "anyOf" : [ { - "type" : "string", - "enum" : [ "all", "none" ] - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Fields" - } ] - }, - "source-table" : { - "description" : "*What* to JOIN. Self-joins can be done by using the same `:source-table` as in the query where\n this is specified. YOU MUST SUPPLY EITHER `:source-table` OR `:source-query`, BUT NOT BOTH!", - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.id.table" - }, { - "description" : "`card__` string Table ID", - "type" : "string", - "pattern" : "^card__[1-9]\\d*$" - } ] - }, - "alias" : { - "description" : "The name used to alias the joined table or query. This is usually generated automatically and generally looks\n like `table__via__field`. You can specify this yourself if you need to reference a joined field with a `:join-alias`\n in the options.\n\n Driver implementations: This is guaranteed to be present after pre-processing.", - "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" - } - }, - "required" : [ "condition" ] - }, - "metabase.legacy-mbql.schema.Joins" : { - "description" : "Schema for a valid sequence of `Join`s. Must be a non-empty sequence, and `:alias`, if specified, must be unique.", - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Join" - }, - "minItems" : 1 - }, - "metabase.legacy-mbql.schema.MBQLQuery" : { - "type" : "object", - "properties" : { - "breakout" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - }, - "minItems" : 1 - }, - "source-metadata" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.legacy-column-metadata" - }, - "description" : "Info about the columns of the source query. Added in automatically by middleware. This metadata is\n primarily used to let power things like binning when used with Field Literals instead of normal Fields." - }, - "source-query" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.SourceQuery" - }, - "limit" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.int-greater-than-or-equal-to-zero" - }, - "filter" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Filter" - }, - "joins" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Joins" - }, - "aggregation" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Aggregation" - }, - "minItems" : 1 - }, - "fields" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Fields" - }, - "source-table" : { - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.id.table" - }, { - "description" : "`card__` string Table ID", - "type" : "string", - "pattern" : "^card__[1-9]\\d*$" - } ] - }, - "order-by" : { - "allOf" : [ { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.OrderBy" - }, - "minItems" : 1 - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.helpers.distinct" - } ] - }, - "page" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Page" - }, - "expressions" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.FieldOrExpressionDef" - } - } - } - }, - "metabase.legacy-mbql.schema.MiddlewareOptions" : { - "description" : "Additional options that can be used to toggle middleware on or off.", - "type" : "object", - "properties" : { - "add-default-userland-constraints?" : { - "type" : "boolean", - "description" : "Whether to add some default `max-results` and `max-results-bare-rows` constraints. By default, none are added,\n although the functions that ultimately power most API endpoints tend to set this to `true`. See\n `add-constraints` middleware for more details." - }, - "disable-max-results?" : { - "description" : "Disable applying a default limit on the query results. Handled in the `add-default-limit` middleware. If true,\n this will override the `:max-results` and `:max-results-bare-rows` values in `Constraints`.", - "type" : "boolean" - }, - "disable-mbql->native?" : { - "description" : "Disable the MBQL->native middleware. If you do this, the query will not work at all, so there are no cases where\n you should set this yourself. This is only used by the `metabase.query-processor.preprocess/preprocess` function to\n get the fully pre-processed query without attempting to convert it to native.", - "type" : "boolean" - }, - "format-rows?" : { - "description" : "Should we skip converting datetime types to ISO-8601 strings with appropriate timezone when post-processing\n results? Used by `metabase.query-processor.middleware.format-rows`default `false`.", - "type" : "boolean" - }, - "process-viz-settings?" : { - "type" : "boolean", - "description" : "Whether to process a question's visualization settings and include them in the result metadata so that they can\n incorporated into an export. Used by `metabase.query-processor.middleware.visualization-settings`; default\n `false`." - }, - "skip-results-metadata?" : { - "description" : "Should we skip adding `results_metadata` to query results after running the query? Used by\n `metabase.query-processor.middleware.results-metadata`; default `false`. (Note: we may change the name of this\n column in the near future, to `result_metadata`, to fix inconsistencies in how we name things.)", - "type" : "boolean" - }, - "userland-query?" : { - "type" : "boolean", - "description" : "Userland queries are ones ran as a result of an API call, Pulse, or the like. Special handling is done in\n certain userland-only middleware for such queries -- results are returned in a slightly different format, and\n QueryExecution entries are normally saved, unless you pass `:no-save` as the option." - } - } - }, - "metabase.legacy-mbql.schema.NativeSourceQuery" : { - "type" : "object", - "properties" : { - "collection" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "native" : { }, - "template-tags" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTagMap" - } - }, - "required" : [ "native" ] - }, - "metabase.legacy-mbql.schema.NumericExpression" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.+" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.-" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.~1" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.*" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.coalesce" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.length" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.floor" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ceil" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.round" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.abs" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.power" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.sqrt" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.exp" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.log" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case:if" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.datetime-diff" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.integer" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.float" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.temporal-extract" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-year" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-quarter" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-month" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-week" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-day" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-day-of-week" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-hour" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-minute" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-second" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.aggregation" - } ] - }, - "metabase.legacy-mbql.schema.NumericExpressionArg" : { - "oneOf" : [ { - "type" : "number" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Aggregation" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Reference" - } ] - }, - "metabase.legacy-mbql.schema.OrderBy" : { - "description" : "Schema for an `order-by` clause subclause.", - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.asc" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.desc" - } ] - }, - "metabase.legacy-mbql.schema.OrderComparable" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" - }, { - "anyOf" : [ { - "type" : "number" - }, { - "type" : "string" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemporalLiteral" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ExpressionArg" - }, { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.relative-datetime" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - } ] - } ] - } ] - }, - "metabase.legacy-mbql.schema.Page" : { - "description" : "`page` = page num, starting with 1. `items` = number of items per page.\n e.g.\n\n {:page 1, :items 10} = items 1-10\n {:page 2, :items 10} = items 11-20", - "type" : "object", - "properties" : { - "items" : { - "description" : "Must be a positive integer.", - "type" : "integer", - "minimum" : 1 - }, - "page" : { - "description" : "Must be a positive integer.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "page", "items" ] - }, - "metabase.legacy-mbql.schema.Parameter" : { - "description" : "Schema for the *value* of a parameter (e.g. a Dashboard parameter or a native query template tag) as passed in as\n part of the `:parameters` list in a query.", - "type" : "object", - "properties" : { - "default" : { }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "required" : { }, - "slug" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "target" : { - "oneOf" : [ { - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - }, { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.dimension" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.variable" - } ] - } ] - }, { - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - }, { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.dimension" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.variable" - } ] - } ] - }, { - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - }, { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.dimension" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.variable" - } ] - } ] - } ] - }, - "type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.type" - }, - "value" : { } - }, - "required" : [ "type" ] - }, - "metabase.legacy-mbql.schema.ParameterList" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Parameter" - }, - "optional" : true - }, - "metabase.legacy-mbql.schema.Query" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "update-row" : { - "$ref" : "#/components/schemas/metabase.lib.schema.actions.row" - }, - "settings" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Settings" - }, - "constraints" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Constraints" - }, - "query" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.MBQLQuery" - }, - "native" : { - "type" : "object", - "properties" : { - "collection" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "query" : { }, - "template-tags" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTagMap" - } - }, - "required" : [ "query" ] - }, - "info" : { - "$ref" : "#/components/schemas/metabase.lib.schema.info.info", - "description" : "Used when recording info about this run in the QueryExecution log; things like context query was\n ran in and User who ran it." - }, - "middleware" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.MiddlewareOptions" - }, - "database" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatabaseID" - }, - "type" : { - "description" : "Type of query. `:query` = MBQL; `:native` = native.", - "type" : "string", - "enum" : [ "query", "native" ] - }, - "parameters" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ParameterList" - }, - "create-row" : { - "$ref" : "#/components/schemas/metabase.lib.schema.actions.row" - } - }, - "required" : [ "type" ] - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.check-keys-for-query-type" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.check-query-does-not-have-source-metadata" - } ] - }, - "metabase.legacy-mbql.schema.Reference" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.aggregation" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.expression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" - } ] - }, - "metabase.legacy-mbql.schema.RelativeDatetimeUnit" : { - "type" : "string", - "enum" : [ "default", "minute", "hour", "day", "week", "month", "quarter", "year" ] - }, - "metabase.legacy-mbql.schema.Settings" : { - "description" : "Options that tweak the behavior of the query processor.", - "type" : "object", - "properties" : { - "report-timezone" : { - "description" : "The timezone the query should be ran in, overriding the default report timezone for the instance.", - "$ref" : "#/components/schemas/metabase.lib.schema.expression.temporal.timezone-id" - } - } - }, - "metabase.legacy-mbql.schema.SourceQuery" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NativeSourceQuery" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.MBQLQuery" - } ] - }, - "metabase.legacy-mbql.schema.StringExpression" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.substring" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.trim" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ltrim" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.rtrim" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.replace" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.lower" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.upper" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.concat" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.regex-match-first" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.coalesce" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case:if" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.host" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.domain" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.subdomain" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.path" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.month-name" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.quarter-name" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.day-name" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.text" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.split-part" - } ] - }, - "metabase.legacy-mbql.schema.StringExpressionArg" : { - "oneOf" : [ { - "type" : "string" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.StringExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - } ] - }, - "metabase.legacy-mbql.schema.TemplateTag" : { - "description" : "Schema for a template tag as specified in a native query. There are four types of template tags, differentiated by\n `:type`.\n\n Template tags are used to specify {{placeholders}} in native queries that are replaced with some sort of value when\n the query itself runs. There are four basic types of template tag for native queries:\n\n 1. Field filters, which are used like\n\n SELECT * FROM table WHERE {{field_filter}}\n\n These reference specific Fields and are replaced with entire conditions, e.g. `some_field > 1000`\n\n 2. Raw values, which are used like\n\n SELECT * FROM table WHERE my_field = {{x}}\n\n These are replaced with raw values.\n\n 3. Native query snippets, which might be used like\n\n SELECT * FROM ({{snippet: orders}}) source\n\n These are replaced with `NativeQuerySnippet`s from the application database.\n\n 4. Source query Card IDs, which are used like\n\n SELECT * FROM ({{#123}}) source\n\n These are replaced with the query from the Card with that ID.\n\n Field filters and raw values usually have their value specified by `:parameters`.", - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:FieldFilter" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:Snippet" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:SourceQuery" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:TemporalUnit" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:RawValue" - } ] - }, - "metabase.legacy-mbql.schema.TemplateTag:FieldFilter" : { - "description" : "Schema for a field filter template tag.", - "type" : "object", - "properties" : { - "display-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "required" : { - "type" : "boolean" - }, - "type" : { - "const" : "dimension" - }, - "alias" : { - "type" : "string" - }, - "options" : { - "type" : "object", - "additionalProperties" : { }, - "description" : "optional map to be appended to filter clause" - }, - "dimension" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" - }, - "default" : { }, - "widget-type" : { - "description" : "which type of widget the frontend should show for this Field Filter; this also affects which parameter types\n are allowed to be specified for it.", - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.WidgetType" - } - }, - "required" : [ "type", "name", "display-name", "dimension", "widget-type" ] - }, - "metabase.legacy-mbql.schema.TemplateTag:RawValue" : { - "description" : "Schema for a raw value template tag.", - "type" : "object", - "properties" : { - "default" : { }, - "display-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "required" : { - "type" : "boolean" - }, - "type" : { - "type" : "string", - "enum" : [ "date", "number", "boolean", "text" ] - } - }, - "required" : [ "type", "name", "display-name" ] - }, - "metabase.legacy-mbql.schema.TemplateTag:Snippet" : { - "description" : "Schema for a native query snippet template tag.", - "type" : "object", - "properties" : { - "database" : { - "description" : "Must be a positive integer.", - "type" : "integer", - "minimum" : 1 - }, - "display-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "snippet-id" : { - "description" : "Must be a positive integer.", - "type" : "integer", - "minimum" : 1 - }, - "snippet-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "type" : { - "const" : "snippet" - } - }, - "required" : [ "type", "name", "display-name", "snippet-name", "snippet-id" ] - }, - "metabase.legacy-mbql.schema.TemplateTag:SourceQuery" : { - "description" : "Schema for a source query template tag.", - "type" : "object", - "properties" : { - "card-id" : { - "description" : "Must be a positive integer.", - "type" : "integer", - "minimum" : 1 - }, - "display-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "type" : { - "const" : "card" - } - }, - "required" : [ "type", "name", "display-name", "card-id" ] - }, - "metabase.legacy-mbql.schema.TemplateTag:TemporalUnit" : { - "description" : "Schema for a temporal unit template tag.", - "type" : "object", - "properties" : { - "alias" : { - "type" : "string" - }, - "default" : { }, - "dimension" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" - }, - "display-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "required" : { - "type" : "boolean" - }, - "type" : { - "const" : "temporal-unit" - } - }, - "required" : [ "type", "name", "display-name", "dimension" ] - }, - "metabase.legacy-mbql.schema.TemplateTagMap" : { - "description" : "Schema for the `:template-tags` map passed in as part of a native query.\n\n Map of template tag name -> template tag definition", - "type" : "object", - "additionalProperties" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag" - } - }, - "metabase.legacy-mbql.schema.TemporalExtractUnit" : { - "description" : "Valid units to extract from a temporal.", - "type" : "string", - "enum" : [ "year-of-era", "quarter-of-year", "month-of-year", "week-of-year-iso", "week-of-year-us", "week-of-year-instance", "day-of-month", "day-of-week", "day-of-week-iso", "hour-of-day", "minute-of-hour", "second-of-minute" ] - }, - "metabase.legacy-mbql.schema.TemporalLiteral" : { - "description" : "Schema for valid temporal literals.", - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateOrDatetimeLiteral" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TimeLiteral" - } ] - }, - "metabase.legacy-mbql.schema.TimeLiteral" : { - "description" : "Schema for valid time literals.", - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.time" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.literal.time" - } ] - }, - "metabase.legacy-mbql.schema.TimeUnit" : { - "description" : "Valid unit for time bucketing.", - "type" : "string", - "enum" : [ "hour", "second", "default", "hour-of-day", "millisecond", "minute-of-hour", "minute" ] - }, - "metabase.legacy-mbql.schema.UnnamedAggregation" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" - }, { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.aggregation" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.avg" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.cum-sum" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.distinct" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.distinct-where" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.stddev" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.sum" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.min" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.max" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.metric" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.share" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.count-where" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.sum-where" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case:if" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.median" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.percentile" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ag:var" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.cum-count" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.count" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.offset" - } ] - } ] - }, - "metabase.legacy-mbql.schema.ValueTypeInfo" : { - "description" : "Type info about a value in a `:value` clause. Added automatically by `wrap-value-literals` middleware to values in filter clauses based on the Field in the clause.", - "type" : "object", - "properties" : { - "base_type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "database_type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "semantic_type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" - }, - "unit" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateTimeUnit" - } - } - }, - "metabase.legacy-mbql.schema.WidgetType" : { - "description" : "Schema for valid values of `:widget-type` for a [[::TemplateTag:FieldFilter]].", - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.widget-type" - }, - "metabase.legacy-mbql.schema.abs" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.absolute-datetime" : { - "oneOf" : [ { }, { - "allOf" : [ ] - }, { - "allOf" : [ ] - } ] - }, - "metabase.legacy-mbql.schema.ag:var" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.aggregation" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.aggregation-options" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.and" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.asc" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.avg" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.between" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.case" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.case:if" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.ceil" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.check-keys-for-query-type" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.check-query-does-not-have-source-metadata" : { - "description" : "`:source-metadata` is added to queries when `card__id` source queries are resolved. It contains info about the\n columns in the source query.\n\n Where this is added was changed in Metabase 0.33.0 -- previously, when `card__id` source queries were resolved, the\n middleware would add `:source-metadata` to the top-level; to support joins against source queries, this has been\n changed so it is always added at the same level the resolved `:source-query` is added.\n\n This should automatically be fixed by `normalize`; if we encounter it, it means some middleware is not functioning\n properly." - }, - "metabase.legacy-mbql.schema.coalesce" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.concat" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.contains" : { - "anyOf" : [ { - "allOf" : [ ] - }, { - "allOf" : [ ] - } ] - }, - "metabase.legacy-mbql.schema.convert-timezone" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.count" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.count-where" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.cum-count" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.cum-sum" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.date" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.datetime" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.datetime-add" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.datetime-diff" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.datetime-subtract" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.day-name" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.desc" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.dimension" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.distinct" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.distinct-where" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.does-not-contain" : { - "anyOf" : [ { - "allOf" : [ ] - }, { - "allOf" : [ ] - } ] - }, - "metabase.legacy-mbql.schema.domain" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.during" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.ends-with" : { - "anyOf" : [ { - "allOf" : [ ] - }, { - "allOf" : [ ] - } ] - }, - "metabase.legacy-mbql.schema.exp" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.expression" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.field" : { - "allOf" : [ { - "allOf" : [ ] - }, { - "description" : "Fields using names rather than integer IDs are required to specify `:base-type`.", - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.require-base-type-for-field-name" - } ] - }, - "metabase.legacy-mbql.schema.field-or-expression-ref" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.expression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" - } ] - }, - "metabase.legacy-mbql.schema.float" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.floor" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.get-day" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.get-day-of-week" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.get-hour" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.get-minute" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.get-month" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.get-quarter" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.get-second" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.get-week" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.get-year" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.helpers.distinct" : { - "description" : "values must be distinct" - }, - "metabase.legacy-mbql.schema.host" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.in" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.inside" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.integer" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.interval" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.is-empty" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.is-null" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.legacy-column-metadata" : { - "description" : "Schema for a single legacy metadata column. This is the pre-Lib equivalent of\n `:metabase.lib.schema.metadata/column`.", - "type" : "object", - "properties" : { - "field_ref" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Reference" - }, - "fingerprint" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.fingerprint" - }, - "visibility_type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.visibility-type" - }, - "base_type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "name" : { - "type" : "string" - }, - "semantic_type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" - }, - "display_name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "converted_timezone" : { - "$ref" : "#/components/schemas/metabase.lib.schema.expression.temporal.timezone-id" - }, - "source" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.legacy-source" - }, - "effective_type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "unit" : { - "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" - } - }, - "required" : [ "base_type", "display_name", "name" ] - }, - "metabase.legacy-mbql.schema.length" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.log" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.lower" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.ltrim" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.max" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.median" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.metric" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.min" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.month-name" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.no-binning-options-at-top-level" : { }, - "metabase.legacy-mbql.schema.not" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.not-empty" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.not-in" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.not-null" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.now" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.offset" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.or" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.path" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.percentile" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.power" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.quarter-name" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.regex-match-first" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.relative-datetime" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.relative-time-interval" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.replace" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.require-base-type-for-field-name" : { }, - "metabase.legacy-mbql.schema.round" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.rtrim" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.segment" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.share" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.split-part" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.sqrt" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.starts-with" : { - "anyOf" : [ { - "allOf" : [ ] - }, { - "allOf" : [ ] - } ] - }, - "metabase.legacy-mbql.schema.stddev" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.subdomain" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.substring" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.sum" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.sum-where" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.template-tag" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.temporal-extract" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.text" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.time" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.time-interval" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.today" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.trim" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.upper" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.validate-temporal-unit" : { }, - "metabase.legacy-mbql.schema.value" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.variable" : { - "allOf" : [ ] - }, - "metabase.lib.schema.actions.row" : { - "type" : "object", - "additionalProperties" : { } - }, - "metabase.lib.schema.binning.bin-width" : { - "description" : "Bin width (size of each bin).", - "$ref" : "#/components/schemas/metabase.lib.schema.common.positive-number" - }, - "metabase.lib.schema.binning.binning" : { - "description" : "Schema for `:binning` options passed to a `:field` clause.", - "allOf" : [ { - "type" : "object", - "properties" : { - "strategy" : { - "$ref" : "#/components/schemas/metabase.lib.schema.binning.strategy" - } - }, - "required" : [ "strategy" ] - }, { - "oneOf" : [ { - "type" : "object", - "properties" : { - "strategy" : { - "const" : "default" - } - }, - "required" : [ "strategy" ] - }, { - "type" : "object", - "properties" : { - "bin-width" : { - "$ref" : "#/components/schemas/metabase.lib.schema.binning.bin-width" - }, - "strategy" : { - "const" : "bin-width" - } - }, - "required" : [ "strategy", "bin-width" ] - }, { - "type" : "object", - "properties" : { - "num-bins" : { - "$ref" : "#/components/schemas/metabase.lib.schema.binning.num-bins" - }, - "strategy" : { - "const" : "num-bins" - } - }, - "required" : [ "strategy", "num-bins" ] - } ] - } ] - }, - "metabase.lib.schema.binning.num-bins" : { - "description" : "Number of bins to use.", - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.binning.strategy" : { - "type" : "string", - "enum" : [ "bin-width", "default", "num-bins" ] - }, - "metabase.lib.schema.common.base-type" : { - "type" : "string" - }, - "metabase.lib.schema.common.int-greater-than-or-equal-to-zero" : { - "description" : "Schema representing an integer than must also be greater than or equal to zero.", - "type" : "integer", - "minimum" : 0 - }, - "metabase.lib.schema.common.non-blank-string" : { - "type" : "string", - "minLength" : 1 - }, - "metabase.lib.schema.common.options" : { - "default" : { }, - "type" : "object", - "properties" : { - "base-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "database-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "display-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "effective-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "lib/uuid" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.uuid" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "semantic-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" - } - }, - "required" : [ "lib/uuid" ] - }, - "metabase.lib.schema.common.positive-number" : { }, - "metabase.lib.schema.common.semantic-or-relation-type" : { - "description" : "valid semantic or relation type", - "type" : "string" - }, - "metabase.lib.schema.common.uuid" : { - "type" : "string", - "minLength" : 36, - "maxLength" : 36 - }, - "metabase.lib.schema.expression.temporal.timezone-id" : { - "allOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, { - "anyOf" : [ { - "type" : "string", - "enum" : [ "Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Asmera", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Timbuktu", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/ComodRivadavia", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Atka", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Buenos_Aires", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Catamarca", "America/Cayenne", "America/Cayman", "America/Chicago", "America/Chihuahua", "America/Ciudad_Juarez", "America/Coral_Harbour", "America/Cordoba", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson", "America/Dawson_Creek", "America/Denver", "America/Detroit", "America/Dominica", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Ensenada", "America/Fort_Nelson", "America/Fort_Wayne", "America/Fortaleza", "America/Glace_Bay", "America/Godthab", "America/Goose_Bay", "America/Grand_Turk", "America/Grenada", "America/Guadeloupe", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana/Indianapolis", "America/Indiana/Knox", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Indianapolis", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Jujuy", "America/Juneau", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Knox_IN", "America/Kralendijk", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Louisville", "America/Lower_Princes", "America/Maceio", "America/Managua", "America/Manaus", "America/Marigot", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Mendoza", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Montreal", "America/Montserrat", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota/Beulah", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/Nuuk", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port-au-Prince", "America/Port_of_Spain", "America/Porto_Acre", "America/Porto_Velho", "America/Puerto_Rico", "America/Punta_Arenas", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Rosario", "America/Santa_Isabel", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Shiprock", "America/Sitka", "America/St_Barthelemy", "America/St_Johns", "America/St_Kitts", "America/St_Lucia", "America/St_Thomas", "America/St_Vincent", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Tortola", "America/Vancouver", "America/Virgin", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/McMurdo", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/South_Pole", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Arctic/Longyearbyen", "Asia/Aden", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Ashkhabad", "Asia/Atyrau", "Asia/Baghdad", "Asia/Bahrain", "Asia/Baku", "Asia/Bangkok", "Asia/Barnaul", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Calcutta", "Asia/Chita", "Asia/Choibalsan", "Asia/Chongqing", "Asia/Chungking", "Asia/Colombo", "Asia/Dacca", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", "Asia/Harbin", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Istanbul", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kashgar", "Asia/Kathmandu", "Asia/Katmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Kuwait", "Asia/Macao", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Muscat", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Oral", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qostanay", "Asia/Qyzylorda", "Asia/Rangoon", "Asia/Riyadh", "Asia/Saigon", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Tel_Aviv", "Asia/Thimbu", "Asia/Thimphu", "Asia/Tokyo", "Asia/Tomsk", "Asia/Ujung_Pandang", "Asia/Ulaanbaatar", "Asia/Ulan_Bator", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vientiane", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yangon", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faeroe", "Atlantic/Faroe", "Atlantic/Jan_Mayen", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/St_Helena", "Atlantic/Stanley", "Australia/ACT", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Canberra", "Australia/Currie", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/LHI", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/NSW", "Australia/North", "Australia/Perth", "Australia/Queensland", "Australia/South", "Australia/Sydney", "Australia/Tasmania", "Australia/Victoria", "Australia/West", "Australia/Yancowinna", "Brazil/Acre", "Brazil/DeNoronha", "Brazil/East", "Brazil/West", "CET", "CST6CDT", "Canada/Atlantic", "Canada/Central", "Canada/Eastern", "Canada/Mountain", "Canada/Newfoundland", "Canada/Pacific", "Canada/Saskatchewan", "Canada/Yukon", "Chile/Continental", "Chile/EasterIsland", "Cuba", "EET", "EST5EDT", "Egypt", "Eire", "Etc/GMT", "Etc/GMT+0", "Etc/GMT+1", "Etc/GMT+10", "Etc/GMT+11", "Etc/GMT+12", "Etc/GMT+2", "Etc/GMT+3", "Etc/GMT+4", "Etc/GMT+5", "Etc/GMT+6", "Etc/GMT+7", "Etc/GMT+8", "Etc/GMT+9", "Etc/GMT-0", "Etc/GMT-1", "Etc/GMT-10", "Etc/GMT-11", "Etc/GMT-12", "Etc/GMT-13", "Etc/GMT-14", "Etc/GMT-2", "Etc/GMT-3", "Etc/GMT-4", "Etc/GMT-5", "Etc/GMT-6", "Etc/GMT-7", "Etc/GMT-8", "Etc/GMT-9", "Etc/GMT0", "Etc/Greenwich", "Etc/UCT", "Etc/UTC", "Etc/Universal", "Etc/Zulu", "Europe/Amsterdam", "Europe/Andorra", "Europe/Astrakhan", "Europe/Athens", "Europe/Belfast", "Europe/Belgrade", "Europe/Berlin", "Europe/Bratislava", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Busingen", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Guernsey", "Europe/Helsinki", "Europe/Isle_of_Man", "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Kirov", "Europe/Kyiv", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Mariehamn", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Nicosia", "Europe/Oslo", "Europe/Paris", "Europe/Podgorica", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/San_Marino", "Europe/Sarajevo", "Europe/Saratov", "Europe/Simferopol", "Europe/Skopje", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Tiraspol", "Europe/Ulyanovsk", "Europe/Uzhgorod", "Europe/Vaduz", "Europe/Vatican", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zagreb", "Europe/Zaporozhye", "Europe/Zurich", "GB", "GB-Eire", "GMT", "GMT0", "Greenwich", "Hongkong", "Iceland", "Indian/Antananarivo", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Comoro", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Mayotte", "Indian/Reunion", "Iran", "Israel", "Jamaica", "Japan", "Kwajalein", "Libya", "MET", "MST7MDT", "Mexico/BajaNorte", "Mexico/BajaSur", "Mexico/General", "NZ", "NZ-CHAT", "Navajo", "PRC", "PST8PDT", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Johnston", "Pacific/Kanton", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Ponape", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Samoa", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Truk", "Pacific/Wake", "Pacific/Wallis", "Pacific/Yap", "Poland", "Portugal", "ROK", "Singapore", "SystemV/AST4", "SystemV/AST4ADT", "SystemV/CST6", "SystemV/CST6CDT", "SystemV/EST5", "SystemV/EST5EDT", "SystemV/HST10", "SystemV/MST7", "SystemV/MST7MDT", "SystemV/PST8", "SystemV/PST8PDT", "SystemV/YST9", "SystemV/YST9YDT", "Turkey", "UCT", "US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa", "UTC", "Universal", "W-SU", "WET", "Zulu" ] - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.zone-offset" - } ] - } ] - }, - "metabase.lib.schema.expression.window..offset.n" : { - "type" : "integer" - }, - "metabase.lib.schema.id.action" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.id.card" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.id.dashboard" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.id.database" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.id.dimension" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.id.field" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.id.pulse" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.id.saved-questions-virtual-database" : { - "description" : "The ID used to signify that a database is 'virtual' rather than physical.\n\n A fake integer ID is used so as to minimize the number of changes that need to be made on the frontend -- by using\n something that would otherwise be a legal ID, *nothing* need change there, and the frontend can query against this\n 'database' none the wiser. (This integer ID is negative which means it will never conflict with a *real* database\n ID.)\n\n This ID acts as a sort of flag. The relevant places in the middleware can check whether the DB we're querying is\n this 'virtual' database and take the appropriate actions.", - "const" : -1337 - }, - "metabase.lib.schema.id.segment" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.id.table" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.id.user" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.info.context" : { - "type" : "string", - "enum" : [ "action", "ad-hoc", "cache-refresh", "collection", "map-tiles", "pulse", "dashboard-subscription", "dashboard", "question", "csv-download", "xlsx-download", "json-download", "public-dashboard", "public-question", "public-csv-download", "public-xlsx-download", "public-json-download", "embedded-dashboard", "embedded-question", "embedded-csv-download", "embedded-xlsx-download", "embedded-json-download", "table-grid" ] - }, - "metabase.lib.schema.info.hash" : { - "type" : "string", - "format" : "byte" - }, - "metabase.lib.schema.info.info" : { - "type" : "object", - "properties" : { - "query-hash" : { - "$ref" : "#/components/schemas/metabase.lib.schema.info.hash" - }, - "action-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.action" - }, - "pivot/original-query" : { - "type" : "object", - "additionalProperties" : { } - }, - "executed-by" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.user" - }, - "card-entity-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "card-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.card" - }, - "pivot/result-metadata" : { - "oneOf" : [ { - "const" : "none" - }, { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.column" - } - } ] - }, - "context" : { - "$ref" : "#/components/schemas/metabase.lib.schema.info.context" - }, - "dashboard-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.dashboard" - }, - "metadata/model-metadata" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.lib-or-legacy-column" - } - }, - "pulse-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.pulse" - }, - "card-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - } - } - }, - "metabase.lib.schema.join.alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "metabase.lib.schema.literal..string.date" : { - "type" : "string", - "pattern" : "^\\d{4}-\\d{2}-\\d{2}$" - }, - "metabase.lib.schema.literal..string.datetime" : { - "anyOf" : [ { - "type" : "string", - "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?$" - }, { - "type" : "string", - "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))$" - } ] - }, - "metabase.lib.schema.literal..string.time" : { - "anyOf" : [ { - "type" : "string", - "pattern" : "^\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?$" - }, { - "type" : "string", - "pattern" : "^\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))$" - } ] - }, - "metabase.lib.schema.literal..string.zone-offset" : { - "type" : "string", - "pattern" : "(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))" - }, - "metabase.lib.schema.literal.date" : { - "anyOf" : [ { }, { - "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.date" - } ] - }, - "metabase.lib.schema.literal.datetime" : { - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.datetime" - }, { }, { }, { } ] - }, - "metabase.lib.schema.literal.time" : { - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.time" - }, { }, { } ] - }, - "metabase.lib.schema.metadata..column.has-field-values" : { - "type" : "string", - "enum" : [ "auto-list", "list", "none", "search" ] - }, - "metabase.lib.schema.metadata..column.legacy-source" : { - "description" : "Possible values for `column.source` -- this is added by [[metabase.lib.metadata.result-metadata]] for historical\n reasons (it is used in a few places in the FE). DO NOT use this in the backend for any purpose, use `:lib/source`\n instead.", - "type" : "string", - "enum" : [ "aggregation", "fields", "breakout", "native" ] - }, - "metabase.lib.schema.metadata..column.remapping.external" : { - "description" : "External remapping (Dimension) for a column. From the [[metabase.warehouse-schema.models.dimension]] with `type =\n external` associated with a `Field` in the application database.\n See [[metabase.query-processor.middleware.add-dimension-projections]] for what this means.", - "type" : "object", - "properties" : { - "field-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.dimension" - }, - "lib/type" : { - "const" : "metadata.column.remapping/external" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - } - }, - "required" : [ "lib/type", "id", "name", "field-id" ] - }, - "metabase.lib.schema.metadata..column.remapping.internal" : { - "description" : "Internal remapping (FieldValues) for a column. From [[metabase.warehouse-schema.models.dimension]] with `type =\n internal` and the [[metabase.warehouse-schema.models.field-values]] associated with a `Field` in the application\n database. See [[metabase.query-processor.middleware.add-dimension-projections]] for what this means.", - "type" : "object", - "properties" : { - "human-readable-values" : { - "type" : "array", - "items" : { } - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.dimension" - }, - "lib/type" : { - "const" : "metadata.column.remapping/internal" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "values" : { - "type" : "array", - "items" : { } - } - }, - "required" : [ "lib/type", "id", "name", "values", "human-readable-values" ] - }, - "metabase.lib.schema.metadata..column.source" : { - "description" : "`:lib/source` -- where a column came from with respect to the current stage.\n\n Traditionally, `:lib/source` meant something slightly different -- it denoted what part of the current stage a\n column came from, and thus included two additional options -- `:source/fields`, for columns used by `:fields`, and\n `:source/breakouts`, for columns used in `:breakout`. This was not really useful information and made `:lib/source`\n itself useless for determining if a column was 'inherited' or not (i.e., whether it came from a previous stage,\n source card, or a join, and should get field name refs instead of field ID refs --\n see [[metabase.lib.field.util/inherited-column?]]).", - "type" : "string", - "enum" : [ "source/card", "source/native", "source/previous-stage", "source/table-defaults", "source/aggregations", "source/joins", "source/expressions", "source/implicitly-joinable" ] - }, - "metabase.lib.schema.metadata..column.validate-expression-source" : { - "description" : "Only allow `:lib/expression-name` when `:lib/source` is `:source/expressions`. If it's anything else, it probably\n means it's getting incorrectly propagated from a previous stage (QUE-1342)." - }, - "metabase.lib.schema.metadata..column.validate-native-column" : { - "description" : "Certain keys cannot possibly be set when a column comes from directly from native query results, for example\n `:lib/breakout?` or join aliases" - }, - "metabase.lib.schema.metadata..column.validate-table-defaults-column" : { - "description" : "A column with :lib/source :source/table-defaults cannot possibly have a join alias." - }, - "metabase.lib.schema.metadata..column.visibility-type" : { - "type" : "string", - "enum" : [ "retired", "sensitive", "normal", "hidden", "details-only" ] - }, - "metabase.lib.schema.metadata.column" : { - "description" : "Malli schema for a valid map of column metadata, which can mean one of two things:\n\n 1. Metadata about a particular Field in the application database. This will always have an `:id`\n\n 2. Results metadata from a column in `data.cols` and/or `data.results_metadata.columns` in a Query Processor\n response, or saved in something like `Card.result_metadata`. These *may* have an `:id`, or may not -- columns\n coming back from native queries or things like `SELECT count(*)` aren't associated with any particular `Field`\n and thus will not have an `:id`.\n\n Now maybe these should be two different schemas, but `:id` being there or not is the only real difference; besides\n that they are largely compatible. So they're the same for now. We can revisit this in the future if we actually want\n to differentiate between the two versions.", - "allOf" : [ { - "type" : "object", - "properties" : { - "visibility-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.visibility-type" - }, - "fk-join-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "lib/external-remap" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.remapping.external" - }, - "inherited-temporal-unit" : { - "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" - }, - "lib/source-column-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.source-column-alias" - }, - "database-type" : { - "type" : "string" - }, - "lib/type" : { - "default" : "metadata/column", - "const" : "metadata/column" - }, - "fingerprint" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.fingerprint" - }, - "display-name" : { - "type" : "string" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "effective-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "lib/deduplicated-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.deduplicated-name" - }, - "base-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "lib/original-expression-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "fk-field-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "type" : "string" - }, - "lib/card-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.card" - }, - "lib/expression-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "lib/breakout?" : { - "type" : "boolean" - }, - "metabase.lib.field/temporal-unit" : { - "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" - }, - "metabase.lib.field/binning" : { - "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning" - }, - "lib/model-display-name" : { - "type" : "string" - }, - "has-field-values" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.has-field-values" - }, - "lib/internal-remap" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.remapping.internal" - }, - "selected?" : { - "type" : "boolean" - }, - "source-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "source" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.legacy-source" - }, - "metabase.lib.join/join-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" - }, - "fk-field-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "lib/original-binning" : { - "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning" - }, - "lib/original-join-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" - }, - "lib/original-display-name" : { - "type" : "string" - }, - "lib/source" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.source" - }, - "active" : { - "type" : "boolean" - }, - "lib/ref-display-name" : { - "type" : "string" - }, - "lib/original-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.original-name" - }, - "lib/hack-original-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.original-name" - }, - "semantic-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" - }, - "fk-target-field-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "field-ref" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Reference" - }, - "lib/desired-column-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.desired-column-alias" - } - }, - "required" : [ "lib/type", "name", "base-type" ] - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.kebab-cased-map" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-expression-source" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-native-column" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-table-defaults-column" - } ] - }, - "metabase.lib.schema.metadata.deduplicated-name" : { - "type" : "string", - "description" : "The simply-deduplicated name that was historically used in QP results metadata (originally calculated by\n the [[metabase.query-processor.middleware.annotate]] middleware, now calculated\n by [[metabase.lib.middleware.result-metadata]]). This just adds suffixes to column names e.g. `ID` and `ID` become\n `ID` and `ID_2`, respectively. Kept around because many old field refs use this column name.", - "optional" : true - }, - "metabase.lib.schema.metadata.desired-column-alias" : { - "type" : "string", - "minLength" : 1 - }, - "metabase.lib.schema.metadata.fingerprint..fingerprint.global" : { - "description" : "Fingerprint values that Fields of all types should have.", - "type" : "object", - "properties" : { - "distinct-count" : { - "type" : "integer" - }, - "nil%" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" - } - } - }, - "metabase.lib.schema.metadata.fingerprint..fingerprint.number" : { - "description" : "Schema for fingerprint information for Fields deriving from `:type/Number`.", - "type" : "object", - "properties" : { - "avg" : { - "type" : "number" - }, - "max" : { - "type" : "number" - }, - "min" : { - "type" : "number" - }, - "q1" : { - "type" : "number" - }, - "q3" : { - "type" : "number" - }, - "sd" : { - "type" : "number" - } - } - }, - "metabase.lib.schema.metadata.fingerprint..fingerprint.temporal" : { - "description" : "Schema for fingerprint information for Fields deriving from `:type/Temporal`.", - "type" : "object", - "properties" : { - "earliest" : { - "type" : "string" - }, - "latest" : { - "type" : "string" - } - } - }, - "metabase.lib.schema.metadata.fingerprint..fingerprint.text" : { - "description" : "Schema for fingerprint information for Fields deriving from `:type/Text`.", - "type" : "object", - "properties" : { - "average-length" : { - "type" : "number" - }, - "percent-email" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" - }, - "percent-json" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" - }, - "percent-state" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" - }, - "percent-url" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" - } - } - }, - "metabase.lib.schema.metadata.fingerprint..fingerprint.type-specific" : { - "description" : "Schema for type-specific fingerprint information.", - "allOf" : [ { - "type" : "object", - "additionalProperties" : { - "type" : "object", - "properties" : { } - } - }, { - "type" : "object", - "properties" : { - "type/DateTime" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.temporal" - }, - "type/Number" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.number" - }, - "type/Text" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.text" - } - } - } ] - }, - "metabase.lib.schema.metadata.fingerprint.fingerprint" : { - "description" : "Schema for a Field 'fingerprint' generated as part of the analysis stage. Used to power the 'classification'\n sub-stage of analysis. Stored as the `fingerprint` column of Field.", - "type" : "object", - "properties" : { - "experimental" : { - "type" : "object", - "additionalProperties" : { } - }, - "global" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.global" - }, - "type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.type-specific" - } - } - }, - "metabase.lib.schema.metadata.fingerprint.percent" : { - "description" : "Schema for something represting a percentage. A floating-point value between (inclusive) 0 and 1.", - "type" : "number" - }, - "metabase.lib.schema.metadata.kebab-cased-map" : { }, - "metabase.lib.schema.metadata.lib-or-legacy-column" : { - "description" : "Schema for the maps in card `:result-metadata` and similar. These can be either\n `:metabase.lib.schema.metadata/result-metadata` (i.e., kebab-cased) maps, or map snake_cased as returned by QP\n metadata, but they should NOT be a mixture of both -- if we mixed them somehow there is a bug in our code.", - "oneOf" : [ { - "description" : "Malli schema for a valid map of column metadata, which can mean one of two things:\n\n 1. Metadata about a particular Field in the application database. This will always have an `:id`\n\n 2. Results metadata from a column in `data.cols` and/or `data.results_metadata.columns` in a Query Processor\n response, or saved in something like `Card.result_metadata`. These *may* have an `:id`, or may not -- columns\n coming back from native queries or things like `SELECT count(*)` aren't associated with any particular `Field`\n and thus will not have an `:id`.\n\n Now maybe these should be two different schemas, but `:id` being there or not is the only real difference; besides\n that they are largely compatible. So they're the same for now. We can revisit this in the future if we actually want\n to differentiate between the two versions.", - "allOf" : [ { - "type" : "object", - "properties" : { - "visibility-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.visibility-type" - }, - "fk-join-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "lib/external-remap" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.remapping.external" - }, - "inherited-temporal-unit" : { - "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" - }, - "lib/source-column-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.source-column-alias" - }, - "database-type" : { - "type" : "string" - }, - "lib/type" : { - "default" : "metadata/column", - "const" : "metadata/column" - }, - "fingerprint" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.fingerprint" - }, - "display-name" : { - "type" : "string" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "effective-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "lib/deduplicated-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.deduplicated-name" - }, - "base-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "lib/original-expression-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "fk-field-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "type" : "string" - }, - "lib/card-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.card" - }, - "lib/expression-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "lib/breakout?" : { - "type" : "boolean" - }, - "metabase.lib.field/temporal-unit" : { - "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" - }, - "metabase.lib.field/binning" : { - "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning" - }, - "lib/model-display-name" : { - "type" : "string" - }, - "has-field-values" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.has-field-values" - }, - "lib/internal-remap" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.remapping.internal" - }, - "selected?" : { - "type" : "boolean" - }, - "source-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "source" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.legacy-source" - }, - "metabase.lib.join/join-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" - }, - "fk-field-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "lib/original-binning" : { - "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning" - }, - "lib/original-join-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" - }, - "lib/original-display-name" : { - "type" : "string" - }, - "lib/source" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.source" - }, - "active" : { - "type" : "boolean" - }, - "lib/ref-display-name" : { - "type" : "string" - }, - "lib/original-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.original-name" - }, - "lib/hack-original-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.original-name" - }, - "semantic-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" - }, - "fk-target-field-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "field-ref" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Reference" - }, - "lib/desired-column-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.desired-column-alias" - } - }, - "required" : [ "lib/type", "name", "base-type" ] - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.kebab-cased-map" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-expression-source" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-native-column" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-table-defaults-column" - } ] - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.legacy-column-metadata" - } ] - }, - "metabase.lib.schema.metadata.original-name" : { - "type" : "string", - "description" : "The original name of the column as it appeared in the very first place it came from (i.e., the physical name of the\n column in the table it appears in). This should be the same as the `:lib/source-column-alias` for the very first\n usage of the column.\n Allowed to be blank because some databases like SQL Server allow blank column names.", - "optional" : true - }, - "metabase.lib.schema.metadata.source-column-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "metabase.lib.schema.parameter..dimension.target" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.legacy-field-ref" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.legacy-expression-ref" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.template-tag" - } ] - }, - "metabase.lib.schema.parameter.DimensionOptions" : { - "type" : "object", - "properties" : { - "stage-number" : { - "type" : "integer" - } - } - }, - "metabase.lib.schema.parameter.dimension" : { }, - "metabase.lib.schema.parameter.legacy-expression-ref" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.expression" - }, - "metabase.lib.schema.parameter.legacy-field-ref" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" - }, - "metabase.lib.schema.parameter.parameter" : { - "type" : "object", - "properties" : { - "default" : { }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "required" : { }, - "slug" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "target" : { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.target" - }, - "type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.type" + }, + "recipient-type" : { + "enum" : [ "cc", "bcc", "cc", "bcc" ] + }, + "subject" : { + "type" : "string" + }, + "type" : { + "enum" : [ "email/handlebars-resource", "email/handlebars-text", "email/handlebars-resource", "email/handlebars-text" ] + } }, - "value" : { } - }, - "required" : [ "type" ] - }, - "metabase.lib.schema.parameter.target" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.legacy-field-ref" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.dimension" + "required" : [ "type", "subject", "path" ] }, { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.variable" + "type" : "object", + "properties" : { + "body" : { + "type" : "string" + }, + "recipient-type" : { + "enum" : [ "cc", "bcc", "cc", "bcc" ] + }, + "subject" : { + "type" : "string" + }, + "type" : { + "enum" : [ "email/handlebars-resource", "email/handlebars-text", "email/handlebars-resource", "email/handlebars-text" ] + } + }, + "required" : [ "type", "subject", "body" ] } ] }, - "metabase.lib.schema.parameter.template-tag" : { - "type" : "array", - "prefixItems" : [ { - "const" : "template-tag" + "metabase.lib.schema.common.non-blank-string" : { + "type" : "string", + "minLength" : 1 + }, + "metabase.lib.schema.expression.temporal.timezone-id" : { + "allOf" : [ { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" }, { - "oneOf" : [ { - "type" : "object", - "properties" : { - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - } - }, - "required" : [ "id" ] + "anyOf" : [ { + "type" : "string", + "enum" : [ "Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Asmera", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Timbuktu", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/ComodRivadavia", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Atka", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Buenos_Aires", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Catamarca", "America/Cayenne", "America/Cayman", "America/Chicago", "America/Chihuahua", "America/Ciudad_Juarez", "America/Coral_Harbour", "America/Cordoba", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson", "America/Dawson_Creek", "America/Denver", "America/Detroit", "America/Dominica", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Ensenada", "America/Fort_Nelson", "America/Fort_Wayne", "America/Fortaleza", "America/Glace_Bay", "America/Godthab", "America/Goose_Bay", "America/Grand_Turk", "America/Grenada", "America/Guadeloupe", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana/Indianapolis", "America/Indiana/Knox", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Indianapolis", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Jujuy", "America/Juneau", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Knox_IN", "America/Kralendijk", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Louisville", "America/Lower_Princes", "America/Maceio", "America/Managua", "America/Manaus", "America/Marigot", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Mendoza", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Montreal", "America/Montserrat", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota/Beulah", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/Nuuk", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port-au-Prince", "America/Port_of_Spain", "America/Porto_Acre", "America/Porto_Velho", "America/Puerto_Rico", "America/Punta_Arenas", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Rosario", "America/Santa_Isabel", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Shiprock", "America/Sitka", "America/St_Barthelemy", "America/St_Johns", "America/St_Kitts", "America/St_Lucia", "America/St_Thomas", "America/St_Vincent", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Tortola", "America/Vancouver", "America/Virgin", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/McMurdo", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/South_Pole", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Arctic/Longyearbyen", "Asia/Aden", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Ashkhabad", "Asia/Atyrau", "Asia/Baghdad", "Asia/Bahrain", "Asia/Baku", "Asia/Bangkok", "Asia/Barnaul", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Calcutta", "Asia/Chita", "Asia/Choibalsan", "Asia/Chongqing", "Asia/Chungking", "Asia/Colombo", "Asia/Dacca", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", "Asia/Harbin", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Istanbul", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kashgar", "Asia/Kathmandu", "Asia/Katmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Kuwait", "Asia/Macao", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Muscat", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Oral", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qostanay", "Asia/Qyzylorda", "Asia/Rangoon", "Asia/Riyadh", "Asia/Saigon", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Tel_Aviv", "Asia/Thimbu", "Asia/Thimphu", "Asia/Tokyo", "Asia/Tomsk", "Asia/Ujung_Pandang", "Asia/Ulaanbaatar", "Asia/Ulan_Bator", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vientiane", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yangon", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faeroe", "Atlantic/Faroe", "Atlantic/Jan_Mayen", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/St_Helena", "Atlantic/Stanley", "Australia/ACT", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Canberra", "Australia/Currie", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/LHI", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/NSW", "Australia/North", "Australia/Perth", "Australia/Queensland", "Australia/South", "Australia/Sydney", "Australia/Tasmania", "Australia/Victoria", "Australia/West", "Australia/Yancowinna", "Brazil/Acre", "Brazil/DeNoronha", "Brazil/East", "Brazil/West", "CET", "CST6CDT", "Canada/Atlantic", "Canada/Central", "Canada/Eastern", "Canada/Mountain", "Canada/Newfoundland", "Canada/Pacific", "Canada/Saskatchewan", "Canada/Yukon", "Chile/Continental", "Chile/EasterIsland", "Cuba", "EET", "EST5EDT", "Egypt", "Eire", "Etc/GMT", "Etc/GMT+0", "Etc/GMT+1", "Etc/GMT+10", "Etc/GMT+11", "Etc/GMT+12", "Etc/GMT+2", "Etc/GMT+3", "Etc/GMT+4", "Etc/GMT+5", "Etc/GMT+6", "Etc/GMT+7", "Etc/GMT+8", "Etc/GMT+9", "Etc/GMT-0", "Etc/GMT-1", "Etc/GMT-10", "Etc/GMT-11", "Etc/GMT-12", "Etc/GMT-13", "Etc/GMT-14", "Etc/GMT-2", "Etc/GMT-3", "Etc/GMT-4", "Etc/GMT-5", "Etc/GMT-6", "Etc/GMT-7", "Etc/GMT-8", "Etc/GMT-9", "Etc/GMT0", "Etc/Greenwich", "Etc/UCT", "Etc/UTC", "Etc/Universal", "Etc/Zulu", "Europe/Amsterdam", "Europe/Andorra", "Europe/Astrakhan", "Europe/Athens", "Europe/Belfast", "Europe/Belgrade", "Europe/Berlin", "Europe/Bratislava", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Busingen", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Guernsey", "Europe/Helsinki", "Europe/Isle_of_Man", "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Kirov", "Europe/Kyiv", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Mariehamn", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Nicosia", "Europe/Oslo", "Europe/Paris", "Europe/Podgorica", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/San_Marino", "Europe/Sarajevo", "Europe/Saratov", "Europe/Simferopol", "Europe/Skopje", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Tiraspol", "Europe/Ulyanovsk", "Europe/Uzhgorod", "Europe/Vaduz", "Europe/Vatican", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zagreb", "Europe/Zaporozhye", "Europe/Zurich", "GB", "GB-Eire", "GMT", "GMT0", "Greenwich", "Hongkong", "Iceland", "Indian/Antananarivo", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Comoro", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Mayotte", "Indian/Reunion", "Iran", "Israel", "Jamaica", "Japan", "Kwajalein", "Libya", "MET", "MST7MDT", "Mexico/BajaNorte", "Mexico/BajaSur", "Mexico/General", "NZ", "NZ-CHAT", "Navajo", "PRC", "PST8PDT", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Johnston", "Pacific/Kanton", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Ponape", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Samoa", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Truk", "Pacific/Wake", "Pacific/Wallis", "Pacific/Yap", "Poland", "Portugal", "ROK", "Singapore", "SystemV/AST4", "SystemV/AST4ADT", "SystemV/CST6", "SystemV/CST6CDT", "SystemV/EST5", "SystemV/EST5EDT", "SystemV/HST10", "SystemV/MST7", "SystemV/MST7MDT", "SystemV/PST8", "SystemV/PST8PDT", "SystemV/YST9", "SystemV/YST9YDT", "Turkey", "UCT", "US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa", "UTC", "Universal", "W-SU", "WET", "Zulu" ] }, { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.zone-offset" } ] } ] }, - "metabase.lib.schema.parameter.type" : { - "type" : "string", - "enum" : [ "category", "date", "string/!=", "number/=", "string/ends-with", "location/state", "boolean/=", "number/between", "date/all-options", "number", "number/>=", "location/country", "temporal-unit", "string/=", "string/does-not-contain", "date/range", "string/starts-with", "string/contains", "date/single", "location/city", "id", "date/relative", "location/zip_code", "date/month-year", "date/quarter-year", "number/!=", "boolean", "text", "number/<=" ] + "metabase.lib.schema.id.card" : { + "type" : "integer", + "minimum" : 1 }, - "metabase.lib.schema.parameter.variable" : { - "type" : "array", - "prefixItems" : [ { - "const" : "variable" + "metabase.lib.schema.id.field" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.literal..string.datetime" : { + "anyOf" : [ { + "type" : "string", + "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?$" }, { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.template-tag" + "type" : "string", + "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))$" } ] }, - "metabase.lib.schema.parameter.widget-type" : { + "metabase.lib.schema.literal..string.zone-offset" : { "type" : "string", - "enum" : [ "none", "category", "date", "string/!=", "number/=", "string/ends-with", "location/state", "boolean/=", "number/between", "date/all-options", "number", "number/>=", "location/country", "temporal-unit", "string/=", "string/does-not-contain", "date/range", "string/starts-with", "string/contains", "date/single", "location/city", "id", "date/relative", "location/zip_code", "date/month-year", "date/quarter-year", "number/!=", "boolean", "text", "number/<=" ] + "pattern" : "(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))" }, - "metabase.lib.schema.template-tag..raw-value.type" : { + "metabase.lib.schema.metadata..column.has-field-values" : { "type" : "string", - "enum" : [ "date", "number", "boolean", "text" ] + "enum" : [ "auto-list", "list", "none", "search" ] }, "metabase.lib.schema.temporal-bucketing.unit" : { "type" : "string", "enum" : [ "quarter", "day", "hour", "week", "second", "default", "day-of-week", "hour-of-day", "month", "month-of-year", "day-of-month", "year", "day-of-year", "millisecond", "year-of-era", "second-of-minute", "week-of-year", "quarter-of-year", "minute-of-hour", "minute" ] }, - "metabase.logger.api.log-level" : { - "type" : "string", - "enum" : [ "off", "fatal", "error", "warn", "info", "debug", "trace" ] - }, "metabase.logger.api.time-unit" : { "type" : "string", "enum" : [ "days", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds" ] @@ -4298,69 +1375,7 @@ } }, "required" : [ "payload_type", "payload" ] - }, { - "type" : "object", - "properties" : { - "creator" : { - "type" : "object", - "properties" : { } - }, - "handlers" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "active" : { - "type" : "boolean" - }, - "channel" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" - }, - "channel_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "channel_type" : { }, - "notification_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "recipients" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" - } - }, - "template" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplate" - }, - "template_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "channel_type" ] - } - }, - "payload_id" : { - "type" : "null" - }, - "payload_type" : { - "type" : "string", - "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] - }, - "subscriptions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" - } - } - }, - "required" : [ "payload_type" ] - } ] + }, { } ] }, { "oneOf" : [ { "type" : "object", @@ -4430,72 +1445,7 @@ } }, "required" : [ "payload_type", "payload" ] - }, { - "type" : "object", - "properties" : { - "creator" : { - "type" : "object", - "properties" : { } - }, - "creator_id" : { - "type" : "integer" - }, - "handlers" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "active" : { - "type" : "boolean" - }, - "channel" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" - }, - "channel_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "channel_type" : { }, - "notification_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "recipients" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" - } - }, - "template" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplate" - }, - "template_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "channel_type" ] - } - }, - "payload_id" : { - "type" : "integer" - }, - "payload_type" : { - "type" : "string", - "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] - }, - "subscriptions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" - } - } - }, - "required" : [ "payload_type" ] - } ] + }, { } ] }, { "oneOf" : [ { "type" : "object", @@ -4552,64 +1502,10 @@ "items" : { "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" } - } - }, - "required" : [ "payload" ] - }, { - "type" : "object", - "properties" : { - "creator" : { - "type" : "object", - "properties" : { } - }, - "handlers" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "active" : { - "type" : "boolean" - }, - "channel" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" - }, - "channel_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "channel_type" : { }, - "notification_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "recipients" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" - } - }, - "template" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplate" - }, - "template_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "channel_type" ] - } - }, - "subscriptions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" - } - } - } - } ] + } + }, + "required" : [ "payload" ] + }, { } ] } ] }, "metabase.notification.models.Notification" : { @@ -4925,16 +1821,6 @@ } } }, - "metabase.timeline.api.timeline.Timeline" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "id" ] - }, "metabase.timeline.api.timeline.include" : { "type" : "string", "enum" : [ "events" ] @@ -4994,18 +1880,6 @@ } }, "required" : [ "schedule_type" ] - }, - "metabot.reaction.redirect" : { - "type" : "object", - "properties" : { - "type" : { - "const" : "metabot.reaction/redirect" - }, - "url" : { - "type" : "string" - } - }, - "required" : [ "type", "url" ] } } }, @@ -5024,34 +1898,12 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/action" ] }, "post" : { "summary" : "POST /api/action/", "description" : "Create a new action.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -5156,17 +2008,6 @@ "summary" : "GET /api/action/public", "description" : "Fetch a list of Actions with public UUIDs. These actions are publicly-accessible *if* public sharing is enabled.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/action" ] } }, @@ -5184,17 +2025,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/action" ] }, "delete" : { @@ -5210,17 +2040,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/action" ] } }, @@ -5246,17 +2065,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/action" ] } }, @@ -5274,17 +2082,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -5404,17 +2201,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -5448,17 +2234,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/action" ] }, "delete" : { @@ -5474,17 +2249,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/action" ] } }, @@ -5493,17 +2257,6 @@ "summary" : "GET /api/activity/most_recently_viewed_dashboard", "description" : "Get the most recently viewed dashboard for the current user. Returns a 204 if the user has not viewed any dashboards\n in the last 24 hours.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/activity" ] } }, @@ -5512,17 +2265,6 @@ "summary" : "GET /api/activity/popular_items", "description" : "Get the list of 5 popular things on the instance. Query takes 8 and limits to 5 so that if it finds anything\n archived, deleted, etc it can usually still get 5. ", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/activity" ] } }, @@ -5531,17 +2273,6 @@ "summary" : "GET /api/activity/recent_views", "description" : "Get a list of 100 models (cards, models, tables, dashboards, and collections) that the current user has been viewing most\n recently. Return a maximum of 20 model of each, if they've looked at at least 20.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/activity" ] } }, @@ -5569,34 +2300,12 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/activity" ] }, "post" : { "summary" : "POST /api/activity/recents", "description" : "Adds a model to the list of recently selected items.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -5647,17 +2356,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/alert" ] } }, @@ -5675,17 +2373,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/alert" ] } }, @@ -5703,17 +2390,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/alert" ] } }, @@ -5722,17 +2398,6 @@ "summary" : "GET /api/analytics/anonymous-stats", "description" : "Anonymous usage stats. Endpoint for testing, and eventually exposing this to instance admins to let them see\n what is being phoned home.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/analytics" ] } }, @@ -5741,17 +2406,6 @@ "summary" : "POST /api/api-key/", "description" : "Create a new API key (and an associated `User`) with the provided name and group ID.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -5779,17 +2433,6 @@ "summary" : "GET /api/api-key/", "description" : "Get a list of API keys with the default scope. Non-paginated.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/api-key" ] } }, @@ -5798,17 +2441,6 @@ "summary" : "GET /api/api-key/count", "description" : "Get the count of API keys in the DB with the default scope.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/api-key" ] } }, @@ -5826,17 +2458,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -5872,17 +2493,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/api-key" ] } }, @@ -5900,17 +2510,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/api-key" ] } }, @@ -5928,17 +2527,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -5961,17 +2549,6 @@ "type" : "integer" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6000,17 +2577,6 @@ } ] } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6055,17 +2621,6 @@ }, "description" : "invalid show value" } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6119,17 +2674,6 @@ }, "description" : "invalid show value" } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6185,17 +2729,6 @@ }, "description" : "invalid show value" } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6260,17 +2793,6 @@ }, "description" : "invalid show value" } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6318,17 +2840,6 @@ }, "description" : "invalid show value" } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6345,17 +2856,6 @@ "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6405,17 +2905,6 @@ }, "description" : "invalid show value" } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6474,17 +2963,6 @@ }, "description" : "invalid show value" } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6493,17 +2971,6 @@ "summary" : "GET /api/bookmark/", "description" : "Fetch all bookmarks for the user", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/bookmark" ] } }, @@ -6512,17 +2979,6 @@ "summary" : "PUT /api/bookmark/ordering", "description" : "Sets the order of bookmarks for user.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -6578,17 +3034,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/bookmark" ] }, "delete" : { @@ -6612,17 +3057,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/bookmark" ] } }, @@ -6631,17 +3065,6 @@ "summary" : "GET /api/bug-reporting/connection-pool-details", "description" : "Returns database connection pool info for the current Metabase instance.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/bug-reporting" ] } }, @@ -6650,17 +3073,6 @@ "summary" : "GET /api/bug-reporting/details", "description" : "Returns version and system information relevant to filing a bug report against Metabase.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/bug-reporting" ] } }, @@ -6700,34 +3112,12 @@ }, "description" : "Model id to get configuration for." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/cache" ] }, "put" : { "summary" : "PUT /api/cache/", "description" : "Store cache configuration.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -6758,17 +3148,6 @@ "summary" : "DELETE /api/cache/", "description" : "Delete cache configurations.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -6848,17 +3227,6 @@ }, "description" : "A list of question ids" } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/cache" ] } }, @@ -6885,34 +3253,12 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] }, "post" : { "summary" : "POST /api/card/", "description" : "Create a new `Card`. Card `type` can be `question`, `metric`, or `model`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -7002,17 +3348,6 @@ "summary" : "POST /api/card/collections", "description" : "Bulk update endpoint for Card Collections. Move a set of `Cards` with `card_ids` into a `Collection` with\n `collection_id`, or remove them from any Collections by passing a `null` `collection_id`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -7046,17 +3381,6 @@ "summary" : "GET /api/card/embeddable", "description" : "Fetch a list of Cards where `enable_embedding` is `true`. The cards can be embedded using the embedding endpoints\n and a signed JWT.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7074,17 +3398,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -7107,17 +3420,6 @@ "summary" : "GET /api/card/public", "description" : "Fetch a list of Cards with public UUIDs. These cards are publicly-accessible *if* public sharing is enabled.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7151,17 +3453,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7187,17 +3478,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7215,17 +3495,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] }, "delete" : { @@ -7241,17 +3510,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7264,28 +3522,11 @@ "name" : "card-id", "required" : true, "schema" : { - "anyOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "description" : "String must be a valid 21-character NanoID string.", - "type" : "string", - "pattern" : "^[A-Za-z0-9_\\-]{21}$" - } ] - } - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" + "type" : "integer", + "minimum" : 1 }, - "5XX" : { - "description" : "Server error response" - } - }, + "description" : "value must be an integer greater than zero." + } ], "requestBody" : { "content" : { "application/json" : { @@ -7334,17 +3575,6 @@ "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -7384,16 +3614,10 @@ "name" : "id", "required" : true, "schema" : { - "anyOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "description" : "String must be a valid 21-character NanoID string.", - "type" : "string", - "pattern" : "^[A-Za-z0-9_\\-]{21}$" - } ] - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." }, { "in" : "query", "name" : "ignore_view", @@ -7410,17 +3634,6 @@ "enum" : [ "collection" ] } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] }, "put" : { @@ -7443,17 +3656,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -7555,17 +3757,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7583,17 +3774,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7611,17 +3791,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7653,17 +3822,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7676,28 +3834,11 @@ "name" : "id", "required" : true, "schema" : { - "anyOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "description" : "String must be a valid 21-character NanoID string.", - "type" : "string", - "pattern" : "^[A-Za-z0-9_\\-]{21}$" - } ] - } - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" + "type" : "integer", + "minimum" : 1 }, - "5XX" : { - "description" : "Server error response" - } - }, + "description" : "value must be an integer greater than zero." + } ], "tags" : [ "/api/card" ] } }, @@ -7735,17 +3876,6 @@ "required" : false, "schema" : { } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7754,17 +3884,6 @@ "summary" : "POST /api/cards/dashboards", "description" : "Get the dashboards that multiple cards appear in. The response is a sequence of maps, each of which has a `card_id`\n and `dashboards`. `dashboard` may include an `:error` key, either `:unreadable-dashboard` or\n `:unwritable-dashboard`. In the case of an `unreadable-dashboard` the dashboard details (name, ID) will NOT be\n present.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -7793,17 +3912,6 @@ "summary" : "POST /api/cards/move", "description" : "Moves a number of Cards to a single collection or dashboard.\n\n For now, just either succeed or fail as a batch - we can think more about error handling later down the road.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -7842,17 +3950,6 @@ "summary" : "GET /api/channel/", "description" : "Get all channels", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -7874,17 +3971,6 @@ "summary" : "POST /api/channel/", "description" : "Create a channel", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -7924,17 +4010,6 @@ "summary" : "POST /api/channel/test", "description" : "Test a channel connection", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -7971,17 +4046,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/channel" ] }, "put" : { @@ -7997,17 +4061,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -8045,34 +4098,12 @@ "summary" : "POST /api/cloud-migration/", "description" : "Initiate a new cloud migration.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/cloud-migration" ] }, "get" : { "summary" : "GET /api/cloud-migration/", "description" : "Get the latest cloud migration, if any.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/cloud-migration" ] } }, @@ -8081,17 +4112,6 @@ "summary" : "PUT /api/cloud-migration/cancel", "description" : "Cancel any ongoing cloud migrations, if any.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/cloud-migration" ] } }, @@ -8132,34 +4152,12 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/collection" ] }, "post" : { "summary" : "POST /api/collection/", "description" : "Create a new Collection.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -8209,17 +4207,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/collection" ] }, "put" : { @@ -8242,17 +4229,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -8293,17 +4269,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/collection" ] } }, @@ -8312,24 +4277,6 @@ "summary" : "GET /api/collection/root/dashboard-question-candidates", "description" : "Find cards in the root collection that can be moved into dashboards in the root collection. (Same as the above\n endpoint, but for the root collection)", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:data -> , :name -> , :description -> , :sole_dashboard_info -> , :name -> , :description -> }>}>, :total -> }", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/metabase.collections.api.DashboardQuestionCandidatesResponse" - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/collection" ] } }, @@ -8411,17 +4358,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/collection" ] } }, @@ -8430,24 +4366,6 @@ "summary" : "POST /api/collection/root/move-dashboard-question-candidates", "description" : "Move candidate cards to the dashboards they appear in (for the root collection)", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:moved -> }", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/metabase.collections.api.MoveDashboardQuestionCandidatesResponse" - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -8477,17 +4395,6 @@ "summary" : "GET /api/collection/trash", "description" : "Fetch the trash collection, as in `/api/collection/:trash-id`", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/collection" ] } }, @@ -8537,17 +4444,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/collection" ] } }, @@ -8560,28 +4456,11 @@ "name" : "id", "required" : true, "schema" : { - "anyOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "description" : "String must be a valid 21-character NanoID string.", - "type" : "string", - "pattern" : "^[A-Za-z0-9_\\-]{21}$" - } ] - } - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" + "type" : "integer", + "minimum" : 1 }, - "5XX" : { - "description" : "Server error response" - } - }, + "description" : "value must be an integer greater than zero." + } ], "tags" : [ "/api/collection" ] }, "put" : { @@ -8597,17 +4476,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -8658,24 +4526,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "map where {:data -> , :name -> , :description -> , :sole_dashboard_info -> , :name -> , :description -> }>}>, :total -> }", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/metabase.collections.api.DashboardQuestionCandidatesResponse" - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/collection" ] } }, @@ -8688,16 +4538,10 @@ "name" : "id", "required" : true, "schema" : { - "anyOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "description" : "String must be a valid 21-character NanoID string.", - "type" : "string", - "pattern" : "^[A-Za-z0-9_\\-]{21}$" - } ] - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." }, { "in" : "query", "name" : "models", @@ -8765,17 +4609,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/collection" ] } }, @@ -8793,24 +4626,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "map where {:moved -> }", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/metabase.collections.api.MoveDashboardQuestionCandidatesResponse" - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -8848,34 +4663,12 @@ "enum" : [ "all", "mine", "archived" ] } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] }, "post" : { "summary" : "POST /api/dashboard/", "description" : "Create a new Dashboard.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -8924,17 +4717,6 @@ "summary" : "GET /api/dashboard/embeddable", "description" : "Fetch a list of Dashboards where `enable_embedding` is `true`. The dashboards can be embedded using the embedding\n endpoints and a signed JWT.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -8967,17 +4749,6 @@ } } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -9013,17 +4784,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -9062,17 +4822,6 @@ "summary" : "GET /api/dashboard/public", "description" : "Fetch a list of Dashboards with public UUIDs. These dashboards are publicly-accessible *if* public sharing is\n enabled.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -9081,17 +4830,6 @@ "summary" : "POST /api/dashboard/save", "description" : "Save a denormalized description of dashboard.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -9109,17 +4847,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -9155,17 +4882,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -9242,17 +4958,6 @@ "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -9331,17 +5036,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] }, "post" : { @@ -9366,17 +5060,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -9409,17 +5092,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] }, "delete" : { @@ -9435,17 +5107,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -9463,17 +5124,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -9519,28 +5169,11 @@ "name" : "id", "required" : true, "schema" : { - "anyOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "description" : "String must be a valid 21-character NanoID string.", - "type" : "string", - "pattern" : "^[A-Za-z0-9_\\-]{21}$" - } ] - } - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" + "type" : "integer", + "minimum" : 1 }, - "5XX" : { - "description" : "Server error response" - } - }, + "description" : "value must be an integer greater than zero." + } ], "tags" : [ "/api/dashboard" ] }, "delete" : { @@ -9556,17 +5189,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] }, "put" : { @@ -9582,17 +5204,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -9759,17 +5370,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -9877,17 +5477,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -9919,17 +5508,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -9955,17 +5533,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -9983,17 +5550,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -10006,28 +5562,11 @@ "name" : "id", "required" : true, "schema" : { - "anyOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "description" : "String must be a valid 21-character NanoID string.", - "type" : "string", - "pattern" : "^[A-Za-z0-9_\\-]{21}$" - } ] - } - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" + "type" : "integer", + "minimum" : 1 }, - "5XX" : { - "description" : "Server error response" - } - }, + "description" : "value must be an integer greater than zero." + } ], "tags" : [ "/api/dashboard" ] } }, @@ -10045,17 +5584,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -10121,34 +5649,12 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] }, "post" : { "summary" : "POST /api/database/", "description" : "Add a new `Database`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -10207,17 +5713,6 @@ "summary" : "POST /api/database/sample_database", "description" : "Add the sample database as a new `Database`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10226,17 +5721,6 @@ "summary" : "POST /api/database/validate", "description" : "Validate that we can connect to a database given a set of details.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -10303,17 +5787,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] }, "put" : { @@ -10329,17 +5802,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -10408,17 +5870,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10452,17 +5903,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10495,17 +5935,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10523,17 +5952,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10551,17 +5969,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10579,17 +5986,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10607,17 +6003,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10635,17 +6020,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10695,17 +6069,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10723,17 +6086,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10767,17 +6119,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10811,17 +6152,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10855,17 +6185,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10883,17 +6202,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10911,17 +6219,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10939,17 +6236,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10958,17 +6244,6 @@ "summary" : "GET /api/database/{virtual-db}/datasets", "description" : "Returns a list of all the datasets found for the saved questions virtual database.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10977,17 +6252,6 @@ "summary" : "GET /api/database/{virtual-db}/datasets/{schema}", "description" : "Returns a list of Tables for the datasets virtual database.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10996,17 +6260,6 @@ "summary" : "GET /api/database/{virtual-db}/metadata", "description" : "Endpoint that provides metadata for the Saved Questions 'virtual' database. Used for fooling the frontend\n and allowing it to treat the Saved Questions virtual DB just like any other database.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -11015,17 +6268,6 @@ "summary" : "GET /api/database/{virtual-db}/schema/{schema}", "description" : "Returns a list of Tables for the saved questions virtual database.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -11034,17 +6276,6 @@ "summary" : "GET /api/database/{virtual-db}/schemas", "description" : "Returns a list of all the schemas found for the saved questions virtual database.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -11053,17 +6284,6 @@ "summary" : "POST /api/dataset/", "description" : "Execute a query and retrieve the results in the usual format. The query will not use the cache.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11086,17 +6306,6 @@ "summary" : "POST /api/dataset/native", "description" : "Fetch a native version of an MBQL query.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11126,17 +6335,6 @@ "summary" : "POST /api/dataset/parameter/remapping", "description" : "Return the remapped parameter values for cards or dashboards that are being edited.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11175,17 +6373,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11215,17 +6402,6 @@ "summary" : "POST /api/dataset/parameter/values", "description" : "Return parameter values for cards or dashboards that are being edited.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11255,17 +6431,6 @@ "summary" : "POST /api/dataset/pivot", "description" : "Generate a pivoted dataset for an ad-hoc query", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11291,17 +6456,6 @@ "summary" : "POST /api/dataset/query_metadata", "description" : "Get all of the required query metadata for an ad-hoc query.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11334,17 +6488,6 @@ "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11382,17 +6525,6 @@ "summary" : "GET /api/ee/advanced-permissions/application/graph", "description" : "Fetch a graph of Application Permissions.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/advanced-permissions/application" ] }, "put" : { @@ -11415,17 +6547,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11462,17 +6583,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/advanced-permissions/impersonation" ] } }, @@ -11490,17 +6600,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/advanced-permissions/impersonation" ] } }, @@ -11509,17 +6608,6 @@ "summary" : "POST /api/ee/ai-entity-analysis/analyze-chart", "description" : "Analyze a chart image using an AI vision model. This function sends the image data to a separate external AI service for analysis.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11567,17 +6655,6 @@ "summary" : "POST /api/ee/ai-sql-fixer/fix", "description" : "Suggest fixes for a SQL query.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11612,17 +6689,6 @@ "summary" : "POST /api/ee/ai-sql-generation/generate", "description" : "Generate a SQL query.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11652,17 +6718,6 @@ "summary" : "GET /api/ee/audit-app/user/audit-info", "description" : "Gets audit info for the current user if he has permissions to access the audit collection.\n Otherwise return an empty map.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/audit-app/user" ] } }, @@ -11680,17 +6735,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/audit-app/user" ] } }, @@ -11699,17 +6743,6 @@ "summary" : "POST /api/ee/autodescribe/card/summarize", "description" : "Summarize a question.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11790,17 +6823,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/autodescribe" ] } }, @@ -11809,17 +6831,6 @@ "summary" : "GET /api/ee/billing/", "description" : "Get billing information. This acts as a proxy between `metabase-billing-info-url` and the client,\n using the embedding token and signed in user's email to fetch the billing information.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/billing" ] } }, @@ -11828,17 +6839,6 @@ "summary" : "GET /api/ee/content-translation/csv", "description" : "Provides content translation dictionary in CSV", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/content-translation" ] } }, @@ -11854,17 +6854,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/content-translation" ] } }, @@ -11873,17 +6862,6 @@ "summary" : "POST /api/ee/content-translation/upload-dictionary", "description" : "Upload a CSV of content translations", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -11909,60 +6887,6 @@ "tags" : [ "/api/ee/content-translation" ] } }, - "/api/ee/database-replication/connection/{database-id}" : { - "post" : { - "summary" : "POST /api/ee/database-replication/connection/{database-id}", - "description" : "Create a new PG replication connection for the specified database.", - "parameters" : [ { - "in" : "path", - "name" : "database-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/ee/database-replication" ] - }, - "delete" : { - "summary" : "DELETE /api/ee/database-replication/connection/{database-id}", - "description" : "Delete PG replication connection for the specified database.", - "parameters" : [ { - "in" : "path", - "name" : "database-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/ee/database-replication" ] - } - }, "/api/ee/database-routing/destination-database" : { "post" : { "summary" : "POST /api/ee/database-routing/destination-database", @@ -11975,17 +6899,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12038,17 +6951,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12067,111 +6969,11 @@ "tags" : [ "/api/ee/database-routing" ] } }, - "/api/ee/email/override" : { - "put" : { - "summary" : "PUT /api/ee/email/override", - "description" : "Update multiple cloud email Settings. You must be a superuser or have `setting` permission to do this.\n Calling this automatically sets `cloud-smtp-enabled` to true if the settings are valid.", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "email-smtp-host-override" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "null" - } ] - }, - "email-smtp-password-override" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "null" - } ] - }, - "email-smtp-port-override" : { - "anyOf" : [ { - "type" : "integer" - }, { - "type" : "null" - } ] - }, - "email-smtp-security-override" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "null" - } ] - }, - "email-smtp-username-override" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "null" - } ] - } - } - } - } - } - }, - "tags" : [ "/api/ee/email" ] - }, - "delete" : { - "summary" : "DELETE /api/ee/email/override", - "description" : "Clear all cloud email related settings. You must be a superuser or have `setting` permission to do this.", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/ee/email" ] - } - }, "/api/ee/gsheets/connection" : { "post" : { "summary" : "POST /api/ee/gsheets/connection", "description" : "Hook up a new google drive folder or sheet that will be watched and have its content ETL'd into Metabase.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:error -> , :message -> }, or one of , :created_at -> , :sync_started_at -> , :created_by_id -> , :db_id -> } | active = map where {:url -> , :created_at -> , :last_sync_at -> , :next_sync_at -> , :created_by_id -> , :db_id -> } | error = map where {:url -> , :created_at -> , :error_message -> , :created_by_id -> , :db_id -> }> dispatched by :status", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/gsheets.response" - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12194,41 +6996,12 @@ "summary" : "GET /api/ee/gsheets/connection", "description" : "Check the status of a connection. This endpoint gets polled by FE to determine when to\n stop showing the setup widget.\n\n Returns the gsheets shape, with the attached datawarehouse db id at `:db_id`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:error -> , :message -> }, or one of , :created_at -> , :sync_started_at -> , :created_by_id -> , :db_id -> } | active = map where {:url -> , :created_at -> , :last_sync_at -> , :next_sync_at -> , :created_by_id -> , :db_id -> } | error = map where {:url -> , :created_at -> , :error_message -> , :created_by_id -> , :db_id -> }> dispatched by :status", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/gsheets.response" - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/gsheets" ] }, "delete" : { "summary" : "DELETE /api/ee/gsheets/connection", "description" : "Disconnect the google service account. There is only one (or zero) at the time of writing.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/gsheets" ] } }, @@ -12237,17 +7010,6 @@ "summary" : "POST /api/ee/gsheets/connection/sync", "description" : "Force a sync of the connection now.\n\n Returns the gsheets shape, with the attached datawarehouse db id at `:db_id`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/gsheets" ] } }, @@ -12256,30 +7018,6 @@ "summary" : "GET /api/ee/gsheets/service-account", "description" : "Checks to see if service-account is setup or not, delegates to HM only if we haven't set it from a metabase cluster\n before.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:email -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "email" : { - "type" : "string" - } - }, - "required" : [ ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/gsheets" ] } }, @@ -12297,17 +7035,6 @@ }, "description" : "Must be a string like 2020-04 or 2222-11." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/logs" ] } }, @@ -12316,32 +7043,6 @@ "summary" : "POST /api/ee/metabot-tools/answer-sources", "description" : "Return top level meta information about available information sources.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12370,35 +7071,6 @@ "summary" : "POST /api/ee/metabot-tools/create-dashboard-subscription", "description" : "Create a dashboard subscription.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:output -> , :conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - }, - "output" : { - "type" : "string" - } - }, - "required" : [ "output", "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12427,32 +7099,6 @@ "summary" : "POST /api/ee/metabot-tools/field-values", "description" : "Return statistics and/or values for a given field of a given entity.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12481,32 +7127,6 @@ "summary" : "POST /api/ee/metabot-tools/filter-records", "description" : "Construct a query from a metric.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12535,32 +7155,6 @@ "summary" : "POST /api/ee/metabot-tools/find-metric", "description" : "Find a metric matching a description.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12595,32 +7189,6 @@ "summary" : "POST /api/ee/metabot-tools/find-outliers", "description" : "Find outliers in the values provided by a data source for a given column.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12633,57 +7201,22 @@ "conversation_id" : { "description" : "value must be a valid UUID.", "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "arguments", "conversation_id" ] - } - } - } - }, - "tags" : [ "/api/ee/metabot-tools" ] - } - }, - "/api/ee/metabot-tools/generate-insights" : { - "post" : { - "summary" : "POST /api/ee/metabot-tools/generate-insights", - "description" : "Generate insights.", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:output -> , :reactions -> , :url -> }>, :conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - }, - "output" : { - "type" : "string" - }, - "reactions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabot.reaction.redirect" - } - } - }, - "required" : [ "output", "reactions", "conversation_id" ] - } + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "arguments", "conversation_id" ] } } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" } }, + "tags" : [ "/api/ee/metabot-tools" ] + } + }, + "/api/ee/metabot-tools/generate-insights" : { + "post" : { + "summary" : "POST /api/ee/metabot-tools/generate-insights", + "description" : "Generate insights.", + "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { @@ -12712,32 +7245,6 @@ "summary" : "POST /api/ee/metabot-tools/get-current-user", "description" : "Get information about user that started the conversation.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12755,32 +7262,6 @@ "summary" : "POST /api/ee/metabot-tools/get-dashboard-details", "description" : "Get information about a given dashboard.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12815,32 +7296,6 @@ "summary" : "POST /api/ee/metabot-tools/get-metric-details", "description" : "Get information about a given metric.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12869,32 +7324,6 @@ "summary" : "POST /api/ee/metabot-tools/get-query-details", "description" : "Get information about a given query.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12930,32 +7359,6 @@ "summary" : "POST /api/ee/metabot-tools/get-report-details", "description" : "Get information about a given report.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12984,32 +7387,6 @@ "summary" : "POST /api/ee/metabot-tools/get-table-details", "description" : "Get information about a given table or model.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -13038,32 +7415,6 @@ "summary" : "POST /api/ee/metabot-tools/query-metric", "description" : "Construct a query from a metric.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -13092,32 +7443,6 @@ "summary" : "POST /api/ee/metabot-tools/query-model", "description" : "Construct a query from a model.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -13146,17 +7471,6 @@ "summary" : "GET /api/ee/metabot-v3/metabot/", "description" : "List configured metabot instances", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -13173,17 +7487,6 @@ "minimum" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -13200,17 +7503,6 @@ "minimum" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/metabot-v3/metabot" ] }, "put" : { @@ -13225,17 +7517,6 @@ "minimum" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -13297,17 +7578,6 @@ "minimum" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -13347,17 +7617,6 @@ "minimum" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/metabot-v3/metabot" ] }, "delete" : { @@ -13372,17 +7631,6 @@ "minimum" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -13399,17 +7647,6 @@ "minimum" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -13434,17 +7671,6 @@ "minimum" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -13453,17 +7679,6 @@ "summary" : "POST /api/ee/metabot-v3/v2/agent", "description" : "Send a chat message to the LLM via the AI Service.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -13506,17 +7721,6 @@ "summary" : "POST /api/ee/metabot-v3/v2/agent-streaming", "description" : "Send a chat message to the LLM via the AI Proxy.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -13554,39 +7758,48 @@ "tags" : [ "/api/ee/metabot-v3" ] } }, + "/api/ee/permission_debug/" : { + "get" : { + "summary" : "GET /api/ee/permission_debug/", + "description" : "This endpoint expects a `user_id`, a `model_id` to debug permissions against, and `action_type`.\n The type of model we are debugging against is inferred by the `action_type`.\n\n It will return:\n - `decision`: The overall permission decision (\"allow\", \"denied\", or \"limited\")\n - `model-type`: The type of model being checked (e.g., \"question\")\n - `model-id`: The ID of the model being checked\n - `segment`: A set of segmentation types applied (e.g., \"sandboxed\", \"impersonated\", \"routed\")\n - `message`: A sequence of strings explaining the decision\n - `data`: A map containing details about permissions (table or collection names to group names)\n - `suggestions`: A map of group IDs to group names that could provide access\n\n Example requests:\n - Check if user can read a card: `GET /api/ee/permission_debug?user_id=123&model_id=456&action_type=card/read`\n - Check if user can query a card: `GET /api/ee/permission_debug?user_id=123&model_id=456&action_type=card/query`\n - Check if user can download data: `GET /api/ee/permission_debug?user_id=123&model_id=456&action_type=card/download-data`\n\n Example responses:\n - Allowed access:\n ```json\n {\n \"decision\": \"allow\",\n \"model-type\": \"question\",\n \"model-id\": \"456\",\n \"segment\": [],\n \"message\": [\"User has permission to read this card\"],\n \"data\": {},\n \"suggestions\": {}\n }\n ```\n - Denied access with blocked table:\n ```json\n {\n \"decision\": \"denied\",\n \"model-type\": \"question\",\n \"model-id\": \"456\",\n \"segment\": [],\n \"message\": [\"User does not have permission to query this card\"],\n \"data\": {\"sample-db.PUBLIC.ORDERS\": [\"All Users\"]},\n \"suggestions\": {}\n }\n ```\n - Limited access:\n ```json\n {\n \"decision\": \"limited\",\n \"model-type\": \"question\",\n \"model-id\": \"456\",\n \"segment\": [],\n \"message\": [\"User has permission to download some data from this card\"],\n \"data\": {},\n \"suggestions\": {}\n }\n ```", + "parameters" : [ { + "in" : "query", + "name" : "user_id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + } + }, { + "in" : "query", + "name" : "model_id", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "query", + "name" : "action_type", + "required" : true, + "schema" : { + "type" : "string", + "enum" : [ "card/read", "card/query", "card/download-data" ] + } + } ], + "tags" : [ "/api/ee/permission_debug" ] + } + }, "/api/ee/scim/api_key" : { "get" : { "summary" : "GET /api/ee/scim/api_key", "description" : "Fetch the SCIM API key if one exists. Does *not* return an unmasked key, since we don't have access\n to that after it is created.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/scim" ] }, "post" : { "summary" : "POST /api/ee/scim/api_key", "description" : "Create a new SCIM API key, or refresh one that already exists. When called for the first time,\n this is equivalent to enabling SCIM.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/scim" ] } }, @@ -13621,34 +7834,12 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/scim/v2" ] }, "post" : { "summary" : "POST /api/ee/scim/v2/Groups", "description" : "Create a single group, and populates it if necessary.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -13709,34 +7900,12 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/scim/v2" ] }, "put" : { "summary" : "PUT /api/ee/scim/v2/Groups/{id}", "description" : "Update a group.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -13795,17 +7964,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/scim/v2" ] } }, @@ -13840,34 +7998,12 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/scim/v2" ] }, "post" : { "summary" : "POST /api/ee/scim/v2/Users", "description" : "Create a single user.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -13971,34 +8107,12 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/scim/v2" ] }, "put" : { "summary" : "PUT /api/ee/scim/v2/Users/{id}", "description" : "Update a user.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -14100,17 +8214,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -14244,17 +8347,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/serialization" ] } }, @@ -14279,17 +8371,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -14374,17 +8455,6 @@ "enum" : [ "asc", "desc" ] } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/stale" ] } }, @@ -14393,17 +8463,6 @@ "summary" : "GET /api/ee/upload-management/tables", "description" : "Get all `Tables` visible to the current user which were created by uploading a file.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/upload-management" ] } }, @@ -14428,18 +8487,7 @@ "type" : "boolean", "default" : false } - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, + } ], "tags" : [ "/api/ee/upload-management" ] } }, @@ -14448,17 +8496,6 @@ "summary" : "POST /api/eid-translation/translate", "description" : "Translate entity IDs to model IDs.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -14483,59 +8520,12 @@ "summary" : "PUT /api/email/", "description" : "Update multiple email Settings. You must be a superuser or have `setting` permission to do this.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", - "properties" : { - "email-smtp-host" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "null" - } ] - }, - "email-smtp-password" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "null" - } ] - }, - "email-smtp-port" : { - "anyOf" : [ { - "type" : "integer" - }, { - "type" : "null" - } ] - }, - "email-smtp-security" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "null" - } ] - }, - "email-smtp-username" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "null" - } ] - } - } + "properties" : { } } } } @@ -14546,17 +8536,6 @@ "summary" : "DELETE /api/email/", "description" : "Clear all email related settings. You must be a superuser or have `setting` permission to do this.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/email" ] } }, @@ -14565,17 +8544,6 @@ "summary" : "POST /api/email/test", "description" : "Send a test email using the SMTP Settings. You must be a superuser or have `setting` permission to do this.\n Returns `{:ok true}` if we were able to send the message successfully, otherwise a standard 400 error response.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/email" ] } }, @@ -14591,17 +8559,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14631,17 +8588,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14650,17 +8596,6 @@ "summary" : "GET /api/embed/card/{token}/params/{param-key}/search/{prefix}", "description" : "Embedded version of chain filter search endpoint.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14683,17 +8618,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14709,17 +8633,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14758,17 +8671,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14784,17 +8686,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14828,17 +8719,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14888,17 +8768,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14907,17 +8776,6 @@ "summary" : "GET /api/embed/dashboard/{token}/params/{param-key}/remapping", "description" : "Embedded version of the remapped dashboard param value endpoint.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14926,17 +8784,6 @@ "summary" : "GET /api/embed/dashboard/{token}/params/{param-key}/search/{prefix}", "description" : "Embedded version of chain filter search endpoint.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14959,17 +8806,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14985,17 +8821,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -15029,17 +8854,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -15101,17 +8915,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -15191,17 +8994,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -15227,17 +9019,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/field" ] }, "put" : { @@ -15253,17 +9034,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -15341,17 +9111,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -15392,17 +9151,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/field" ] } }, @@ -15420,17 +9168,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/field" ] } }, @@ -15448,17 +9185,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/field" ] } }, @@ -15493,17 +9219,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/field" ] } }, @@ -15521,17 +9236,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/field" ] } }, @@ -15566,17 +9270,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/field" ] } }, @@ -15594,17 +9287,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/field" ] } }, @@ -15622,17 +9304,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/field" ] }, "post" : { @@ -15648,17 +9319,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -15702,17 +9362,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/geojson" ] } }, @@ -15729,17 +9378,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/geojson" ] } }, @@ -15748,17 +9386,6 @@ "summary" : "PUT /api/google/settings", "description" : "Update Google Sign-In related settings. You must be a superuser to do this.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -15787,17 +9414,6 @@ "summary" : "PUT /api/ldap/settings", "description" : "Update LDAP related settings. You must be a superuser to do this.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -15830,17 +9446,6 @@ "summary" : "POST /api/logger/adjustment", "description" : "Temporarily adjust the log levels.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -15866,17 +9471,6 @@ "summary" : "DELETE /api/logger/adjustment", "description" : "Undo any log level adjustments.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/logger" ] } }, @@ -15885,17 +9479,6 @@ "summary" : "GET /api/logger/logs", "description" : "Logs.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/logger" ] } }, @@ -15904,51 +9487,6 @@ "summary" : "GET /api/logger/presets", "description" : "Get all known presets.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "sequence of map where {:id -> , :display_name -> , :loggers -> , :level -> }>}", - "content" : { - "application/json" : { - "schema" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "display_name" : { - "type" : "string" - }, - "id" : { - "type" : "string" - }, - "loggers" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "level" : { - "$ref" : "#/components/schemas/metabase.logger.api.log-level" - }, - "name" : { - "type" : "string" - } - }, - "required" : [ "name", "level" ] - } - } - }, - "required" : [ "id", "display_name", "loggers" ] - } - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/logger" ] } }, @@ -15957,17 +9495,6 @@ "summary" : "GET /api/login-history/current", "description" : "Fetch recent logins for the current user.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/login-history" ] } }, @@ -15976,17 +9503,6 @@ "summary" : "POST /api/model-index/", "description" : "Create ModelIndex.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16021,17 +9537,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/model-index" ] } }, @@ -16049,17 +9554,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/model-index" ] }, "delete" : { @@ -16075,17 +9569,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/model-index" ] } }, @@ -16094,17 +9577,6 @@ "summary" : "POST /api/moderation-review/", "description" : "Create a new `ModerationReview`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16158,34 +9630,12 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/mt/gtap" ] }, "post" : { "summary" : "POST /api/mt/gtap/", "description" : "Create a new GTAP.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16222,17 +9672,6 @@ "summary" : "POST /api/mt/gtap/validate", "description" : "Validate a sandbox which may not have yet been saved. This runs the same validation that is performed when the\n sandbox is saved, but doesn't actually save the sandbox.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16272,17 +9711,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/mt/gtap" ] }, "put" : { @@ -16297,18 +9725,7 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, + } ], "requestBody" : { "content" : { "application/json" : { @@ -16341,17 +9758,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/mt/gtap" ] } }, @@ -16360,17 +9766,6 @@ "summary" : "GET /api/mt/user/attributes", "description" : "Fetch a list of possible keys for User `login_attributes`. This just looks at keys that have already been set for\n existing Users and returns those. ", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/mt/user" ] } }, @@ -16388,17 +9783,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16431,34 +9815,12 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/native-query-snippet" ] }, "post" : { "summary" : "POST /api/native-query-snippet/", "description" : "Create a new `NativeQuerySnippet`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16502,17 +9864,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/native-query-snippet" ] }, "put" : { @@ -16528,17 +9879,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16626,34 +9966,12 @@ "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/notification" ] }, "post" : { "summary" : "POST /api/notification/", "description" : "Create a new notification, return the created notification.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16671,17 +9989,6 @@ "summary" : "POST /api/notification/send", "description" : "Send an unsaved notification.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16699,17 +10006,6 @@ "summary" : "POST /api/notification/unsubscribe/", "description" : "Allow non-users to unsubscribe from notifications, with the hash given through email.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16741,17 +10037,6 @@ "summary" : "POST /api/notification/unsubscribe/undo", "description" : "Allow non-users to undo an unsubscribe from notifications, with the hash given through email.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16792,17 +10077,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/notification" ] }, "put" : { @@ -16818,17 +10092,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16855,17 +10118,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16902,17 +10154,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/notification" ] } }, @@ -16921,17 +10162,6 @@ "summary" : "POST /api/notify/db/attached_datawarehouse", "description" : "Sync the attached datawarehouse. Can provide in the body:\n - table_name and schema_name: both strings. Will look for an existing table and sync it, otherwise will try to find a\n new table with that name and sync it. If it cannot find a table it will throw an error. If table_name is empty or\n blank, will sync the entire database.\n - synchronous?: is a boolean value to indicate if this should block on the result.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16972,17 +10202,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -17024,17 +10243,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -17063,17 +10271,6 @@ "summary" : "GET /api/permissions/graph", "description" : "Fetch a graph of all Permissions.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/permissions" ] }, "put" : { @@ -17096,17 +10293,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -17134,17 +10320,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/permissions" ] } }, @@ -17162,17 +10337,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/permissions" ] } }, @@ -17181,34 +10345,12 @@ "summary" : "GET /api/permissions/group", "description" : "Fetch all `PermissionsGroups`, including a count of the number of `:members` in that group.\n This API requires superuser or group manager of more than one group.\n Group manager is only available if `advanced-permissions` is enabled and returns only groups that user\n is manager of.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/permissions" ] }, "post" : { "summary" : "POST /api/permissions/group", "description" : "Create a new `PermissionsGroup`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -17242,17 +10384,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -17284,17 +10415,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/permissions" ] } }, @@ -17312,17 +10432,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/permissions" ] } }, @@ -17331,34 +10440,12 @@ "summary" : "GET /api/permissions/membership", "description" : "Fetch a map describing the group memberships of various users.\n This map's format is:\n\n { [{:membership_id \n :group_id \n :is_group_manager boolean}]}", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/permissions" ] }, "post" : { "summary" : "POST /api/permissions/membership", "description" : "Add a `User` to a `PermissionsGroup`. Returns updated list of members belonging to the group.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -17402,17 +10489,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/permissions" ] } }, @@ -17430,17 +10506,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -17471,17 +10536,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/permissions" ] } }, @@ -17490,17 +10544,6 @@ "summary" : "GET /api/persist/", "description" : "List the entries of [[PersistedInfo]] in order to show a status page.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17518,17 +10561,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17546,17 +10578,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17574,17 +10595,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17602,17 +10612,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17630,17 +10629,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17658,17 +10646,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17677,17 +10654,6 @@ "summary" : "POST /api/persist/disable", "description" : "Disable global setting to allow databases to persist models. This will remove all tasks to refresh tables, remove\n that option from databases which might have it enabled, and delete all cached tables.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17696,17 +10662,6 @@ "summary" : "POST /api/persist/enable", "description" : "Enable global setting to allow databases to persist models.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17715,17 +10670,6 @@ "summary" : "POST /api/persist/set-refresh-schedule", "description" : "Set the cron schedule to refresh persisted models.\n Shape should be JSON like {cron: \"0 30 1/8 * * ? *\"}.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -17760,17 +10704,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17779,17 +10712,6 @@ "summary" : "GET /api/premium-features/token/status", "description" : "Fetch info about the current Premium-Features premium features token including whether it is `valid`, a `trial` token, its\n `features`, when it is `valid-thru`, and the `status` of the account.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/premium-features" ] } }, @@ -17806,17 +10728,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/preview_embed" ] } }, @@ -17846,17 +10757,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/preview_embed" ] } }, @@ -17873,17 +10773,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/preview_embed" ] } }, @@ -17900,17 +10789,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/preview_embed" ] } }, @@ -17945,17 +10823,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/preview_embed" ] } }, @@ -17964,17 +10831,6 @@ "summary" : "GET /api/preview_embed/dashboard/{token}/params/{param-key}/remapping", "description" : "Embedded version of the remapped dashboard param value endpoint.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/preview_embed" ] } }, @@ -17983,17 +10839,6 @@ "summary" : "GET /api/preview_embed/dashboard/{token}/params/{param-key}/values", "description" : "Embedded version of chain filter values endpoint.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/preview_embed" ] } }, @@ -18010,17 +10855,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/preview_embed" ] } }, @@ -18055,17 +10889,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/preview_embed" ] } }, @@ -18074,17 +10897,6 @@ "summary" : "POST /api/product-feedback/", "description" : "Endpoint to provide feedback from the product", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -18126,17 +10938,6 @@ }, "description" : "value must be a valid UUID." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18154,17 +10955,6 @@ }, "description" : "value must be a valid UUID." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -18197,17 +10987,6 @@ }, "description" : "value must be a valid UUID." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18238,17 +11017,6 @@ "required" : true, "schema" : { } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18282,17 +11050,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18318,17 +11075,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18354,17 +11100,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18410,20 +11145,9 @@ "required" : false, "schema" : { "type" : "string" - }, - "description" : "value must be a valid JSON string." - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, + }, + "description" : "value must be a valid JSON string." + } ], "tags" : [ "/api/public" ] } }, @@ -18441,17 +11165,6 @@ }, "description" : "value must be a valid UUID." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18495,17 +11208,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18548,17 +11250,6 @@ "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -18620,17 +11311,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] }, "post" : { @@ -18655,17 +11335,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -18711,17 +11380,6 @@ "required" : true, "schema" : { } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18755,17 +11413,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18791,17 +11438,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18845,17 +11481,6 @@ "minimum" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18881,17 +11506,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18935,17 +11549,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -19009,17 +11612,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -19101,17 +11693,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -19145,34 +11726,12 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/pulse" ] }, "post" : { "summary" : "POST /api/pulse/", "description" : "Create a new `Pulse`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -19225,17 +11784,6 @@ "summary" : "GET /api/pulse/form_input", "description" : "Provides relevant configuration information and user choices for creating/updating Pulses.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/pulse" ] } }, @@ -19253,17 +11801,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/pulse" ] } }, @@ -19281,17 +11818,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/pulse" ] } }, @@ -19309,17 +11835,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/pulse" ] } }, @@ -19337,17 +11852,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/pulse" ] } }, @@ -19356,17 +11860,6 @@ "summary" : "POST /api/pulse/test", "description" : "Test send an unsaved pulse.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -19412,17 +11905,6 @@ "summary" : "POST /api/pulse/unsubscribe/", "description" : "Allow non-users to unsubscribe from pulses/subscriptions, with the hash given through email.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -19454,17 +11936,6 @@ "summary" : "POST /api/pulse/unsubscribe/undo", "description" : "Allow non-users to undo an unsubscribe from pulses/subscriptions, with the hash given through email.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -19505,17 +11976,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/pulse" ] }, "put" : { @@ -19531,17 +11991,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -19598,17 +12047,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/pulse" ] } }, @@ -19634,17 +12072,6 @@ "enum" : [ "card", "dashboard", "segment" ] } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/revision" ] } }, @@ -19653,17 +12080,6 @@ "summary" : "POST /api/revision/revert", "description" : "Revert an object to a prior revision.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -19715,24 +12131,13 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/revision" ] } }, "/api/search/" : { "get" : { "summary" : "GET /api/search/", - "description" : "Search for items in Metabase.\n For the list of supported models, check [[metabase.search.config/all-models]].\n\n Filters:\n - `archived`: set to true to search archived items only, default is false\n - `table_db_id`: search for tables, cards, and models of a certain DB\n - `models`: only search for items of specific models. If not provided, search for all models\n - `filters_items_in_personal_collection`: only search for items in personal collections\n - `created_at`: search for items created at a specific timestamp\n - `created_by`: search for items created by a specific user\n - `last_edited_at`: search for items last edited at a specific timestamp\n - `last_edited_by`: search for items last edited by a specific user\n - `search_native_query`: set to true to search the content of native queries\n - `verified`: set to true to search for verified items only (requires Content Management or Official Collections premium feature)\n - `ids`: search for items with those ids, works iff single value passed to `models`\n - `display_type`: search for cards/models with specific display types\n - `has_temporal_dimensions`: set to true to search for cards with temporal dimensions only\n\n Note that not all item types support all filters, and the results will include only models that support the provided filters. For example:\n - The `created-by` filter supports dashboards, models, actions, and cards.\n - The `verified` filter supports models and cards.\n\n A search query that has both filters applied will only return models and cards.", + "description" : "Search for items in Metabase.\n For the list of supported models, check [[metabase.search.config/all-models]].\n\n Filters:\n - `archived`: set to true to search archived items only, default is false\n - `table_db_id`: search for tables, cards, and models of a certain DB\n - `models`: only search for items of specific models. If not provided, search for all models\n - `filters_items_in_personal_collection`: only search for items in personal collections\n - `created_at`: search for items created at a specific timestamp\n - `created_by`: search for items created by a specific user\n - `last_edited_at`: search for items last edited at a specific timestamp\n - `last_edited_by`: search for items last edited by a specific user\n - `search_native_query`: set to true to search the content of native queries\n - `verified`: set to true to search for verified items only (requires Content Management or Official Collections premium feature)\n - `ids`: search for items with those ids, works iff single value passed to `models`\n\n Note that not all item types support all filters, and the results will include only models that support the provided filters. For example:\n - The `created-by` filter supports dashboards, models, actions, and cards.\n - The `verified` filter supports models and cards.\n\n A search query that has both filters applied will only return models and cards.", "parameters" : [ { "in" : "query", "name" : "q", @@ -19804,24 +12209,6 @@ "minimum" : 1 } } - }, { - "in" : "query", - "name" : "display_type", - "required" : false, - "schema" : { - "type" : "array", - "items" : { - "type" : "string", - "minLength" : 1 - } - } - }, { - "in" : "query", - "name" : "has_temporal_dimensions", - "required" : false, - "schema" : { - "type" : "boolean" - } }, { "in" : "query", "name" : "last_edited_at", @@ -19907,17 +12294,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/search" ] } }, @@ -19926,17 +12302,6 @@ "summary" : "POST /api/search/force-reindex", "description" : "This will trigger an immediate reindexing, if we are using search index.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/search" ] } }, @@ -19945,17 +12310,6 @@ "summary" : "POST /api/search/re-init", "description" : "This will blow away any search indexes, re-create, and re-populate them.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/search" ] } }, @@ -19977,17 +12331,6 @@ "required" : false, "schema" : { } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/search" ] }, "put" : { @@ -20007,17 +12350,6 @@ "required" : false, "schema" : { } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/search" ] } }, @@ -20026,17 +12358,6 @@ "summary" : "POST /api/segment/", "description" : "Create a new `Segment`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20072,17 +12393,6 @@ "summary" : "GET /api/segment/", "description" : "Fetch *all* `Segments`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/segment" ] } }, @@ -20100,17 +12410,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/segment" ] }, "put" : { @@ -20126,17 +12425,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20199,17 +12487,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/segment" ] } }, @@ -20227,17 +12504,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/segment" ] } }, @@ -20246,17 +12512,6 @@ "summary" : "POST /api/session/", "description" : "Login.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20283,17 +12538,6 @@ "summary" : "DELETE /api/session/", "description" : "Logout.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/session" ] } }, @@ -20302,17 +12546,6 @@ "summary" : "POST /api/session/forgot_password", "description" : "Send a reset email when user has forgotten their password.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20337,17 +12570,6 @@ "summary" : "POST /api/session/google_auth", "description" : "Login with Google Auth.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20372,17 +12594,6 @@ "summary" : "POST /api/session/password-check", "description" : "Endpoint that checks if the supplied password meets the currently configured password complexity rules.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20415,17 +12626,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/session" ] } }, @@ -20434,17 +12634,6 @@ "summary" : "GET /api/session/properties", "description" : "Get all properties and their values. These are the specific `Settings` that are readable by the current user, or are\n public if no user is logged in.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/session" ] } }, @@ -20453,17 +12642,6 @@ "summary" : "POST /api/session/reset_password", "description" : "Reset password with a reset token.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20492,34 +12670,12 @@ "summary" : "GET /api/setting/", "description" : "Get all `Settings` and their values. You must be a superuser or have `setting` permission to do this.\n For non-superusers, a list of visible settings and values can be retrieved using the /api/session/properties endpoint.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/setting" ] }, "put" : { "summary" : "PUT /api/setting/", "description" : "Update multiple `Settings` values. If called by a non-superuser, only user-local settings can be updated.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20545,17 +12701,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/setting" ] }, "put" : { @@ -20569,30 +12714,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "value" : { } - }, - "required" : [ "value" ] - } - } - } - }, "tags" : [ "/api/setting" ] } }, @@ -20601,17 +12722,6 @@ "summary" : "POST /api/setup/", "description" : "Special endpoint for creating the first user during setup. This endpoint both creates the user AND logs them in and\n returns a session ID. This endpoint can also be used to add a database, create and invite a second admin, and/or\n set specific settings from the setup flow.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20691,17 +12801,6 @@ "summary" : "GET /api/setup/user_defaults", "description" : "Returns object containing default user details for initial setup, if configured,\n and if the provided token value matches the token in the configuration value.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/setup" ] } }, @@ -20710,17 +12809,6 @@ "summary" : "POST /api/slack/bug-report", "description" : "Send diagnostic information to the configured Slack channels.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20742,19 +12830,8 @@ "/api/slack/manifest" : { "get" : { "summary" : "GET /api/slack/manifest", - "description" : "Returns the YAML manifest file that should be used to bootstrap new Slack apps", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, + "description" : "Returns the YAML manifest file that should be used to bootstrap new Slack apps", + "parameters" : [ ], "tags" : [ "/api/slack" ] } }, @@ -20763,17 +12840,6 @@ "summary" : "PUT /api/slack/settings", "description" : "Update Slack related settings. You must be a superuser to do this. Also updates the slack-cache.\n There are 3 cases where we alter the slack channel/user cache:\n 1. falsy token -> clear\n 2. invalid token -> clear\n 3. truthy, valid token -> refresh ", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20800,34 +12866,12 @@ "summary" : "GET /api/table/", "description" : "Get all `Tables`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/table" ] }, "put" : { "summary" : "PUT /api/table/", "description" : "Update all `Table` in `ids`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20888,17 +12932,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/table" ] } }, @@ -20916,17 +12949,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/table" ] } }, @@ -20951,17 +12973,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/table" ] }, "put" : { @@ -20977,17 +12988,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -21043,17 +13043,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -21093,17 +13082,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/table" ] } }, @@ -21121,30 +13099,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "map where {:success -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "success" : { - "const" : true - } - }, - "required" : [ "success" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -21176,17 +13130,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/table" ] } }, @@ -21228,17 +13171,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/table" ] } }, @@ -21256,17 +13188,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/table" ] } }, @@ -21284,17 +13205,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -21307,418 +13217,109 @@ "filename" : { "type" : "string" }, - "tempfile" : { } - }, - "required" : [ "filename", "tempfile" ] - } - }, - "required" : [ "file" ] - } - } - } - }, - "tags" : [ "/api/table" ] - } - }, - "/api/table/{id}/rescan_values" : { - "post" : { - "summary" : "POST /api/table/{id}/rescan_values", - "description" : "Manually trigger an update for the FieldValues for the Fields belonging to this Table. Only applies to Fields that\n are eligible for FieldValues.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/table" ] - } - }, - "/api/table/{id}/sync_schema" : { - "post" : { - "summary" : "POST /api/table/{id}/sync_schema", - "description" : "Trigger a manual update of the schema metadata for this `Table`.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/table" ] - } - }, - "/api/table/{table-id}/data" : { - "get" : { - "summary" : "GET /api/table/{table-id}/data", - "description" : "Get the data for the given table", - "parameters" : [ { - "in" : "path", - "name" : "table-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/table" ] - } - }, - "/api/task/" : { - "get" : { - "summary" : "GET /api/task/", - "description" : "Fetch a list of recent tasks stored as Task History", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/task" ] - } - }, - "/api/task/info" : { - "get" : { - "summary" : "GET /api/task/info", - "description" : "Return raw data about all scheduled tasks (i.e., Quartz Jobs and Triggers).", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/task" ] - } - }, - "/api/task/unique-tasks" : { - "get" : { - "summary" : "GET /api/task/unique-tasks", - "description" : "Returns possibly empty vector of unique task names in alphabetical order. It is expected that number of unique\n tasks is small, hence no need for pagination. If that changes this endpoint and function that powers it should\n reflect that.", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/task" ] - } - }, - "/api/task/{id}" : { - "get" : { - "summary" : "GET /api/task/{id}", - "description" : "Get `TaskHistory` entry with ID.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/task" ] - } - }, - "/api/testing/echo" : { - "post" : { - "summary" : "POST /api/testing/echo", - "description" : "Simple echo hander. Fails when you POST with `?fail=true`.", - "parameters" : [ { - "in" : "query", - "name" : "fail", - "required" : true, - "schema" : { - "default" : false, - "type" : "boolean" - } - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/testing" ] - }, - "get" : { - "summary" : "GET /api/testing/echo", - "description" : "Simple echo hander. Fails when you GET with `?fail=true`.", - "parameters" : [ { - "in" : "query", - "name" : "fail", - "required" : true, - "schema" : { - "default" : false, - "type" : "boolean" - } - }, { - "in" : "query", - "name" : "body", - "required" : true, - "schema" : { - "type" : "string" - }, - "description" : "value must be a valid JSON string." - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/testing" ] - } - }, - "/api/testing/mark-stale" : { - "post" : { - "summary" : "POST /api/testing/mark-stale", - "description" : "Mark the card or dashboard as stale", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "date-str" : { - "type" : "string" - }, - "id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "model" : { - "type" : "string" + "tempfile" : { } + }, + "required" : [ "filename", "tempfile" ] } }, - "required" : [ "id", "model" ] + "required" : [ "file" ] } } } }, - "tags" : [ "/api/testing" ] - } - }, - "/api/testing/refresh-caches" : { - "post" : { - "summary" : "POST /api/testing/refresh-caches", - "description" : "Manually triggers the cache refresh task, if Enterprise code is available.", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/testing" ] + "tags" : [ "/api/table" ] } }, - "/api/testing/restore/{name}" : { + "/api/table/{id}/rescan_values" : { "post" : { - "summary" : "POST /api/testing/restore/{name}", - "description" : "Restore a database snapshot for testing purposes.", + "summary" : "POST /api/table/{id}/rescan_values", + "description" : "Manually trigger an update for the FieldValues for the Fields belonging to this Table. Only applies to Fields that\n are eligible for FieldValues.", "parameters" : [ { "in" : "path", - "name" : "name", + "name" : "id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" + "type" : "integer", + "minimum" : 1 }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/testing" ] + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/table" ] } }, - "/api/testing/set-time" : { + "/api/table/{id}/sync_schema" : { "post" : { - "summary" : "POST /api/testing/set-time", - "description" : "Make java-time see world at exact time.", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" + "summary" : "POST /api/table/{id}/sync_schema", + "description" : "Trigger a manual update of the schema metadata for this `Table`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 }, - "5XX" : { - "description" : "Server error response" - } - }, - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "add-ms" : { - "description" : "value must be an integer.", - "type" : "integer" - }, - "time" : { - "description" : "value must be a valid date string", - "type" : "string" - } - } - } - } - } - }, - "tags" : [ "/api/testing" ] + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/table" ] } }, - "/api/testing/snapshot/{name}" : { - "post" : { - "summary" : "POST /api/testing/snapshot/{name}", - "description" : "Snapshot the database for testing purposes.", + "/api/table/{table-id}/data" : { + "get" : { + "summary" : "GET /api/table/{table-id}/data", + "description" : "Get the data for the given table", "parameters" : [ { "in" : "path", - "name" : "name", + "name" : "table-id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" + "type" : "integer", + "minimum" : 1 }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/testing" ] + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/table" ] } }, - "/api/testing/stats" : { - "post" : { - "summary" : "POST /api/testing/stats", - "description" : "Triggers a send of instance usage stats", + "/api/task/" : { + "get" : { + "summary" : "GET /api/task/", + "description" : "Fetch a list of recent tasks stored as Task History", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" + "tags" : [ "/api/task" ] + } + }, + "/api/task/info" : { + "get" : { + "summary" : "GET /api/task/info", + "description" : "Return raw data about all scheduled tasks (i.e., Quartz Jobs and Triggers).", + "parameters" : [ ], + "tags" : [ "/api/task" ] + } + }, + "/api/task/unique-tasks" : { + "get" : { + "summary" : "GET /api/task/unique-tasks", + "description" : "Returns possibly empty vector of unique task names in alphabetical order. It is expected that number of unique\n tasks is small, hence no need for pagination. If that changes this endpoint and function that powers it should\n reflect that.", + "parameters" : [ ], + "tags" : [ "/api/task" ] + } + }, + "/api/task/{id}" : { + "get" : { + "summary" : "GET /api/task/{id}", + "description" : "Get `TaskHistory` entry with ID.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/testing" ] + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/task" ] } }, "/api/tiles/{card-id}/{zoom}/{x}/{y}/{lat-field}/{lon-field}" : { @@ -21781,17 +13382,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/tiles" ] } }, @@ -21873,17 +13463,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/tiles" ] } }, @@ -21900,17 +13479,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/tiles" ] } }, @@ -21919,17 +13487,6 @@ "summary" : "POST /api/timeline-event/", "description" : "Create a new [[TimelineEvent]].", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -21997,17 +13554,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/timeline-event" ] }, "put" : { @@ -22023,17 +13569,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -22089,17 +13624,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/timeline-event" ] } }, @@ -22108,24 +13632,6 @@ "summary" : "POST /api/timeline/", "description" : "Create a new [[Timeline]].", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:id -> }", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/metabase.timeline.api.timeline.Timeline" - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -22181,27 +13687,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "sequence of map where {:id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.timeline.api.timeline.Timeline" - } - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/timeline" ] } }, @@ -22225,17 +13710,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/timeline" ] } }, @@ -22268,17 +13742,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/timeline" ] } }, @@ -22327,24 +13790,6 @@ }, "description" : "value must be a valid date string" } ], - "responses" : { - "2XX" : { - "description" : "map where {:id -> }", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/metabase.timeline.api.timeline.Timeline" - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/timeline" ] }, "put" : { @@ -22360,17 +13805,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -22419,17 +13853,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/timeline" ] } }, @@ -22438,17 +13861,6 @@ "summary" : "POST /api/upload/csv", "description" : "Create a table and model populated with the values from the attached CSV. Returns the model ID if successful.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -22491,17 +13903,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user-key-value" ] } }, @@ -22526,17 +13927,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -22574,34 +13964,12 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user-key-value" ] }, "delete" : { "summary" : "DELETE /api/user-key-value/namespace/{namespace}/key/{key}", "description" : "Deletes a KV-pair for the user", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user-key-value" ] } }, @@ -22641,34 +14009,12 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user" ] }, "post" : { "summary" : "POST /api/user/", "description" : "Create a new `User`, return a 400 if the email address is already taken", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -22712,17 +14058,6 @@ "summary" : "GET /api/user/current", "description" : "Fetch the current `User`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user" ] } }, @@ -22731,17 +14066,6 @@ "summary" : "GET /api/user/recipients", "description" : "Fetch a list of `Users`. Returns only active users. Meant for non-admins unlike GET /api/user.\n\n - If user-visibility is :all or the user is an admin, include all users.\n - If user-visibility is :group, include only users in the same group (excluding the all users group).\n - If user-visibility is :none or the user is sandboxed, include only themselves.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user" ] } }, @@ -22759,17 +14083,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user" ] }, "put" : { @@ -22785,17 +14098,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -22856,17 +14158,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user" ] } }, @@ -22884,17 +14175,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user" ] } }, @@ -22912,17 +14192,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -22956,17 +14225,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user" ] } }, @@ -22975,17 +14233,6 @@ "summary" : "GET /api/util/random_token", "description" : "Return a cryptographically secure random 32-byte token, encoded as a hexadecimal string.\n Intended for use when creating a value for `embedding-secret-key`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/util" ] } } diff --git a/_docs/master/configuring-metabase/appearance.md b/_docs/master/configuring-metabase/appearance.md index 2cf23de98e..34c9694a40 100644 --- a/_docs/master/configuring-metabase/appearance.md +++ b/_docs/master/configuring-metabase/appearance.md @@ -176,4 +176,4 @@ Metabase will display this illustration when searches don't return any results. - [Customer-facing analytics](/learn/metabase-basics/embedding). - [Embedding introduction](../embedding/start). -- [Brand your Metabase](/docs/latest/configuring-metabase/appearance). +- [Brand your Metabase](/learn/metabase-basics/embedding/brand). diff --git a/_docs/master/configuring-metabase/config-template.md b/_docs/master/configuring-metabase/config-template.md index c3b673410d..c604d0caef 100644 --- a/_docs/master/configuring-metabase/config-template.md +++ b/_docs/master/configuring-metabase/config-template.md @@ -266,6 +266,7 @@ config: surveys-enabled: true synchronous-batch-updates: false unaggregated-query-row-limit: null + update-channel: latest uploads-settings: null use-tenants: false user-visibility: all diff --git a/_docs/master/configuring-metabase/email.md b/_docs/master/configuring-metabase/email.md index 2facef731f..560526007f 100644 --- a/_docs/master/configuring-metabase/email.md +++ b/_docs/master/configuring-metabase/email.md @@ -7,73 +7,33 @@ category: 'Configuring Metabase' title: 'Set up email' source_url: 'https://github.com/metabase/metabase/blob/master/docs/configuring-metabase/email.md' layout: new-docs -summary: 'Learn how to set up email in Metabase to enable dashboard subscriptions and alerts.' redirect_from: - /docs/master/administration-guide/02-setting-up-email --- # Set up email -Once you connect your database to Metabase, you'll want to configure an email account to send system notifications to your organization's users. Metabase uses email to reset passwords, onboard new users, and notify you when something happens (see [dashboard subscriptions](../dashboards/subscriptions) and [alerts](../questions/alerts)). +Once you connect your database to Metabase, you'll want to configure an email account to send system notifications to your organization's users. Metabase uses email to reset passwords, onboard new users, and notify you when something happens. -## Email on Metabase Cloud +To edit email settings: -_Admin settings > Settings > Email_ +1. Click on the **gear** icon in the upper right. +2. Select **Admin Settings**. +3. From the default **Settings** tab, click on **Notification channels** in the left sidebar. +4. Select **Email**. -On Metabase Cloud, you can use the default SMTP server, or set up a custom server. +## Metabase Cloud -### Default SMTP server on Metabase Cloud - -By default, Metabase Cloud will manage an email server for you, so you don't need to set up email. +Metabase Cloud manages an email server for you, so you don't need to set up email (and you won't see SMTP settings in your Admin console). If you like, you can still set up: -- A display name for your Cloud email account (the "from" name). The email will still be sent from a Metabase address, however. -- An email address to receive email replies (reply-to address). - -When Metabase manages the SMTP server, you can't change the from address. If you want Metabase to send emails from a different domain, you'll need to bring your own SMTP server. See below. - -### Custom SMTP Server on Metabase Cloud - -{% include plans-blockquote.html feature="Custom SMTP server on Metabase Cloud" %} - -_Admin settings > Settings > Email > Set up a custom SMTP server_ - -By default, Metabase Cloud manages an SMTP server for you. But if you want to use your own SMTP server, you can bring your own. - -You may want to use your own SMTP server if you want to: - -- Customize the From domain (for example, if you're [white-labeling Metabase](./appearance)). -- Avoid having emails pass through 3rd-party services. -- Own IP reputation, logs, monitoring. -- Own auditing. - -When setting up a custom SMTP server on Metabase Cloud, you'll configure these fields: - -- **SMTP HOST**: The address of the SMTP server that handles your emails (e.g., smtp.yourservice.com). -- **SMTP PORT**: The port your SMTP server uses for outgoing emails. Only encrypted email ports are supported: - - 465 (SSL) - - 587 (TLS) - - 2525 (STARTTLS) -- **SMTP SECURITY**: Choose the security protocol for your connection: - - SSL - - TLS - - STARTTLS -- **SMTP USERNAME**: Your SMTP account username. -- **SMTP PASSWORD**: Your SMTP account password. - -You'll also need to specify: - -- **From address**: The email address you want to use for the sender of emails. -- **Reply-to address**: The email address you want replies to go to, if different from the From address. - -You can edit these settings at any time. You can also toggle between this custom SMTP server and the server managed by Metabase Cloud. +- A name for your Cloud email account (from name) +- An email address to receive email replies (reply-to address) ## Configuring your email account -_Admin settings > Settings > Email_ - -For Metabase to send messages to people, you'll need to set up an email account to send emails via **SMTP** (simple mail transfer protocol). SMTP is an email standard that, when combined with SSL/TLS, provides security protection for emails. +For Metabase to send messages to your organization's users, you'll need to set up an email account to send emails via **SMTP** (simple mail transfer protocol), which is an email standard that secures emails with SSL security protection. To start, go to the Admin Panel from the dropdown menu in the top right of Metabase, then from the Settings page, click on **Email** in the left menu. @@ -90,13 +50,13 @@ Here you'll set: - SSL - TLS - STARTTLS -- **SMTP USERNAME**: Your SMTP account username. -- **SMTP PASSWORD**: Your SMTP account password. +- **SMTP Username**. +- **SMTP Password**. You'll also need to specify your: - **From address**: The email address you want to use for the sender of emails. -- **Reply-to address**: The email address you want replies to go to, if different from the From address. +- **Reply-to address**: The email address you want the replies to go to, if different from the from address. ## Add recipients as CC or BCC @@ -104,8 +64,8 @@ By default, Metabase will hide email recipients by including them in the BCC lis ### Recommended email settings -- SSL is strongly recommended because it's more secure and gives your account extra protection from threats. -- If your email service has a whitelist of email addresses that are allowed to send email, be sure to whitelist the email address that you put in the **From address** field to ensure you and your teammates receive all emails from Metabase. +- SSL is strongly recommended because it’s more secure and gives your account extra protection from threats. +- If your email service has a whitelist of email addresses that are allowed to send email, be sure to whitelist the email address that you put in the **From Address** field to ensure you and your teammates receive all emails from Metabase. ## Notes for common email services @@ -115,12 +75,12 @@ By default, Metabase will hide email recipients by including them in the BCC lis ### Google Apps -1. In the **SMTP HOST** field, enter smtp.gmail.com -2. Fill in 465 for the **SMTP PORT** field -3. For the **SMTP SECURITY** field, enter **SSL** -4. In the **SMTP USERNAME** field, enter your Google Apps email address (e.g. hello@yourdomain.com) -5. Enter your Google Apps password in the **SMTP PASSWORD** field -6. Enter the email address you would like to be used as the sender of system notifications in the **From address** field. +1. In the **SMTP host** field, enter smtp.gmail.com +2. Fill in 465 for the **SMTP port** field +3. For the **SMTP Security** field, enter **SSL** +4. In the **SMTP username** field, enter your Google Apps email address (e.g. hello@yourdomain.com) +5. Enter your Google Apps password in the **SMTP password** field +6. Enter the email address you would like to be used as the sender of system notifications in the \*_From Address_ field. ### Amazon SES @@ -146,7 +106,7 @@ Check if [email quotas](https://docs.aws.amazon.com/ses/latest/dg/quotas.html) a Allowed email address domain(s) for new [dashboard subscriptions](../dashboards/subscriptions) and [alerts](../questions/alerts). -Adding approved domains allows you to restrict which email addresses people can send alerts and subscriptions to. This restriction only applies to sending email to people who lack an account with that Metabase. People with Metabase accounts who aren't [sandboxed](../permissions/data-sandboxes) will be able to email any other person with an account in that same Metabase. +Adding approved domains allows you to restrict which email addresses people can send alerts and subscriptions to. This restriction only applies to sending email to people who lack an account with that Metabase. People with accounts in a Metabase who aren't [sandboxed](../permissions/data-sandboxes) will be able to email any other person with an account in that same Metabase. To allow all domains, leave the field empty (allowing all domains is the default). diff --git a/_docs/master/configuring-metabase/environment-variables.md b/_docs/master/configuring-metabase/environment-variables.md index 6972fd3431..ab56163aa4 100644 --- a/_docs/master/configuring-metabase/environment-variables.md +++ b/_docs/master/configuring-metabase/environment-variables.md @@ -1722,6 +1722,15 @@ Maximum number of rows to return specifically on :rows type queries via the API. Must be less than 1048575, and less than the number configured in MB_AGGREGATED_QUERY_ROW_LIMIT. See also MB_AGGREGATED_QUERY_ROW_LIMIT. +### `MB_UPDATE_CHANNEL` + +- Type: string +- Default: `latest` +- [Exported as](../installation-and-operation/serialization): `update-channel`. +- [Configuration file name](./config-file): `update-channel` + +We'll notify you here when there's a new version of this type of release. + ### `MB_UPLOADS_DATABASE_ID [DEPRECATED]` > DEPRECATED: 0.50.0 diff --git a/_docs/master/configuring-metabase/images/AccountSetup.png b/_docs/master/configuring-metabase/images/AccountSetup.png index d3bf7c1ba2..e19016a0b9 100644 Binary files a/_docs/master/configuring-metabase/images/AccountSetup.png and b/_docs/master/configuring-metabase/images/AccountSetup.png differ diff --git a/_docs/master/configuring-metabase/images/table-view.png b/_docs/master/configuring-metabase/images/table-view.png index 7b253a5ff6..b561a8dc44 100644 Binary files a/_docs/master/configuring-metabase/images/table-view.png and b/_docs/master/configuring-metabase/images/table-view.png differ diff --git a/_docs/master/configuring-metabase/setting-up-metabase.md b/_docs/master/configuring-metabase/setting-up-metabase.md index 8eae745476..3bb6c7a348 100644 --- a/_docs/master/configuring-metabase/setting-up-metabase.md +++ b/_docs/master/configuring-metabase/setting-up-metabase.md @@ -43,7 +43,7 @@ Don't worry about picking the wrong option. If you say you're interested in embe ## Gathering your database info -At this point you’ll need to gather some information about the database you want to use with Metabase. We won’t be able to connect to your database without it, but you’d like to deal with all of this later, that’s okay: just click **I’ll add my data later**. Metabase comes with a [Sample Database](/glossary/sample-database) that you can play around with to get a feel for how Metabase works. +At this point you’ll need to gather some information about the database you want to use with Metabase. We won’t be able to connect to your database without it, but you’d like to deal with all of this later, that’s okay: just click **I’ll add my data later**. Metabase comes with a [Sample Database](/glossary/sample_database) that you can play around with to get a feel for how Metabase works. If you’re ready to connect, here’s what you’ll need: diff --git a/_docs/master/dashboards/filters.md b/_docs/master/dashboards/filters.md index 8f4412d64b..6407c4c95d 100644 --- a/_docs/master/dashboards/filters.md +++ b/_docs/master/dashboards/filters.md @@ -16,15 +16,30 @@ redirect_from: ![Dashboard Filters](./images/filters.png) -Instead of creating duplicate dashboards to show different cuts of the same data (like a different dashboard for each quarter), you can add filter or parameter widgets to let people change _what_ data is displayed (filter the data), or _how_ its displayed (parameterize the data). +Have you ever found yourself in a situation where it seems like you need to create nearly identical copies of the same dashboard, with just one different variable? Maybe you have an Earnings dashboard, but you want to see the data for each city your business is in, or maybe you have a KPI dashboard that you want to see broken out by month. -## Filter and parameter widgets +Instead of creating duplicate dashboards, you can add filter or parameter widgets to let people change variables for cards on a dashboard. -There are two basic types of widgets you can add. The type of filter or parameter widget you choose determines how the widget works, including which fields you'll can connect to the widget. +## Adding a filter or parameter + +![Add a Filter](./images/add-filter.png) + +- Click the **pencil icon** to enter dashboard editing mode. +- Click the **filter icon** that appears in the top-right to add a filter. +- Select a [filter type](#filter-and-parameter-types) +- [Connect your filter or parameter widget to dashboard cards](#connecting-a-filter-or-parameter-widget-to-dashboard-cards) to one or more dashboard cards on any or all tabs. +- [Configure your filter](#editing-a-filter) +- **Save** your changes. + +Metabase will display the filter only if the filter is connected to a card on the current dashboard tab. + +## Filter and parameter types + +The type of filter or parameter widget you choose determines how the widget works, including which fields you'll be able to filter your cards by. ### Filter widgets -**Filters** determine _what_ data to show. For example, a date filter might show only data from the last 30 days, or a category filter might show only specific product categories. +**Filters** determine what data to show. For example, a date filter might show only data from the last 30 days, or a category filter might show only specific product categories. - [Date picker](#date-picker-filters) - [Location](#location-filters) @@ -35,45 +50,13 @@ There are two basic types of widgets you can add. The type of filter or paramete ### Parameter widgets - **Parameters** determine _how_ to show the data. The time grouping parameter, for example, changes the granularity of time-based visualizations (like showing data by month instead of by day) without removing any data points. + **Parameters** determine how to show the data. The time grouping parameter, for example, changes the granularity of time-based visualizations (like showing data by month instead of by day) without removing any data points. - [Time grouping](#time-grouping-parameter) -## Adding a filter or parameter widget - -![Add a Filter](./images/add-filter.png) - -1. Click the **pencil icon** to enter dashboard editing mode. -2. You can add a filter or parameter widget to: - - - **The whole dashboard**. You'll need to connect these dashboard-level filters to individual cards. Metabase will only display dashboard-level widgets if they're connected to a card on the current tab. - - **Heading cards**. Not text cards, only [heading cards](./introduction#adding-headings-or-descriptions-with-text-cards). Can only be connected to cards on the current tab. - - **Question cards**. Can only be connected to cards on the current tab. - - Go to where you want to add a filter and click the **filter icon**. -3. Select a [filter type](#filter-and-parameter-widgets). -4. [Connect your filter or parameter widget to one or more dashboard cards](#connecting-a-filter-or-parameter-widget-to-dashboard-cards). Only dashboard-level widgets can be connected to cards on multiple tabs. -5. [Configure your filter](#editing-a-filter). -6. **Save** your changes. - -If the filter isn't connected any of the cards on the current tab, Metabase won't display the filter. - -### When to add a widget to a heading or card - -These are just rules of thumb to keep the user experience predictable. Do whatever works for your use case. - -By default, you should add widgets to the dashboard itself. - -If, however, your dashboard grows larger, and it doesn't make sense to break the dashboard up into multiple dashboards, you can add widgets to headings and cards so people can filter in place as they scroll through sections. In these cases, you should scope the effects of a heading widget to the section immediately below. Filters on cards should generally only update the card itself. - -If you want tab-specific widgets, you could either: - -- Add them to the dashboard itself, but only connect the widget to cards on a specific tab. -- Use a heading filter. - ## Date picker filters -When picking a Date picker filter, Metabase will prompt you to pick an operator: +When picking a Time filter, Metabase will prompt you to pick a specific type of date picker widget: - Month and Year - Quarter and Year @@ -82,24 +65,19 @@ When picking a Date picker filter, Metabase will prompt you to pick an operator: - Relative Date - All Options -Single Date and Date Range will provide a calendar widget, while the other options all provide slightly different dropdown interfaces for picking values. To get a widget that's just like the date picker in the query builder, choose All options. - -### Issues with connecting to a date variable - -If you get a message like "A date variable in this card can only be connectedd to a time type with the single date option", you can handle it in a couple of ways. - -- **If you want a date picker where people can select multiple dates**, you'll need to change the variable in your SQL code to a [field filter](../questions/native-editor/field-filters). -- **If you want the filter widget to just take a single date**, you'll need to change the dashboard filter widget's type to "Single date". +Single Date and Date Range will provide a calendar widget, while the other options all provide slightly different dropdown interfaces for picking values. To get a widget that's just like the time filter in the query builder, choose All options. ## Time grouping parameter ![Time grouping](./images/time-grouping.png) -You can add a time grouping widget to a dashboard to change how charts are grouped by time. This widget won't filter the data; it'll change how Metabase aggregates the data. For example, you may want to look at the time series charts grouped by month by default, but give people the option to view the same results by other groupings: by week, by quarter, and so on. +You can add a time grouping widget to a dashboard to change how charts are grouped by time. For example, you may want to look at the time series charts grouped by month by default, but give people the option to view the results by other groupings: by week, by quarter, and so on. + +> Time grouping parameter widget can only be connected to questions built with the [graphical query builder](../questions/query-builder/editor). This widget doesn't filter data in the charts; the widget just changes the time granularity for any cards that have a datetime field connected to the widget. -Grouping options include: +You can group by: - Minute (or minute of hour) - Hour (or hour of day) @@ -109,32 +87,19 @@ Grouping options include: - Quarter (or quarter of year) - Year -To connect a time grouping widget to a SQL question, you'll need to insert time grouping parameters in your code. See [time grouping parameters](../questions/native-editor/time-grouping-parameters). - ## Location filters -There are four types of Location filters to choose from. +There are four types of Location filters to choose from: - City - State - ZIP or Postal Code - Country -Additionally, you can select an operator for the location filter: - -- **Is**. Select one or more values from a list or search box. Use **Is** when you just want to plug a value into a variable. For multiple values, the card must be either a question built using the query builder, a native/SQL question using a [field filter](../questions/native-editor/field-filters), or a basic variable set to accept [multiple values](../questions/native-editor/basic-sql-parameters#basic-variable-that-allows-people-to-select-multiple-values). -- **Is not**. Exclude one or more specific values. -- **Contains**. Match values that contain the entered text. -- **Does not contain**. Filter out values that contain the entered text. -- **Starts with**. Match values that begin with the entered text. -- **Ends with**. Match values that end with the entered text. - ## ID filter The ID filter provides a simple input box where you can type the ID of a user, order, etc. -You can give people the option to pick one value or multiple values. - ## Number filter You can choose from: @@ -147,27 +112,23 @@ You can choose from: ## Text or category filter -A flexible filter type that will let you create either a dropdown menu or an input box to filter on any text or category field in your cards. Options include: +A flexible filter type that will let you create either a dropdown menu or an input box to filter on any category field in your cards. Options include: -- **Is**. Select one or more values from a list or search box. Use **Is** when you just want to plug a value into a variable. For multiple values, the card must be a question built using the query builder, a native/SQL question using a [field filter](../questions/native-editor/field-filters), or a basic variable set to [multiple values](../questions/native-editor/basic-sql-parameters#basic-variable-that-allows-people-to-select-multiple-values). +- **Is**. Select one or more values from a list or search box. Use **Is** when you just want to plug a value into a variable. For multiple values, the card must be either a question built using the query builder, or a native/SQL question using a [field filter](../questions/native-editor/sql-parameters#the-field-filter-variable-type). - **Is not**. Exclude one or more specific values. - **Contains**. Match values that contain the entered text. - **Does not contain**. Filter out values that contain the entered text. - **Starts with**. Match values that begin with the entered text. - **Ends with**. Match values that end with the entered text. -You can also select how people should filter on this column: - -- Dropdown list -- Search box -- Input box - ## Boolean filter A boolean filter allows people to filter data based on true/false values. ## Connecting a filter or parameter widget to dashboard cards +Dashboard widgets apply across all [dashboard tabs](./introduction#dashboard-tabs), though they'll only be displayed when a tab has cards connected to the widget. + For each widget that you add, you'll need to tell Metabase which column the filter should update for each card. Click on a card's dropdown menu to select the field that you want the widget to filter on. @@ -176,11 +137,6 @@ Here we've wired up a Text filter to the "Event types" card, telling Metabase th ![Wiring up a dashboard filter to a card](./images/wiring-cards.png) -Which cards you can connect a filter or parameter widget to depends on: - -- Whether the card has a relevant field (i.e., the field the widget is filtering). -- Where the widget is located: on the dashboard, heading card, or question card. Only dashboard widgets can be connected to cards across all [dashboard tabs](./introduction#dashboard-tabs). Widgets on heading and question cards are restricted to the cards on their respective tabs. - ## Auto-connecting filters to cards If there are other cards that also have the field you select, Metabase will offer to automatically connect the filter to those cards too (including to relevant cards on other tabs). If you later add a card with the selected field, Metabase will also try to connect that filter to the new card. @@ -189,9 +145,9 @@ To undo this auto-connecting of cards, click on the toast that pops up when Meta ## Filtering dashboards with native/SQL questions -For filters, you'll need to [add a variable or field filter to your query](../questions/native-editor/sql-parameters). +If you're trying to connect a filter to a card with a native/SQL questions, you'll need to [add a variable or field filter to your query](../questions/native-editor/sql-parameters). For an in-depth article, check out [Adding filters to dashboards with SQL questions](/learn/metabase-basics/querying-and-dashboards/sql-in-metabase/filters). -For parameters, check out [Time grouping parameters](../questions/native-editor/time-grouping-parameters). +You can't connect a time grouping parameter widget to a card with a SQL question. ## Wiring up dashboard filters to text cards @@ -245,8 +201,8 @@ A list of all of the possible values in a column. People can use checkboxes to s If you're not seeing the **Dropdown list** option, and your dashboard filter is based on a column from a: -- Table or model built with the query builder: an admin will need to [enable the dropdown widget](../data-modeling/metadata-editing#changing-a-search-box-filter-to-a-dropdown-filter) for that column from Metabase's **Admin settings**. -- Model built with a SQL query: go to your [model's metadata settings](../data-modeling/models#add-metadata-to-columns-in-a-model), find your column, and set the **Database column this maps to**. +- Table or GUI model: an admin will need to [enable the dropdown widget](../data-modeling/metadata-editing#changing-a-search-box-filter-to-a-dropdown-filter) for that column from Metabase's **Admin settings**. +- SQL model: go to your [model's metadata settings](../data-modeling/models#add-metadata-to-columns-in-a-model), find your column, and set the **Database column this maps to**. #### Search box diff --git a/_docs/master/dashboards/images/add-filter.png b/_docs/master/dashboards/images/add-filter.png index 23fae3c80c..7206824958 100644 Binary files a/_docs/master/dashboards/images/add-filter.png and b/_docs/master/dashboards/images/add-filter.png differ diff --git a/_docs/master/dashboards/images/add_series.png b/_docs/master/dashboards/images/add_series.png index fe91f2db8b..23fae3c80c 100644 Binary files a/_docs/master/dashboards/images/add_series.png and b/_docs/master/dashboards/images/add_series.png differ diff --git a/_docs/master/dashboards/images/autorefresh.png b/_docs/master/dashboards/images/autorefresh.png index 94609cbf0d..a1c1f9a61a 100644 Binary files a/_docs/master/dashboards/images/autorefresh.png and b/_docs/master/dashboards/images/autorefresh.png differ diff --git a/_docs/master/dashboards/images/button-form.png b/_docs/master/dashboards/images/button-form.png index 3d205c8796..ee763c576e 100644 Binary files a/_docs/master/dashboards/images/button-form.png and b/_docs/master/dashboards/images/button-form.png differ diff --git a/_docs/master/dashboards/images/click-behavior-icon.png b/_docs/master/dashboards/images/click-behavior-icon.png index 8f34234f01..2a41076032 100644 Binary files a/_docs/master/dashboards/images/click-behavior-icon.png and b/_docs/master/dashboards/images/click-behavior-icon.png differ diff --git a/_docs/master/dashboards/images/dashboard-filter-action.png b/_docs/master/dashboards/images/dashboard-filter-action.png index 3147da6c90..3c1075bed2 100644 Binary files a/_docs/master/dashboards/images/dashboard-filter-action.png and b/_docs/master/dashboards/images/dashboard-filter-action.png differ diff --git a/_docs/master/dashboards/images/dashboard.png b/_docs/master/dashboards/images/dashboard.png index 1805c738fe..155d34f84e 100644 Binary files a/_docs/master/dashboards/images/dashboard.png and b/_docs/master/dashboards/images/dashboard.png differ diff --git a/_docs/master/dashboards/images/drill-through-menu.png b/_docs/master/dashboards/images/drill-through-menu.png index 9d2e0c76a7..cc2c707278 100644 Binary files a/_docs/master/dashboards/images/drill-through-menu.png and b/_docs/master/dashboards/images/drill-through-menu.png differ diff --git a/_docs/master/dashboards/images/filters.png b/_docs/master/dashboards/images/filters.png index 2a41076032..c95f02b4aa 100644 Binary files a/_docs/master/dashboards/images/filters.png and b/_docs/master/dashboards/images/filters.png differ diff --git a/_docs/master/dashboards/images/foreign-key-linked-filters.png b/_docs/master/dashboards/images/foreign-key-linked-filters.png index 4a4a249b2b..b060334122 100644 Binary files a/_docs/master/dashboards/images/foreign-key-linked-filters.png and b/_docs/master/dashboards/images/foreign-key-linked-filters.png differ diff --git a/_docs/master/dashboards/images/linked-filter.png b/_docs/master/dashboards/images/linked-filter.png index c359f99030..4fcbddf7a4 100644 Binary files a/_docs/master/dashboards/images/linked-filter.png and b/_docs/master/dashboards/images/linked-filter.png differ diff --git a/_docs/master/dashboards/images/markdown.png b/_docs/master/dashboards/images/markdown.png index ba5b16adda..c9c10c5129 100644 Binary files a/_docs/master/dashboards/images/markdown.png and b/_docs/master/dashboards/images/markdown.png differ diff --git a/_docs/master/dashboards/images/wiring-up-filter.png b/_docs/master/dashboards/images/wiring-up-filter.png index e9e9e50b5d..a5066926cc 100644 Binary files a/_docs/master/dashboards/images/wiring-up-filter.png and b/_docs/master/dashboards/images/wiring-up-filter.png differ diff --git a/_docs/master/dashboards/linked-filters.md b/_docs/master/dashboards/linked-filters.md index 4f15039e8e..50e9dd50e5 100644 --- a/_docs/master/dashboards/linked-filters.md +++ b/_docs/master/dashboards/linked-filters.md @@ -63,7 +63,7 @@ Metabase uses database column metadata to populate values for linked filters, wh - You can't create linked filters on custom columns. -- Native/SQL questions must have a [field filter](../questions/native-editor/field-filters) variable in order to be linked. Basic SQL variables aren't connected to database columns, so they won't work for linked filters. +- Native/SQL questions must have a [field filter](../questions/native-editor/sql-parameters#the-field-filter-variable-type) variable in order to be linked. Basic SQL variables aren't connected to database columns, so they won't work for linked filters. - You can't link filters that use "Custom List" or "From another model or question" as their value's source. diff --git a/_docs/master/data-modeling/semantic-types.md b/_docs/master/data-modeling/field-types.md similarity index 88% rename from _docs/master/data-modeling/semantic-types.md rename to _docs/master/data-modeling/field-types.md index 07091af587..29a3103338 100644 --- a/_docs/master/data-modeling/semantic-types.md +++ b/_docs/master/data-modeling/field-types.md @@ -4,16 +4,15 @@ has_magic_breadcrumbs: true show_category_breadcrumb: true show_title_breadcrumb: true category: 'Data Modeling' -title: 'Data types and semantic types' -source_url: 'https://github.com/metabase/metabase/blob/master/docs/data-modeling/semantic-types.md' +title: 'Data and field types' +source_url: 'https://github.com/metabase/metabase/blob/master/docs/data-modeling/field-types.md' layout: new-docs redirect_from: - /docs/master/users-guide/field-types - - /docs/master/data-modeling/field-types summary: 'Metabase uses both data and semantic types to understand how to format and visualize your data.' --- -# Data types and semantic types +# Data and field types Metabase distinguishes between two types of column metadata: data types and field types. @@ -43,7 +42,7 @@ For some fields, you can tell Metabase to [cast the field to a different data ty ## Semantic types -You can think of semantic types as adding meaning and context to a field to communicate its purpose and enable [additional functionality](#what-data-and-semantic-types-enable). Available semantic types depend on the underlying data types. +You can think of semantic types as adding extra flavor to a field to communicate meaning and enable [additional functionality](#what-data-and-semantic-types-enable). Available semantic types depend on the underlying data types. ### Semantic types for any field @@ -102,19 +101,19 @@ You can think of semantic types as adding meaning and context to a field to comm ## Editing data and semantic types -Admins, and people with [permission to manage table metadata](../permissions/data#manage-table-metadata-permissions), can cast data types and edit semantic types in the Admin settings' Table Metadata tab. +Admins, and people with [permission to manage table metadata](../permissions/data#manage-table-metadata-permissions), can cast data types and edit semantic types in the Admin setting's Table Metadata tab. ### Cast data types -Data types can't be edited in Metabase directly, but you can cast certain [data types to different types](./metadata-editing#cast-to-a-specific-data-type) so that, for example, Metabase will interpret a text data type as a date type. +Data types can't be edited in Metabase directly, but you can cast certain [data types to different types](./metadata-editing#casting-to-a-specific-data-type) so that, for example, Metabase will interpret a text data type as a date type. -Changes made in Table Metadata apply across your entire Metabase. Metabase currently only supports casting to a datetime type in Metadata settings. However, if you build a query in the query builder, you can use type casting custom expressions like [`date()`](../questions/query-builder/expressions-list#date) or [`integer()`](../questions/query-builder/expressions-list#integer) to cast a string to a different type in your query. +Changes made in Table Metadata apply across your entire Metabase. Metabase currently only supports casting to a datetime type in Metadata settings. However, if you you build a query in the query builder, in you can use type casting custom expressions like [`date()`](../questions/query-builder/expressions-list#date) or [`integer()`](../questions/query-builder/expressions-list#integer) to cast a string to a different type in your query. ### Semantic types don't change the data types -You can pick a semantic type compatible with the underlying data type in [table metadata settings](./metadata-editing#semantic-type). +You can pick a semantic type compatible with the underlying data type in [table metadata settings](./metadata-editing#field-type) -Semantic types only add meaning; they should not be used for type casting. For example, if you set a text field's semantic type to "Quantity", Metabase will still treat the field as a text field. Instead, apply semantic types to tell Metabase how to format or visualize the field (like telling Metabase that a numeric value represents a percentage). +Semantic types only add meaning; they should NOT be used for type casting. For example, if you set a text field's semantic type to "Quantity", Metabase will still treat the field as a text field. Instead, apply semantic types to tell Metabase how to format or visualize the field (like telling Metabase that a numeric values represents a percentage). ## What data and semantic types enable @@ -122,11 +121,11 @@ Semantic types only add meaning; they should not be used for type casting. For e Some semantic types change the way the data in the field is displayed. -Formatting settings from Table Metadata settings will be applied across your Metabase, but people can change them for individual charts. +Formatting setting from Table Metadata settings will be applied across your Metabase, but people can change them for individual charts. | Semantic type | Format | | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Percentage | Displayed as percentage, for example 0.75 will be displayed as 75% | +| Percentage | Displayed as percentage, for example 0.75 will be displayed as 75\% | | Currency | On charts and in detail view, the values are prepended by the currency symbol, e.g., `$134.65`. By default in the table view, the currency symbol is only displayed in the header, but you can change the metadata formatting settings to show the symbol for every row. | | Latitude/Longitude | Displayed as coordinates, e.g., `0.00000000° N` | | Email | Display as a `mailto` link | @@ -174,7 +173,7 @@ When you [X-ray](../exploration-and-organization/x-rays) a table, model, or enti ### Field Filters -Knowing what field types are and how they work is helpful when using [field filters](/learn/metabase-basics/querying-and-dashboards/sql-in-metabase/field-filters), as you can only create field filters for [certain field types](../questions/native-editor/field-filters#when-to-use-a-field-filter-variable-vs-a-basic-variable). +Knowing what field types are and how they work is helpful when using [field filters](/learn/metabase-basics/querying-and-dashboards/sql-in-metabase/field-filters), as you can only create field filters for [certain field types](../questions/native-editor/sql-parameters#field-filter-compatible-types). ### JSON unfolding diff --git a/_docs/master/data-modeling/formatting.md b/_docs/master/data-modeling/formatting.md index 820db38db7..23d66fe938 100644 --- a/_docs/master/data-modeling/formatting.md +++ b/_docs/master/data-modeling/formatting.md @@ -7,158 +7,36 @@ category: 'Data Modeling' title: 'Formatting defaults' source_url: 'https://github.com/metabase/metabase/blob/master/docs/data-modeling/formatting.md' layout: new-docs -summary: 'Configure how dates, numbers, currencies, and text display in Metabase at global, field, and question levels.' redirect_from: - /docs/master/administration-guide/19-formatting-settings --- # Formatting defaults -People all around the world use Metabase, and everyone has different preferences for how dates, times, numbers, and currencies should be formatted and displayed. Metabase lets you to customize these formatting options at three different levels: +There are Metabase users around the world, each with different preferences for how dates, times, numbers, and currencies should be formatted and displayed. Metabase allows you to customize these formatting options at three different levels: -1. **Global**. Set global defaults in Admin -> Settings -> [Localization](../configuring-metabase/localization). +1. **Global**. Set global defaults in the [Localization](../configuring-metabase/localization) section in Admin -> Settings -> Localization. 2. **Field**. Set field (column) defaults in Admin -> Table Metadata. Field defaults override global defaults. 3. **Question**. Set formatting defaults for individual questions in the visualization settings of that question. Question defaults override global and field defaults. -## Field formatting +## Field-level formatting -_Admin settings > Table Metadata > Database > Table > Field > Formatting_ +You can override the global defaults for a specific field by going to the `Table Metadata` section of the Admin Panel, selecting the database and table of the field in question, and clicking the gear icon on the far right of the screen next to that field to go to its options page, then clicking on the `Formatting` tab. -You can override the global defaults for a specific field by going to the `Table Metadata` section of the Admin Panel. Select the database and table of the field in question, then click scroll down to the **Formatting**. +The options you'll see here will depend on the field's type. They're generally the same options as in the global formatting settings, with a few additions: -## Formatting options depend on the data type and the semantic type +### Dates and Times -The options you'll see here will depend on the field's data type and it's [semantic type](./semantic-types). +- `Show the time:` this lets you choose if this time field should be displayed by default without the time; with hours and minutes; with hours, minutes, and seconds; or additionally with milliseconds. -## Text formatting options +### Numbers -_Admin settings > Table Metadata > Database > Table > Field > Formatting_ - -Options depend on the [semantic type](./semantic-types) you select for the field. - -### Align - -Whether to display the values in the middle, left, or right in table cells. - -### Display As - -If you have text, like an image URL, you may need to change the semantic type before Metabase will offer you the option to display the text as an image. - -- Text (display "as is"). -- Email link (i.e., if you have a `mailto` link). -- Image. Metabase will display links to images as images in tables. -- Automatic. Metabase will detect the string based on its format. -- Link. You can optionally change the text that you want to display in the **Link text** input field. For example, if you set the **Link URL** for an "Adjective" column to: - -``` -https://www.google.com/search?q={% raw %}{{adjective}}{% endraw %} -``` - -When someone clicks on the value "askew" in the "Adjective" column, they'll be taken to the Google search URL: - -``` -https://www.google.com/search?q=askew -``` - -## Dates and times - -_Admin settings > Table Metadata > Database > Table > Field > Formatting_ - -Options depend on the [semantic type](./semantic-types) you select for the field. - -### Align - -Whether to display the values in the middle, left, or right in table cells. - -### Display as - -- **Text** (display "as is"). -- **Link** (display the date/time as a clickable link). - -### Date style - -Choose how dates are displayed. Options include formats like: - -- January 31, 2018 -- 31/01/2018 -- 2018-01-31 -- And other regional date formats - -### Abbreviate days and months - -Check this option to use abbreviated forms for days and months (e.g., "Jan" instead of "January", "Mon" instead of "Monday"). - -### Show the time - -This lets you choose if this time field should be displayed by default without the time; with hours and minutes; with hours, minutes, and seconds; or additionally with milliseconds. - -- **Off** - Display only the date without time -- **HH:MM** - Display hours and minutes -- **HH:MM:SS** - Display hours, minutes, and seconds -- **HH:MM:SS.MS** - Display hours, minutes, seconds, and milliseconds - -### Time style - -Choose between 12-hour and 24-hour time format: - -- **12-hour clock** (e.g., 5:24 PM) -- **24-hour clock** (e.g., 17:24) - -## Numbers - -_Admin settings > Table Metadata > Database > Table > Field > Formatting_ - -Options depend on the [semantic type](./semantic-types) you select for the field. - -### Align - -Whether to display the values in the middle, left, or right in table cells. - -### Show a mini bar chart - -Only applies to table visualizations. Displays a bar for each value to show large or small it is relative to the other values in the column. - -### Display as - -- **Automatic** - Metabase will automatically detect the best display format -- **Text** - Display the number as plain text -- **Link** - Display the number as a clickable link - -### Style - -Lets you choose to display the number as a plain number, a percent, in scientific notation, or as a currency. - -- **Normal** - Display as a regular number -- **Percent** - Display as a percentage -- **Scientific notation** - Display in scientific format (e.g., 1.23e+4) -- **Currency** - Display with currency formatting - -### Where to display the unit of currency - -For currency fields, choose where to show the currency symbol: - -- **In the column heading** - Show the currency symbol in the table header -- **In every table cell** - Show the currency symbol next to each value - -### Separator style - -This gives you various options for how commas and periods are used to separate the number (e.g., 100,000.00, 100.000,00, 100 000.00). - -### Number of decimal places - -Forces the number to be displayed with exactly this many decimal places. - -### Multiply by a number - -Multiplies this number by whatever you type here. Useful for unit conversions or scaling values. - -### Add a prefix - -Lets you put a symbol, word, etc. before this number (e.g., "$" for currency). - -### Add a suffix - -Lets you put a symbol, word, etc. after this number (e.g., "dollars", "%", "units"). +- `Show a mini bar chart:` only applies to table visualizations. Displays a bar for each value to show large or small it is relative to the other values in the column. +- `Style:` lets you choose to display the number as a plain number, a percent, in scientific notation, or as a currency. +- `Separator style:` this gives you various options for how commas and periods are used to separate the number. +- `Number of decimal places:` forces the number to be displayed with exactly this many decimal places. +- `Multiply by a number:` multiplies this number by whatever you type here. +- `Add a prefix/suffix:` lets you put a symbol, word, etc. before or after this number. ### Currency @@ -168,7 +46,7 @@ See [Currency formatting options](../questions/visualizations/table#currency-for ## Question-level formatting -You can also override all formatting settings in any specific saved question or dashboard card by clicking on the gear to open the visualization options. To reset any overridden setting to the default, just click on the rotating arrow icon next to the setting's label. This will reset the setting to the field-level setting if there is one; otherwise it will be reset to the global default. +Lastly, you can override all formatting settings in any specific saved question or dashboard card by clicking on the gear to open up the visualization options. To reset any overridden setting to the default, just click on the rotating arrow icon next to the setting's label. This will reset the setting to the field-level setting if there is one; otherwise it will be reset to the global default. Formatting options vary depending on the type of visualization: diff --git a/_docs/master/data-modeling/images/column-settings.png b/_docs/master/data-modeling/images/column-settings.png new file mode 100644 index 0000000000..6a8819a170 Binary files /dev/null and b/_docs/master/data-modeling/images/column-settings.png differ diff --git a/_docs/master/data-modeling/images/field-filtering-preview.png b/_docs/master/data-modeling/images/field-filtering-preview.png deleted file mode 100644 index 68dc081c37..0000000000 Binary files a/_docs/master/data-modeling/images/field-filtering-preview.png and /dev/null differ diff --git a/_docs/master/data-modeling/images/format-as-url.png b/_docs/master/data-modeling/images/format-as-url.png new file mode 100644 index 0000000000..65d35ce0da Binary files /dev/null and b/_docs/master/data-modeling/images/format-as-url.png differ diff --git a/_docs/master/data-modeling/images/formula.png b/_docs/master/data-modeling/images/formula.png index 0f02f4868c..8e020111ca 100644 Binary files a/_docs/master/data-modeling/images/formula.png and b/_docs/master/data-modeling/images/formula.png differ diff --git a/_docs/master/data-modeling/images/original-schema.png b/_docs/master/data-modeling/images/original-schema.png new file mode 100644 index 0000000000..6ed4ac9c1c Binary files /dev/null and b/_docs/master/data-modeling/images/original-schema.png differ diff --git a/_docs/master/data-modeling/images/table-metadata-settings.png b/_docs/master/data-modeling/images/table-metadata-settings.png deleted file mode 100644 index 7531c1b9a1..0000000000 Binary files a/_docs/master/data-modeling/images/table-metadata-settings.png and /dev/null differ diff --git a/_docs/master/data-modeling/images/table-metadata.png b/_docs/master/data-modeling/images/table-metadata.png new file mode 100644 index 0000000000..d16aabea01 Binary files /dev/null and b/_docs/master/data-modeling/images/table-metadata.png differ diff --git a/_docs/master/data-modeling/images/unfold-json-setting.png b/_docs/master/data-modeling/images/unfold-json-setting.png index 1527b522fe..f69b404401 100644 Binary files a/_docs/master/data-modeling/images/unfold-json-setting.png and b/_docs/master/data-modeling/images/unfold-json-setting.png differ diff --git a/_docs/master/data-modeling/json-unfolding.md b/_docs/master/data-modeling/json-unfolding.md index ab12368537..66b9df2ac8 100644 --- a/_docs/master/data-modeling/json-unfolding.md +++ b/_docs/master/data-modeling/json-unfolding.md @@ -7,7 +7,6 @@ category: 'Data Modeling' title: 'Working with JSON' source_url: 'https://github.com/metabase/metabase/blob/master/docs/data-modeling/json-unfolding.md' layout: new-docs -summary: 'Learn how to unfold JSON columns into separate fields that you can filter on in the query builder.' --- # Working with JSON @@ -62,8 +61,8 @@ If performance degrades, or you'd rather keep the JSON contained in the original 4. Select the database that contains the field you want to update. 5. Select the table that contains the field. 6. Select the field containing the original JSON -7. In the **Behavior** section, locate the **Unfold JSON** option and select **Yes** or **No**. If the column was unfolded, Metabase will have hidden this JSON columnn from view, so if you want the JSON column to be visible again, you'll need to change the column's visibility to **Everywhere**. -8. Scroll to the top and click the **Filter values** button and select **Re-scan this field**. +7. Scroll to the **Unfold JSON** option and select **Yes** or **No**. If the column was unfolded, Metabase will have hidden this JSON columnn from view, so if you want the JSON column to be visible again, you'll need to change the column's visibility to **Everywhere**. +8. Scroll down and click on the **Re-scan this field**. ![Unfolded JSON setting](./images/unfold-json-setting.png) diff --git a/_docs/master/data-modeling/metadata-editing.md b/_docs/master/data-modeling/metadata-editing.md index 9fc1a559b9..d4198974d5 100644 --- a/_docs/master/data-modeling/metadata-editing.md +++ b/_docs/master/data-modeling/metadata-editing.md @@ -13,119 +13,117 @@ redirect_from: # Table metadata admin settings -_Admin settings > Table metadata_ +Metabase lets you add and edit metadata to your tables and columns so that you can manage your org's business logic as it changes. Go to the **Table Metadata** tab in your **Admin settings** to: -![Table metadata settings](./images/table-metadata-settings.png) +- [Set display names and descriptions](#table-display-name). +- [Hide outdated data](#table-visibility). +- [Cast a text or number column to a date column](#casting-to-a-specific-data-type). +- [Change the style of a filter widget](#changing-the-filter-widget). +- [Display a column as a link](#displaying-a-column-as-a-link). -Metabase lets you add and edit metadata for your tables and columns. - -The **Table metadata settings only affect the way Metabase displays the data. None of the settings change the data in your database.** - -Admins can grant access to these metadata settings to other groups. See [table metadata permissions](../permissions/data#manage-table-metadata-permissions). +> The **Table Metadata** admin settings only affect the way data's displayed and interpreted in Metabase. None of the settings will change the data in your database. ## Table settings -_Admin settings > Table metadata > Database > Table_ - -You can search for tables, or use the tree navigation to find each of your connected databases and their tables. +Click on a table name in the left sidebar to view the table's settings in Metabase. -### Table display name and description +If you've got more than one database connected to Metabase, click on the database name (for example, "Sample Database") and select another database from the dropdown menu. Once you select a database, the tables in that database will appear in the sidebar. -To edit a table's display name or description in the table metadata tab, click into the box that contains the current table name or description and edit it. Changes will be saved automatically once you click out of the box. +![Table metadata](./images/table-metadata.png) -Descriptions are displayed in Metabase's [data reference](../exploration-and-organization/data-model-reference) and tooltips when view the table. Decscriptions help people find the right table for their use case. +- [Change the display name](#table-display-name). +- [Add or edit the description](#table-description). +- [Show or hide the table across Metabase](#table-visibility). +- [View the original schema](#original-schema). +- [Edit column (field) settings](#column-field-settings). -### Table sync options +### Table display name -Actions you can take to refresh the schema or field values. For more, check out [syncs and scans](../databases/sync-scan). +To edit a table's display name in Metabase, click into the box that contains the current table name. Changes will be saved automatically once you click out of the box. -#### Sync table schema +### Table description -If you've made changes to this table in the underlying database that aren't showing up in Metabase yet, re-syncing the table schema can fix that. +To add a table description, click into the box below the table name. Descriptions are displayed in Metabase's [data reference](../exploration-and-organization/data-model-reference) to help people find the right table for their use case. -To update the values in your filter dropdown menus, refresh or reset the cached values. - -#### Scan field values +### Table visibility -Metabase uses these values to populate dropdown filters. You can also [scan values for a specific field](#scan-values-for-a-specific-field). +**Queryable** tables are visible across all of Metabase. -#### Discard cached field values +**Hidden** tables won't show up in the [query builder](../questions/query-builder/editor) or [data reference](../exploration-and-organization/data-model-reference). But this is not a security feature: hidden tables can still be used in SQL questions if someone writes `SELECT * FROM hidden_table` from the [SQL editor](../questions/native-editor/writing-sql). To prevent people from writing queries against specific tables, see [data permissions](../permissions/data). -Clears cached values. Metabase will pull new values for display in your [filter widgets](#filtering). +Tip: To hide all of the tables in a database (say, if you've migrated to a new database), click on the **hidden eye** icon beside "# queryable tables" in the left sidebar. -### Table sorting +### Original schema -You can sort the fields in a table in different ways: +To remind yourself of column names and data types as they're stored in your database, click **Original schema** (below **Visibility**). -- Automatically (Metabase decides for you) -- By how they appear in the database -- Alphabetically -- Custom order (just drag and drop to rearrange, then click "Done") +![Original schema](./images/original-schema.png) -### Table visibility +## Column (field) settings -You can toggle the visibility of a table by clicking on the **eye** icon next to the table name in the left sidebar navigation tree in the Table metadata tab. +Select a database and click on a table's name in the sidebar to bring up basic column display settings: -**Hidden tables** won't show up in the [query builder](../questions/query-builder/editor) or [data reference](../exploration-and-organization/data-model-reference). **But this is not a permissions feature**: hidden tables can still be used in SQL questions if someone knows the name of the table. For example, `SELECT * FROM table_name` from the [SQL editor](../questions/native-editor/writing-sql) would return results. To prevent people from writing queries against specific tables, see [data permissions](../permissions/data). +- [Change the display name](#column-name) +- [Add or edit the description](#column-description) +- [Show or hide the column across Metabase](#column-visibility) +- [Set a default column order](#column-order) +- [Change the column's field type](#field-type) -To hide **all of the tables in a database** (say, if you've migrated to a new database), click on the **eye** icon next to the database name in the sidebar. +For extra column settings, click on the **gear** icon at the right of a column's settings box: -## Field settings +![Column settings](./images/column-settings.png) -_Admin settings > Table Metadata > Database > Table > Field_ +- [Cast text or numbers to dates](#casting-to-a-specific-data-type) +- [Change the filter widget](#changing-the-filter-widget) (for example, to a dropdown menu) +- [Remap column values](#remapping-column-values) (for example, from "5" to "Great") +- [Display the column as a link](#displaying-a-column-as-a-link) -Fields are also known as Columns (see the [difference between fields and columns](/learn/grow-your-data-skills/data-fundamentals/database-basics#columns-vs-fields)). +### Column name -## Field name and description +To change the _global_ display name of a column in Metabase, click on the name of the column. For example, you could display "auth.user" as "User" to make the column more readable. People can use [models](./models) to give columns a display name that's local to the model. -To change the _global_ display name of a column in Metabase, click on the name of the column. For example, you could display "auth.user" as "User" to make the column more readable. People can also use [models](./models) to give columns a display name that's local to the model. +### Column description To add a description, click into the box below the column name. Descriptions are displayed in the [data reference](../exploration-and-organization/data-model-reference) to help people interpret the column's values. You should consider adding a description if your column contains: -- Abbreviations or codes -- Zeroes, nulls, or blank values -- Placeholder values, like `9999-99-99` - -## Field preview - -![Field filtering preview](./images/field-filtering-preview.png) +- abbreviations or codes +- zeroes, nulls, or blank values +- placeholder values, like `9999-99-99` -Click the preview button to see sample data from that field. +### Column visibility -- Table preview -- Detail -- Filtering +**Everywhere**: by default, users can see all of the columns in a table. -## Scan values for a specific field +**Only in detail views** will hide lengthy text from question results. This setting is applied by default if a column's values have an average length of more than 50 characters. For example, you could use this setting on a column like "Customer Comments" if you already have a column for "Customer Rating". -_Admin settings > Table Metadata > Database > Table > Field_ +**Do not include** columns won't show up in the query builder or data reference. You can set "do not include" on sensitive columns (such as PII) or irrelevant columns. But this visibility option is a simple omit/hide option; it's not a security feature. These columns are still accessible for people with native query privileges; they can write `SELECT hidden_column FROM table` or `SELECT * from table` in the [SQL editor](../questions/native-editor/writing-sql) and they'll be able to view these fields and their values. To prevent people from viewing certain columns, see [data sandboxing](../permissions/data-sandboxes). -To scan or discard field values for a specific field, click on the **Field values** button. Metabase uses these values to populate dropdown menus in filter widgets. (To be clear, values aren't actually dropped from your database.) +### Column order -## Field data +Metabase defaults to the column order defined in your database schema. To reorder the column display order in question results and menus **manually**, click on the grab bar to the right of each column, and drag the column to a new position. -_Admin settings > Table Metadata > Database > Table > Field_ +To sort the columns **automatically**, click on the **sort** icon at the top right of the first column's settings box. The sorting options are: -### Field name +- **Database.** (Default) The order of columns as they appear in the database. +- **Alphabetical.** A, B, C... however the alphabet works. +- **Custom.** You choose the order. Metabase will automatically switch the sort order to "Custom" if you rearrange any of the columns. +- **Smart.** Metabase chooses for you. -This is the name of the field in the database itself. You can't change it in Metabase. +### Field type -### Data type +To change the [field type](../data-modeling/field-types) of a column, click on the **Type** dropdown menu in a column's setting box. You can also use the **Type** dropdown to label a column as an [entity key](/glossary/entity-key) (primary key) or [foreign key](/glossary/foreign-key) in Metabase (with no consequence to your database). -This is the data type of the field in the database. You can't change the data type in Metabase, but you can cast certain data types to another data type. +### Casting to a specific data type -### Cast to a specific data type +If you want Metabase to treat a text or number column as a datetime column: -If you want Metabase to treat a text or number column as a datetime column, you can cast it to that type. Casting data types won't affect the original data types in your database. +1. Go to **Admin settings** > **Table Metadata**. +2. Find your database and table. +3. Click on the **gear** icon at the right of a column's settings box. +4. Scroll to **Cast to a specific data type** +5. Select a casting option. -For example, say you have a "Created At" column with a string [data type](/learn/grow-your-data-skills/data-fundamentals/data-types-overview) in your database. If you want to: - -- Create relative date filters, such as "Created At = Last week". -- Use "Created At" with formulas like [datetimeAdd](../questions/query-builder/expressions/datetimeadd). - -You can cast that string to a Date type. - -Casting options include: +> Metabase currently supports limited casting options in **Cast to a specific data type**. If you need to cast to a type that's not available in Metabase, you can [create a SQL question](../questions/native-editor/writing-sql#starting-a-new-sql-query) that casts the data and [save it as a model](./models#create-a-model-from-a-saved-question), or create a view directly in your database. **Text to datetime casting options**: @@ -150,78 +148,121 @@ Casting options include: - Float->Integer - Datetime->Date -If Metabase doesn't support the casting option you need, you can [create a SQL question](../questions/native-editor/writing-sql#starting-a-new-sql-query) that casts the data and [save it as a model](./models#create-a-model-from-a-saved-question), or create a view directly in your database. +Casting is different from setting the [field type](./field-types). For example, say you have a "Created At" column with a string [data type](/learn/grow-your-data-skills/data-fundamentals/data-types-overview) in your database. You'll need to cast "Created At" to one of the datetime types above if you want to do things like: -## Field metadata +- Create relative date filters, such as "Created At = Last week". +- Use "Created At" with formulas like [datetimeAdd](../questions/query-builder/expressions/datetimeadd). -_Admin settings > Table Metadata > Database > Table > Field_ +> Casting data types from the **Table Metadata** admin settings won't affect the original data types in your database. -### Semantic type +### Changing the filter widget -You can change the [semantic type](../data-modeling/semantic-types) to give people more context and enable additional functionality, such as displaying text as an image (if the text is an image URL. Another example: you could set an Integer as a "Score" so people have a better idea what those integers indicate. +To change a column's [filter widget](../dashboards/filters): -The semantic types you can choose from depend on the data type. If none of the options describe the values in the column, you can set this setting to "No semantic type". +1. Go to **Admin settings** > **Table Metadata**. +2. Find your database and table. +3. Click on the **gear** icon at the right of a column's settings box. +4. Scroll to **Filtering on this field**. +5. Select a filter widget option. -See [semantic types](../data-modeling/semantic-types). +#### Filter widget options -## Field behavior +The default behavior for the `Is` filter for the field. -_Admin settings > Table Metadata > Database > Table > Field_ +- **Search box**: Display a search box and suggest autocompletions for values in that column that match the search term(s). +- **A list of all values**: Display a search box, as well as a list of checkboxes for values in a dropdown menu that people can select as search terms. +- **Plain input box**: Display a search box, but do NOT suggest autocompletions. -### Field visibility +### Changing a search box filter to a dropdown filter -- **Everywhere**: By default, users can see all of the columns in a table. -- **Only in detail views**: The detail view is the view you seen when you expand a single row in a table. This will hide lengthy text from question results. This setting is applied by default if a column's values have an average length of more than 50 characters. For example, you could use this setting on a column like "Customer Comments" if you already have a column for "Customer Rating". -- **Do not include**: Columns won't show up in the query builder or data reference. You can set this option on sensitive columns (such as PII) or irrelevant columns. But this visibility option is a simple omit/hide option; **it's not a permissions feature**. These columns are still accessible for people with native query privileges; they can write `SELECT hidden_column FROM table` or `SELECT * FROM table` in the [SQL editor](../questions/native-editor/writing-sql) and they'll be able to view these fields and their values. +The dropdown filter widget can be finicky, because Metabase needs to run a [scan](../databases/sync-scan#how-database-scans-work) to get the list of values for the dropdown menu. -To restrict what data people can view and query, see [data permissions](../permissions/data). +1. Go to **Admin settings** > **Table Metadata**. +2. Find your database and table. +3. Scroll to your column. +4. In the column's settings box, set **Type** to “Category”. +5. Set **Filtering on this field** to “A list of all values". -### Filtering +When you change a default filter to a dropdown filter, you'll trigger a database query that gets the first 1,000 distinct values (ordered ascending) for that column. Metabase will cache the first 100kB of text to display in the dropdown menu. If you have columns with more than 1,000 distinct values, or columns with text-heavy data, we recommend setting **Filtering on this field** to "Search box" instead. -The **Filtering** setting changes a column's default [filter widget](../dashboards/filters). Options include: +### Remapping column values -- **Search box**: Display a search box and suggest autocompletions for values in that column that match the search term(s). -- **A list of all values**: Display a search box, as well as a dropdown menu with checkboxes for values. If the number of distinct values exceeds 1000, however, Metabase will instead display a search box. See [Changing a search box filter to a dropdown filter](#changing-a-search-box-filter-to-a-dropdown-filter). -- **Plain input box**: Display a search box, but don't suggest autocompletions. +Say you have a column with the values 1, 2, and 3, and you want to map each number to the values "low", "medium" and "high". This kind of mapping can be done on columns that have numeric or foreign key [field types](#field-type). -The settings here will also affect dashboard filters. For example, if you set this to plain input box, you won't be able to set up a dashboard filter that has a dropdown menu. See [dropdown list](../dashboards/filters#dropdown-list). +#### Remapping numbers -#### Changing a search box filter to a dropdown filter +1. Go to **Admin settings** > **Table Metadata**. +2. Find your database and table. +3. Click **gear** icon at the right of a column's settings box. +4. Scroll to **Display values**. +5. Select "Custom mapping" from the dropdown menu. +6. Enter the display values under **Mapped values**. -The dropdown filter widget can be finicky, because Metabase needs to run a [scan](../databases/sync-scan#how-database-scans-work) to get the list of values for the dropdown menu. If you're having trouble: +#### Remapping foreign keys -1. Set the [Semantic type](#semantic-type) to "Category". -2. Set [Filtering](#filtering) to "A list of all values". +1. Go to **Admin settings** > **Table Metadata**. +2. Find your database and table. +3. Click **gear** icon at the right of a column's settings box. +4. Scroll to **Display values**. +5. Select "Use foreign key" from the dropdown menu. +6. Select a column name from the second dropdown menu. -When you change a default filter to a dropdown filter, you'll trigger a database query that gets the first 1,000 distinct values (ordered ascending) for that column. Metabase will cache the first 100kB of text to display in the dropdown menu. +### Displaying a column as a link -If you have columns with more than 1,000 distinct values, or columns with text-heavy data, we recommend setting **Filtering** to "Search box" instead. +1. Go to **Admin settings** > **Table Metadata**. +2. Find your database and table. +3. Click on the **gear** icon at the right of a column's settings box. +4. Select **Formatting** from the sidebar. +5. From **Display as**, select **Link**. +6. Optional: set display text under **Link text**. +7. Enter the URL in the **Link URL** field. +8. Optional: create a dynamic URL by adding the column name as a `{% raw %}{{parameter}}{% endraw %}`. -### Display values +![Format as URL](./images/format-as-url.png) -You can map another column connected by a foreign key relationship, like mapping a `Product_ID` column to instead display the name of the product. +For example, if you set the **Link URL** for an "Adjective" column to: -#### Mapping values to foreign keys +``` +https://www.google.com/search?q={% raw %}{{adjective}}{% endraw %} +``` -You can map another column connected by a foreign key relationship, like mapping a Product_ID column to instead display the name of the product. +When someone clicks on the value "askew" in the "Adjective" column, they'll be taken to the Google search URL: -#### Mapping numbers to custom values +``` +https://www.google.com/search?q=askew +``` -Say you have a column with values 1, 2, and 3. You could instead display "low", "medium", and "high". +## Refresh or discard cached values -For this option to be available, you'll need to set the [filtering](#filtering) settings to "A list of all values". +To update the values in your filter dropdown menus, refresh or reset the cached values. **Cache actions** include: -Select "Custom mapping" from the dropdown menu. For each value in the column, enter a display value under **Mapped values**. +- **Re-scan this table or field** to run a manual scan for new or updated column values. If possible, re-scan the table during off-peak hours, as [scans](../databases/sync-scan#how-database-scans-work) can slow down your database. +- **Discard cached field values** to clear cached values and stop them from showing up in your [filter widgets](#changing-the-filter-widget). -## Field formatting +### Table cache actions -_Admin settings > Table Metadata > Database > Table > Field_ +1. Go to **Admin settings** > **Table Metadata**. +2. Find your database and table. +3. Click the **gear** icon at the top right (below **Exit admin**). +4. Select a cache action. -See [Field formatting](./formatting#field-formatting). +### Column cache actions + +1. Go to **Admin settings** > **Table Metadata**. +2. Find your database and table. +3. Click the **gear** icon at the right of a column's settings box. +4. Scroll to **Cached field values**. +5. Select a cache action. ## Unfold JSON -See [Working with JSON](./json-unfolding). +If Metabase supports JSON unfolding for your database, you can decide whether to unfold JSON into component fields, where each JSON key becomes a column. You can turn this off if performance is slow. + +1. Go to **Admin settings** > **Table Metadata**. +2. Find your database and table. +3. Click the **gear** icon at the right of a column's settings box. +4. Scroll to **Unfold JSON**. +5. Toggle JSON unfolding. ## Further reading diff --git a/_docs/master/data-modeling/models.md b/_docs/master/data-modeling/models.md index 91a39af8ba..2cc9d79652 100644 --- a/_docs/master/data-modeling/models.md +++ b/_docs/master/data-modeling/models.md @@ -92,7 +92,7 @@ For models based on SQL queries, you can tell Metabase if the column has the sam You can set the [column type][column-type]. The default is "No special type". -If your model is based on a SQL query and you want people to be able to explore the results with the query builder, you'll need to set the [column type](./semantic-types) for each column in your model. +If your model is based on a SQL query and you want people to be able to explore the results with the query builder, you'll need to set the [column type](./field-types) for each column in your model. ### This column should appear in... @@ -175,7 +175,7 @@ See [Model persistence](./model-persistence) - [Models in Metabase][learn-models] - [Troubleshooting models][troubleshooting-models]. -[column-type]: ./semantic-types +[column-type]: ./field-types [cte]: /learn/sql/working-with-sql/sql-cte [measures-dimensions]: /learn/grow-your-data-skills/data-fundamentals/dimensions-and-measures [question]: ../questions/start diff --git a/_docs/master/data-modeling/segments.md b/_docs/master/data-modeling/segments.md index 586e8350be..97cf6eed24 100644 --- a/_docs/master/data-modeling/segments.md +++ b/_docs/master/data-modeling/segments.md @@ -11,14 +11,7 @@ layout: new-docs # Segments -Metabase allows admins to create segments so people can quickly and easily reference them in the query builder. - -To manage segments: - -1. Click the **gear** icon in the upper right. -2. Select **Admin setting**. -3. Go to the **Table Metadata** tab. -5. Click **Segments** at the bottom left. +Metabase allows admins to create segments so people can quickly and easily reference them in the query builder. Just head over to the **Admin Panel** and select **Table Metadata** from the top menu. ## Creating a Segment diff --git a/_docs/master/data-modeling/start.md b/_docs/master/data-modeling/start.md index 8655f30c17..f26b732b0c 100644 --- a/_docs/master/data-modeling/start.md +++ b/_docs/master/data-modeling/start.md @@ -31,11 +31,11 @@ Create metrics to define the official way to calculate important numbers for you Guide people to the right data by adding display names, hiding outdated tables, configuring filter types, and more. -## [Field types](./semantic-types) +## [Field types](./field-types) Field types dictate how Metabase displays its data, as well as the column’s special functionality, if any. -## [Setting default formatting for your data](./formatting) +## [Setting default formatting for your data](./field-types) Define formatting and display defaults for numbers, currencies, datetimes, and more. diff --git a/_docs/master/databases/connecting.md b/_docs/master/databases/connecting.md index 63f7f9f36d..27d2ea90e2 100644 --- a/_docs/master/databases/connecting.md +++ b/_docs/master/databases/connecting.md @@ -76,7 +76,7 @@ Go to **Admin settings** > **Databases** > your database and click **Remove this ## Restoring the Sample Database -If you've deleted the Metabase [Sample Database](/glossary/sample-database), go to **Admin settings** > **Databases** and click **Bring the Sample Database back**. +If you've deleted the Metabase [Sample Database](/glossary/sample_database), go to **Admin settings** > **Databases** and click **Bring the Sample Database back**. ## Troubleshooting diff --git a/_docs/master/databases/connections/bigquery.md b/_docs/master/databases/connections/bigquery.md index c99a544a50..6752184795 100644 --- a/_docs/master/databases/connections/bigquery.md +++ b/_docs/master/databases/connections/bigquery.md @@ -168,12 +168,6 @@ If you're having trouble with your BigQuery connection, you can check out this [ There aren't (yet) any model features available for BigQuery. -## Database routing - -Database routing for BigQuery works between BigQuery **projects** with identical schemas. - -See [Database routing](../../permissions/database-routing). - ## Danger zone See [Danger zone](../danger-zone). diff --git a/_docs/master/databases/images/atlas-connect.png b/_docs/master/databases/images/atlas-connect.png index 4377047e1f..cda55015c1 100644 Binary files a/_docs/master/databases/images/atlas-connect.png and b/_docs/master/databases/images/atlas-connect.png differ diff --git a/_docs/master/databases/images/connection-string.png b/_docs/master/databases/images/connection-string.png index ab5411a6fb..edba66aced 100644 Binary files a/_docs/master/databases/images/connection-string.png and b/_docs/master/databases/images/connection-string.png differ diff --git a/_docs/master/databases/images/snowflake-copy-account-url.png b/_docs/master/databases/images/snowflake-copy-account-url.png index 82457d4e06..cf9a18f67a 100644 Binary files a/_docs/master/databases/images/snowflake-copy-account-url.png and b/_docs/master/databases/images/snowflake-copy-account-url.png differ diff --git a/_docs/master/databases/sync-scan.md b/_docs/master/databases/sync-scan.md index 662e48b40e..960ab8983b 100644 --- a/_docs/master/databases/sync-scan.md +++ b/_docs/master/databases/sync-scan.md @@ -20,7 +20,7 @@ Metabase periodically runs different types of queries on your data warehouse to ## Initial sync, scan, and fingerprinting -When Metabase first connects to your database, it performs a [sync](#how-database-syncs-work) to determine the metadata of the columns in your tables and automatically assign each column a [semantic type](../data-modeling/semantic-types). +When Metabase first connects to your database, it performs a [sync](#how-database-syncs-work) to determine the metadata of the columns in your tables and automatically assign each column a [semantic type](../data-modeling/field-types). You can follow the progress of these queries from **Gear icon** >**Admin settings** > **Tools** > **Tasks** and filtering by the various sync tasks. @@ -57,7 +57,7 @@ Options include: - **Only when adding a new filter widget** is a great option if you want scan queries to run on demand. Turning this option **ON** means that Metabase will only scan and cache the values of the field(s) that are used when someone adds a new filter widget to a dashboard or SQL question (i.e., they add a parameter to their SQL query). - **Never, I'll do this manually if I need to** is an option for databases that are either prohibitively large or which never really have new values added. Use the [Re-scan field values](#manually-scanning-column-values) button to run a manual scan and bring your filter values up to date. -Regardless of which option you pick, if you [set a field to use a dropdown list in filter widgets](../data-modeling/metadata-editing#filtering), Metabase will need to get values for that dropdown. Whenever someone uses that filter widget, Metabase will first look for cached values (valid for fourteen days) to populate that dropdown; otherwise, it will re-scan that field for the most up-to-date values. +Regardless of which option you pick, if you [set a field to use a dropdown list in filter widgets](../data-modeling/metadata-editing#changing-the-filter-widget), Metabase will need to get values for that dropdown. Whenever someone uses that filter widget, Metabase will first look for cached values (valid for fourteen days) to populate that dropdown; otherwise, it will re-scan that field for the most up-to-date values. ## Manually syncing tables and columns @@ -140,7 +140,7 @@ LIMIT 0 By default, this query runs against your database during setup and again every hour. This scanning query is fast with most relational databases but can be slower with MongoDB and some [community-built database drivers](../developers-guide/community-drivers). Syncing can't be turned off completely, otherwise Metabase wouldn't work. -Here's the kind of data that gets synced and why: +Here's the kind of data that syncs get and why: | What | Why | | ---------------- | -------------------------------------------- | diff --git a/_docs/master/developers-guide/community-drivers.md b/_docs/master/developers-guide/community-drivers.md index 8d4ab84c11..2b13b29798 100644 --- a/_docs/master/developers-guide/community-drivers.md +++ b/_docs/master/developers-guide/community-drivers.md @@ -45,7 +45,6 @@ Anyone can build a community driver. These are the currently known third-party d | [GreptimeDB](https://github.com/greptimeteam/greptimedb-metabase-driver) | ![GitHub stars](https://img.shields.io/github/stars/greptimeteam/greptimedb-metabase-driver) | ![GitHub (Pre-)Release Date](https://img.shields.io/github/release-date-pre/greptimeteam/greptimedb-metabase-driver) | | [Hydra](https://www.hydra.so/blog-posts/2022-09-28-metabase-and-hydra) | Hydra connections use the official [Postgres driver](../databases/connections/postgresql). | Not applicable. | | [Impala](https://github.com/brenoae/metabase-impala-driver) | ![GitHub stars](https://img.shields.io/github/stars/brenoae/metabase-impala-driver) | ![GitHub (Pre-)Release Date](https://img.shields.io/github/release-date-pre/brenoae/metabase-impala-driver) | -| [InterSystems IRIS](https://github.com/Siddardar/metabase-iris-driver/tree/main) | ![GitHub stars](https://img.shields.io/github/stars/Siddardar/metabase-iris-driver) | ![GitHub (Pre-)Release Date](https://img.shields.io/github/release-date-pre/Siddardar/metabase-iris-driver) | | [Materialize](https://github.com/MaterializeInc/metabase-materialize-driver) | ![GitHub stars](https://img.shields.io/github/stars/MaterializeInc/metabase-materialize-driver) | ![GitHub (Pre-)Release Date](https://img.shields.io/github/release-date-pre/MaterializeInc/metabase-materialize-driver) | | [Neo4j](https://github.com/StronkMan/metabase-neo4j-driver) | ![GitHub stars](https://img.shields.io/github/stars/StronkMan/metabase-neo4j-driver) | ![GitHub (Pre-)Release Date](https://img.shields.io/github/release-date-pre/StronkMan/metabase-neo4j-driver) | | [Netsuite SuiteAnalytics Connect](https://github.com/ericcj/metabase-netsuite-driver) | ![GitHub stars](https://img.shields.io/github/stars/ericcj/metabase-netsuite-driver) | ![GitHub (Pre-)Release Date](https://img.shields.io/github/release-date-pre/ericcj/metabase-netsuite-driver) | diff --git a/_docs/master/developers-guide/driver-changelog.md b/_docs/master/developers-guide/driver-changelog.md index b3e35fbe26..c33e2b3045 100644 --- a/_docs/master/developers-guide/driver-changelog.md +++ b/_docs/master/developers-guide/driver-changelog.md @@ -27,18 +27,10 @@ layout: new-docs replace existing keys like `:alias`, `:join-alias`, or `:name`; make sure you use `driver-api/qp.add.alias`, `driver-api/qp.add.source-table`, and `driver-api/qp.add.source-alias` respectively. -- Added the driver multi-method `driver/extra-info` for drivers to provide info such as db routing configuration details - from their `metabase-plugin.yaml` file. - - Extend `datetime()` to accept UTF-8 encoded binary and numbers (unix timestamps) in addition to strings. - Added a feature `:expressions/today` for drivers that support generating a date for the current day. -## Metabase 0.55.9 - -- Add multi-method `driver/do-with-resilient-connection` for executing functions in a context where closed connections may be automatically reopened - - ## Metabase 0.55.0 - Add the multi-method `->date` that allows the driver to control how to cast strings and temporal types to dates. @@ -66,6 +58,7 @@ layout: new-docs `metabase.driver/upload-type->database-type` or `metabase.driver/allowed-promotions` -- make sure you use `:metabase.upload/varchar-255` rather than something like `::upload/varchar-255`. +- Added the multi-method `metabase.driver.sql.parameters.substitution/time-grouping->replacement-snippet-info`. This is effectively `->replacement-snippet-info` for the new native query time grouping feature, but is its own separate multimethod because it needs an extra parameter. - The `metabase.models.secret` namespace has been replaced with `metabase.secrets.core`; if you were using it please update your usages. diff --git a/_docs/master/developers-guide/security-token-scanner.md b/_docs/master/developers-guide/security-token-scanner.md deleted file mode 100644 index 806440e5f1..0000000000 --- a/_docs/master/developers-guide/security-token-scanner.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -version: master -has_magic_breadcrumbs: true -show_category_breadcrumb: true -show_title_breadcrumb: true -category: 'Developers Guide' -title: 'Security Token Scanner' -source_url: 'https://github.com/metabase/metabase/blob/master/docs/developers-guide/security-token-scanner.md' -layout: new-docs ---- - -# Security Token Scanner - -Security token scanner detects potentially leaked API keys and secrets in the Metabase codebase. Runs automatically as a git precommit hook on staged files. - -## Usage - -```bash -# Scan specific files -./bin/mage -token-scan deps.edn bb.edn - -# Scan all files -./bin/mage -token-scan -a - -# Verbose output -./bin/mage -token-scan -v deps.edn -``` - -## Token Types Detected - -- Airgap tokens (`airgap_`) -- Dev tokens (`mb_dev_`, 64-char hex) -- OpenAI API keys (`sk-`) -- JWT/JWE tokens -- GitHub tokens (`gh[pousr]_`) -- Slack bot tokens (`xoxb-`) -- AWS access keys (`AKIA`) - -The scanner uses `.gitignore` to filter files and will block commits containing detected tokens. - - -## False positives - -If the scanner flags a non-token string, you should **exclude the literal token string** by adding it to: `mage/resources/token_scanner/token_whitelist.txt`. - -``` -echo 'my-token-string' >> mage/resources/token_scanner/token_whitelist.txt && git add mage/resources/token_scanner/token_whitelist.txt -``` - - -## Bypassing (not recommended) - -```bash -git commit --no-verify -m "commit message" -``` diff --git a/_docs/master/embedding/images/create-a-public-link.png b/_docs/master/embedding/images/create-a-public-link.png index a37656aa28..da4c9844b4 100644 Binary files a/_docs/master/embedding/images/create-a-public-link.png and b/_docs/master/embedding/images/create-a-public-link.png differ diff --git a/_docs/master/embedding/images/dashboard-sharing.png b/_docs/master/embedding/images/dashboard-sharing.png index 58e904072b..d4033342d1 100644 Binary files a/_docs/master/embedding/images/dashboard-sharing.png and b/_docs/master/embedding/images/dashboard-sharing.png differ diff --git a/_docs/master/embedding/images/full-data-picker.png b/_docs/master/embedding/images/full-data-picker.png index 012e37c3e9..31aa99c04c 100644 Binary files a/_docs/master/embedding/images/full-data-picker.png and b/_docs/master/embedding/images/full-data-picker.png differ diff --git a/_docs/master/embedding/images/interactive-question-sample-app.png b/_docs/master/embedding/images/interactive-question-sample-app.png index 306f2d33ca..82b59fed3a 100644 Binary files a/_docs/master/embedding/images/interactive-question-sample-app.png and b/_docs/master/embedding/images/interactive-question-sample-app.png differ diff --git a/_docs/master/embedding/images/interactive-question.png b/_docs/master/embedding/images/interactive-question.png index da4c9844b4..2789fb4304 100644 Binary files a/_docs/master/embedding/images/interactive-question.png and b/_docs/master/embedding/images/interactive-question.png differ diff --git a/_docs/master/embedding/images/jwt-setup.png b/_docs/master/embedding/images/jwt-setup.png index 005a76fc45..0c639d1032 100644 Binary files a/_docs/master/embedding/images/jwt-setup.png and b/_docs/master/embedding/images/jwt-setup.png differ diff --git a/_docs/master/embedding/images/powered-by-metabase.png b/_docs/master/embedding/images/powered-by-metabase.png index 2daa70728b..32282cca33 100644 Binary files a/_docs/master/embedding/images/powered-by-metabase.png and b/_docs/master/embedding/images/powered-by-metabase.png differ diff --git a/_docs/master/embedding/images/public-embed.png b/_docs/master/embedding/images/public-embed.png index 1bad0d4e3c..31aa99c04c 100644 Binary files a/_docs/master/embedding/images/public-embed.png and b/_docs/master/embedding/images/public-embed.png differ diff --git a/_docs/master/embedding/images/public-link-custom-destination.png b/_docs/master/embedding/images/public-link-custom-destination.png index 73f3cb9799..7e4d253fc1 100644 Binary files a/_docs/master/embedding/images/public-link-custom-destination.png and b/_docs/master/embedding/images/public-link-custom-destination.png differ diff --git a/_docs/master/embedding/images/see-shared-content.png b/_docs/master/embedding/images/see-shared-content.png index 1b7630c428..4039f66dd8 100644 Binary files a/_docs/master/embedding/images/see-shared-content.png and b/_docs/master/embedding/images/see-shared-content.png differ diff --git a/_docs/master/embedding/interactive-embedding.md b/_docs/master/embedding/interactive-embedding.md index c16dd02ef8..e80ce4741e 100644 --- a/_docs/master/embedding/interactive-embedding.md +++ b/_docs/master/embedding/interactive-embedding.md @@ -20,7 +20,7 @@ redirect_from: **Interactive embedding** is what you want if you want to offer [multi-tenant, self-service analytics](/learn/metabase-basics/embedding/multi-tenant-self-service-analytics). -Interactive embedding is the only type of embedding that integrates with your [permissions](../permissions/introduction) and [SSO](../people-and-groups/start#authentication) to give people the right level of access to [query](/glossary/query-builder) and [drill-down](/learn/metabase-basics/querying-and-dashboards/questions/drill-through) into your data. +Interactive embedding is the only type of embedding that integrates with your [permissions](../permissions/introduction) and [SSO](../people-and-groups/start#authentication) to give people the right level of access to [query](/glossary/query_builder) and [drill-down](/learn/metabase-basics/querying-and-dashboards/questions/drill-through) into your data. ## Interactive embedding demo diff --git a/_docs/master/embedding/introduction.md b/_docs/master/embedding/introduction.md index acd7fdd4f7..dbc020d74d 100644 --- a/_docs/master/embedding/introduction.md +++ b/_docs/master/embedding/introduction.md @@ -53,7 +53,7 @@ If you'd like to share your data with the good people of the internet, admins ca | Restrict data with [locked filters](./static-embedding-parameters#restricting-data-in-a-static-embed-with-locked-parameters) | ❌ | ❌ | ✅ | ❌ | | Restrict data with [sandboxes](../permissions/data-sandboxes) | ✅ | ✅ | ❌ | ❌ | | Use the [drill-through menu](/learn/metabase-basics/querying-and-dashboards/questions/drill-through) | ✅ | ✅ | ❌ | ❌ | -| Self-serve via [query builder](/glossary/query-builder) | ✅ | ✅ | ❌ | ❌ | +| Self-serve via [query builder](/glossary/query_builder) | ✅ | ✅ | ❌ | ❌ | | View usage of embeds with [usage analytics](../usage-and-performance-tools/usage-analytics) | ✅ | ✅ | ❌ | ❌ | | [Actions on dashboards](../dashboards/actions) | ✅ | ✅ | ❌ | ❌ | | Embed individual Metabase components | ✅ | ❌ | ❌ | ❌ | diff --git a/_docs/master/embedding/sdk/api/BaseSdkQuestionProps.html b/_docs/master/embedding/sdk/api/BaseInteractiveQuestionProps.html similarity index 66% rename from _docs/master/embedding/sdk/api/BaseSdkQuestionProps.html rename to _docs/master/embedding/sdk/api/BaseInteractiveQuestionProps.html index eb917617bd..70e4b609e9 100644 --- a/_docs/master/embedding/sdk/api/BaseSdkQuestionProps.html +++ b/_docs/master/embedding/sdk/api/BaseInteractiveQuestionProps.html @@ -4,12 +4,12 @@ show_category_breadcrumb: true show_title_breadcrumb: true category: Embedding -title: BaseSdkQuestionProps -source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/BaseSdkQuestionProps.html' +title: BaseInteractiveQuestionProps +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/BaseInteractiveQuestionProps.html' layout: docs-api --- -BaseSdkQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

Interface BaseSdkQuestionProps

interface BaseSdkQuestionProps {
    children?: ReactNode;
    entityTypes?: EmbeddingEntityType[];
    initialSqlParameters?: SqlParameterValues;
    isSaveEnabled?: boolean;
    onBeforeSave?: (
        question: undefined | MetabaseQuestion,
        context: { isNewQuestion: boolean },
    ) => Promise<void>;
    onRun?: (question: undefined | MetabaseQuestion) => void;
    onSave?: (
        question: MetabaseQuestion,
        context: { dashboardTabId?: number; isNewQuestion: boolean },
    ) => void;
    plugins?: MetabasePluginsConfig;
    questionId: null | SdkQuestionId;
    targetCollection?: SdkCollectionId;
    withDownloads?: boolean;
}
Index

Properties

children? +BaseInteractiveQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

Interface BaseInteractiveQuestionProps

interface BaseInteractiveQuestionProps {
    children?: ReactNode;
    entityTypes?: EmbeddingEntityType[];
    initialSqlParameters?: SqlParameterValues;
    isSaveEnabled?: boolean;
    onBeforeSave?: (
        question: undefined | MetabaseQuestion,
        context: { isNewQuestion: boolean },
    ) => Promise<void>;
    onRun?: (question: undefined | MetabaseQuestion) => void;
    onSave?: (
        question: MetabaseQuestion,
        context: { dashboardTabId?: number; isNewQuestion: boolean },
    ) => void;
    plugins?: MetabasePluginsConfig;
    questionId: null | SdkQuestionId;
    targetCollection?: SdkCollectionId;
    withDownloads?: boolean;
}
Index

Properties

children? entityTypes? initialSqlParameters? isSaveEnabled? diff --git a/_docs/master/embedding/sdk/api/CreateQuestion.html b/_docs/master/embedding/sdk/api/CreateQuestion.html index e79feca847..dd1d9a4f9b 100644 --- a/_docs/master/embedding/sdk/api/CreateQuestion.html +++ b/_docs/master/embedding/sdk/api/CreateQuestion.html @@ -9,22 +9,13 @@ layout: docs-api --- -CreateQuestion | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

Function CreateQuestion

  • Parameters

    • Optionalprops: CreateQuestionProps
      • OptionalclassName?: string

        A custom class name to be added to the root element.

        -
      • OptionalcomponentPlugins?: MetabasePluginsConfig

        Additional mapper function to override or add drill-down menu

        -
      • OptionalentityTypes?: EmbeddingEntityType[]

        An array that specifies which entity types are available in the data picker

        -
      • Optionalheight?: Height<string | number>

        A number or string specifying a CSS size value that specifies the height of the component

        +CreateQuestion | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

        Function CreateQuestion

        • Parameters

          • Optionalprops: CreateQuestionProps
            • OptionalentityTypes?: EmbeddingEntityType[]

              An array that specifies which entity types are available in the data picker

            • OptionalinitialSqlParameters?: SqlParameterValues

              Initial values for the SQL parameters.

            • OptionalisSaveEnabled?: boolean

              Whether to show the save button.

            • OptionalonBeforeSave?: (
                  question: undefined | MetabaseQuestion,
                  context: { isNewQuestion: boolean },
              ) => Promise<void>

              A callback function that triggers before saving. Only relevant when isSaveEnabled = true

              -
            • OptionalonNavigateBack?: () => void

              A callback function that triggers when a user clicks the back button.

            • OptionalonRun?: (question: undefined | MetabaseQuestion) => void

              A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

            • OptionalonSave?: (
                  question: MetabaseQuestion,
                  context: { dashboardTabId?: number; isNewQuestion: boolean },
              ) => void

              A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

              -
            • Optionalplugins?: MetabasePluginsConfig
            • Optionalstyle?: CSSProperties

              A custom style object to be added to the root element.

              -
            • OptionaltargetCollection?: SdkCollectionId

              The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

              -
            • Optionaltitle?: SdkQuestionTitleProps

              Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

              -
            • Optionalwidth?: Width<string | number>

              A number or string specifying a CSS size value that specifies the width of the component

              -
            • OptionalwithChartTypeSelector?: boolean

              Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

              +
            • Optionalplugins?: MetabasePluginsConfig
            • OptionaltargetCollection?: SdkCollectionId

              The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

            • OptionalwithDownloads?: boolean

              Enables the ability to download results in the interactive question.

              -
            • OptionalwithResetButton?: boolean

              Determines whether a reset button is displayed. Only relevant when using the default layout.

          Returns Element

          Use <InteractiveQuestion questionId="new" /> instead.

        diff --git a/_docs/master/embedding/sdk/api/CreateQuestionProps.html b/_docs/master/embedding/sdk/api/CreateQuestionProps.html index c3b9fb4804..162264812e 100644 --- a/_docs/master/embedding/sdk/api/CreateQuestionProps.html +++ b/_docs/master/embedding/sdk/api/CreateQuestionProps.html @@ -9,39 +9,21 @@ layout: docs-api --- -CreateQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

        Interface CreateQuestionProps

        interface CreateQuestionProps {
            className?: string;
            componentPlugins?: MetabasePluginsConfig;
            entityTypes?: EmbeddingEntityType[];
            height?: Height<string | number>;
            initialSqlParameters?: SqlParameterValues;
            isSaveEnabled?: boolean;
            onBeforeSave?: (
                question: undefined | MetabaseQuestion,
                context: { isNewQuestion: boolean },
            ) => Promise<void>;
            onNavigateBack?: () => void;
            onRun?: (question: undefined | MetabaseQuestion) => void;
            onSave?: (
                question: MetabaseQuestion,
                context: { dashboardTabId?: number; isNewQuestion: boolean },
            ) => void;
            plugins?: MetabasePluginsConfig;
            style?: CSSProperties;
            targetCollection?: SdkCollectionId;
            title?: SdkQuestionTitleProps;
            width?: Width<string | number>;
            withChartTypeSelector?: boolean;
            withDownloads?: boolean;
            withResetButton?: boolean;
        }
        Index

        Properties

        className? -componentPlugins? -entityTypes? -height? +CreateQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

        Interface CreateQuestionProps

        interface CreateQuestionProps {
            entityTypes?: EmbeddingEntityType[];
            initialSqlParameters?: SqlParameterValues;
            isSaveEnabled?: boolean;
            onBeforeSave?: (
                question: undefined | MetabaseQuestion,
                context: { isNewQuestion: boolean },
            ) => Promise<void>;
            onRun?: (question: undefined | MetabaseQuestion) => void;
            onSave?: (
                question: MetabaseQuestion,
                context: { dashboardTabId?: number; isNewQuestion: boolean },
            ) => void;
            plugins?: MetabasePluginsConfig;
            targetCollection?: SdkCollectionId;
            withDownloads?: boolean;
        }
        Index

        Properties

        className?: string

        A custom class name to be added to the root element.

        -
        componentPlugins?: MetabasePluginsConfig

        Additional mapper function to override or add drill-down menu

        -
        entityTypes?: EmbeddingEntityType[]

        An array that specifies which entity types are available in the data picker

        -
        height?: Height<string | number>

        A number or string specifying a CSS size value that specifies the height of the component

        +

        Properties

        entityTypes?: EmbeddingEntityType[]

        An array that specifies which entity types are available in the data picker

        initialSqlParameters?: SqlParameterValues

        Initial values for the SQL parameters.

        isSaveEnabled?: boolean

        Whether to show the save button.

        onBeforeSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => Promise<void>

        A callback function that triggers before saving. Only relevant when isSaveEnabled = true

        -
        onNavigateBack?: () => void

        A callback function that triggers when a user clicks the back button.

        onRun?: (question: undefined | MetabaseQuestion) => void

        A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

        onSave?: (
            question: MetabaseQuestion,
            context: { dashboardTabId?: number; isNewQuestion: boolean },
        ) => void

        A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

        -

        A custom style object to be added to the root element.

        -
        targetCollection?: SdkCollectionId

        The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

        -

        Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

        -
        width?: Width<string | number>

        A number or string specifying a CSS size value that specifies the width of the component

        -
        withChartTypeSelector?: boolean

        Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

        +
        targetCollection?: SdkCollectionId

        The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

        withDownloads?: boolean

        Enables the ability to download results in the interactive question.

        -
        withResetButton?: boolean

        Determines whether a reset button is displayed. Only relevant when using the default layout.

        -

        +

diff --git a/_docs/master/embedding/sdk/api/EditableDashboard.html b/_docs/master/embedding/sdk/api/EditableDashboard.html index bd76c55d96..43f5381000 100644 --- a/_docs/master/embedding/sdk/api/EditableDashboard.html +++ b/_docs/master/embedding/sdk/api/EditableDashboard.html @@ -20,7 +20,7 @@
  • the string ID found in the entity_id key of the dashboard object when using the API directly or using the SDK Collection Browser to return data
  • -
  • OptionaldataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    +
  • OptionaldataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

  • OptionaldrillThroughQuestionHeight?: Height<string | number>

    Height of a question component when drilled from the dashboard to a question level.

  • OptionaldrillThroughQuestionProps?: DrillThroughQuestionProps

    Props of a question component when drilled from the dashboard to a question level.

  • OptionalhiddenParameters?: string[]

    A list of parameters to hide. diff --git a/_docs/master/embedding/sdk/api/EditableDashboardProps.html b/_docs/master/embedding/sdk/api/EditableDashboardProps.html index 0b4a818e9c..624a16cef9 100644 --- a/_docs/master/embedding/sdk/api/EditableDashboardProps.html +++ b/_docs/master/embedding/sdk/api/EditableDashboardProps.html @@ -9,7 +9,7 @@ layout: docs-api --- -EditableDashboardProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Interface EditableDashboardProps

    interface EditableDashboardProps {
        className?: string;
        dashboardId: SdkDashboardId;
        dataPickerProps?: Pick<SdkQuestionProps, "entityTypes">;
        drillThroughQuestionHeight?: Height<string | number>;
        drillThroughQuestionProps?: DrillThroughQuestionProps;
        hiddenParameters?: string[];
        initialParameters?: ParameterValues;
        onLoad?: (dashboard: null | MetabaseDashboard) => void;
        onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void;
        plugins?: MetabasePluginsConfig;
        renderDrillThroughQuestion?: () => ReactNode;
        style?: CSSProperties;
        withCardTitle?: boolean;
        withDownloads?: boolean;
        withTitle?: boolean;
    }
    Index

    Properties

    className? +EditableDashboardProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Interface EditableDashboardProps

    interface EditableDashboardProps {
        className?: string;
        dashboardId: SdkDashboardId;
        dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">;
        drillThroughQuestionHeight?: Height<string | number>;
        drillThroughQuestionProps?: DrillThroughQuestionProps;
        hiddenParameters?: string[];
        initialParameters?: ParameterValues;
        onLoad?: (dashboard: null | MetabaseDashboard) => void;
        onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void;
        plugins?: MetabasePluginsConfig;
        renderDrillThroughQuestion?: () => ReactNode;
        style?: CSSProperties;
        withCardTitle?: boolean;
        withDownloads?: boolean;
        withTitle?: boolean;
    }
    Index
  • the string ID found in the entity_id key of the dashboard object when using the API directly or using the SDK Collection Browser to return data
  • -
    dataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    +
    dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    drillThroughQuestionHeight?: Height<string | number>

    Height of a question component when drilled from the dashboard to a question level.

    drillThroughQuestionProps?: DrillThroughQuestionProps

    Props of a question component when drilled from the dashboard to a question level.

    Type declaration

    Props for the drill-through question

    diff --git a/_docs/master/embedding/sdk/api/IconName.html b/_docs/master/embedding/sdk/api/IconName.html index dc5d728476..79e2c3249b 100644 --- a/_docs/master/embedding/sdk/api/IconName.html +++ b/_docs/master/embedding/sdk/api/IconName.html @@ -9,4 +9,4 @@ layout: docs-api --- -IconName | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Type Alias IconName

    IconName:
        | "string"
        | "number"
        | "function"
        | "model"
        | "table"
        | "question"
        | "collection"
        | "dashboard"
        | "revert"
        | "add"
        | "add_column"
        | "add_data"
        | "add_folder"
        | "add_row"
        | "add_to_dash"
        | "ai"
        | "alert"
        | "alert_filled"
        | "alert_confirm"
        | "archive"
        | "area"
        | "attachment"
        | "arrow_up"
        | "arrow_down"
        | "arrow_left"
        | "arrow_left_to_line"
        | "arrow_right"
        | "arrow_split"
        | "audit"
        | "badge"
        | "bar"
        | "bell"
        | "birthday"
        | "bookmark"
        | "bookmark_filled"
        | "bolt"
        | "bolt_filled"
        | "breakout"
        | "bubble"
        | "burger"
        | "calendar"
        | "check"
        | "check_filled"
        | "chevrondown"
        | "chevronleft"
        | "chevronright"
        | "chevronup"
        | "click"
        | "clipboard"
        | "clock"
        | "clone"
        | "close"
        | "cloud"
        | "cloud_filled"
        | "compare"
        | "combine"
        | "connections"
        | "contract"
        | "copy"
        | "curved"
        | "database"
        | "dash"
        | "curve"
        | "document"
        | "download"
        | "dyno"
        | "edit_document"
        | "ellipsis"
        | "embed"
        | "empty"
        | "enter_or_return"
        | "expand"
        | "expand_arrow"
        | "extract"
        | "eye"
        | "eye_crossed_out"
        | "eye_outline"
        | "field"
        | "fields"
        | "filter"
        | "filter_plus"
        | "bug"
        | "format_code"
        | "formula"
        | "funnel"
        | "funnel_outline"
        | "folder"
        | "folder_filled"
        | "gauge"
        | "gear"
        | "gear_settings_filled"
        | "gem"
        | "globe"
        | "grabber"
        | "grid"
        | "group"
        | "google"
        | "google_drive"
        | "google_sheet"
        | "history"
        | "home"
        | "horizontal_bar"
        | "hourglass"
        | "info"
        | "info_filled"
        | "info_outline"
        | "insight"
        | "int"
        | "io"
        | "join_full_outer"
        | "join_inner"
        | "join_left_outer"
        | "join_right_outer"
        | "index"
        | "key"
        | "label"
        | "ldap"
        | "learn"
        | "lightbulb"
        | "link"
        | "line"
        | "lines"
        | "lineandbar"
        | "line_style_dashed"
        | "line_style_dotted"
        | "line_style_solid"
        | "list"
        | "location"
        | "lock"
        | "lock_filled"
        | "mail"
        | "mail_filled"
        | "metabot"
        | "metabot_sad"
        | "metric"
        | "model_with_badge"
        | "moon"
        | "move"
        | "move_card"
        | "new_folder"
        | "notebook"
        | "palette"
        | "pause"
        | "pencil"
        | "pencil_lines"
        | "permissions_limited"
        | "person"
        | "pie"
        | "pin"
        | "pinmap"
        | "pivot_table"
        | "play"
        | "play_outlined"
        | "popover"
        | "popular"
        | "progress"
        | "pulse"
        | "recents"
        | "sankey"
        | "share"
        | "split"
        | "sql"
        | "subscription"
        | "straight"
        | "stepped"
        | "sort"
        | "sort_arrows"
        | "sum"
        | "sync"
        | "redo"
        | "return"
        | "reference"
        | "refresh"
        | "refresh_downstream"
        | "rocket"
        | "ruler"
        | "schema"
        | "search"
        | "section"
        | "segment"
        | "shield"
        | "sidebar_closed"
        | "sidebar_open"
        | "slack"
        | "slack_colorized"
        | "smartscalar"
        | "snail"
        | "snippet"
        | "sparkles"
        | "star_filled"
        | "star"
        | "stop"
        | "store"
        | "sun"
        | "t-shirt"
        | "tab"
        | "table2"
        | "time_history"
        | "trash"
        | "trash_filled"
        | "triangle_left"
        | "triangle_right"
        | "unarchive"
        | "undo"
        | "unknown"
        | "unpin"
        | "unsubscribe"
        | "upload"
        | "variable"
        | "verified"
        | "official_collection"
        | "verified_filled"
        | "view_archive"
        | "warning"
        | "warning_round_filled"
        | "warning_triangle_filled"
        | "waterfall"
        | "webhook"
        | "10k"
        | "1m"
        | "zoom_in"
        | "zoom_out"
        | "scalar"
        | "cake"
        | "external"
        | "table_spaced"
        | "beaker"
        | "eye_filled"

    +IconName | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Type Alias IconName

    IconName:
        | "string"
        | "number"
        | "function"
        | "model"
        | "table"
        | "question"
        | "collection"
        | "dashboard"
        | "add"
        | "add_column"
        | "add_data"
        | "add_folder"
        | "add_row"
        | "add_to_dash"
        | "ai"
        | "alert"
        | "alert_filled"
        | "alert_confirm"
        | "archive"
        | "area"
        | "attachment"
        | "arrow_up"
        | "arrow_down"
        | "arrow_left"
        | "arrow_left_to_line"
        | "arrow_right"
        | "arrow_split"
        | "audit"
        | "badge"
        | "bar"
        | "bell"
        | "birthday"
        | "bookmark"
        | "bookmark_filled"
        | "bolt"
        | "bolt_filled"
        | "breakout"
        | "bubble"
        | "burger"
        | "calendar"
        | "check"
        | "check_filled"
        | "chevrondown"
        | "chevronleft"
        | "chevronright"
        | "chevronup"
        | "click"
        | "clipboard"
        | "clock"
        | "clone"
        | "close"
        | "cloud"
        | "cloud_filled"
        | "compare"
        | "combine"
        | "connections"
        | "contract"
        | "copy"
        | "curved"
        | "database"
        | "dash"
        | "curve"
        | "document"
        | "download"
        | "dyno"
        | "edit_document"
        | "ellipsis"
        | "embed"
        | "empty"
        | "enter_or_return"
        | "expand"
        | "expand_arrow"
        | "extract"
        | "eye"
        | "eye_crossed_out"
        | "eye_outline"
        | "field"
        | "fields"
        | "filter"
        | "filter_plus"
        | "bug"
        | "format_code"
        | "formula"
        | "funnel"
        | "funnel_outline"
        | "folder"
        | "folder_filled"
        | "gauge"
        | "gear"
        | "gear_settings_filled"
        | "gem"
        | "globe"
        | "grabber"
        | "grid"
        | "group"
        | "google"
        | "google_drive"
        | "google_sheet"
        | "history"
        | "home"
        | "horizontal_bar"
        | "hourglass"
        | "info"
        | "info_filled"
        | "info_outline"
        | "insight"
        | "int"
        | "io"
        | "join_full_outer"
        | "join_inner"
        | "join_left_outer"
        | "join_right_outer"
        | "index"
        | "key"
        | "label"
        | "ldap"
        | "learn"
        | "lightbulb"
        | "link"
        | "line"
        | "lines"
        | "lineandbar"
        | "line_style_dashed"
        | "line_style_dotted"
        | "line_style_solid"
        | "list"
        | "location"
        | "lock"
        | "lock_filled"
        | "mail"
        | "mail_filled"
        | "metabot"
        | "metabot_sad"
        | "metric"
        | "model_with_badge"
        | "moon"
        | "move"
        | "move_card"
        | "new_folder"
        | "notebook"
        | "palette"
        | "pause"
        | "pencil"
        | "pencil_lines"
        | "permissions_limited"
        | "person"
        | "pie"
        | "pin"
        | "pinmap"
        | "pivot_table"
        | "play"
        | "play_outlined"
        | "popover"
        | "popular"
        | "progress"
        | "pulse"
        | "recents"
        | "revert"
        | "sankey"
        | "share"
        | "split"
        | "sql"
        | "subscription"
        | "straight"
        | "stepped"
        | "sort"
        | "sort_arrows"
        | "sum"
        | "sync"
        | "redo"
        | "return"
        | "reference"
        | "refresh"
        | "refresh_downstream"
        | "rocket"
        | "ruler"
        | "schema"
        | "search"
        | "section"
        | "segment"
        | "shield"
        | "sidebar_closed"
        | "sidebar_open"
        | "slack"
        | "slack_colorized"
        | "smartscalar"
        | "snail"
        | "snippet"
        | "sparkles"
        | "star_filled"
        | "star"
        | "stop"
        | "store"
        | "sun"
        | "t-shirt"
        | "tab"
        | "table2"
        | "time_history"
        | "trash"
        | "trash_filled"
        | "triangle_left"
        | "triangle_right"
        | "unarchive"
        | "undo"
        | "unknown"
        | "unpin"
        | "unsubscribe"
        | "upload"
        | "variable"
        | "verified"
        | "official_collection"
        | "verified_filled"
        | "view_archive"
        | "warning"
        | "warning_round_filled"
        | "warning_triangle_filled"
        | "waterfall"
        | "webhook"
        | "10k"
        | "1m"
        | "zoom_in"
        | "zoom_out"
        | "scalar"
        | "cake"
        | "external"
        | "table_spaced"
        | "beaker"
        | "eye_filled"

    diff --git a/_docs/master/embedding/sdk/api/InteractiveDashboard.html b/_docs/master/embedding/sdk/api/InteractiveDashboard.html index fe6812fef0..41e5061096 100644 --- a/_docs/master/embedding/sdk/api/InteractiveDashboard.html +++ b/_docs/master/embedding/sdk/api/InteractiveDashboard.html @@ -9,8 +9,8 @@ layout: docs-api --- -InteractiveDashboard | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Function InteractiveDashboard

    dataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    +
    dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    drillThroughQuestionHeight?: Height<string | number>

    Height of a question component when drilled from the dashboard to a question level.

    drillThroughQuestionProps?: DrillThroughQuestionProps

    Props of a question component when drilled from the dashboard to a question level.

    Type declaration

    Props for the drill-through question

    diff --git a/_docs/master/embedding/sdk/api/InteractiveQuestion.html b/_docs/master/embedding/sdk/api/InteractiveQuestion.html index ab2a372d39..dc7989bff8 100644 --- a/_docs/master/embedding/sdk/api/InteractiveQuestion.html +++ b/_docs/master/embedding/sdk/api/InteractiveQuestion.html @@ -9,25 +9,35 @@ layout: docs-api --- -InteractiveQuestion | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Function InteractiveQuestion

    • A question component with drill-downs enabled.

      -

      Parameters

      • props: InteractiveQuestionProps
        • OptionalclassName?: string

          A custom class name to be added to the root element.

          -
        • OptionalcomponentPlugins?: MetabasePluginsConfig

          Additional mapper function to override or add drill-down menu

          +InteractiveQuestion | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

          Function InteractiveQuestion

          • A component that renders an interactive question.

            +

            Parameters

            • props: InteractiveQuestionProps
              • Optionalchildren?: ReactNode

                The children of the MetabaseProvider component.s

                +
              • OptionalclassName?: string

                A custom class name to be added to the root element.

              • OptionalentityTypes?: EmbeddingEntityType[]

                An array that specifies which entity types are available in the data picker

              • Optionalheight?: Height<string | number>

                A number or string specifying a CSS size value that specifies the height of the component

              • OptionalinitialSqlParameters?: SqlParameterValues

                Initial values for the SQL parameters.

              • OptionalisSaveEnabled?: boolean

                Whether to show the save button.

              • OptionalonBeforeSave?: (
                    question: undefined | MetabaseQuestion,
                    context: { isNewQuestion: boolean },
                ) => Promise<void>

                A callback function that triggers before saving. Only relevant when isSaveEnabled = true

                -
              • OptionalonNavigateBack?: () => void

                A callback function that triggers when a user clicks the back button.

              • OptionalonRun?: (question: undefined | MetabaseQuestion) => void

                A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

              • OptionalonSave?: (
                    question: MetabaseQuestion,
                    context: { dashboardTabId?: number; isNewQuestion: boolean },
                ) => void

                A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

                -
              • Optionalplugins?: MetabasePluginsConfig
              • questionId: null | SdkQuestionId
              • Optionalstyle?: CSSProperties

                A custom style object to be added to the root element.

                +
              • Optionalplugins?: MetabasePluginsConfig
              • questionId: null | SdkQuestionId

                The ID of the question. +
                +This is either: +

                +
                  +
                • The numerical ID when accessing a question link, e.g., http://localhost:3000/question/1-my-question where the ID is 1 +
                • +
                • The entity_id key of the question object. You can find a question's Entity ID in the info panel when viewing a question +
                • +
                • new to show the notebook editor for creating new questions. isSaveEnabled must be true to allow saving the question
                • +
                +
              • Optionalstyle?: CSSProperties

                A custom style object to be added to the root element.

              • OptionaltargetCollection?: SdkCollectionId

                The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

              • Optionaltitle?: SdkQuestionTitleProps

                Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

              • Optionalwidth?: Width<string | number>

                A number or string specifying a CSS size value that specifies the width of the component

              • OptionalwithChartTypeSelector?: boolean

                Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

              • OptionalwithDownloads?: boolean

                Enables the ability to download results in the interactive question.

              • OptionalwithResetButton?: boolean

                Determines whether a reset button is displayed. Only relevant when using the default layout.

                -

            Returns Element

          Index

          InteractiveQuestion

      Returns null | Element

    Index

    InteractiveQuestion

    Parameters

    Returns Element

    SaveQuestionForm: (
        props: InteractiveQuestionSaveQuestionFormProps,
    ) => null | Element

    Type declaration

    diff --git a/_docs/master/embedding/sdk/api/SdkQuestionProps.html b/_docs/master/embedding/sdk/api/SdkQuestionProps.html deleted file mode 100644 index 80d8e43f09..0000000000 --- a/_docs/master/embedding/sdk/api/SdkQuestionProps.html +++ /dev/null @@ -1,48 +0,0 @@ ---- -version: master -has_magic_breadcrumbs: true -show_category_breadcrumb: true -show_title_breadcrumb: true -category: Embedding -title: SdkQuestionProps -source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/SdkQuestionProps.html' -layout: docs-api ---- - -SdkQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Interface SdkQuestionProps

    interface SdkQuestionProps {
        className?: string;
        componentPlugins?: MetabasePluginsConfig;
        entityTypes?: EmbeddingEntityType[];
        height?: Height<string | number>;
        initialSqlParameters?: SqlParameterValues;
        isSaveEnabled?: boolean;
        onBeforeSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => Promise<void>;
        onNavigateBack?: () => void;
        onRun?: (question: undefined | MetabaseQuestion) => void;
        onSave?: (
            question: MetabaseQuestion,
            context: { dashboardTabId?: number; isNewQuestion: boolean },
        ) => void;
        plugins?: MetabasePluginsConfig;
        questionId: null | SdkQuestionId;
        style?: CSSProperties;
        targetCollection?: SdkCollectionId;
        title?: SdkQuestionTitleProps;
        width?: Width<string | number>;
        withChartTypeSelector?: boolean;
        withDownloads?: boolean;
        withResetButton?: boolean;
    }
    Index

    Properties

    className?: string

    A custom class name to be added to the root element.

    -
    componentPlugins?: MetabasePluginsConfig

    Additional mapper function to override or add drill-down menu

    -
    entityTypes?: EmbeddingEntityType[]

    An array that specifies which entity types are available in the data picker

    -
    height?: Height<string | number>

    A number or string specifying a CSS size value that specifies the height of the component

    -
    initialSqlParameters?: SqlParameterValues

    Initial values for the SQL parameters.

    -
    isSaveEnabled?: boolean

    Whether to show the save button.

    -
    onBeforeSave?: (
        question: undefined | MetabaseQuestion,
        context: { isNewQuestion: boolean },
    ) => Promise<void>

    A callback function that triggers before saving. Only relevant when isSaveEnabled = true

    -
    onNavigateBack?: () => void

    A callback function that triggers when a user clicks the back button.

    -
    onRun?: (question: undefined | MetabaseQuestion) => void

    A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

    -
    onSave?: (
        question: MetabaseQuestion,
        context: { dashboardTabId?: number; isNewQuestion: boolean },
    ) => void

    A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

    -
    questionId: null | SdkQuestionId

    A custom style object to be added to the root element.

    -
    targetCollection?: SdkCollectionId

    The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

    -

    Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

    -
    width?: Width<string | number>

    A number or string specifying a CSS size value that specifies the width of the component

    -
    withChartTypeSelector?: boolean

    Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

    -
    withDownloads?: boolean

    Enables the ability to download results in the interactive question.

    -
    withResetButton?: boolean

    Determines whether a reset button is displayed. Only relevant when using the default layout.

    -

    diff --git a/_docs/master/embedding/sdk/api/StaticDashboard.html b/_docs/master/embedding/sdk/api/StaticDashboard.html index 2345fa0fb4..137b9f13ef 100644 --- a/_docs/master/embedding/sdk/api/StaticDashboard.html +++ b/_docs/master/embedding/sdk/api/StaticDashboard.html @@ -9,8 +9,8 @@ layout: docs-api --- -StaticDashboard | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Function StaticDashboard

    dataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    +
    dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    drillThroughQuestionHeight?: Height<string | number>

    Height of a question component when drilled from the dashboard to a question level.

    drillThroughQuestionProps?: DrillThroughQuestionProps

    Props of a question component when drilled from the dashboard to a question level.

    Type declaration

    Props for the drill-through question

    diff --git a/_docs/master/embedding/sdk/api/StaticQuestion.html b/_docs/master/embedding/sdk/api/StaticQuestion.html index f4273c357c..51f2d9ff73 100644 --- a/_docs/master/embedding/sdk/api/StaticQuestion.html +++ b/_docs/master/embedding/sdk/api/StaticQuestion.html @@ -9,61 +9,22 @@ layout: docs-api --- -StaticQuestion | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Function StaticQuestion

    diff --git a/_docs/master/embedding/sdk/api/StaticQuestionProps.html b/_docs/master/embedding/sdk/api/StaticQuestionProps.html index 726ffb163d..0ddc7ab72b 100644 --- a/_docs/master/embedding/sdk/api/StaticQuestionProps.html +++ b/_docs/master/embedding/sdk/api/StaticQuestionProps.html @@ -9,21 +9,29 @@ layout: docs-api --- -StaticQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Interface StaticQuestionProps

    interface StaticQuestionProps {
        className?: string;
        height?: Height<string | number>;
        initialSqlParameters?: SqlParameterValues;
        questionId: null | SdkQuestionId;
        style?: CSSProperties;
        title?: SdkQuestionTitleProps;
        width?: Width<string | number>;
        withChartTypeSelector?: boolean;
        withDownloads?: boolean;
    }
    Index

    Properties

    className? +StaticQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Interface StaticQuestionProps

    interface StaticQuestionProps {
        className?: string;
        height?: Height<string | number>;
        initialSqlParameters?: SqlParameterValues;
        questionId: null | SdkQuestionId;
        style?: CSSProperties;
        width?: Width<string | number>;
        withChartTypeSelector?: boolean;
        withDownloads?: boolean;
    }
    Index

    Properties

    className?: string

    A custom class name to be added to the root element.

    height?: Height<string | number>

    A number or string specifying a CSS size value that specifies the height of the component

    initialSqlParameters?: SqlParameterValues

    Initial values for the SQL parameters.

    -
    questionId: null | SdkQuestionId

    A custom style object to be added to the root element.

    -

    Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

    +
    questionId: null | SdkQuestionId

    The ID of the question. +
    +This is either: +

    +
      +
    • The numerical ID when accessing a question link, e.g., http://localhost:3000/question/1-my-question where the ID is 1 +
    • +
    • The entity_id key of the question object. You can find a question's Entity ID in the info panel when viewing a question +
    • +
    • new to show the notebook editor for creating new questions. isSaveEnabled must be true to allow saving the question
    • +
    +

    A custom style object to be added to the root element.

    width?: Width<string | number>

    A number or string specifying a CSS size value that specifies the width of the component

    -
    withChartTypeSelector?: boolean

    Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

    -
    withDownloads?: boolean

    Enables the ability to download results in the interactive question.

    -

    +
    withChartTypeSelector?: boolean
    withDownloads?: boolean

    Enables the ability to download results in the interactive question.

    +

    diff --git a/_docs/master/embedding/sdk/api/assets/navigation.js b/_docs/master/embedding/sdk/api/assets/navigation.js index f695acbc75..ba4359a8d1 100644 --- a/_docs/master/embedding/sdk/api/assets/navigation.js +++ b/_docs/master/embedding/sdk/api/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "eJylWV1z0zgU/S9+7uywzAKzfWvTZKCU3W5T4IHhQbEusTayZKTrhsLw3xknTSLLVx82T+3onHuOdHWtr3z6USB8w+K8mGkpoUSh1aXRWwumOCvKSkhuQBXnn6K8hmFFQX9UWMvirNgIxYvzl3/9PAvL3Brd2IjWDu8LPn/x8udnV9MAQ7hitlppZvg7zZkMjYKmHswJNDKW1oIXcdGIkxoJx1JDuPvZCVGGCQrqfmCyhbDmHs5J+H8t2G6ioql2SD2/Q7ufj7OilMza4rzg0BgoGQIvgtZkenpgfCDHUQfGMOcC2UqCy3vyGkCRmX2jEAwrUTxQShQaEVsiQ1ESOh4QkRj03csjjcdqjBqDJxqkxHS9MXmSFBqfcKcTifKlmcOxhArZrTIjpLyvjG7XVaByg5TMpB9iupnT5rJFHFjksCe55fpMcUhrT1E9/F0ColBre2V0w/U2wy0aObEXH4RtmRTfWd6Aw2Ej/e/AAuaWik8e6bVkp/8X2tRpQzJipOu9QAlpqxMtuhTxTaAqfWRkLy9ZucmdBo/rOT37+9WfL54n3AywjW4xv+bJiAnOs4oZvH9sIN+aDvkd7yV0x8ucRYsOmeB9pbdKasY/Cr6GEXmPxP12L8a6T3VdCIlg8sdM8Ce75rpNdfH3gvG7x1Tnbm3MXTE87hS3tq6ZEd9HfLd0CO3tHs/eAbIVs91i/CB48C7K4YtQcCBftFjNtPoi1qc+hRiRUxrh/STmIyNEvFSRcGy7iI0xNbrh5A4jPgqsLhrxFh5juifWNIfrLabkr7c4TXvJapkS7zjp4tvfJhLXggGpdxXJuAz0ieSFZsQFVmMV/EoumYXwoYVCcypxpqU2REnv23MUhsnzkRyV+wpqGErsmmPx5Lo5YoHcHQt2g3XeHY5tyWj/eetG2C6yrVXsEcxhJR1ai7o+3oln3TMRqPYNQu0YhEkp/V7QXmeoHyGN0u+CAqodNFpr35W5hBoURoR7vBwXOs0+klKa1yvgXKj1XKHAx+7w6TzKDMGk3pG5P+m8hUf3lYdAk8eDUqt/mPvhHVpSkTd6LVS3vrVOF5zG3NV/JkW5uSjpBcQBJ+jdynYtlA3tsyFmttPxqyZXzydsvFq/5mg8X7VutAKFgeW1j+eqEo+VA2i0VmK2aF6+C7JbLRT+u/ofSuL04hFydY8f8RKs7Z4e9AaIciBpuR4LwLK6g6/dZroLXBAOBClbXytcsFpI4sx4wnLVEtM4afbeW+r4/n7wy9RQ4ZYZVgOC8X8l8YCUzpJvnA/QfaTvAxk6x0L2ZJz2MSo3mvH5Q2/7I+EMzf0G4nXr0JgTb4w2xxWlr9KDRmsNH+gIPEe1y8RrprgEMyhRGs9QPRxzvcydmkdoUE+cJJyh2X0gXp/2TcnYrzL44QyxlFrn2b1zguLXW7wD22hlnb2IxkP3u8+/ALqey/Q=" \ No newline at end of file +window.navigationData = "eJylWU1z2zYQ/S88ezpppkmmvtmyPI3jtK7lJIeMDxC5EVGBAAMsrTod//cMzZIigcUH6ZNm8N6+t1h8U1//yxD+xew0WykhIEeu5LlWBwM6O8nykotCg8xOvwZ5NcOSgn4psRLZSbbnsshO3/72dOKXudGqNgGtZ3wq+PrN26f7saYGhnDBTLlVTBcfVcGErxc0tTcn0FBfCLrdHR/F7ZFX9zMTDfg1Ozik1xiwYs5qftQjYafbbsH/bsC0AxUs9Yg0Sb9vt31OslwwY7LTrIBaQ84QisxrTVZ7AoZnztBjTx/WBUe2FTDm/e/lQIGJ4nCtvGk8NKTvJYJmOfIHKjcKDaRH0a0MvZRQkhtkyHMiPwsIpGYxrawoNDzgo35Epu+F5kLclVo1u9Iz3byUxJFz1wYBpo1bzz5n+f68QXRyjXOtpF/9/u7XN68jbhrYXjV4oVVdqEOKJxWxwHlVMo13jzWkW9MhL/HeQHtUKfsISw5Z4H2hDlIoVnzhxQ5m1D0Q9+Is5rovdW13SaVTZ7fDnrkou/hUnyUOl1wg6PQxJPgLqtippLotdYnrL6lY/7sBRC53Jr12wcgXZjHffWlV+9/P3DRM8B8srdT+sJk9vwUDmLoAbfJMrw17gFQri7ugsq3CMPOVrtI8nYi5fWyqimn+Y8YpRocs6PEdRwFxvyMtfLH6CMi2zLTUB154X5EFfOMSevJZg+VKyW98d8zBxwjcg0JyMSG3Vm7EF47lWc0/wGNI98ha5nB1wJj81QGXaW9YJWLiLSdVfTTKlmaPJAxXT7UmIQmHJ1/3Dohc6B3S5BGRcN2eEsmnyIynp8LSu0rOmYH4oRpihTYicledsX0+X2ZXSqjxJ6ChLRptf+C55qaNbCoZ+gw0YkUdGoOqGl6Fq/a7C8jmPUI1MvCTYvqToE7H1Q+QZum3QR7VFpqt1aWyFlCBxIDwhJfiQpfZRmJK62oLRcHlbi2R42P7ZBp9JnHBqN7A7O6zH+Bx/N2FQKNHaa7kn6wapdW3xCKv1Y7Ldp9oRimMGlM335Xg+f4sn+5iBLhA70Y0Oy6N7xD1MZOdhlVNaA/YfLXpnKPxGapKE8dR1x7aV4/MqlYSJN6VMJ4nNJ6aF/EZzYFma0XGm+aluyC7UVziX9t/ICcuNxYhVXfYBjZgTHtFVXsgJhRJS/W4BMzLW/jenqnPgZeEA0FK1lcSL1nFBXGlPGLJ17HwMC4aPfeiZCMpa8GzBKiZT8Z/MtQl85PzH5PbjxumWQUI2v77xAJiOptiP9pIxh+xp0CCzrCcLJlR+xyVa8WK9cPkGCfhBM3uILTS6htT4rVWetjXpioTaLaWfc0m8RTVthJ/MFkI0M5CofEE1X4pWJU7Ns/QoB7kJJyg2S4QK6euKRr7XXgXjovF1FrP9l8GkMXVAW/B1Eqa0XZA47Tq/dP9Ty1Guno=" \ No newline at end of file diff --git a/_docs/master/embedding/sdk/api/assets/search.js b/_docs/master/embedding/sdk/api/assets/search.js index 57a2948c77..a91212dd5e 100644 --- a/_docs/master/embedding/sdk/api/assets/search.js +++ b/_docs/master/embedding/sdk/api/assets/search.js @@ -1 +1 @@ -window.searchData = "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"; \ No newline at end of file +window.searchData = "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"; \ No newline at end of file diff --git a/_docs/master/embedding/sdk/api/index.html b/_docs/master/embedding/sdk/api/index.html index 8aa00975b8..4cb4c9246d 100644 --- a/_docs/master/embedding/sdk/api/index.html +++ b/_docs/master/embedding/sdk/api/index.html @@ -9,4 +9,4 @@ layout: docs-api --- -Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Embedded analytics SDK API

    CollectionBrowser

    CollectionBrowser
    CollectionBrowserProps

    CreateDashboardModal

    CreateDashboardModal
    useCreateDashboardApi
    CreateDashboardModalProps
    CreateDashboardValues

    CreateQuestion

    CreateQuestion
    CreateQuestionProps

    Dashboard

    EditableDashboard
    InteractiveDashboard
    StaticDashboard
    EditableDashboardProps
    InteractiveDashboardProps
    StaticDashboardProps

    InteractiveQuestion

    InteractiveQuestion
    DrillThroughQuestionProps
    InteractiveQuestionEditorButtonProps
    InteractiveQuestionEditorProps
    InteractiveQuestionProps
    InteractiveQuestionQuestionSettingsDropdownProps
    InteractiveQuestionQuestionVisualizationProps
    InteractiveQuestionResetButtonProps
    InteractiveQuestionSaveQuestionFormProps
    InteractiveQuestionTitleProps
    SdkQuestionProps
    InteractiveQuestionBackButtonProps
    InteractiveQuestionBreakoutDropdownProps
    InteractiveQuestionChartTypeDropdownProps
    InteractiveQuestionChartTypeSelectorProps
    InteractiveQuestionDownloadWidgetDropdownProps
    InteractiveQuestionDownloadWidgetProps
    InteractiveQuestionFilterDropdownProps
    InteractiveQuestionFilterProps
    InteractiveQuestionQuestionSettingsProps
    InteractiveQuestionSaveButtonProps
    InteractiveQuestionSummarizeDropdownProps

    MetabaseProvider

    defineMetabaseAuthConfig
    MetabaseProvider
    MetabaseProviderProps
    MetabaseAuthConfig
    MetabaseAuthConfigWithApiKey
    MetabaseAuthConfigWithJwt
    MetabaseAuthConfigWithSaml

    StaticQuestion

    StaticQuestion
    StaticQuestionProps

    other

    BaseSdkQuestionProps
    MetabaseColors
    MetabaseQuestion
    MetabaseTheme
    ButtonProps
    ChartColor
    CollectionBrowserListColumns
    CustomDashboardCardMenuItem
    DashboardCardCustomMenuItem
    DashboardCardMenu
    DashboardCardMenuCustomElement
    DashCardMenuItem
    EmbeddingEntityType
    EntityTypeFilterKeys
    IconName
    LoginStatus
    MetabaseClickAction
    MetabaseClickActionPluginsConfig
    MetabaseCollection
    MetabaseCollectionItem
    MetabaseComponentTheme
    MetabaseDashboard
    MetabaseDashboardPluginsConfig
    MetabaseDataPointObject
    MetabaseEmbeddingSessionToken
    MetabaseFetchRequestTokenFn
    MetabaseFontFamily
    MetabasePluginsConfig
    MetabaseUser
    ParameterValues
    SdkCollectionId
    SdkDashboardId
    SdkDashboardLoadEvent
    SdkEntityId
    SdkErrorComponent
    SdkErrorComponentProps
    SdkEventHandlersConfig
    SdkQuestionId
    SdkQuestionTitleProps
    SdkUserId
    SqlParameterValues
    UserBackendJwtResponse

    +Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Embedded analytics SDK API

    CollectionBrowser

    CollectionBrowser
    CollectionBrowserProps

    CreateDashboardModal

    CreateDashboardModal
    CreateDashboardModalProps
    CreateDashboardValues
    useCreateDashboardApi

    CreateQuestion

    CreateQuestion
    CreateQuestionProps

    Dashboard

    EditableDashboard
    EditableDashboardProps
    InteractiveDashboard
    InteractiveDashboardProps
    StaticDashboard
    StaticDashboardProps

    InteractiveQuestion

    DrillThroughQuestionProps
    InteractiveQuestion
    InteractiveQuestionBackButtonProps
    InteractiveQuestionBreakoutDropdownProps
    InteractiveQuestionChartTypeDropdownProps
    InteractiveQuestionChartTypeSelectorProps
    InteractiveQuestionDownloadWidgetDropdownProps
    InteractiveQuestionDownloadWidgetProps
    InteractiveQuestionEditorButtonProps
    InteractiveQuestionEditorProps
    InteractiveQuestionFilterDropdownProps
    InteractiveQuestionFilterProps
    InteractiveQuestionProps
    InteractiveQuestionQuestionSettingsDropdownProps
    InteractiveQuestionQuestionSettingsProps
    InteractiveQuestionQuestionVisualizationProps
    InteractiveQuestionResetButtonProps
    InteractiveQuestionSaveButtonProps
    InteractiveQuestionSaveQuestionFormProps
    InteractiveQuestionSummarizeDropdownProps
    InteractiveQuestionTitleProps

    MetabaseProvider

    defineMetabaseAuthConfig
    MetabaseAuthConfig
    MetabaseAuthConfigWithApiKey
    MetabaseAuthConfigWithJwt
    MetabaseAuthConfigWithSaml
    MetabaseProvider
    MetabaseProviderProps

    StaticQuestion

    StaticQuestion
    StaticQuestionProps

    other

    BaseInteractiveQuestionProps
    ButtonProps
    ChartColor
    CollectionBrowserListColumns
    CustomDashboardCardMenuItem
    DashboardCardCustomMenuItem
    DashboardCardMenu
    DashboardCardMenuCustomElement
    DashCardMenuItem
    EmbeddingEntityType
    EntityTypeFilterKeys
    IconName
    LoginStatus
    MetabaseClickAction
    MetabaseClickActionPluginsConfig
    MetabaseCollection
    MetabaseCollectionItem
    MetabaseColors
    MetabaseComponentTheme
    MetabaseDashboard
    MetabaseDashboardPluginsConfig
    MetabaseDataPointObject
    MetabaseEmbeddingSessionToken
    MetabaseFetchRequestTokenFn
    MetabaseFontFamily
    MetabasePluginsConfig
    MetabaseQuestion
    MetabaseTheme
    MetabaseUser
    ParameterValues
    SdkCollectionId
    SdkDashboardId
    SdkDashboardLoadEvent
    SdkEntityId
    SdkErrorComponent
    SdkErrorComponentProps
    SdkEventHandlersConfig
    SdkQuestionId
    SdkQuestionTitleProps
    SdkUserId
    SqlParameterValues
    UserBackendJwtResponse

    diff --git a/_docs/master/embedding/sdk/api/snippets/BaseSdkQuestionProps.md b/_docs/master/embedding/sdk/api/snippets/BaseInteractiveQuestionProps.md similarity index 99% rename from _docs/master/embedding/sdk/api/snippets/BaseSdkQuestionProps.md rename to _docs/master/embedding/sdk/api/snippets/BaseInteractiveQuestionProps.md index 1550e682b6..c3205ce9c4 100644 --- a/_docs/master/embedding/sdk/api/snippets/BaseSdkQuestionProps.md +++ b/_docs/master/embedding/sdk/api/snippets/BaseInteractiveQuestionProps.md @@ -4,8 +4,8 @@ has_magic_breadcrumbs: true show_category_breadcrumb: true show_title_breadcrumb: true category: Embedding -title: BaseSdkQuestionProps -source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/snippets/BaseSdkQuestionProps.md' +title: BaseInteractiveQuestionProps +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/snippets/BaseInteractiveQuestionProps.md' layout: new-docs --- diff --git a/_docs/master/embedding/sdk/api/snippets/CreateQuestionProps.md b/_docs/master/embedding/sdk/api/snippets/CreateQuestionProps.md index ac2e474cee..a5ea63f17b 100644 --- a/_docs/master/embedding/sdk/api/snippets/CreateQuestionProps.md +++ b/_docs/master/embedding/sdk/api/snippets/CreateQuestionProps.md @@ -15,25 +15,16 @@ layout: new-docs -| Property | Type | Description | -| :---------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `className?` | `string` | A custom class name to be added to the root element. | -| `componentPlugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu | -| `entityTypes?` | [`EmbeddingEntityType`](./api/EmbeddingEntityType)[] | An array that specifies which entity types are available in the data picker | -| `height?` | `Height`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the height of the component | -| `initialSqlParameters?` | [`SqlParameterValues`](./api/SqlParameterValues) | Initial values for the SQL parameters. | -| `isSaveEnabled?` | `boolean` | Whether to show the save button. | -| `onBeforeSave?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `isNewQuestion`: `boolean`; \}) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`\> | A callback function that triggers before saving. Only relevant when `isSaveEnabled = true` | -| `onNavigateBack?` | () => `void` | A callback function that triggers when a user clicks the back button. | -| `onRun?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion)) => `void` | A callback function that triggers when a question is updated, including when a user clicks the `Visualize` button in the question editor | -| `onSave?` | (`question`: [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `dashboardTabId?`: `number`; `isNewQuestion`: `boolean`; \}) => `void` | A callback function that triggers when a user saves the question. Only relevant when `isSaveEnabled = true` | -| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | - | -| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | -| `targetCollection?` | [`SdkCollectionId`](./api/SdkCollectionId) | The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions. | -| `title?` | [`SdkQuestionTitleProps`](./api/SdkQuestionTitleProps) | Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout. | -| `width?` | `Width`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the width of the component | -| `withChartTypeSelector?` | `boolean` | Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout. | -| `withDownloads?` | `boolean` | Enables the ability to download results in the interactive question. | -| `withResetButton?` | `boolean` | Determines whether a reset button is displayed. Only relevant when using the default layout. | +| Property | Type | Description | +| :-------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------ | +| `entityTypes?` | [`EmbeddingEntityType`](./api/EmbeddingEntityType)[] | An array that specifies which entity types are available in the data picker | +| `initialSqlParameters?` | [`SqlParameterValues`](./api/SqlParameterValues) | Initial values for the SQL parameters. | +| `isSaveEnabled?` | `boolean` | Whether to show the save button. | +| `onBeforeSave?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `isNewQuestion`: `boolean`; \}) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`\> | A callback function that triggers before saving. Only relevant when `isSaveEnabled = true` | +| `onRun?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion)) => `void` | A callback function that triggers when a question is updated, including when a user clicks the `Visualize` button in the question editor | +| `onSave?` | (`question`: [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `dashboardTabId?`: `number`; `isNewQuestion`: `boolean`; \}) => `void` | A callback function that triggers when a user saves the question. Only relevant when `isSaveEnabled = true` | +| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | - | +| `targetCollection?` | [`SdkCollectionId`](./api/SdkCollectionId) | The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions. | +| `withDownloads?` | `boolean` | Enables the ability to download results in the interactive question. | diff --git a/_docs/master/embedding/sdk/api/snippets/EditableDashboardProps.md b/_docs/master/embedding/sdk/api/snippets/EditableDashboardProps.md index 37062a3333..69186d18d2 100644 --- a/_docs/master/embedding/sdk/api/snippets/EditableDashboardProps.md +++ b/_docs/master/embedding/sdk/api/snippets/EditableDashboardProps.md @@ -15,22 +15,22 @@ layout: new-docs -| Property | Type | Description | -| :-------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `className?` | `string` | A custom class name to be added to the root element. | -| `dashboardId` | [`SdkDashboardId`](./api/SdkDashboardId) | The ID of the dashboard.
    This is either:
    - the numerical ID when accessing a dashboard link, i.e. `http://localhost:3000/dashboard/1-my-dashboard` where the ID is `1`
    - the string ID found in the `entity_id` key of the dashboard object when using the API directly or using the SDK Collection Browser to return data | -| `dataPickerProps?` | [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`SdkQuestionProps`](./api/SdkQuestionProps), `"entityTypes"`\> | Additional props to pass to the query builder rendered by `InteractiveQuestion` when creating a new dashboard question. | -| `drillThroughQuestionHeight?` | `Height`\<`string` \| `number`\> | Height of a question component when drilled from the dashboard to a question level. | -| `drillThroughQuestionProps?` | [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps) | Props of a question component when drilled from the dashboard to a question level. | -| `hiddenParameters?` | `string`[] | A list of [parameters to hide](/docs/master/embedding/public-links#appearance-parameters).
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | -| `initialParameters?` | [`ParameterValues`](./api/ParameterValues) | Query parameters for the dashboard. For a single option, use a `string` value, and use a list of strings for multiple options.
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | -| `onLoad?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded. | -| `onLoadWithoutCards?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded without cards. | -| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details. | -| `renderDrillThroughQuestion?` | () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | A custom React component to render the question layout. Use namespaced InteractiveQuestion components to build the layout. | -| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | -| `withCardTitle?` | `boolean` | Whether the dashboard cards should display a title. | -| `withDownloads?` | `boolean` | Whether to hide the download button. | -| `withTitle?` | `boolean` | Whether the dashboard should display a title. | +| Property | Type | Description | +| :-------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `className?` | `string` | A custom class name to be added to the root element. | +| `dashboardId` | [`SdkDashboardId`](./api/SdkDashboardId) | The ID of the dashboard.
    This is either:
    - the numerical ID when accessing a dashboard link, i.e. `http://localhost:3000/dashboard/1-my-dashboard` where the ID is `1`
    - the string ID found in the `entity_id` key of the dashboard object when using the API directly or using the SDK Collection Browser to return data | +| `dataPickerProps?` | [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`InteractiveQuestionProps`](./api/InteractiveQuestionProps), `"entityTypes"`\> | Additional props to pass to the query builder rendered by `InteractiveQuestion` when creating a new dashboard question. | +| `drillThroughQuestionHeight?` | `Height`\<`string` \| `number`\> | Height of a question component when drilled from the dashboard to a question level. | +| `drillThroughQuestionProps?` | [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps) | Props of a question component when drilled from the dashboard to a question level. | +| `hiddenParameters?` | `string`[] | A list of [parameters to hide](/docs/master/embedding/public-links#appearance-parameters).
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | +| `initialParameters?` | [`ParameterValues`](./api/ParameterValues) | Query parameters for the dashboard. For a single option, use a `string` value, and use a list of strings for multiple options.
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | +| `onLoad?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded. | +| `onLoadWithoutCards?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded without cards. | +| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details. | +| `renderDrillThroughQuestion?` | () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | A custom React component to render the question layout. Use namespaced InteractiveQuestion components to build the layout. | +| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | +| `withCardTitle?` | `boolean` | Whether the dashboard cards should display a title. | +| `withDownloads?` | `boolean` | Whether to hide the download button. | +| `withTitle?` | `boolean` | Whether the dashboard should display a title. | diff --git a/_docs/master/embedding/sdk/api/snippets/IconName.md b/_docs/master/embedding/sdk/api/snippets/IconName.md index 61158e48be..b39c97dd64 100644 --- a/_docs/master/embedding/sdk/api/snippets/IconName.md +++ b/_docs/master/embedding/sdk/api/snippets/IconName.md @@ -19,7 +19,6 @@ type IconName = | "question" | "collection" | "dashboard" - | "revert" | "add" | "add_column" | "add_data" @@ -169,6 +168,7 @@ type IconName = | "progress" | "pulse" | "recents" + | "revert" | "sankey" | "share" | "split" diff --git a/_docs/master/embedding/sdk/api/snippets/InteractiveDashboard.md b/_docs/master/embedding/sdk/api/snippets/InteractiveDashboard.md index 6cde9d0c98..3f026cc008 100644 --- a/_docs/master/embedding/sdk/api/snippets/InteractiveDashboard.md +++ b/_docs/master/embedding/sdk/api/snippets/InteractiveDashboard.md @@ -30,7 +30,7 @@ function InteractiveDashboard( onLoad?: (dashboard: null | MetabaseDashboard) => void; onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void; } & { - dataPickerProps?: Pick; + dataPickerProps?: Pick; } & {}, ): Element; ``` @@ -41,9 +41,9 @@ A dashboard component with drill downs, click behaviors, and the ability to view -| Parameter | Type | Description | -| :-------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- | -| `props` | \{ `drillThroughQuestionHeight?`: `Height`\<`string` \| `number`\>; `drillThroughQuestionProps?`: [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps); `plugins?`: [`MetabasePluginsConfig`](./api/MetabasePluginsConfig); `renderDrillThroughQuestion?`: () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478); \} & \{ `dashboardId`: [`SdkDashboardId`](./api/SdkDashboardId); `hiddenParameters?`: `string`[]; `initialParameters?`: [`ParameterValues`](./api/ParameterValues); `withCardTitle?`: `boolean`; `withDownloads?`: `boolean`; `withTitle?`: `boolean`; \} & \{ `className?`: `string`; `style?`: [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579); \} & \{ `onLoad?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; `onLoadWithoutCards?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; \} & \{ `dataPickerProps?`: [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`SdkQuestionProps`](./api/SdkQuestionProps), `"entityTypes"`\>; \} & \{ \} | | +| Parameter | Type | Description | +| :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- | +| `props` | \{ `drillThroughQuestionHeight?`: `Height`\<`string` \| `number`\>; `drillThroughQuestionProps?`: [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps); `plugins?`: [`MetabasePluginsConfig`](./api/MetabasePluginsConfig); `renderDrillThroughQuestion?`: () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478); \} & \{ `dashboardId`: [`SdkDashboardId`](./api/SdkDashboardId); `hiddenParameters?`: `string`[]; `initialParameters?`: [`ParameterValues`](./api/ParameterValues); `withCardTitle?`: `boolean`; `withDownloads?`: `boolean`; `withTitle?`: `boolean`; \} & \{ `className?`: `string`; `style?`: [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579); \} & \{ `onLoad?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; `onLoadWithoutCards?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; \} & \{ `dataPickerProps?`: [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`InteractiveQuestionProps`](./api/InteractiveQuestionProps), `"entityTypes"`\>; \} & \{ \} | | diff --git a/_docs/master/embedding/sdk/api/snippets/InteractiveDashboardProps.md b/_docs/master/embedding/sdk/api/snippets/InteractiveDashboardProps.md index 1c97d668de..f479613fcb 100644 --- a/_docs/master/embedding/sdk/api/snippets/InteractiveDashboardProps.md +++ b/_docs/master/embedding/sdk/api/snippets/InteractiveDashboardProps.md @@ -15,22 +15,22 @@ layout: new-docs -| Property | Type | Description | -| :-------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `className?` | `string` | A custom class name to be added to the root element. | -| `dashboardId` | [`SdkDashboardId`](./api/SdkDashboardId) | The ID of the dashboard.
    This is either:
    - the numerical ID when accessing a dashboard link, i.e. `http://localhost:3000/dashboard/1-my-dashboard` where the ID is `1`
    - the string ID found in the `entity_id` key of the dashboard object when using the API directly or using the SDK Collection Browser to return data | -| `dataPickerProps?` | [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`SdkQuestionProps`](./api/SdkQuestionProps), `"entityTypes"`\> | Additional props to pass to the query builder rendered by `InteractiveQuestion` when creating a new dashboard question. | -| `drillThroughQuestionHeight?` | `Height`\<`string` \| `number`\> | Height of a question component when drilled from the dashboard to a question level. | -| `drillThroughQuestionProps?` | [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps) | Props of a question component when drilled from the dashboard to a question level. | -| `hiddenParameters?` | `string`[] | A list of [parameters to hide](/docs/master/embedding/public-links#appearance-parameters).
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | -| `initialParameters?` | [`ParameterValues`](./api/ParameterValues) | Query parameters for the dashboard. For a single option, use a `string` value, and use a list of strings for multiple options.
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | -| `onLoad?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded. | -| `onLoadWithoutCards?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded without cards. | -| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details. | -| `renderDrillThroughQuestion?` | () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | A custom React component to render the question layout. Use namespaced InteractiveQuestion components to build the layout. | -| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | -| `withCardTitle?` | `boolean` | Whether the dashboard cards should display a title. | -| `withDownloads?` | `boolean` | Whether to hide the download button. | -| `withTitle?` | `boolean` | Whether the dashboard should display a title. | +| Property | Type | Description | +| :-------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `className?` | `string` | A custom class name to be added to the root element. | +| `dashboardId` | [`SdkDashboardId`](./api/SdkDashboardId) | The ID of the dashboard.
    This is either:
    - the numerical ID when accessing a dashboard link, i.e. `http://localhost:3000/dashboard/1-my-dashboard` where the ID is `1`
    - the string ID found in the `entity_id` key of the dashboard object when using the API directly or using the SDK Collection Browser to return data | +| `dataPickerProps?` | [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`InteractiveQuestionProps`](./api/InteractiveQuestionProps), `"entityTypes"`\> | Additional props to pass to the query builder rendered by `InteractiveQuestion` when creating a new dashboard question. | +| `drillThroughQuestionHeight?` | `Height`\<`string` \| `number`\> | Height of a question component when drilled from the dashboard to a question level. | +| `drillThroughQuestionProps?` | [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps) | Props of a question component when drilled from the dashboard to a question level. | +| `hiddenParameters?` | `string`[] | A list of [parameters to hide](/docs/master/embedding/public-links#appearance-parameters).
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | +| `initialParameters?` | [`ParameterValues`](./api/ParameterValues) | Query parameters for the dashboard. For a single option, use a `string` value, and use a list of strings for multiple options.
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | +| `onLoad?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded. | +| `onLoadWithoutCards?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded without cards. | +| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details. | +| `renderDrillThroughQuestion?` | () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | A custom React component to render the question layout. Use namespaced InteractiveQuestion components to build the layout. | +| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | +| `withCardTitle?` | `boolean` | Whether the dashboard cards should display a title. | +| `withDownloads?` | `boolean` | Whether to hide the download button. | +| `withTitle?` | `boolean` | Whether the dashboard should display a title. | diff --git a/_docs/master/embedding/sdk/api/snippets/InteractiveQuestion.md b/_docs/master/embedding/sdk/api/snippets/InteractiveQuestion.md index fccb77cd50..62f4d3b260 100644 --- a/_docs/master/embedding/sdk/api/snippets/InteractiveQuestion.md +++ b/_docs/master/embedding/sdk/api/snippets/InteractiveQuestion.md @@ -10,18 +10,18 @@ layout: new-docs --- ```ts -function InteractiveQuestion(props: InteractiveQuestionProps): Element; +function InteractiveQuestion(props: InteractiveQuestionProps): null | Element; ``` -A question component with drill-downs enabled. +A component that renders an interactive question. ## Parameters -| Parameter | Type | -| :-------- | :-------------------------------------------------------------- | -| `props` | [`InteractiveQuestionProps`](./api/InteractiveQuestionProps) | +| Parameter | Type | Description | +| :-------- | :-------------------------------------------------------------- | :---------- | +| `props` | [`InteractiveQuestionProps`](./api/InteractiveQuestionProps) | | @@ -29,6 +29,7 @@ A question component with drill-downs enabled. -[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) +\| `null` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L4313) diff --git a/_docs/master/embedding/sdk/api/snippets/InteractiveQuestionProps.md b/_docs/master/embedding/sdk/api/snippets/InteractiveQuestionProps.md index 508615f00b..58e17b122f 100644 --- a/_docs/master/embedding/sdk/api/snippets/InteractiveQuestionProps.md +++ b/_docs/master/embedding/sdk/api/snippets/InteractiveQuestionProps.md @@ -15,26 +15,25 @@ layout: new-docs -| Property | Type | Description | -| :---------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `className?` | `string` | A custom class name to be added to the root element. | -| `componentPlugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu | -| `entityTypes?` | [`EmbeddingEntityType`](./api/EmbeddingEntityType)[] | An array that specifies which entity types are available in the data picker | -| `height?` | `Height`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the height of the component | -| `initialSqlParameters?` | [`SqlParameterValues`](./api/SqlParameterValues) | Initial values for the SQL parameters. | -| `isSaveEnabled?` | `boolean` | Whether to show the save button. | -| `onBeforeSave?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `isNewQuestion`: `boolean`; \}) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`\> | A callback function that triggers before saving. Only relevant when `isSaveEnabled = true` | -| `onNavigateBack?` | () => `void` | A callback function that triggers when a user clicks the back button. | -| `onRun?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion)) => `void` | A callback function that triggers when a question is updated, including when a user clicks the `Visualize` button in the question editor | -| `onSave?` | (`question`: [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `dashboardTabId?`: `number`; `isNewQuestion`: `boolean`; \}) => `void` | A callback function that triggers when a user saves the question. Only relevant when `isSaveEnabled = true` | -| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | - | -| `questionId` | `null` \| [`SdkQuestionId`](./api/SdkQuestionId) | - | -| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | -| `targetCollection?` | [`SdkCollectionId`](./api/SdkCollectionId) | The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions. | -| `title?` | [`SdkQuestionTitleProps`](./api/SdkQuestionTitleProps) | Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout. | -| `width?` | `Width`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the width of the component | -| `withChartTypeSelector?` | `boolean` | Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout. | -| `withDownloads?` | `boolean` | Enables the ability to download results in the interactive question. | -| `withResetButton?` | `boolean` | Determines whether a reset button is displayed. Only relevant when using the default layout. | +| Property | Type | Description | +| :---------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `children?` | [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | The children of the MetabaseProvider component.s | +| `className?` | `string` | A custom class name to be added to the root element. | +| `entityTypes?` | [`EmbeddingEntityType`](./api/EmbeddingEntityType)[] | An array that specifies which entity types are available in the data picker | +| `height?` | `Height`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the height of the component | +| `initialSqlParameters?` | [`SqlParameterValues`](./api/SqlParameterValues) | Initial values for the SQL parameters. | +| `isSaveEnabled?` | `boolean` | Whether to show the save button. | +| `onBeforeSave?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `isNewQuestion`: `boolean`; \}) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`\> | A callback function that triggers before saving. Only relevant when `isSaveEnabled = true` | +| `onRun?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion)) => `void` | A callback function that triggers when a question is updated, including when a user clicks the `Visualize` button in the question editor | +| `onSave?` | (`question`: [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `dashboardTabId?`: `number`; `isNewQuestion`: `boolean`; \}) => `void` | A callback function that triggers when a user saves the question. Only relevant when `isSaveEnabled = true` | +| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | - | +| `questionId` | `null` \| [`SdkQuestionId`](./api/SdkQuestionId) | The ID of the question.
    This is either:
    - The numerical ID when accessing a question link, e.g., `http://localhost:3000/question/1-my-question` where the ID is `1`
    - The `entity_id` key of the question object. You can find a question's Entity ID in the info panel when viewing a question
    - `new` to show the notebook editor for creating new questions. `isSaveEnabled` must be `true` to allow saving the question | +| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | +| `targetCollection?` | [`SdkCollectionId`](./api/SdkCollectionId) | The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions. | +| `title?` | [`SdkQuestionTitleProps`](./api/SdkQuestionTitleProps) | Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout. | +| `width?` | `Width`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the width of the component | +| `withChartTypeSelector?` | `boolean` | Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout. | +| `withDownloads?` | `boolean` | Enables the ability to download results in the interactive question. | +| `withResetButton?` | `boolean` | Determines whether a reset button is displayed. Only relevant when using the default layout. | diff --git a/_docs/master/embedding/sdk/api/snippets/SdkQuestionProps.md b/_docs/master/embedding/sdk/api/snippets/SdkQuestionProps.md deleted file mode 100644 index 84fdb84c84..0000000000 --- a/_docs/master/embedding/sdk/api/snippets/SdkQuestionProps.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -version: master -has_magic_breadcrumbs: true -show_category_breadcrumb: true -show_title_breadcrumb: true -category: Embedding -title: SdkQuestionProps -source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/snippets/SdkQuestionProps.md' -layout: new-docs ---- - -**`Expand`** - -## Properties - - - -| Property | Type | Description | -| :---------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `className?` | `string` | A custom class name to be added to the root element. | -| `componentPlugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu | -| `entityTypes?` | [`EmbeddingEntityType`](./api/EmbeddingEntityType)[] | An array that specifies which entity types are available in the data picker | -| `height?` | `Height`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the height of the component | -| `initialSqlParameters?` | [`SqlParameterValues`](./api/SqlParameterValues) | Initial values for the SQL parameters. | -| `isSaveEnabled?` | `boolean` | Whether to show the save button. | -| `onBeforeSave?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `isNewQuestion`: `boolean`; \}) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`\> | A callback function that triggers before saving. Only relevant when `isSaveEnabled = true` | -| `onNavigateBack?` | () => `void` | A callback function that triggers when a user clicks the back button. | -| `onRun?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion)) => `void` | A callback function that triggers when a question is updated, including when a user clicks the `Visualize` button in the question editor | -| `onSave?` | (`question`: [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `dashboardTabId?`: `number`; `isNewQuestion`: `boolean`; \}) => `void` | A callback function that triggers when a user saves the question. Only relevant when `isSaveEnabled = true` | -| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | - | -| `questionId` | `null` \| [`SdkQuestionId`](./api/SdkQuestionId) | - | -| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | -| `targetCollection?` | [`SdkCollectionId`](./api/SdkCollectionId) | The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions. | -| `title?` | [`SdkQuestionTitleProps`](./api/SdkQuestionTitleProps) | Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout. | -| `width?` | `Width`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the width of the component | -| `withChartTypeSelector?` | `boolean` | Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout. | -| `withDownloads?` | `boolean` | Enables the ability to download results in the interactive question. | -| `withResetButton?` | `boolean` | Determines whether a reset button is displayed. Only relevant when using the default layout. | - - diff --git a/_docs/master/embedding/sdk/api/snippets/StaticDashboard.md b/_docs/master/embedding/sdk/api/snippets/StaticDashboard.md index a2e705acfe..3136fb39f0 100644 --- a/_docs/master/embedding/sdk/api/snippets/StaticDashboard.md +++ b/_docs/master/embedding/sdk/api/snippets/StaticDashboard.md @@ -30,7 +30,7 @@ function StaticDashboard( onLoad?: (dashboard: null | MetabaseDashboard) => void; onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void; } & { - dataPickerProps?: Pick; + dataPickerProps?: Pick; } & {}, ): Element; ``` @@ -41,9 +41,9 @@ A lightweight dashboard component. -| Parameter | Type | Description | -| :-------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- | -| `props` | \{ `drillThroughQuestionHeight?`: `Height`\<`string` \| `number`\>; `drillThroughQuestionProps?`: [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps); `plugins?`: [`MetabasePluginsConfig`](./api/MetabasePluginsConfig); `renderDrillThroughQuestion?`: () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478); \} & \{ `dashboardId`: [`SdkDashboardId`](./api/SdkDashboardId); `hiddenParameters?`: `string`[]; `initialParameters?`: [`ParameterValues`](./api/ParameterValues); `withCardTitle?`: `boolean`; `withDownloads?`: `boolean`; `withTitle?`: `boolean`; \} & \{ `className?`: `string`; `style?`: [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579); \} & \{ `onLoad?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; `onLoadWithoutCards?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; \} & \{ `dataPickerProps?`: [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`SdkQuestionProps`](./api/SdkQuestionProps), `"entityTypes"`\>; \} & \{ \} | | +| Parameter | Type | Description | +| :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- | +| `props` | \{ `drillThroughQuestionHeight?`: `Height`\<`string` \| `number`\>; `drillThroughQuestionProps?`: [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps); `plugins?`: [`MetabasePluginsConfig`](./api/MetabasePluginsConfig); `renderDrillThroughQuestion?`: () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478); \} & \{ `dashboardId`: [`SdkDashboardId`](./api/SdkDashboardId); `hiddenParameters?`: `string`[]; `initialParameters?`: [`ParameterValues`](./api/ParameterValues); `withCardTitle?`: `boolean`; `withDownloads?`: `boolean`; `withTitle?`: `boolean`; \} & \{ `className?`: `string`; `style?`: [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579); \} & \{ `onLoad?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; `onLoadWithoutCards?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; \} & \{ `dataPickerProps?`: [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`InteractiveQuestionProps`](./api/InteractiveQuestionProps), `"entityTypes"`\>; \} & \{ \} | | diff --git a/_docs/master/embedding/sdk/api/snippets/StaticDashboardProps.md b/_docs/master/embedding/sdk/api/snippets/StaticDashboardProps.md index 7a1c7074d6..048fcb36ab 100644 --- a/_docs/master/embedding/sdk/api/snippets/StaticDashboardProps.md +++ b/_docs/master/embedding/sdk/api/snippets/StaticDashboardProps.md @@ -15,22 +15,22 @@ layout: new-docs -| Property | Type | Description | -| :-------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `className?` | `string` | A custom class name to be added to the root element. | -| `dashboardId` | [`SdkDashboardId`](./api/SdkDashboardId) | The ID of the dashboard.
    This is either:
    - the numerical ID when accessing a dashboard link, i.e. `http://localhost:3000/dashboard/1-my-dashboard` where the ID is `1`
    - the string ID found in the `entity_id` key of the dashboard object when using the API directly or using the SDK Collection Browser to return data | -| `dataPickerProps?` | [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`SdkQuestionProps`](./api/SdkQuestionProps), `"entityTypes"`\> | Additional props to pass to the query builder rendered by `InteractiveQuestion` when creating a new dashboard question. | -| `drillThroughQuestionHeight?` | `Height`\<`string` \| `number`\> | Height of a question component when drilled from the dashboard to a question level. | -| `drillThroughQuestionProps?` | [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps) | Props of a question component when drilled from the dashboard to a question level. | -| `hiddenParameters?` | `string`[] | A list of [parameters to hide](/docs/master/embedding/public-links#appearance-parameters).
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | -| `initialParameters?` | [`ParameterValues`](./api/ParameterValues) | Query parameters for the dashboard. For a single option, use a `string` value, and use a list of strings for multiple options.
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | -| `onLoad?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded. | -| `onLoadWithoutCards?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded without cards. | -| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details. | -| `renderDrillThroughQuestion?` | () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | A custom React component to render the question layout. Use namespaced InteractiveQuestion components to build the layout. | -| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | -| `withCardTitle?` | `boolean` | Whether the dashboard cards should display a title. | -| `withDownloads?` | `boolean` | Whether to hide the download button. | -| `withTitle?` | `boolean` | Whether the dashboard should display a title. | +| Property | Type | Description | +| :-------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `className?` | `string` | A custom class name to be added to the root element. | +| `dashboardId` | [`SdkDashboardId`](./api/SdkDashboardId) | The ID of the dashboard.
    This is either:
    - the numerical ID when accessing a dashboard link, i.e. `http://localhost:3000/dashboard/1-my-dashboard` where the ID is `1`
    - the string ID found in the `entity_id` key of the dashboard object when using the API directly or using the SDK Collection Browser to return data | +| `dataPickerProps?` | [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`InteractiveQuestionProps`](./api/InteractiveQuestionProps), `"entityTypes"`\> | Additional props to pass to the query builder rendered by `InteractiveQuestion` when creating a new dashboard question. | +| `drillThroughQuestionHeight?` | `Height`\<`string` \| `number`\> | Height of a question component when drilled from the dashboard to a question level. | +| `drillThroughQuestionProps?` | [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps) | Props of a question component when drilled from the dashboard to a question level. | +| `hiddenParameters?` | `string`[] | A list of [parameters to hide](/docs/master/embedding/public-links#appearance-parameters).
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | +| `initialParameters?` | [`ParameterValues`](./api/ParameterValues) | Query parameters for the dashboard. For a single option, use a `string` value, and use a list of strings for multiple options.
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
    - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | +| `onLoad?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded. | +| `onLoadWithoutCards?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded without cards. | +| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details. | +| `renderDrillThroughQuestion?` | () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | A custom React component to render the question layout. Use namespaced InteractiveQuestion components to build the layout. | +| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | +| `withCardTitle?` | `boolean` | Whether the dashboard cards should display a title. | +| `withDownloads?` | `boolean` | Whether to hide the download button. | +| `withTitle?` | `boolean` | Whether the dashboard should display a title. | diff --git a/_docs/master/embedding/sdk/api/snippets/StaticQuestion.md b/_docs/master/embedding/sdk/api/snippets/StaticQuestion.md index 43d5fd95fc..d4933df40c 100644 --- a/_docs/master/embedding/sdk/api/snippets/StaticQuestion.md +++ b/_docs/master/embedding/sdk/api/snippets/StaticQuestion.md @@ -10,18 +10,18 @@ layout: new-docs --- ```ts -function StaticQuestion(__namedParameters: StaticQuestionProps): null | Element; +function StaticQuestion(props: StaticQuestionProps): ReactNode; ``` -A question component without drill-downs. +A component that renders a static question. ## Parameters -| Parameter | Type | -| :------------------ | :---------------------------------------------------- | -| `__namedParameters` | [`StaticQuestionProps`](./api/StaticQuestionProps) | +| Parameter | Type | +| :-------- | :---------------------------------------------------- | +| `props` | [`StaticQuestionProps`](./api/StaticQuestionProps) | @@ -29,7 +29,6 @@ A question component without drill-downs. -\| `null` -\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L4313) +[`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) diff --git a/_docs/master/embedding/sdk/api/snippets/StaticQuestionProps.md b/_docs/master/embedding/sdk/api/snippets/StaticQuestionProps.md index 6e3657c2a4..b652cbc226 100644 --- a/_docs/master/embedding/sdk/api/snippets/StaticQuestionProps.md +++ b/_docs/master/embedding/sdk/api/snippets/StaticQuestionProps.md @@ -15,16 +15,15 @@ layout: new-docs -| Property | Type | Description | -| :---------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `className?` | `string` | A custom class name to be added to the root element. | -| `height?` | `Height`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the height of the component | -| `initialSqlParameters?` | [`SqlParameterValues`](./api/SqlParameterValues) | Initial values for the SQL parameters. | -| `questionId` | `null` \| [`SdkQuestionId`](./api/SdkQuestionId) | - | -| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | -| `title?` | [`SdkQuestionTitleProps`](./api/SdkQuestionTitleProps) | Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout. | -| `width?` | `Width`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the width of the component | -| `withChartTypeSelector?` | `boolean` | Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout. | -| `withDownloads?` | `boolean` | Enables the ability to download results in the interactive question. | +| Property | Type | Description | +| :---------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `className?` | `string` | A custom class name to be added to the root element. | +| `height?` | `Height`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the height of the component | +| `initialSqlParameters?` | [`SqlParameterValues`](./api/SqlParameterValues) | Initial values for the SQL parameters. | +| `questionId` | `null` \| [`SdkQuestionId`](./api/SdkQuestionId) | The ID of the question.
    This is either:
    - The numerical ID when accessing a question link, e.g., `http://localhost:3000/question/1-my-question` where the ID is `1`
    - The `entity_id` key of the question object. You can find a question's Entity ID in the info panel when viewing a question
    - `new` to show the notebook editor for creating new questions. `isSaveEnabled` must be `true` to allow saving the question | +| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | +| `width?` | `Width`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the width of the component | +| `withChartTypeSelector?` | `boolean` | - | +| `withDownloads?` | `boolean` | Enables the ability to download results in the interactive question. | diff --git a/_docs/master/embedding/sdk/api/snippets/index.md b/_docs/master/embedding/sdk/api/snippets/index.md index 4982932825..205f77f586 100644 --- a/_docs/master/embedding/sdk/api/snippets/index.md +++ b/_docs/master/embedding/sdk/api/snippets/index.md @@ -21,9 +21,9 @@ layout: new-docs | Name | Description | | :-------------------------------------------------------------- | :------------------ | | [CreateDashboardModal](./api/CreateDashboardModal) | Creates a dashboard | -| [useCreateDashboardApi](./api/useCreateDashboardApi) | Creates a dashboard | | [CreateDashboardModalProps](./api/CreateDashboardModalProps) | - | | [CreateDashboardValues](./api/CreateDashboardValues) | - | +| [useCreateDashboardApi](./api/useCreateDashboardApi) | Creates a dashboard | ## CreateQuestion @@ -37,66 +37,62 @@ layout: new-docs | Name | Description | | :-------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [EditableDashboard](./api/EditableDashboard) | A dashboard component with the features available in the `InteractiveDashboard` component, as well as the ability to add and update questions, layout, and content within your dashboard. | -| [InteractiveDashboard](./api/InteractiveDashboard) | A dashboard component with drill downs, click behaviors, and the ability to view and click into questions. | -| [StaticDashboard](./api/StaticDashboard) | A lightweight dashboard component. | | [EditableDashboardProps](./api/EditableDashboardProps) | - | +| [InteractiveDashboard](./api/InteractiveDashboard) | A dashboard component with drill downs, click behaviors, and the ability to view and click into questions. | | [InteractiveDashboardProps](./api/InteractiveDashboardProps) | - | +| [StaticDashboard](./api/StaticDashboard) | A lightweight dashboard component. | | [StaticDashboardProps](./api/StaticDashboardProps) | - | ## InteractiveQuestion -| Name | Description | -| :------------------------------------------------------------------------------------------------------------ | :--------------------------------------------- | -| [InteractiveQuestion](./api/InteractiveQuestion) | A question component with drill-downs enabled. | -| [DrillThroughQuestionProps](./api/DrillThroughQuestionProps) | Props for the drill-through question | -| [InteractiveQuestionEditorButtonProps](./api/InteractiveQuestionEditorButtonProps) | - | -| [InteractiveQuestionEditorProps](./api/InteractiveQuestionEditorProps) | - | -| [InteractiveQuestionProps](./api/InteractiveQuestionProps) | - | -| [InteractiveQuestionQuestionSettingsDropdownProps](./api/InteractiveQuestionQuestionSettingsDropdownProps) | - | -| [InteractiveQuestionQuestionVisualizationProps](./api/InteractiveQuestionQuestionVisualizationProps) | - | -| [InteractiveQuestionResetButtonProps](./api/InteractiveQuestionResetButtonProps) | - | -| [InteractiveQuestionSaveQuestionFormProps](./api/InteractiveQuestionSaveQuestionFormProps) | - | -| [InteractiveQuestionTitleProps](./api/InteractiveQuestionTitleProps) | - | -| [SdkQuestionProps](./api/SdkQuestionProps) | - | -| [InteractiveQuestionBackButtonProps](./api/InteractiveQuestionBackButtonProps) | - | -| [InteractiveQuestionBreakoutDropdownProps](./api/InteractiveQuestionBreakoutDropdownProps) | - | -| [InteractiveQuestionChartTypeDropdownProps](./api/InteractiveQuestionChartTypeDropdownProps) | - | -| [InteractiveQuestionChartTypeSelectorProps](./api/InteractiveQuestionChartTypeSelectorProps) | - | -| [InteractiveQuestionDownloadWidgetDropdownProps](./api/InteractiveQuestionDownloadWidgetDropdownProps) | - | -| [InteractiveQuestionDownloadWidgetProps](./api/InteractiveQuestionDownloadWidgetProps) | - | -| [InteractiveQuestionFilterDropdownProps](./api/InteractiveQuestionFilterDropdownProps) | - | -| [InteractiveQuestionFilterProps](./api/InteractiveQuestionFilterProps) | - | -| [InteractiveQuestionQuestionSettingsProps](./api/InteractiveQuestionQuestionSettingsProps) | - | -| [InteractiveQuestionSaveButtonProps](./api/InteractiveQuestionSaveButtonProps) | - | -| [InteractiveQuestionSummarizeDropdownProps](./api/InteractiveQuestionSummarizeDropdownProps) | - | +| Name | Description | +| :------------------------------------------------------------------------------------------------------------ | :------------------------------------------------ | +| [DrillThroughQuestionProps](./api/DrillThroughQuestionProps) | Props for the drill-through question | +| [InteractiveQuestion](./api/InteractiveQuestion) | A component that renders an interactive question. | +| [InteractiveQuestionBackButtonProps](./api/InteractiveQuestionBackButtonProps) | - | +| [InteractiveQuestionBreakoutDropdownProps](./api/InteractiveQuestionBreakoutDropdownProps) | - | +| [InteractiveQuestionChartTypeDropdownProps](./api/InteractiveQuestionChartTypeDropdownProps) | - | +| [InteractiveQuestionChartTypeSelectorProps](./api/InteractiveQuestionChartTypeSelectorProps) | - | +| [InteractiveQuestionDownloadWidgetDropdownProps](./api/InteractiveQuestionDownloadWidgetDropdownProps) | - | +| [InteractiveQuestionDownloadWidgetProps](./api/InteractiveQuestionDownloadWidgetProps) | - | +| [InteractiveQuestionEditorButtonProps](./api/InteractiveQuestionEditorButtonProps) | - | +| [InteractiveQuestionEditorProps](./api/InteractiveQuestionEditorProps) | - | +| [InteractiveQuestionFilterDropdownProps](./api/InteractiveQuestionFilterDropdownProps) | - | +| [InteractiveQuestionFilterProps](./api/InteractiveQuestionFilterProps) | - | +| [InteractiveQuestionProps](./api/InteractiveQuestionProps) | - | +| [InteractiveQuestionQuestionSettingsDropdownProps](./api/InteractiveQuestionQuestionSettingsDropdownProps) | - | +| [InteractiveQuestionQuestionSettingsProps](./api/InteractiveQuestionQuestionSettingsProps) | - | +| [InteractiveQuestionQuestionVisualizationProps](./api/InteractiveQuestionQuestionVisualizationProps) | - | +| [InteractiveQuestionResetButtonProps](./api/InteractiveQuestionResetButtonProps) | - | +| [InteractiveQuestionSaveButtonProps](./api/InteractiveQuestionSaveButtonProps) | - | +| [InteractiveQuestionSaveQuestionFormProps](./api/InteractiveQuestionSaveQuestionFormProps) | - | +| [InteractiveQuestionSummarizeDropdownProps](./api/InteractiveQuestionSummarizeDropdownProps) | - | +| [InteractiveQuestionTitleProps](./api/InteractiveQuestionTitleProps) | - | ## MetabaseProvider | Name | Description | | :-------------------------------------------------------------------- | :------------------------------------------------------------ | | [defineMetabaseAuthConfig](./api/defineMetabaseAuthConfig) | Defines a Metabase auth config. | -| [MetabaseProvider](./api/MetabaseProvider) | A component that provides the Metabase SDK context and theme. | -| [MetabaseProviderProps](./api/MetabaseProviderProps) | - | | [MetabaseAuthConfig](./api/MetabaseAuthConfig) | - | | [MetabaseAuthConfigWithApiKey](./api/MetabaseAuthConfigWithApiKey) | - | | [MetabaseAuthConfigWithJwt](./api/MetabaseAuthConfigWithJwt) | - | | [MetabaseAuthConfigWithSaml](./api/MetabaseAuthConfigWithSaml) | - | +| [MetabaseProvider](./api/MetabaseProvider) | A component that provides the Metabase SDK context and theme. | +| [MetabaseProviderProps](./api/MetabaseProviderProps) | - | ## StaticQuestion -| Name | Description | -| :-------------------------------------------------- | :---------------------------------------- | -| [StaticQuestion](./api/StaticQuestion) | A question component without drill-downs. | -| [StaticQuestionProps](./api/StaticQuestionProps) | - | +| Name | Description | +| :-------------------------------------------------- | :------------------------------------------ | +| [StaticQuestion](./api/StaticQuestion) | A component that renders a static question. | +| [StaticQuestionProps](./api/StaticQuestionProps) | - | ## other | Name | Description | | :---------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [BaseSdkQuestionProps](./api/BaseSdkQuestionProps) | - | -| [MetabaseColors](./api/MetabaseColors) | - | -| [MetabaseQuestion](./api/MetabaseQuestion) | - | -| [MetabaseTheme](./api/MetabaseTheme) | Theme configuration for embedded Metabase components. | +| [BaseInteractiveQuestionProps](./api/BaseInteractiveQuestionProps) | - | | [ButtonProps](./api/ButtonProps) | - | | [ChartColor](./api/ChartColor) | - | | [CollectionBrowserListColumns](./api/CollectionBrowserListColumns) | - | @@ -113,6 +109,7 @@ layout: new-docs | [MetabaseClickActionPluginsConfig](./api/MetabaseClickActionPluginsConfig) | - | | [MetabaseCollection](./api/MetabaseCollection) | The Collection entity | | [MetabaseCollectionItem](./api/MetabaseCollectionItem) | The CollectionItem entity | +| [MetabaseColors](./api/MetabaseColors) | - | | [MetabaseComponentTheme](./api/MetabaseComponentTheme) | Theme options for customizing specific Metabase components and visualizations. | | [MetabaseDashboard](./api/MetabaseDashboard) | The Dashboard entity | | [MetabaseDashboardPluginsConfig](./api/MetabaseDashboardPluginsConfig) | - | @@ -121,6 +118,8 @@ layout: new-docs | [MetabaseFetchRequestTokenFn](./api/MetabaseFetchRequestTokenFn) | - | | [MetabaseFontFamily](./api/MetabaseFontFamily) | - | | [MetabasePluginsConfig](./api/MetabasePluginsConfig) | - | +| [MetabaseQuestion](./api/MetabaseQuestion) | - | +| [MetabaseTheme](./api/MetabaseTheme) | Theme configuration for embedded Metabase components. | | [MetabaseUser](./api/MetabaseUser) | The User entity | | [ParameterValues](./api/ParameterValues) | - | | [SdkCollectionId](./api/SdkCollectionId) | - | diff --git a/_docs/master/embedding/sdk/introduction.md b/_docs/master/embedding/sdk/introduction.md index ea4912cfde..8ce9eaaa2b 100644 --- a/_docs/master/embedding/sdk/introduction.md +++ b/_docs/master/embedding/sdk/introduction.md @@ -114,7 +114,7 @@ View the SDK's changelog: ## Embedded analytics SDK on NPM -Check out the Metabase Embedded analytics SDK on NPM: [metaba.se/sdk-npm](https://metaba.se/sdk-npm). +Check out the Metabase Embedded analytics SDK on NPM: [metaba.se/sdk](https://metaba.se/sdk). ## SDK limitations diff --git a/_docs/master/embedding/sdk/upgrade.md b/_docs/master/embedding/sdk/upgrade.md deleted file mode 100644 index d906724b61..0000000000 --- a/_docs/master/embedding/sdk/upgrade.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -version: master -has_magic_breadcrumbs: true -show_category_breadcrumb: true -show_title_breadcrumb: true -category: Embedding -title: 'Upgrading Metabase and the Embedded analytics SDK' -source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/upgrade.md' -layout: new-docs -summary: 'How to upgrade your Metabase and Embedded analytics SDK versions, test the changes, and check for breaking changes that might affect your app.' ---- - -# Upgrading Metabase and the Embedded analytics SDK - -Here's a basic overview of the steps you'll want to take when upgrading your SDK. - -## 1. Read the release post and changelog for both Metabase and the Embedded analytics SDK - -- [Release posts](/releases) give a good overview of what's in each release, and call out breaking changes (which are rare). -- [Metabase changelogs](/changelog) list Metabase changes. -- [Embedded analytics SDK changelogs](/changelog/55) list changes specific to the SDK package. - -Check for any relevant changes, especially breaking changes that require you to update your application's code. If there are breaking changes, we'll have docs that'll walk you through what changes you'll need to make and why. - -## 2. Test the upgrade - -When upgrading to a new major version, you'll want to upgrade both Metabase and the SDK version in parallel, as having Metabase and the SDK major versions out of sync can cause errors. - -### Spin up the new version of Metabase for testing - -You can do this locally or in a dev instance. If your testing setup involves a lot of test user accounts, getting a [development instance](../../installation-and-operation/development-instance) could be more cost-effective. - -See [upgrading Metabase](../../installation-and-operation/upgrading-metabase). - -### Upgrade the SDK with npm or yarn - -You'll want to test the changes locally first, as there may be breaking changes that require you to upgrade your application code. - -Check out a new branch in your application and install the next stable version, either with npm or yarn: - -Via npm: - -```bash -npm install @metabase/embedding-sdk-react@{next-major-version-number}-stable -``` - -For example, if you were upgrading to version 55 of the SDK: - -```bash -npm install @metabase/embedding-sdk-react@55-stable -``` - -If you're using yarn: - -```bash -yarn add @metabase/embedding-sdk-react@{next-major-version-number}-stable -``` - -See more on [SDK versions](./version). - -### If there are breaking changes, make the necessary changes to your application code - -Breaking changes are rare, but if you do need to make changes, we'll mention it in the release notes for the new major version and have docs that walk you through the changes. - -Update or add tests for any application code changes that you make. - -### Deploy to your staging environment - -Before deploying your app to your staging environment, make sure you've tested your app locally (manually, as well as running any automated tests). - -If all goes well with your local tests, deploy to your staging environment. Check that the Metabase embeds in your staging app are still working as expected, and perform any other testing you normally do with your application with respect to your embedded analytics. - -## 3. Deploy to production - -If everything is working in staging, you're ready to deploy to production. - -Be sure to deploy your application changes and upgrade your Metabase in parallel so that the SDK version and the Metabase version stay in sync. - -### If your instance is on Metabase Cloud, you'll need to request an upgrade - -If you're on Metabase Cloud, your instance version is pinned, so you'll need to request an upgrade by [contacting support](/help-premium). - -We'll coordinate with you so that your instance is upgraded when you deploy the changes to your application. diff --git a/_docs/master/embedding/sdk/version.md b/_docs/master/embedding/sdk/version.md index 86f9533b65..9ab574b799 100644 --- a/_docs/master/embedding/sdk/version.md +++ b/_docs/master/embedding/sdk/version.md @@ -15,32 +15,35 @@ layout: new-docs The SDK stable version tracks with the Metabase version. -So, for example, if you're on Metabase 55 (`0.55.x`, `1.55.x`), _any_ version 0.55.x of the @metabase/embedding-sdk-react npm package will be compatible. +So, for example, if you're on Metabase 53 (`0.53.x`, `1.53.x`), _any_ version 0.53.x of the @metabase/embedding-sdk-react npm package will be compatible. -To simplify things, we publish dist-tags for each stable Metabase version. For example, to install the latest version of the SDK compatible with Metabase 55, run: +To simplify things, we publish dist-tags for each stable Metabase version. For example, to install the latest version of the SDK compatible with Metabase 53, run: ```sh -npm install @metabase/embedding-sdk-react@55-stable +npm install @metabase/embedding-sdk-react@53-stable ``` To grab the latest version of the SDK that works with Metabase nightly builds, use the `canary` dist-tag. ## Minimum SDK version -Version 52 is the minimum version supported for the Embedded analytics SDK. +52 is the minimum version supported for the Embedded analytics SDK. -## Instances on Metabase Cloud will be pinned to a specific version +## Version pinning when using the SDK with Metabase Cloud -By default, if you're running on Metabase Cloud and using the Embedded analytics SDK, we'll pin your version to avoid breaking changes. +To pin your version of Metabase, go to **Admin settings > Settings > Embedding**. Go to the Embedded analytics SDK card and scroll to **Version pinning** and click **Request version pinning**. -Normally, Metabase Cloud upgrades your Metabase as new versions roll out so you don't have to deal with upgrades. But if you're using the SDK with Metabase Cloud, you'll want to upgrade manually to make sure your embeds don't break when you upgrade both your Metabase and your SDK version. +## Version pinning requirements -### Manually pinning your instance version on Metabase Cloud +To pin a version of Metabase, you must: -To manually pin your version of Metabase: +- Be on Metabase Cloud (obviously) +- Be on the Pro or Enterprise plans -1. Go to **Admin settings > Settings > Embedding**. -2. Go to the Embedded analytics SDK card. -3. Scroll to **Version pinning** and click **Request version pinning**. +## Why you'd want to pin your Metabase Cloud version -This will open a mailto link to our support team. +Normally, Metabase Cloud upgrades your Metabase as new versions roll out so that you don't have to deal with upgrades. + +But if you're using the SDK with Metabase Cloud, you'll want to upgrade manually to make sure your embeds don't break when you upgrade both your Metabase and your SDK version. + +To upgrade manually, you can pin your Metabase version so that it stays in sync with the SDK version you're using. That way you can choose when to upgrade your Metabase. diff --git a/_docs/master/exploration-and-organization/images/DataReference.png b/_docs/master/exploration-and-organization/images/DataReference.png index 5b8967a7b2..1b91e84ebc 100644 Binary files a/_docs/master/exploration-and-organization/images/DataReference.png and b/_docs/master/exploration-and-organization/images/DataReference.png differ diff --git a/_docs/master/exploration-and-organization/images/browse-data.png b/_docs/master/exploration-and-organization/images/browse-data.png index f857430ff8..9429442b26 100644 Binary files a/_docs/master/exploration-and-organization/images/browse-data.png and b/_docs/master/exploration-and-organization/images/browse-data.png differ diff --git a/_docs/master/exploration-and-organization/images/event-on-a-time-series.png b/_docs/master/exploration-and-organization/images/event-on-a-time-series.png index acc04a435b..66168ce82a 100644 Binary files a/_docs/master/exploration-and-organization/images/event-on-a-time-series.png and b/_docs/master/exploration-and-organization/images/event-on-a-time-series.png differ diff --git a/_docs/master/exploration-and-organization/images/pinned-show-viz.png b/_docs/master/exploration-and-organization/images/pinned-show-viz.png index 41ac861ee0..6c58b5e734 100644 Binary files a/_docs/master/exploration-and-organization/images/pinned-show-viz.png and b/_docs/master/exploration-and-organization/images/pinned-show-viz.png differ diff --git a/_docs/master/exploration-and-organization/images/question-checkbox.png b/_docs/master/exploration-and-organization/images/question-checkbox.png index d9ba8c5014..4887db0e22 100644 Binary files a/_docs/master/exploration-and-organization/images/question-checkbox.png and b/_docs/master/exploration-and-organization/images/question-checkbox.png differ diff --git a/_docs/master/exploration-and-organization/images/search-results.png b/_docs/master/exploration-and-organization/images/search-results.png index 1b91e84ebc..177b5b507a 100644 Binary files a/_docs/master/exploration-and-organization/images/search-results.png and b/_docs/master/exploration-and-organization/images/search-results.png differ diff --git a/_docs/master/installation-and-operation/activating-the-enterprise-edition.md b/_docs/master/installation-and-operation/activating-the-enterprise-edition.md index 305e964606..dc2e18221f 100644 --- a/_docs/master/installation-and-operation/activating-the-enterprise-edition.md +++ b/_docs/master/installation-and-operation/activating-the-enterprise-edition.md @@ -56,7 +56,7 @@ To get all the features available when upgrading to a _self-hosted_ [Pro or Ente Assuming you've been using a [production application database](../installation-and-operation/configuring-application-database), you'll want to: 1. [Back up your application database](./backing-up-metabase-application-data). -2. Download the Enterprise Edition version that corresponds with your current Metabase version. So if you're running the Docker image for {{site.latest_version}}, you should switch to the Docker image for {{site.latest_enterprise}}. To see a list of available versions for both the Open Source and Enterprise Editions, check out [Metabase releases](https://github.com/metabase/metabase/releases). +2. Download the Enterprise Edition version that corresponds with your current Metabase version. So if you're running the Docker image for {{site.data.latest_version}}, you should switch to the Docker image for {{site.data.latest_enterprise}}. To see a list of available versions for both the Open Source and Enterprise Editions, check out [Metabase releases](https://github.com/metabase/metabase/releases). 3. Stop your current Metabase Open Source edition. 4. Swap in the Enterprise Edition Docker image or jar that you downloaded. 5. Start your Metabase like you normally would using the new Enterprise Edition image or jar. You don't need to do anything with your application database (which you've backed up in step one, right?). diff --git a/_docs/master/installation-and-operation/images/AZPrivateLink.png b/_docs/master/installation-and-operation/images/AZPrivateLink.png index 1834491eb7..c520b55bdd 100644 Binary files a/_docs/master/installation-and-operation/images/AZPrivateLink.png and b/_docs/master/installation-and-operation/images/AZPrivateLink.png differ diff --git a/_docs/master/installation-and-operation/images/AZVNETintegration.png b/_docs/master/installation-and-operation/images/AZVNETintegration.png index 7bb1d7a4f0..f69b404401 100644 Binary files a/_docs/master/installation-and-operation/images/AZVNETintegration.png and b/_docs/master/installation-and-operation/images/AZVNETintegration.png differ diff --git a/_docs/master/installation-and-operation/images/AddRemoteHost.png b/_docs/master/installation-and-operation/images/AddRemoteHost.png index ab8def0988..a3bdb2b9c8 100644 Binary files a/_docs/master/installation-and-operation/images/AddRemoteHost.png and b/_docs/master/installation-and-operation/images/AddRemoteHost.png differ diff --git a/_docs/master/installation-and-operation/images/LocalProcessVisualVM.png b/_docs/master/installation-and-operation/images/LocalProcessVisualVM.png index f07a2758c5..d71e3e03d6 100644 Binary files a/_docs/master/installation-and-operation/images/LocalProcessVisualVM.png and b/_docs/master/installation-and-operation/images/LocalProcessVisualVM.png differ diff --git a/_docs/master/installation-and-operation/images/Metabase-AWS-SI.png b/_docs/master/installation-and-operation/images/Metabase-AWS-SI.png index d60c5504d6..6a49e9a6dc 100644 Binary files a/_docs/master/installation-and-operation/images/Metabase-AWS-SI.png and b/_docs/master/installation-and-operation/images/Metabase-AWS-SI.png differ diff --git a/_docs/master/installation-and-operation/images/OpenRemoteInstance.png b/_docs/master/installation-and-operation/images/OpenRemoteInstance.png index 454be8a831..fa97c0e30a 100644 Binary files a/_docs/master/installation-and-operation/images/OpenRemoteInstance.png and b/_docs/master/installation-and-operation/images/OpenRemoteInstance.png differ diff --git a/_docs/master/installation-and-operation/running-metabase-on-azure.md b/_docs/master/installation-and-operation/running-metabase-on-azure.md index f400b9791d..12d8db0a81 100644 --- a/_docs/master/installation-and-operation/running-metabase-on-azure.md +++ b/_docs/master/installation-and-operation/running-metabase-on-azure.md @@ -111,7 +111,7 @@ Now go to the next step where you will select: - **Options**: Single container. - **Image source**: DockerHub. - **Access Type**: Public. -- **Image and tag**: metabase/metabase:latest (or choose any other docker image tag of your preference, like our Enterprise Edition). To find the latest version, check our [Community Edition Docker Hub repository](https://hub.docker.com/r/metabase/metabase/tags?page=1&ordering=last_updated) and also our [Enterprise Edition Docker Hub Repository](https://hub.docker.com/r/metabase/metabase-enterprise/tags?page=1&ordering=last_updated). +- **Image and tag**: metabase/metabase:latest (or choose any other docker image tag of your preference, like our Enterprise Edition). To find the latest version, check our [Community Edition Dockerhub repository](https://hub.docker.com/r/metabase/metabase/tags?page=1&ordering=last_updated) and also our [Enterprise Edition Dockerhub Repository](https://hub.docker.com/r/metabase/metabase-enterprise/tags?page=1&ordering=last_updated). - **Startup command**: Leave this field empty. Click **Next** until you get to the last section, then click **Create**, and wait while your application initializes. diff --git a/_docs/master/installation-and-operation/running-metabase-on-docker.md b/_docs/master/installation-and-operation/running-metabase-on-docker.md index b96b5f1a90..282a5d9daa 100644 --- a/_docs/master/installation-and-operation/running-metabase-on-docker.md +++ b/_docs/master/installation-and-operation/running-metabase-on-docker.md @@ -15,7 +15,7 @@ redirect_from: > To get fast, reliable, and secure deployment with none of the work or hidden costs that come with self-hosting, check out [Metabase Cloud](/cloud/). -Metabase provides an official Docker image via Docker Hub that can be used for deployments on any system that is running Docker. +Metabase provides an official Docker image via Dockerhub that can be used for deployments on any system that is running Docker. If you're trying to upgrade your Metabase version on Docker, check out these [upgrading instructions](upgrading-metabase). diff --git a/_docs/master/installation-and-operation/upgrading-metabase.md b/_docs/master/installation-and-operation/upgrading-metabase.md index f33cb7c616..cdfe3f1e6a 100644 --- a/_docs/master/installation-and-operation/upgrading-metabase.md +++ b/_docs/master/installation-and-operation/upgrading-metabase.md @@ -13,15 +13,11 @@ redirect_from: # Upgrading Metabase -This page covers how to upgrade to a new Metabase release. - -- [Announcement posts for major releases](https://www.) -- [Changelogs](/changelog). -- [Release notes on GitHub](https://github.com/metabase/metabase/releases). +This page covers how to upgrade to a new [Metabase release](https://github.com/metabase/metabase/releases). ## Upgrading Metabase Cloud -If you're on a [Metabase Cloud](/pricing/) plan, we'll upgrade your Metabase automatically with each new release; no action needed on your end ([unless you're using the Embedded analytics SDK](#instances-using-the-embedded-analtyics-sdk-on-metabase-cloud-must-request-an-upgrade)). +If you're on a [Metabase Cloud](/pricing/) plan, we'll upgrade your Metabase automatically with each new release; no action needed on your end. How soon we upgrade you depends on the type of release: @@ -30,14 +26,6 @@ How soon we upgrade you depends on the type of release: Cloud customers can request an early upgrade by emailing support at help@metabase.com. Include the URL of the Metabase you want us to upgrade. -### Instances using the Embedded analtyics SDK on Metabase Cloud must request an upgrade - -If you're using the [Embedded analytics SDK](../embedding/sdk/introduction) on Metabase Cloud, we pin your version so that it doesn't upgrade automatically, as you should test the changes before upgrading. - -To upgrade your Metabase, you'll need to request an upgrade by [contacting support](/help-premium). - -See our [upgrade guide for the Embedded analytics SDK](../embedding/sdk/upgrade). - ## Upgrading a self-hosted Metabase Here are the steps for upgrading to a new Metabase version (major or minor): @@ -147,8 +135,6 @@ Durning a **minor version upgrade** (e.g., 54.1 to 54.2), the new Metabase conta ## Rolling back an upgrade or to an older version -> **The downgrade command must be run on the JAR with the higher version number.** - In general, regular backups (especially backups before upgrading), are the best policy, so we recommend reverting to a backup of your application database to roll back an upgrade. But if you've made any change (adding new questions/dashboards, etc) since upgrading that you want to keep, you may be able to use the `migrate down` command to roll back your Metabase application database to support the previous Metabase version you were running. When Metabase upgrades to a new version, it runs migrations that may change the application database schema. The `migrate down` command undoes those schema changes. In general, we recommend restoring from a backup (the backup that you definitely remembered to generate before upgrading), and only using the `migrate down` command if you really need to keep changes made after your upgrade. diff --git a/_docs/master/people-and-groups/images/JWT-auth-form.png b/_docs/master/people-and-groups/images/JWT-auth-form.png index ed91fea29b..ce5b0e7415 100644 Binary files a/_docs/master/people-and-groups/images/JWT-auth-form.png and b/_docs/master/people-and-groups/images/JWT-auth-form.png differ diff --git a/_docs/master/people-and-groups/images/auth0callbackurl.png b/_docs/master/people-and-groups/images/auth0callbackurl.png index 8371279d7d..dda21e391d 100644 Binary files a/_docs/master/people-and-groups/images/auth0callbackurl.png and b/_docs/master/people-and-groups/images/auth0callbackurl.png differ diff --git a/_docs/master/people-and-groups/images/auth0createapp.png b/_docs/master/people-and-groups/images/auth0createapp.png index 2fb7bd3907..6fbdab7fcf 100644 Binary files a/_docs/master/people-and-groups/images/auth0createapp.png and b/_docs/master/people-and-groups/images/auth0createapp.png differ diff --git a/_docs/master/people-and-groups/images/auth0regularapp.png b/_docs/master/people-and-groups/images/auth0regularapp.png index 7d23c598f1..6fbdab7fcf 100644 Binary files a/_docs/master/people-and-groups/images/auth0regularapp.png and b/_docs/master/people-and-groups/images/auth0regularapp.png differ diff --git a/_docs/master/people-and-groups/images/auth0saml2addon.png b/_docs/master/people-and-groups/images/auth0saml2addon.png index 6fbdab7fcf..8926f599ba 100644 Binary files a/_docs/master/people-and-groups/images/auth0saml2addon.png and b/_docs/master/people-and-groups/images/auth0saml2addon.png differ diff --git a/_docs/master/people-and-groups/images/auth0samlmappings.png b/_docs/master/people-and-groups/images/auth0samlmappings.png index a673bc98ba..6fbdab7fcf 100644 Binary files a/_docs/master/people-and-groups/images/auth0samlmappings.png and b/_docs/master/people-and-groups/images/auth0samlmappings.png differ diff --git a/_docs/master/people-and-groups/images/auth0samlusage.png b/_docs/master/people-and-groups/images/auth0samlusage.png index 7dbf8c7523..6fbdab7fcf 100644 Binary files a/_docs/master/people-and-groups/images/auth0samlusage.png and b/_docs/master/people-and-groups/images/auth0samlusage.png differ diff --git a/_docs/master/people-and-groups/images/groups.png b/_docs/master/people-and-groups/images/groups.png index 759a222b61..8926f599ba 100644 Binary files a/_docs/master/people-and-groups/images/groups.png and b/_docs/master/people-and-groups/images/groups.png differ diff --git a/_docs/master/people-and-groups/images/okta-group-attribute.png b/_docs/master/people-and-groups/images/okta-group-attribute.png index baf8cdc518..a48ae1a137 100644 Binary files a/_docs/master/people-and-groups/images/okta-group-attribute.png and b/_docs/master/people-and-groups/images/okta-group-attribute.png differ diff --git a/_docs/master/people-and-groups/images/saml-azure-step-1.png b/_docs/master/people-and-groups/images/saml-azure-step-1.png index 4becab567e..e8ae330628 100644 Binary files a/_docs/master/people-and-groups/images/saml-azure-step-1.png and b/_docs/master/people-and-groups/images/saml-azure-step-1.png differ diff --git a/_docs/master/people-and-groups/images/saml-okta-groups.png b/_docs/master/people-and-groups/images/saml-okta-groups.png index 9df2d9fb1d..98a4a6fc63 100644 Binary files a/_docs/master/people-and-groups/images/saml-okta-groups.png and b/_docs/master/people-and-groups/images/saml-okta-groups.png differ diff --git a/_docs/master/people-and-groups/saml-google.md b/_docs/master/people-and-groups/saml-google.md index 872da68569..4fdf6641da 100644 --- a/_docs/master/people-and-groups/saml-google.md +++ b/_docs/master/people-and-groups/saml-google.md @@ -68,9 +68,7 @@ For example, to add the attribute "First name": ## Setting up synchronize group membership -1. In Google Admin, you can EITHER: - - Set up a multi-value [custom user attribute](https://support.google.com/a/answer/6208725?hl=en#zippy=%2Cadd-a-new-custom-attribute) for your users. Recommended if you manage multiple SAML app permissions in Google or if you lack existing Google Groups that align with your desired Metabase groups. - - [Map to existing Google Groups](https://support.google.com/a/answer/11143403?hl=en). +1. In Google Admin, setup a multi-value [custom user attribute](https://support.google.com/a/answer/6208725?hl=en#zippy=%2Cadd-a-new-custom-attribute) for your users (recommended if you manage multiple SAML app permissions in Google or do not have existing Google Groups that align with your desired Metabase groups) OR [map to existing Google Groups](https://support.google.com/a/answer/11143403?hl=en). 2. Follow the instructions for [Configuring the group schema](./authenticating-with-saml#configuring-the-group-schema-in-metabase) using the `App attribute` that you used in Google as the Group attribute name in Metabase. ## Troubleshooting SAML issues diff --git a/_docs/master/permissions/database-routing.md b/_docs/master/permissions/database-routing.md index 568aab0e52..38fc239ea4 100644 --- a/_docs/master/permissions/database-routing.md +++ b/_docs/master/permissions/database-routing.md @@ -18,14 +18,13 @@ With database routing, an admin can build a question once using one database, an Database routing is useful for: -- Managing interactive embedding setups where each customer has their own database with identical schemas. +- Managing embedding setups where each customer has their own database with identical schemas. - Switching between dev and prod data warehouses. - Changing the target data warehouse for certain teams. - Managing separate connections to the same data warehouse, with each connection having separate privileges. This connection management is akin to [connection impersonation](./impersonation) for databases that prevent the same connection from changing roles. ## Databases that support database routing -- [BigQuery](../databases/connections/bigquery) - [Druid](../databases/connections/druid) - [MongoDB](../databases/connections/mongodb) - [MariaDB](../databases/connections/mariadb) diff --git a/_docs/master/permissions/images/admin-panel-collections.png b/_docs/master/permissions/images/admin-panel-collections.png index 155d34f84e..cc2c707278 100644 Binary files a/_docs/master/permissions/images/admin-panel-collections.png and b/_docs/master/permissions/images/admin-panel-collections.png differ diff --git a/_docs/master/permissions/images/advanced-example-1-sandbox-modal.png b/_docs/master/permissions/images/advanced-example-1-sandbox-modal.png index e84c8f1aef..f0997404d5 100644 Binary files a/_docs/master/permissions/images/advanced-example-1-sandbox-modal.png and b/_docs/master/permissions/images/advanced-example-1-sandbox-modal.png differ diff --git a/_docs/master/permissions/images/dashboard-no-permissions.png b/_docs/master/permissions/images/dashboard-no-permissions.png index 3c02e69fc9..c9c10c5129 100644 Binary files a/_docs/master/permissions/images/dashboard-no-permissions.png and b/_docs/master/permissions/images/dashboard-no-permissions.png differ diff --git a/_docs/master/permissions/images/pinned-items.png b/_docs/master/permissions/images/pinned-items.png index 960bcb87f1..76c2b7c0aa 100644 Binary files a/_docs/master/permissions/images/pinned-items.png and b/_docs/master/permissions/images/pinned-items.png differ diff --git a/_docs/master/permissions/images/select-user-attribute.png b/_docs/master/permissions/images/select-user-attribute.png index 6fe341045c..5fb459752f 100644 Binary files a/_docs/master/permissions/images/select-user-attribute.png and b/_docs/master/permissions/images/select-user-attribute.png differ diff --git a/_docs/master/permissions/impersonation.md b/_docs/master/permissions/impersonation.md index 0303d10667..034aef9963 100644 --- a/_docs/master/permissions/impersonation.md +++ b/_docs/master/permissions/impersonation.md @@ -13,7 +13,7 @@ layout: new-docs {% include plans-blockquote.html feature="Impersonation access" %} -> For now, impersonation access is only available for ClickHouse, MySQL, PostgreSQL, Redshift, Snowflake, and SQL Server. If you want to switch database _connections_ based on who is logged in, check out [Database routing](./database-routing). +> For now, impersonation access is only available for MySQL, PostgreSQL, Redshift, Snowflake, and SQL Server. If you want to switch database _connections_ based on who is logged in, check out [Database routing](./database-routing). > If you're using views in PostgresSQL, the row-level security policies on views will only work on Postgres versions 15 and higher. diff --git a/_docs/master/questions/images/02-widget.png b/_docs/master/questions/images/02-widget.png new file mode 100644 index 0000000000..4ce9fda455 Binary files /dev/null and b/_docs/master/questions/images/02-widget.png differ diff --git a/_docs/master/questions/images/SQL-filter-widget.png b/_docs/master/questions/images/SQL-filter-widget.png index 318c459779..22f38f2e92 100644 Binary files a/_docs/master/questions/images/SQL-filter-widget.png and b/_docs/master/questions/images/SQL-filter-widget.png differ diff --git a/_docs/master/questions/images/add-comparison.png b/_docs/master/questions/images/add-comparison.png index d193fa0481..416c5e974f 100644 Binary files a/_docs/master/questions/images/add-comparison.png and b/_docs/master/questions/images/add-comparison.png differ diff --git a/_docs/master/questions/images/area.png b/_docs/master/questions/images/area.png index 8008354d87..676d7840a3 100644 Binary files a/_docs/master/questions/images/area.png and b/_docs/master/questions/images/area.png differ diff --git a/_docs/master/questions/images/bin-by-latlong.png b/_docs/master/questions/images/bin-by-latlong.png index ac8e7481e4..60cbdafba4 100644 Binary files a/_docs/master/questions/images/bin-by-latlong.png and b/_docs/master/questions/images/bin-by-latlong.png differ diff --git a/_docs/master/questions/images/chart-formatting-options.png b/_docs/master/questions/images/chart-formatting-options.png index 5e1fe30691..14d64cca39 100644 Binary files a/_docs/master/questions/images/chart-formatting-options.png and b/_docs/master/questions/images/chart-formatting-options.png differ diff --git a/_docs/master/questions/images/diff-and-percentage.png b/_docs/master/questions/images/diff-and-percentage.png index eaeaf64500..181ab4e47c 100644 Binary files a/_docs/master/questions/images/diff-and-percentage.png and b/_docs/master/questions/images/diff-and-percentage.png differ diff --git a/_docs/master/questions/images/filter-and-parameter.png b/_docs/master/questions/images/filter-and-parameter.png deleted file mode 100644 index e0df5f3c81..0000000000 Binary files a/_docs/master/questions/images/filter-and-parameter.png and /dev/null differ diff --git a/_docs/master/questions/images/function-browser.png b/_docs/master/questions/images/function-browser.png index 71c4f4a9fa..eaeaf64500 100644 Binary files a/_docs/master/questions/images/function-browser.png and b/_docs/master/questions/images/function-browser.png differ diff --git a/_docs/master/questions/images/histogram.png b/_docs/master/questions/images/histogram.png index 77a47cdb2d..efbaebb582 100644 Binary files a/_docs/master/questions/images/histogram.png and b/_docs/master/questions/images/histogram.png differ diff --git a/_docs/master/questions/images/join-with-custom-expression.png b/_docs/master/questions/images/join-with-custom-expression.png deleted file mode 100644 index 713683583e..0000000000 Binary files a/_docs/master/questions/images/join-with-custom-expression.png and /dev/null differ diff --git a/_docs/master/questions/images/legend.png b/_docs/master/questions/images/legend.png index 159ee2b139..1cfd092a11 100644 Binary files a/_docs/master/questions/images/legend.png and b/_docs/master/questions/images/legend.png differ diff --git a/_docs/master/questions/images/multiple-values.png b/_docs/master/questions/images/multiple-values.png deleted file mode 100644 index 604c5ed4b1..0000000000 Binary files a/_docs/master/questions/images/multiple-values.png and /dev/null differ diff --git a/_docs/master/questions/images/number.png b/_docs/master/questions/images/number.png index b650a3cb61..6a503dc977 100644 Binary files a/_docs/master/questions/images/number.png and b/_docs/master/questions/images/number.png differ diff --git a/_docs/master/questions/images/pie-other-slice.png b/_docs/master/questions/images/pie-other-slice.png index 6e08d9e9a0..dcbd6a8bdf 100644 Binary files a/_docs/master/questions/images/pie-other-slice.png and b/_docs/master/questions/images/pie-other-slice.png differ diff --git a/_docs/master/questions/images/pin-data-shape.png b/_docs/master/questions/images/pin-data-shape.png index b9079a1c01..fab199632b 100644 Binary files a/_docs/master/questions/images/pin-data-shape.png and b/_docs/master/questions/images/pin-data-shape.png differ diff --git a/_docs/master/questions/images/pivot-table-options.png b/_docs/master/questions/images/pivot-table-options.png index e3d9ba981c..a912dce7f6 100644 Binary files a/_docs/master/questions/images/pivot-table-options.png and b/_docs/master/questions/images/pivot-table-options.png differ diff --git a/_docs/master/questions/images/raw-table.png b/_docs/master/questions/images/raw-table.png index 5c753beebe..2bd6a50036 100644 Binary files a/_docs/master/questions/images/raw-table.png and b/_docs/master/questions/images/raw-table.png differ diff --git a/_docs/master/questions/images/region-maps.png b/_docs/master/questions/images/region-maps.png index 8dec0e9d90..91ae89db11 100644 Binary files a/_docs/master/questions/images/region-maps.png and b/_docs/master/questions/images/region-maps.png differ diff --git a/_docs/master/questions/images/rolling-average.png b/_docs/master/questions/images/rolling-average.png index 233e8508dd..17463efde4 100644 Binary files a/_docs/master/questions/images/rolling-average.png and b/_docs/master/questions/images/rolling-average.png differ diff --git a/_docs/master/questions/images/sum-of-totals-for-previous-period.png b/_docs/master/questions/images/sum-of-totals-for-previous-period.png index 3e95ecd43d..c2c2978f4f 100644 Binary files a/_docs/master/questions/images/sum-of-totals-for-previous-period.png and b/_docs/master/questions/images/sum-of-totals-for-previous-period.png differ diff --git a/_docs/master/questions/images/switch-to-editor.png b/_docs/master/questions/images/switch-to-editor.png index 0945f38fa4..3c8a32cc82 100644 Binary files a/_docs/master/questions/images/switch-to-editor.png and b/_docs/master/questions/images/switch-to-editor.png differ diff --git a/_docs/master/questions/images/table.png b/_docs/master/questions/images/table.png index 63af470596..4ce9fda455 100644 Binary files a/_docs/master/questions/images/table.png and b/_docs/master/questions/images/table.png differ diff --git a/_docs/master/questions/images/unpivoted-results.png b/_docs/master/questions/images/unpivoted-results.png index 14d64cca39..e3d9ba981c 100644 Binary files a/_docs/master/questions/images/unpivoted-results.png and b/_docs/master/questions/images/unpivoted-results.png differ diff --git a/_docs/master/questions/images/viz-options.png b/_docs/master/questions/images/viz-options.png index 08e8dc6af0..49a0bf0703 100644 Binary files a/_docs/master/questions/images/viz-options.png and b/_docs/master/questions/images/viz-options.png differ diff --git a/_docs/master/questions/images/week-iso.png b/_docs/master/questions/images/week-iso.png index d75254a7bf..5ebb209705 100644 Binary files a/_docs/master/questions/images/week-iso.png and b/_docs/master/questions/images/week-iso.png differ diff --git a/_docs/master/questions/native-editor/basic-sql-parameters.md b/_docs/master/questions/native-editor/basic-sql-parameters.md deleted file mode 100644 index f34601c89b..0000000000 --- a/_docs/master/questions/native-editor/basic-sql-parameters.md +++ /dev/null @@ -1,103 +0,0 @@ ---- -version: master -has_magic_breadcrumbs: true -show_category_breadcrumb: true -show_title_breadcrumb: true -category: Questions -title: 'Basic SQL parameters' -source_url: 'https://github.com/metabase/metabase/blob/master/docs/questions/native-editor/basic-sql-parameters.md' -layout: new-docs -summary: 'Text, number, and date variables let you plug basic values into your SQL code.' ---- - -# Basic SQL parameters - -> If you want to filter on a database field in your query, you should prefer using [field filter variables](./sql-parameters), which require a different syntax. - -Text, number, and date variables let you plug basic values into your SQL code. - -To add a basic variable to a SQL query, enclose the variable in double braces: `{% raw %}{{variable_name}}{% endraw %}`. - -This example defines a **Text** variable called `category_filter` (but you can call the variable whatever you want): - -```sql -{% raw %} -SELECT - count(*) -FROM - products -WHERE - category = {{category_filter}}; -{% endraw %} -``` - -These basic variabless simply plug in the values set by the widget into the placeholder in the code. Basic variables have a different syntax than [field filters](./sql-parameters). - -Here's the [field filter](./field-filters) syntax: - -```sql -{% raw %} -WHERE - {{category}} -{% endraw %} -``` - -Whereas the basic variable syntax includes an `=` operator: - -```sql -{% raw %} -WHERE - category = {{category}}; -{% endraw %} -``` - -Here, we don't connect the variable to a database field; we merely insert the value into the variable. - -Metabase will read the variable and attach a filter widget to the query, which people can use to change the value inserted into the `category` variable. So if someone enters "Gizmo" into the filter widget, the query Metabase would run would be: - -```sql -SELECT - count(*) -FROM - products -WHERE - category = 'Gizmo'; -``` - -If you're writing a native MongoDB query, your query would look more like this, with the `category` variable being defined inside the `match` clause: - -``` -{% raw %}[{ $match: { category: {{category}} } }]{% endraw %} -``` - -## Basic variable that allows people to select multiple values - -![Basic variable with multiple values](../images/multiple-values.png) - -To let people plug multiple values into your variable, you'll need to write the code in such a way that multiple values will make sense when interpolated into your code. The most common way to do this would be to use an `WHERE` clause with `IN`: - -```sql -{% raw %} -SELECT - * -FROM - products -WHERE - category IN ({{category_vars}}); -{% endraw %} -``` - -With your code in place, you'll need to set the **People can pick** setting to multiple values. In this case, however, you're probably better off using a [field filter](./field-filters). - -## Basic SQL variables offer limited options for filter types - -- **Text**: a plain input box -- **Number**: a plain input box -- **Date**: a simple date picker -- **Boolean**: a this or that picker. - -If you want a more expressive filter widget, like a dynamic date picker, you should use a [field filter variable](./field-filters). - -## Making a variable optional - -See [optional variables](./optional-variables). diff --git a/_docs/master/questions/native-editor/field-filters.md b/_docs/master/questions/native-editor/field-filters.md deleted file mode 100644 index a50557b236..0000000000 --- a/_docs/master/questions/native-editor/field-filters.md +++ /dev/null @@ -1,153 +0,0 @@ ---- -version: master -has_magic_breadcrumbs: true -show_category_breadcrumb: true -show_title_breadcrumb: true -category: Questions -title: 'Field filters' -source_url: 'https://github.com/metabase/metabase/blob/master/docs/questions/native-editor/field-filters.md' -layout: new-docs -summary: 'Field filters let you create smart filter widgets for your SQL questions by connecting variables to database fields. Where possible, prefer field filters to basic variables.' ---- - -# Field filters - -## When to use a field filter variable vs a basic variable - -In general, prefer using field filter variables. They offer "smart" filter widgets with dropdown menus and dynamic date pickers. - -If your query lacks a database field for the filter to connect to, however, then you'll instead need to use a [basic variable](./basic-sql-parameters). For example, if you want to filter by a custom column you created, you'd need to use a basic variable. - -## Field filter variables - -To add a field filter: - -1. [Add a variable to a `WHERE` clause](#field-filter-syntax). -2. [Connect the field filter to a database field](#connect-the-field-filter-to-a-database-field). -3. [Configure your filter widget](./sql-parameters#configure-your-filter-widget). - -### Field filter syntax - -Let's say you want to create a field filter variable that filters the `People` table by the `state` field. - -Here's the field filter syntax: - -```sql -{% raw %} -SELECT - * -FROM - PEOPLE -WHERE - {{state}} -{% endraw %} -``` - -Note the lack of the column and operator (it's not `{% raw %}WHERE state = {{state}}{% endraw %}`, it's just `{% raw %}WHERE {{state}}{% endraw %}`). The reason you need to structure field filter variables in this way is to handle cases where Metabase generates the code for you. For example, for handling cases where someone selects _multiple_ values in the filter widget, or a _range_ of dates, Metabase will have to interpolate the SQL code to handle those inputs into the variable. - -In a MongoDB native query, you'll need to put the field filter in a `$match` clause. - -``` -{% raw %}[ {$match: {{date_var}} } ]{% endraw %} -``` - -### Connect the field filter to a database field - -In order for a field filter variable to work, you'll need to associate the variable with a database field. - -1. Go to the variables and parameters side panel. -2. Under **Variable type**, select the "Field filter" variable type. -3. Choose which **Field to map to** your variable (in this case, we'll map the `Category` field in the products table). - -You can only map a field filter to a database field. If you can't use a field filter, you can fall back to using a [basic variable](./basic-sql-parameters). - -## Specifying the table and field alias - -If you map a filter to a field from an aliased table, you'll need to tell Metabase about that alias, or the filter won't work. - -For example, let's say you want to map a field filter to the `category` field from the `products` table, but in your query you use the alias `p` for the `products` table, like so: - -```sql -{% raw %} -SELECT - * -FROM - products AS p -WHERE - {{category_filter}} -{% endraw %} -``` - -If you map to the `category` field from the products table, you'll also need to fill out the **Table and field alias** input to let Metabase know about the alias. In this case, you input `p.category`. - -Setting this **Table and field alias** is only required if your query uses an alias to refer to a table that contains the field you want to map the filter to. - -Here's another example, this time with a CTE - -```sql -{% raw %} -WITH - expensive_products AS ( - SELECT - * - FROM - products - WHERE - price > 50 - ) -SELECT - * -FROM - expensive_products -WHERE - {{category_filter}} -{% endraw %} -``` - -Here, we again map the field filter to the`category` field in the `products` table. But since we use a CTE, aliased as `expensive_products`, we'd need to put `expensive_products.category` in the **Table and field alias** input for the mapping to work correctly. - -## Field filters must be connected to database fields included in the query - -Your main query should be aware of all the tables that your Field Filter variable is pointing to, otherwise you'll get a SQL syntax error. For example, let's say that your main query includes a field filter like this: - -```sql -{% raw %} -SELECT - * -FROM - ORDERS -WHERE - {{ product_category }} -{% endraw %} -``` - -Let's say the `{% raw %}{{ product_category }}{% endraw %}` variable refers to another question that uses the `Products` table. For the field filter to work, you'll need to include a join to `Products` in your main query. - -```sql -{% raw %} -SELECT - * -FROM - ORDERS - JOIN PRODUCTS ON ORDERS.product_id = PRODUCTS.id -WHERE - {{ product_category }} -{% endraw %} -``` - -If you can't use a field filter, you can instead fall back to using a [basic variable](./basic-sql-parameters). - -## Field filters in BigQuery and Oracle - -Make sure your SQL dialect matches the database you've selected. Common issues involving how tables are quoted in the query: - -| Database | Dialect quirk | Example | -| -------- | --------------------------------------------------- | -------------------------- | -| BigQuery | Schemas and tables must be quoted with backticks. | `` FROM `dataset.table` `` | -| Oracle | Schemas and tables must be quoted in double quotes. | `FROM "schema.table"` | - -For more help, see [Troubleshooting SQL error messages](../../troubleshooting-guide/error-message#sql-editor). - -## Making a field filter optional - -See [optional variables](./optional-variables). diff --git a/_docs/master/questions/native-editor/filter-widgets.md b/_docs/master/questions/native-editor/filter-widgets.md deleted file mode 100644 index b3466c2096..0000000000 --- a/_docs/master/questions/native-editor/filter-widgets.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -version: master -has_magic_breadcrumbs: true -show_category_breadcrumb: true -show_title_breadcrumb: true -category: Questions -title: 'Filter and parameter widgets for native code' -source_url: 'https://github.com/metabase/metabase/blob/master/docs/questions/native-editor/filter-widgets.md' -layout: new-docs ---- - -# Filter and parameter widgets for native code - -When you add a [SQL variable or parameter](./sql-parameters) to your native/SQL query, Metabase will add a widget to the top of the query that people can use to set the variable's value. - -## How to create different types of filter and parameter widgets - -The kind of filter widget that Metabase displays when you create a field filter widget depends on a setting for that field in Metabase called **Filtering on this field**. Admins can set this field option to: - -- [Input box](#input-box) -- [Search box](#search-box) -- [Dropdown list](#dropdown-menu-and-search) - -Date fields will either have a simple date filter (for date variables) or a dynamic date picker (for field filters mapped to a date field). - -If you want to change the default filter widget for a particular field, you'll need to ask an admin to update that field in [the Table Metadata](../../data-modeling/metadata-editing) and set the desired "Filtering on this field" option. - -For dropdown lists and search boxes, you can also customize values available in the list. See below. - -### Input box - -1. Include a SQL variable in your query. -2. Set the **Variable type** to **Field filter**. If the query lacks a database field, you could use a Text or Number type as well, depending on what you're filtering. -3. Set **Field to map to** to the appropriate field (only if you selected the field filter variable type). -4. Set **Filter widget operator** to whatever [operator](#filter-widget-operators) you want. -5. Set **How should users filter on this variable** to "Input box". - -### Search box - -1. Include a SQL variable in your query. -2. Set the **Variable type** to **Field filter**. If the query lacks a database field, you could use a Text or Number type as well, depending on what you're filtering. -3. Set **Field to map to** to a field of type "Category" (only if you selected the field filter variable type). -4. Set **Filter widget operator** to whatever [operator](#filter-widget-operators) you want. -5. Set **How should users filter on this variable** to "Search box". If you're not using a field filter, you'll need to edit the search box settings to [tell Metabase where to get the values to search](#customizing-values-for-dropdown-lists-and-search-boxes). - -To guard against SQL injection attacks, Metabase converts whatever is in the search box to a string. If you want to use wildcards, check out [our Learn article][sql-variables]. - -### Dropdown menu and search - -To create a dropdown menu with search and a list of all values: - -1. Include a variable in your query. -2. Set the **Variable type** to **Field filter**. If the query lacks a database field, you could use a Text or Number type as well, depending on what you're filtering. -3. Set **Field to map to** to the appropriate field (only if you selected the field filter variable type). -4. Set **Filter widget operator** to whatever [operator](#filter-widget-operators) you want. -5. Set **How should users filter on this variable** to "Dropdown list". If you're not using a field filter, you'll need to edit the dropdown list settings to [tell Metabase where to get the values to list in the dropdown](#customizing-values-for-dropdown-lists-and-search-boxes). - -If there are too many different values in that column to display in a dropdown menu, Metabase will simply display a search box instead. So if you have a lot of email addresses, you may just get a search box anyway. The dropdown menu widgets work better when there's a small set of values to choose from (like the fifty U.S. states). - -## Customizing values for dropdown lists and search boxes - -When you add a dropdown menu or search box, you can tell Metabase which values people can choose from when using a filter with a dropdown list or search box. - -1. Add a dropdown list or search box. -2. Next to the option you chose, click **Edit**. -3. Metabase will pop up a modal where you can select **Where the values should come from**. - -You can choose: - -- **From connected fields**. If you selected the Field filter variable type, you'll also have the option to use the connected field. -- **From another model or question**. If you select this option, you'll need to pick a model or question, then a field from that model or question that Metabase will use to supply the values for that dropdown or search box. For example, if you want the dropdown to list the different plans an account could be on, you could select an "Account" model you created, and select the field "Plan" to power that dropdown. The dropdown would then list all of the distinct plan options that appear in the "Plan" column in the Accounts model. -- **Custom list**. Enter each item on a line. You can enter any string values you like. - -You can also [change a dashboard filter's selectable values](../../dashboards/filters#change-a-filters-selectable-values). - -## Setting a default value in the filter widget - -In the variables sidebar, you can set a default value for your variable. This value will be inserted into the corresponding filter widget by default (even if the filter widget is empty). - -To override the default value, insert a new value into the filter widget. - -## Requiring a value for a filter widget - -In the **Variable** settings sidebar, you can toggle the **Always require a value** option. If you turn this on: - -- You must enter a default value. -- The default value will override any [optional syntax](./optional-variables) in your code (like an optional `WHERE` clause). If no value is passed to the filter, Metabase will run the query using the default value. Click on the **Eye** icon in the editor to preview the SQL Metabase will run. - -## Filter widget operators - -For text, number, and date filter widgets, you'll need to select a filter operator. - -### Text - -Filter operator options include: - -- String -- String is not -- String contains -- String does not contain -- String starts with -- String ends with - -### Number - -Filter operator options include: - -- Equal to -- Not equal to -- Between -- Greater than or equal to -- Less than or equal to - -### Dates - -Filter operator options include: - -- Month and year -- Quarter and year -- Single date -- Date range -- Relative date -- All options. Metabase will give you a menu where you can choose how they filter dates: by range, relative dates, etc. diff --git a/_docs/master/questions/native-editor/optional-variables.md b/_docs/master/questions/native-editor/optional-variables.md deleted file mode 100644 index f9a349d3f3..0000000000 --- a/_docs/master/questions/native-editor/optional-variables.md +++ /dev/null @@ -1,158 +0,0 @@ ---- -version: master -has_magic_breadcrumbs: true -show_category_breadcrumb: true -show_title_breadcrumb: true -category: Questions -title: 'Optional variables' -source_url: 'https://github.com/metabase/metabase/blob/master/docs/questions/native-editor/optional-variables.md' -layout: new-docs -summary: 'Make parts of your SQL query optional by wrapping clauses in double brackets.' ---- - -# Optional variables - -You can make a clause optional in a query. For example, you can create an optional `WHERE` clause that contains a [SQL variable](./sql-parameters), so that if no value is supplied to the variable (either in the filter or via the URL), the query will still run as if there were no `WHERE` clause. - -To make a variable optional in your native query, put `[[ .. ]]` brackets around the entire clause containing the `{% raw %}{{variable}}{% endraw %}`. If someone inputs a value in the filter widget for the `variable`, Metabase will place the clause in the template; otherwise Metabase will ignore the clause and run the query as though the clause didn't exist. - -In this example, if no value is given to `cat`, then the query will just select all the rows from the `products` table. But if `cat` does have a value, like "Widget", then the query will only grab the products with a category type of Widget: - -```sql -{% raw %} -SELECT - count(*) -FROM - products -[[WHERE category = {{cat}}]] -{% endraw %} -``` - -### Your SQL must also be able to run without the optional clause in `[[ ]]` - -You need to make sure that your SQL is still valid when no value is passed to the variable in the bracketed clause. - -For example, excluding the `WHERE` keyword from the bracketed clause will cause an error if there's no value given for `cat`: - -```sql --- this will cause an error: -{% raw %} -SELECT - count(*) -FROM - products -WHERE - [[category = {{cat}}]] -{% endraw %} -``` - -That's because when no value is given for `cat`, Metabase will try to execute SQL as if the clause in `[[ ]]` didn't exist: - -```sql -SELECT - count(*) -FROM - products -WHERE -``` - -Which is not a valid SQL query. Instead, put the entire `WHERE` clause in `[[ ]]`: - -```sql -{% raw %} -SELECT - count(*) -FROM - products -[[WHERE - category = {{cat}}]] -{% endraw %} -``` - -When there's no value given for `cat`, Metabase will still execute a valid query: - -```sql -{% raw %} -SELECT - count(*) -FROM - products -{% endraw %} -``` - -### You need at least one `WHERE` when using multiple optional clauses - -To use multiple optional clauses, you must include at least one regular `WHERE` clause followed by optional clauses, each starting with `AND`: - -```sql -{% raw %} -SELECT - count(*) -FROM - products -WHERE - TRUE - [[AND id = {{id}}]] - [[AND {{category}}]] -{% endraw %} -``` - -That last clause uses a [field filter](./field-filters) (note the lack of a column in the `AND` clause). When using a field filter, you _must_ exclude the column in the query; you need to map the variable in the side panel. - -### Optional variables in MongoDB - -If you're using MongoDB, you can make a clause optional like so: - -``` -{% raw %} -[ - [[{ - $match: {category: {{cat}}} - },]] - { - $count: "Total" - } -] -{% endraw %} -``` - -Or with multiple optional filters: - -``` -{% raw %} -[ - [[{ $match: {{cat}} },]] - [[{ $match: { price: { "$gt": {{minprice}} } } },]] - { - $count: "Total" - } -] -{% endraw %} -``` - -## Setting complex default values in the query - -You can also define default values directly in your query by enclosing comment syntax inside the end brackets of an optional parameter. - -```sql -WHERE column = [[ {% raw %}{{ your_parameter }}{% endraw %} --]] your_default_value -``` - -The comment will "activate" whenever you pass a value to `your_parameter`. - -This is useful when defining complex default values (for example, if your default value is a function like `CURRENT_DATE`). Here's a PostgreSQL example that sets the default value of a Date filter to the current date using `CURRENT_DATE`: - -```sql -{% raw %} -SELECT - * -FROM - orders -WHERE - DATE(created_at) = [[ {{dateOfCreation}} --]] CURRENT_DATE -{% endraw %} -``` - -If you pass a value to the variable, the `WHERE` clause runs, including the comment syntax that comments out the default `CURRENT_DATE` function. - -Note that the hash (`--`) used to comment the text might need to be replaced by the comment syntax specific to the database you're using. diff --git a/_docs/master/questions/native-editor/sql-parameters.md b/_docs/master/questions/native-editor/sql-parameters.md index 3f93e22909..e3413f60f7 100644 --- a/_docs/master/questions/native-editor/sql-parameters.md +++ b/_docs/master/questions/native-editor/sql-parameters.md @@ -7,93 +7,442 @@ category: Questions title: 'SQL parameters' source_url: 'https://github.com/metabase/metabase/blob/master/docs/questions/native-editor/sql-parameters.md' layout: new-docs -summary: 'Create SQL templates by adding filters and parameters to your SQL questions in the native code editor.' redirect_from: - /docs/master/users-guide/13-sql-parameters --- # SQL parameters -![Variables](../images/filter-and-parameter.png) +You can create SQL templates by adding variables to your SQL queries in the [Native/SQL editor][sql-editor]. These variables will create filter widgets that you can use to change the variable's value in the query. You can also add parameters to your question's URL to set the filters' values, so that when the question loads, those values are inserted into the variables. -You can create SQL templates by adding parameters (a.k.a. variables) to your SQL queries in the [Native/SQL editor](./writing-sql). +![Variables](../images/02-widget.png) -These variables create widgets that people can use to plug in values for those variables. You can also connect [dashboard widgets to these parameters](../../dashboards/filters). +## Defining variables -## SQL variable types - -When you define a variable, the **variables and parameters** side panel will appear. You can set a type for a variable, which changes the kind of filter widget that Metabase presents. +Typing `{% raw %}{{variable_name}}{% endraw %}` in your native query creates a variable called `variable_name`. -Variable types include: +Field Filters, a special type of filter, have a [slightly different syntax](#field-filter-syntax). -- **[Field filter variables](./field-filters)**: create "smart" filter widgets with date pickers or dropdown menus. To use a field filter, you'll need to connect to a database field included in your query. -- **[Basic variables](./basic-sql-parameters)**: text, number, and date variables. You'll almost always want to use field filters instead of these basic variables, as field filters create "smart" filter widgets, but Metabase provides these basic variables for situations where you can't use field filters. -- **[Time grouping parameters](./time-grouping-parameters)**: allows people to change how the results are grouped by a date column: by month, week, day, etc. +This example defines a **Text** variable called `category`: -You can include multiple variables in a single query, and Metabase will add multiple widgets to the question. To rearrange the order of the widgets, enter edit mode and click on any widget and drag it around. +```sql +{% raw %} +SELECT + count(*) +FROM + products +WHERE + category = {{category}} +{% endraw %} +``` -### Configure your filter widget +Metabase will read the variable and attach a filter widget to the query, which people can use to change the value inserted into the `cat` variable with quotes. So if someone entered "Gizmo" into the filter widget, the query Metabase would run would be: -When you add a field filter variable or basic variable to your SQL code, you'll need to configure it in the sidebar. +```sql +SELECT + count(*) +FROM + products +WHERE + category = 'Gizmo' +``` -1. Set the **Filter widget type**. Options will differ depending on whether you used a [field filter](./field-filters) (preferred) or a [basic variable](./basic-sql-parameters) (if you can't use a field filter). -2. Set the **Filter widget** label. -3. Set **How should users filter on this variable?**: - - [Dropdown list](../../dashboards/filters#dropdown-list). A dropdown list shows all available values for the field in a selectable list. - - [Search box](../../dashboards/filters#search-box). A search box allows people to type to search for specific values. - - [Input box](../../dashboards/filters#plain-input-box). An input box provides a simple text field for entering values. -4. If the filter is mapped to a field in an aliased table, you'll need to [specify the table and field alias](./field-filters#specifying-the-table-and-field-alias). -5. Optionally, set a **Default filter widget value**. +If you're writing a native MongoDB query, your query would look more like this, with the `cat` variable being defined inside of the `match` clause. -Check out [filter widgets](./filter-widgets). +``` +{% raw %}[{ $match: { category: {{cat}} } }]{% endraw %} +``` -## Setting values for SQL variables +## Setting SQL variables To set a SQL variable to a value, you can either: -- Enter a value into the [filter widget](./filter-widgets), and re-run the question. +- Enter a value into the filter widget, and re-run the question, or - Add a parameter to the URL and load the page. -### Setting a parameter via URL - To add a value to the URL, follow this syntax: ``` ?variable_name=value ``` -For example, to set the `{% raw %}{{category}}{%endraw%}` variable on a question to the value "Gizmo", your URL would look something like: +For example, to set the `{% raw %}{{cat}}{%endraw%}` variable on a question to the value "Gizmo", your URL would look something like: ``` -https://metabase.example.com/question/42-eg-question?category=Gizmo +https://metabase.example.com/question/42-eg-question?cat=Gizmo ``` To set multiple variables, separate parameters with an ampersand (`&`): ``` -https://metabase.example.com/question/42-eg-question?category=Gizmo&maxprice=50 +https://metabase.example.com/question/42-eg-question?cat=Gizmo&maxprice=50 ``` -## Connecting a SQL question to a dashboard filter +## SQL variable types + +When you define a variable, the **Variables** side panel will appear. You can set a type for a variable, which changes the kind of filter widget that Metabase presents. + +There are four types of variables: + +- **Text**: a plain input box. +- **Number**: a plain input box. +- **Date**: a simple date picker. If you want a more expressive date picker, like specifying a range, you'll want to use a Field Filter. +- **[Field Filter](#the-field-filter-variable-type)**: different filter widgets, depending on the mapped field. + +That last variable type, [Field Filter](#the-field-filter-variable-type), is special; it lets you create "smart" filter widgets, like a search box, or a dropdown menu of values, or a dynamic date picker that allows you to specify a date range. + +You can include multiple variables in the query, and Metabase will add multiple filter widgets to the question. When you have multiple filter widgets, you can click on a filter widget and drag it around to rearrange the order. + +## The Field Filter variable type + +Setting a variable to the **Field Filter** type allows you to map the variable to a field in any table in the current database. Field filters let you create a "smart" filter widget that makes sense for that field. + +Field Filter variables should be used inside of a `WHERE` clause in SQL, or a `$match` clause in MongoDB. + +### Field Filter compatible types + +Field Filters ONLY work with the following field types: + +- Category +- Entity Name +- Entity Key +- Foreign Key +- City +- State +- ZIP or Postal Code + +The field can also be a date or timestamp, which can be left as "No semantic type" in the [Table Metadata](../../data-modeling/metadata-editing). + +When you set the **Variable type** to "Field Filter", Metabase will present an option to set the **Field to map to**, as well as the **Filter widget type**. The options available for the Filter widget type depend on the field's type. For example, if you map to a field of type Category, you'll see options for either "Category" or None. If you map to a Date Field, you'll see options for None, Month and year, Quarter and year, Single date, Date range, or Date filter. + +If you're not seeing the option to display a filter widget, make sure the mapped field is set to one of the above types, and then try manually syncing your database from the "Databases" section of the Admin Panel to force Metabase to scan and cache the field's values. + +If you want to map a Field Filter to a field that isn't one of the compatible types listed above, you'll need an Admin to change the field type for that column. See [metadata editing](../../data-modeling/metadata-editing). + +## Field Filter syntax + +Let's say you want to create a Field Filter that filters the `People` table by state, and you want people to be able to select multiple states at a time. Here's the query: + +The syntax for Field Filters differs from a Text, Number, or Date variable. + +```sql +{% raw %} +SELECT + * +FROM + PEOPLE +WHERE + {{state}} +{% endraw %} +``` + +Then, in the side panel, select the "Field Filter" variable type, and choose which field to map your variable to (in this case, `State`). + +Note the lack of the column and operator (like `=`). The reason you need to structure Field Filters this way is to handle cases where Metabase generates the code for you. For example, for handling cases where someone selects multiple values in the filter widget, or a range of dates. With Field Filters, you can't control the generated SQL, so if you need greater control, you should use one (or more) Text, Number, or Date variables. + +A MongoDB native query example might look like this: + +``` +{% raw %}[ {$match: {{date_var}} } ]{% endraw %} +``` + +For a more in-depth guide, check out [Field Filters: create smart filter widgets for SQL questions][field-filter]. + +### Field filters in BigQuery and Oracle + +Make sure your SQL dialect matches the database you've selected. Common issues involving how tables are quoted in the query: + +| Database | Dialect quirk | Example | +| -------- | --------------------------------------------------- | -------------------------- | +| BigQuery | Schemas and tables must be quoted with backticks. | `` FROM `dataset.table` `` | +| Oracle | Schemas and tables must be quoted in double quotes. | `FROM "schema.table"` | + +For more help, see [Troubleshooting SQL error messages](../../troubleshooting-guide/error-message#sql-editor). + +## How to create different types of filter widgets + +The kind of filter widget that Metabase displays when you create a Field Filter widget depends on a setting for that field in Metabase called **Filtering on this field**. Admins can set this field option to: + +- Plain input box +- Search box +- A list of all values (also known as a dropdown menu) + +Date fields will either have a simple date filter (for Date variables) or a dynamic date picker (for Field Filters mapped to a date field). + +If you want to change the filter widget for a particular field, you'll need to ask an Admin to update that field in [the Table Metadata](../../data-modeling/metadata-editing) and set the desired "Filtering on this field" option. + +### Filter widget with plain input box + +Create a simple **Text** or **Number** variable. Additionally, you can use a Field Filter with a field that has its **Filtering on this field** value set to "Plain input box". + +Note: to guard against SQL injection attacks, Metabase converts whatever is in the Search box to a string. If you want to use wildcards, check out [our Learn article][sql-variables]. + +### Filter widget with search box + +- Include a SQL variable in your query. +- Set the **Variable type** to **Field Filter**. +- Set the **Field to map to** to a field of type "Category" that has its **Filtering on this field** option set to "Search box" + +### Filter widget with dropdown menu and search + +To create a dropdown menu with search and a list of all values, you need to: + +- Include a SQL variable in your query. +- Set the **Variable type** to **Field Filter**. +- Set the **Field to map to** to a field of type "Category" that has its **Filtering on this field** option set to "A list of all values". +- Set the **Filter widget type** to "Category". + +If the field you want to create a dropdown for is not set to the type "Category" with **Filtering on this field** set to "A list of all values", an Admin will need to update the settings for that field. For example, if you want to create a dropdown menu for an incompatible field type like an Email field, an admin will need to change that field type to "Category", set the **Filtering on this field** option to **A list of all values**, then re-scan the values for that field. + +If however, there are too many different values in that column to display in a dropdown menu, Metabase will simply display a search box instead. So if you have a lot of email addresses, you may just get a search box anyway. The dropdown menu widgets work better when there's a small set of values to choose from (like the fifty U.S. states). + +## Field filter limitations + +Some things that could trip you up when trying to set up a Field Filter variable. + +### Field Filters don't work with table aliases + +You won't be able to select values from field filters in queries that use table aliases for joins or CTEs. + +The reason is that field filters generate SQL based on the mapped field; Metabase doesn't parse the SQL, so it can't tell what an alias refers to. You have three options for workarounds, depending on the complexity of your query. + +1. Use full table names. +2. Replace CTEs with subqueries. +3. Create a view in your database, and use the view as the basis of your query. + +### Field Filters must be connected to fields included in the query + +Your main query should be aware of all the tables that your Field Filter variable is pointing to, otherwise you'll get a SQL syntax error. For example, let's say that your main query includes a field filter like this: + +```sql +{% raw %} +SELECT + * +FROM + ORDERS +WHERE + {{ product_category }} +{% endraw %} +``` + +Let's say the `{% raw %}{{ product_category }}{% endraw %}` variable refers to another question that uses the `Products` table. For the field filter to work, you'll need to include a join to `Products` in your main query. + +```sql +{% raw %} +SELECT + * +FROM + ORDERS + JOIN PRODUCTS ON ORDERS.product_id = PRODUCTS.id +WHERE + {{ product_category }} +{% endraw %} +``` + +## Customizing dropdown lists and search box values + +With Text and Field filter variables, you can tell Metabase what values people can choose from when using a filter with a dropdown list or search box. + +1. In the native editor, add a {% raw %}{{variable}}{% endraw %} in double braces. +2. If the sidebar doesn't open, you can click on the **{x}** icon on the right to open the **Variables** sidebar. +3. In the **Settings** tab, set the **Variable type** to either "Text" or "Field Filter". +4. In the sidebar, go to **How should users filter on this variable?** Pick either **Dropdown list** or **Search box**. +5. Next to the option you chose, click **Edit**. +6. Metabase will pop up a modal where you can select **Where the values should come from**. + +You can choose: + +- **From connected fields** If you selected the Field filter variable type, you'll also have the option to use the connected field. +- **From another model or question**. If you select this option, you'll need to pick a model or question, then a field from that model or question that Metabase will use to supply the values for that dropdown or search box. For example, if you want the dropdown to list the different plans an account could be on, you could select an "Account" model you created, and select the field "Plan" to power that dropdown. The dropdown would then list all of the distinct plan options that appear in the "Plan" column in the Accounts model. +- **Custom list**. Enter each item on a line. You can enter any string values you like. + +You can also [change a dashboard filter's selectable values](../../dashboards/filters#change-a-filters-selectable-values). + +## Setting a default value in the filter widget + +In the variables sidebar, you can set a default value for your variable. This value will be inserted into the corresponding filter widget by default (even if the filter widget is empty). You'll need to insert a new value into the filter widget to override the default. + +## Setting complex default values in the query + +You can also define default values directly in your query by enclosing comment syntax inside the end brackets of an optional parameter. + +```sql +WHERE column = [[ {% raw %}{{ your_parameter }}{% endraw %} --]] your_default_value +``` + +The comment will "activate" whenever you pass a value to `your_parameter`. + +This is useful when defining complex default values (for example, if your default value is a function like `CURRENT_DATE`). Here's a PostgreSQL example that sets the default value of a Date filter to the current date using `CURRENT_DATE`: + +```sql +{% raw %} +SELECT + * +FROM + orders +WHERE + DATE(created_at) = [[ {{dateOfCreation}} --]] CURRENT_DATE +{% endraw %} +``` + +If you pass a value to the variable, the `WHERE` clause runs, including the comment syntax that comments out the default `CURRENT_DATE` function. + +Note that the hash (`--`) used to comment the text might need to be replaced by the comment syntax specific to the database you're using. + +## Requiring a value for a filter widget + +In the **Variable** settings sidebar, you can toggle the **Always require a value** option. If you turn this on: + +- You must enter a default value. +- The default value will override any optional syntax in your code (like an optional `WHERE` clause). If no value is passed to the filter, Metabase will run the query using the default value. Click on the **Eye** icon in the editor to preview the SQL Metabase will run. + +## Making variables optional + +You can make a clause optional in a query. For example, you can create an optional `WHERE` clause that contains a SQL variable, so that if no value is supplied to the variable (either in the filter or via the URL), the query will still run as if there were no `WHERE` clause. + +To make a variable optional in your native query, put `[[ .. ]]` brackets around the entire clause containing the `{% raw %}{{variable}}{% endraw %}`. If someone inputs a value in the filter widget for the `variable`, Metabase will place the clause in the template; otherwise Metabase will ignore the clause and run the query as though the clause didn't exist. + +In this example, if no value is given to `cat`, then the query will just select all the rows from the `products` table. But if `cat` does have a value, like "Widget", then the query will only grab the products with a category type of Widget: + +```sql +{% raw %} +SELECT + count(*) +FROM + products +[[WHERE category = {{cat}}]] +{% endraw %} +``` + +### Your SQL must also be able to run without the optional clause in `[[ ]]` -In order for a SQL/native question to be usable with a [dashboard filter](../../dashboards/filters), the question must contain at least one variable or parameter. +You need to make sure that your SQL is still valid when no value is passed to the variable in the bracketed clause. -The kind of dashboard filter that can be used with the SQL question depends on the field. For example, if you have a field filter called `{% raw %}{{var}}{% endraw %}` and you map it to a field with State semantic type, you can map a location dashboard filter to your SQL question. In this example, you'd: +For example, excluding the `WHERE` keyword from the bracketed clause will cause an error if there's no value given for `cat`: -1. Create a new dashboard (or go to an existing dashboard). -2. Click the **Pencil icon** to enter **Dashboard edit mode**. -3. Add the SQL question that contains your `State` field filter. -4. Add a new dashboard filter (or edit an existing Location filter). -5. Click the dropdown on the SQL question card to connect the widget to the `State` field filter. +```sql +-- this will cause an error: +{% raw %} +SELECT + count(*) +FROM + products +WHERE + [[category = {{cat}}]] +{% endraw %} +``` + +That's because when no value is given for `cat`, Metabase will try to execute SQL as if the clause in `[[ ]]` didn't exist: + +```sql +SELECT + count(*) +FROM + products +WHERE +``` + +which is not a valid SQL query. + +Instead, put the entire `WHERE` clause in `[[ ]]`: + +```sql +{% raw %} +SELECT + count(*) +FROM + products +[[WHERE + category = {{cat}}]] +{% endraw %} +``` + +When there's no value given for `cat`, Metabase will just execute: + +```sql +{% raw %} +SELECT + count(*) +FROM + products +{% endraw %} +``` + +which is still a valid query. + +### You need at least one `WHERE` when using multiple optional clauses + +To use multiple optional clauses, you must include at least one regular `WHERE` clause followed by optional clauses, each starting with `AND`: + +```sql +{% raw %} +SELECT + count(*) +FROM + products +WHERE + TRUE + [[AND id = {{id}}] + [[AND {{category}}]] +{% endraw %} +``` -If you add a basic **Date** variable to the question (i.e., not a field filter), then it's only possible to use the dashboard filter option **Single Date**. So if you're trying to use one of the other Time options on the dashboard, you'll need to change the variable to a [field filter](./field-filters) and map it to a date field. +That last clause uses a Field filter (note the lack of a column in the `AND` clause). When using a field filter, you must exclude the column in the query; you need to map the variable in the side panel. + +### Optional variables in MongoDB + +If you're using MongoDB, you can make an clause optional like so: + +``` +{% raw %} +[ + [[{ + $match: {category: {{cat}}} + },]] + { + $count: "Total" + } +] +{% endraw %} +``` + +Or with multiple optional filters: + +``` +{% raw %} +[ + [[{ $match: {{cat}} },]] + [[{ $match: { price: { "$gt": {{minprice}} } } },]] + { + $count: "Total" + } +] +{% endraw %} +``` + +## Connecting a SQL question to a dashboard filter + +In order for a saved SQL/native question to be usable with a dashboard filter, the question must contain at least one variable. + +The kind of dashboard filter that can be used with the SQL question depends on the field. For example, if you have a field filter called `{% raw %}{{var}}{% endraw %}` and you map it to a State field, you can map a Location dashboard filter to your SQL question. In this example, you'd create a new dashboard (or go to an existing dashboard), click the **Pencil icon** to enter **Dashboard edit mode**, add the SQL question that contains your State Field Filter variable, add a new dashboard filter (or edit an existing Location filter), then click the dropdown on the SQL question card to see the State Field Filter. + +If you add a **Date** variable to the question, then it's only possible to use the dashboard filter option **Single Date**. So if you are trying to use one of the other Time options on the dashboard, you'll need to change the variable to a [Field Filter](#the-field-filter-variable-type) variable and map it to a date column. ![Field filter](../images/state-field-filter.png) +More on [Dashboard filters][dashboard-filters]. + ## Further reading -- [Create filter widgets for charts using SQL variables](/learn/metabase-basics/querying-and-dashboards/sql-in-metabase/sql-variables). -- [Field Filters: create smart filter widgets for SQL questions](/learn/metabase-basics/querying-and-dashboards/sql-in-metabase/field-filters). -- [Troubleshooting SQL](../../troubleshooting-guide/sql). -- [Troubleshooting filters](../../troubleshooting-guide/filters). -- [Dashboard filters](../../dashboards/filters). +- [Create filter widgets for charts using SQL variables][sql-variables]. +- [Field Filters: create smart filter widgets for SQL questions][field-filter]. +- [Troubleshooting SQL][troubleshooting-sql]. +- [Troubleshooting filters][troubleshooting-filters]. +- [Dashboard filters][dashboard-filters]. + +[sql-editor]: ./writing-sql +[dashboard-filters]: ../../dashboards/filters +[field-filter]: /learn/metabase-basics/querying-and-dashboards/sql-in-metabase/field-filters +[sql-variables]: /learn/metabase-basics/querying-and-dashboards/sql-in-metabase/sql-variables +[troubleshooting-filters]: ../../troubleshooting-guide/filters +[troubleshooting-sql]: ../../troubleshooting-guide/sql diff --git a/_docs/master/questions/native-editor/time-grouping-parameters.md b/_docs/master/questions/native-editor/time-grouping-parameters.md deleted file mode 100644 index b6f2b9af1d..0000000000 --- a/_docs/master/questions/native-editor/time-grouping-parameters.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -version: master -has_magic_breadcrumbs: true -show_category_breadcrumb: true -show_title_breadcrumb: true -category: Questions -title: 'Time grouping parameter' -source_url: 'https://github.com/metabase/metabase/blob/master/docs/questions/native-editor/time-grouping-parameters.md' -layout: new-docs ---- - -# Time grouping parameter - -You can add a parameter to SQL questions to change how results are grouped by time: by day, week, month, and so on. - -To add a time grouping parameter, you'll need: - -- An aggregation (like `COUNT`). -- A parameter in the `SELECT` clause -- That same parameter in the `GROUP BY` clause. - -## Time grouping parameter example - -Here's an example that counts the number of orders in the `orders` table and inserts a parameter to allow people to change how Metabase groups the results by the `created_at` column. - -```sql -{% raw %} -SELECT - COUNT(*) AS "Orders", - {{mb.time_grouping("Time grouping", "created_at")}} AS "Created At" -FROM - orders -GROUP BY - {{mb.time_grouping("Time grouping", "created_at")}} -{% endraw %} -``` - -Like in all SQL groupings, you must include the parameter in both the `SELECT` and `GROUP BY` clauses. You can also use the `mb.time_grouping` function on different columns in the same query, like this: - -```sql -SELECT - COUNT(*) AS "Count", - {{created_at_param}} AS "Created at", - {{trial_ends_at}} AS "Trial ends at" -FROM - accounts -GROUP BY - {{created_at_param}}, - {{trial_ends_at}} -``` - -Like with all parameters, you can set a default value (e.g., "month"). With time grouping parameters, you're limited to the options for the [time grouping parameter](../../dashboards/filters#time-grouping-parameter). - -If people don't set a value for the parameter, Metabase won't group to a date part (like day or week). It will just group by untruncated dates. - -## Handling aliases - -Just like with field filters, if you alias a table, then map a time grouping parameter to a field in that aliased table, you'll need to [tell Metabase about the table and field alias](./field-filters#specifying-the-table-and-field-alias). - -## Connecting to a dashboard filter - -See [dashboard filters and parameters](../../dashboards/filters). diff --git a/_docs/master/questions/native-editor/writing-sql.md b/_docs/master/questions/native-editor/writing-sql.md index e1730755b2..fa19e2a2da 100644 --- a/_docs/master/questions/native-editor/writing-sql.md +++ b/_docs/master/questions/native-editor/writing-sql.md @@ -129,7 +129,7 @@ See [Caching question policies](../../configuring-metabase/caching#question-cach [learn-sql]: /learn/sql/working-with-sql [ref-models]: ./referencing-saved-questions-in-queries -[sample-database-gloss]: /glossary/sample-database +[sample-database-gloss]: /glossary/sample_database [sql-gloss]: /glossary/sql [troubleshooting-sql]: ../../troubleshooting-guide/sql [variable-gloss]: /glossary/variable diff --git a/_docs/master/questions/query-builder/expressions/coalesce.md b/_docs/master/questions/query-builder/expressions/coalesce.md index 60e966f06f..4e5b575c5a 100644 --- a/_docs/master/questions/query-builder/expressions/coalesce.md +++ b/_docs/master/questions/query-builder/expressions/coalesce.md @@ -179,7 +179,7 @@ coalesce([Notes], [Comments] "No notes or comments.") - [Custom expressions tutorial][custom-expressions-learn] [case-to-coalesce]: ./case#coalesce -[cast-data-type]: ../../../data-modeling/metadata-editing#cast-to-a-specific-data-type +[cast-data-type]: ../../../data-modeling/metadata-editing#casting-to-a-specific-data-type [custom-expressions-doc]: ../expressions [custom-expressions-learn]: /learn/metabase-basics/querying-and-dashboards/questions/custom-expressions [data-types]: /learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types diff --git a/_docs/master/questions/query-builder/expressions/converttimezone.md b/_docs/master/questions/query-builder/expressions/converttimezone.md index 30aed11ce7..22a7f39ba1 100644 --- a/_docs/master/questions/query-builder/expressions/converttimezone.md +++ b/_docs/master/questions/query-builder/expressions/converttimezone.md @@ -107,7 +107,7 @@ For more gory details, see [Limitations](#limitations). We use "timestamp" and "datetime" to talk about any temporal data type that's supported by Metabase. -If your timestamps are stored as strings or numbers in your database, an admin can [cast them to timestamps](../../../data-modeling/metadata-editing#cast-to-a-specific-data-type) from the Table Metadata page. +If your timestamps are stored as strings or numbers in your database, an admin can [cast them to timestamps](../../../data-modeling/metadata-editing#casting-to-a-specific-data-type) from the Table Metadata page. To use `convertTimezone` without running into errors or pesky undetectable mistakes, you should know that there are a few varieties of `timestamp` data types: @@ -194,7 +194,7 @@ This section covers functions and formulas that work the same way as the Metabas ### SQL -When you run a question using the [query builder](/glossary/query-builder), Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results. +When you run a question using the [query builder](/glossary/query_builder), Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results. If our [timestamp sample data](#creating-custom-report-dates) is a `timestamp without time zone` stored in a PostgreSQL database: diff --git a/_docs/master/questions/query-builder/expressions/countif.md b/_docs/master/questions/query-builder/expressions/countif.md index 34e0d49b2f..f6ed404aa1 100644 --- a/_docs/master/questions/query-builder/expressions/countif.md +++ b/_docs/master/questions/query-builder/expressions/countif.md @@ -172,7 +172,7 @@ You'll also need to set the **Group by** column to "Created Date: Month". ### SQL -When you run a question using the [query builder](/glossary/query-builder), Metabase will convert your query builder settings (filters, summaries, etc.) into a SQL query, and run that query against your database to get your results. +When you run a question using the [query builder](/glossary/query_builder), Metabase will convert your query builder settings (filters, summaries, etc.) into a SQL query, and run that query against your database to get your results. If our [sample data](#multiple-conditions) is stored in a PostgreSQL database, the SQL query: diff --git a/_docs/master/questions/query-builder/expressions/datetimeadd.md b/_docs/master/questions/query-builder/expressions/datetimeadd.md index 6ebb99a2c0..1decb26d4e 100644 --- a/_docs/master/questions/query-builder/expressions/datetimeadd.md +++ b/_docs/master/questions/query-builder/expressions/datetimeadd.md @@ -92,7 +92,7 @@ case(between(now, [Opened On], [Finish By]), "Yes", "No") We use "timestamp" and "datetime" to talk about any temporal data type that's supported by Metabase. For more info about these data types in Metabase, see [Timezones](../../../configuring-metabase/timezones#data-types). -If your timestamps are stored as strings or numbers in your database, an admin can [cast them to timestamps](../../../data-modeling/metadata-editing#cast-to-a-specific-data-type) from the Table Metadata page. +If your timestamps are stored as strings or numbers in your database, an admin can [cast them to timestamps](../../../data-modeling/metadata-editing#casting-to-a-specific-data-type) from the Table Metadata page. ## Limitations @@ -128,7 +128,7 @@ datetimeAdd([Opened On], 14, "day") ### SQL -When you run a question using the [query builder](/glossary/query-builder), Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results. +When you run a question using the [query builder](/glossary/query_builder), Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results. If our [coffee sample data](#calculating-an-end-date) is stored in a PostgreSQL database: diff --git a/_docs/master/questions/query-builder/expressions/datetimediff.md b/_docs/master/questions/query-builder/expressions/datetimediff.md index 7a8578568b..9afc331872 100644 --- a/_docs/master/questions/query-builder/expressions/datetimediff.md +++ b/_docs/master/questions/query-builder/expressions/datetimediff.md @@ -77,7 +77,7 @@ datetimeDiff([Aging Start], now, "day") We use "timestamp" and "datetime" to talk about any temporal data type that's supported by Metabase. For more info about these data types in Metabase, see [Timezones](../../../configuring-metabase/timezones#data-types). -If your timestamps are stored as strings or numbers in your database, an admin can [cast them to timestamps](../../../data-modeling/metadata-editing#cast-to-a-specific-data-type) from the Table Metadata page. +If your timestamps are stored as strings or numbers in your database, an admin can [cast them to timestamps](../../../data-modeling/metadata-editing#casting-to-a-specific-data-type) from the Table Metadata page. ## Limitations @@ -95,7 +95,7 @@ This section covers functions and formulas that work the same way as the Metabas ### SQL -When you run a question using the [query builder](/glossary/query-builder), Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results. +When you run a question using the [query builder](/glossary/query_builder), Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results. If our [cheese sample data](#calculating-age) is stored in a PostgreSQL database: diff --git a/_docs/master/questions/query-builder/expressions/datetimesubtract.md b/_docs/master/questions/query-builder/expressions/datetimesubtract.md index 798d29c4dd..193fa561c9 100644 --- a/_docs/master/questions/query-builder/expressions/datetimesubtract.md +++ b/_docs/master/questions/query-builder/expressions/datetimesubtract.md @@ -92,7 +92,7 @@ case(between(now, [Depart At], [Arrive By]), "Yes", "No") We use "timestamp" and "datetime" to talk about any temporal data type that's supported by Metabase. For more info about these data types in Metabase, see [Timezones](../../../configuring-metabase/timezones#data-types). -If your timestamps are stored as strings or numbers in your database, an admin can [cast them to timestamps](../../../data-modeling/metadata-editing#cast-to-a-specific-data-type) from the Table Metadata page. +If your timestamps are stored as strings or numbers in your database, an admin can [cast them to timestamps](../../../data-modeling/metadata-editing#casting-to-a-specific-data-type) from the Table Metadata page. ## Limitations @@ -128,7 +128,7 @@ datetimeSubtract([Arrive By], 30, "minute") ### SQL -When you run a question using the [query builder](/glossary/query-builder), Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results. +When you run a question using the [query builder](/glossary/query_builder), Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results. If our [events sample data](#calculating-a-start-date) is stored in a PostgreSQL database: diff --git a/_docs/master/questions/query-builder/expressions/isempty.md b/_docs/master/questions/query-builder/expressions/isempty.md index 6ef177a4d8..441bb9e8a9 100644 --- a/_docs/master/questions/query-builder/expressions/isempty.md +++ b/_docs/master/questions/query-builder/expressions/isempty.md @@ -140,6 +140,6 @@ case(isEmpty([Feedback]), "No feedback.", [Feedback]) [custom-expressions-doc]: ../expressions [custom-expressions-learn]: /learn/metabase-basics/querying-and-dashboards/questions/custom-expressions [data-types]: /learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types -[notebook-editor-def]: /glossary/query-builder +[notebook-editor-def]: /glossary/query_builder [numpy]: https://numpy.org/doc/ [pandas]: https://pandas.pydata.org/pandas-docs/stable/ diff --git a/_docs/master/questions/query-builder/expressions/isnull.md b/_docs/master/questions/query-builder/expressions/isnull.md index 2fc4c27cd9..b8702b3c24 100644 --- a/_docs/master/questions/query-builder/expressions/isnull.md +++ b/_docs/master/questions/query-builder/expressions/isnull.md @@ -148,6 +148,6 @@ case(isNull([Feedback]), "Unknown feedback.", [Feedback]) [custom-expressions-doc]: ../expressions [custom-expressions-learn]: /learn/metabase-basics/querying-and-dashboards/questions/custom-expressions [data-types]: /learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types -[notebook-editor-def]: /glossary/query-builder +[notebook-editor-def]: /glossary/query_builder [numpy]: https://numpy.org/doc/ [pandas]: https://pandas.pydata.org/pandas-docs/stable/ diff --git a/_docs/master/questions/query-builder/expressions/now.md b/_docs/master/questions/query-builder/expressions/now.md index dfabb5647c..af25882257 100644 --- a/_docs/master/questions/query-builder/expressions/now.md +++ b/_docs/master/questions/query-builder/expressions/now.md @@ -83,7 +83,7 @@ Different ways to do the same thing, because while you'd love to use custom expr ### SQL -When you run a question using the [query builder](/glossary/query-builder), Metabase will convert your query builder settings (filters, summaries, etc.) into a SQL query, and run that query against your database to get your results. +When you run a question using the [query builder](/glossary/query_builder), Metabase will convert your query builder settings (filters, summaries, etc.) into a SQL query, and run that query against your database to get your results. By default, `now` uses your Metabase's [report time zone](../../../configuring-metabase/localization#report-timezone). If your admin hasn't set a report time zone, `now` will use your database's time zone. diff --git a/_docs/master/questions/query-builder/expressions/sumif.md b/_docs/master/questions/query-builder/expressions/sumif.md index 08a98f0056..51c3cd5d74 100644 --- a/_docs/master/questions/query-builder/expressions/sumif.md +++ b/_docs/master/questions/query-builder/expressions/sumif.md @@ -185,7 +185,7 @@ Don't forget to set the **Group by** column to "Date Received: Month". ### SQL -When you run a question using the [query builder](/glossary/query-builder), Metabase will convert your query builder settings (filters, summaries, etc.) into a SQL query, and run that query against your database to get your results. +When you run a question using the [query builder](/glossary/query_builder), Metabase will convert your query builder settings (filters, summaries, etc.) into a SQL query, and run that query against your database to get your results. If our [payment sample data](#sumif) is stored in a PostgreSQL database, the SQL query: diff --git a/_docs/master/questions/query-builder/join.md b/_docs/master/questions/query-builder/join.md index 9ea8487df5..df1e647967 100644 --- a/_docs/master/questions/query-builder/join.md +++ b/_docs/master/questions/query-builder/join.md @@ -7,7 +7,6 @@ category: Questions title: 'Joining data' source_url: 'https://github.com/metabase/metabase/blob/master/docs/questions/query-builder/join.md' layout: new-docs -summary: 'Learn how to combine data from different tables using joins. We''ll show you how to pick tables, match columns, and choose the right join type.' redirect_from: - /docs/master/users-guide/join --- @@ -18,26 +17,26 @@ redirect_from: You can [join data][join] to combine your current data with another table, or even with a saved question. -After you click the "Join Data" button to add a join step, you'll need to pick the data (from the same database) that you want to join. You can only pick tables and saved questions that are from the same database as your starting data. +After you click on the Join Data button to add a join step, you'll need to pick the data (from the same database) that you want to join. You can only pick tables and saved questions that are from the same database as your starting data. ![Picking the data to join](../images/join-pick-data.png) -Next, you'll need to pick the columns you want to join on. This means you pick a column from the first table and a column from the second table, and the join will stitch rows together where the value from the first column equals the value in the second column. A very common example is joining on an ID column in each table. If you pick a table to join where there's a foreign key relationship between the tables, Metabase will automatically pick those corresponding ID columns for you. At the end of your join step, there's a "Columns" button you can click to choose which columns you want to include from the joined data. +Next, you'll need to pick the columns you want to join on. This means you pick a column from the first table, and a column from the second table, and the join will stitch rows together where the value from the first column is equal to the value in the second column. A very common example is to join on an ID column in each table, so if you happened to pick a table to join on where there is a foreign key relationship between the tables, Metabase will automatically pick those corresponding ID columns for you. At the end of your join step, there's a `Columns` button you can click to choose which columns you want to include from the joined data. -By default, Metabase will do a left outer join, but you can click the Venn diagram icon to select a different type of join. Not all databases support all types of joins, so Metabase will only display the options supported by the database you're using. +By default, Metabase will do a left outer join, but you can click on the Venn diagram icon to select a different type of join. Not all databases support all types of joins, so Metabase will only display the options supported by the database you're using. Here are the basic types of joins: -- **Left outer join:** Select all records from Table A, along with records from Table B that meet the join condition, if any. -- **Right outer join:** Select all records from Table B, along with records from Table A that meet the join condition, if any. -- **Inner join:** Only select the records from Table A and B where the join condition is met. -- **Full outer join:** Select all records from both tables, whether or not the join condition is met. +- **Left outer join:** select all records from Table A, along with records from Table B that meet the join condition, if any. +- **Right outer join:** select all records from Table B, along with records from Table A that meet the join condition, if any. +- **Inner join:** only select the records from Table A and B where the join condition is met. +- **Full outer join:** select all records from both tables, whether or not the join condition is met. -**A left outer join example:** If Table A is Orders and Table B is Customers, and you do a join where the `customer_id` column in Orders equals the `ID` column in Customers, when you do a left outer join your results will be a full list of all your orders, and each order row will also display the columns of the customer who placed that order. Since a single customer can place many orders, a given customer's information might be repeated many times for different order rows. If there isn't a corresponding customer for a given order, the order's information will be shown, but the customer columns will just be blank for that row. +**A left outer join example:** If Table A is Orders and Table B is Customers, and assuming you do a join where the `customer_id` column in Orders is equal to the `ID` column in Customers, when you do a left outer join your results will be a full list of all your orders, and each order row will also display the columns of the customer who placed that order. Since a single customer can place many orders, a given customer's information might be repeated many times for different order rows. If there isn't a corresponding customer for a given order, the order's information will be shown, but the customer columns will just be blank for that row. ## Multiple stages of joins -In many cases you might have tables A, B, and C, where A and B have a connection, and B and C have a connection, but A and C don't. If you want to join A to B to C, all you have to do is add multiple join steps. Click "Join Data," join table A to table B, then click the "Join Data" step below that completed join block to add a second join step, and join the results of your last join to table C. +In many cases you might have tables A, B, and C, where A and B have a connection, and B and C have a connection, but A and C don't. If you want to join A to B to C, all you have to do is add multiple join steps. Click on Join Data, join table A to table B, then click the Join Data step below that completed join block to add a second join step, and join the results of your last join to table C. ![An A to B to C join](../images/join-a-b-c.png) @@ -60,42 +59,10 @@ You can join tables on comparison conditions like: ![Join operators](../images/join-operator.png) -## Joins with custom expressions - -Sometimes you want to join data using constant values, relative dates, or some other custom conditions. - -For example, let's say you have a table of reviews and want to add a column that includes the average rating for all products. - -You could first calculate the average rating, then join the result to the reviews table on `1=1`. - -![Join with custom expression](../images/join-with-custom-expression.png) - -To use a custom expression to define a join key: - -1. Click on one of the join keys. -2. Select **custom expression**. -3. Enter your expression (including a constant like `1`). -4. Click **Done**. - -Another example: Let's say you have: - - - A `customers` table that stores names under `first_name` and `last_name` - - An `accounts` table that stores first and last names in a single column, `full_name` - -You could join those tables using a custom expression. The join key for the `customers` table would look something like: - -``` -concat([first_name], " ", [last_name]) -``` - -And the join key for the `accounts` table would simply be the `full_name` column. - -Take a look at our [list of expressions](./expressions-list). - ## Further reading - [Joins in Metabase][join] -- [Types of joins][join-types] +- [Type of joins][join-types] [join]: /learn/metabase-basics/querying-and-dashboards/questions/joins-in-metabase [join-types]: /learn/sql/working-with-sql/sql-join-types diff --git a/_docs/master/questions/start.md b/_docs/master/questions/start.md index 57009c77e1..9c0fc8bfa9 100644 --- a/_docs/master/questions/start.md +++ b/_docs/master/questions/start.md @@ -49,30 +49,6 @@ Write native code (like SQL) to query your data source. Pass parameters into variables in your SQL templates. -### [Field filters](./native-editor/field-filters) - -Create smart filter widgets by connecting field filter variables to fields in your database. - -### [Basic SQL parameters](./native-editor/basic-sql-parameters) - -Learn the basics of using parameters in SQL queries. - -### [Optional variables](./native-editor/optional-variables) - -Use brackets to create parameters that can be left empty in your queries. - -### [Time grouping parameters](./native-editor/time-grouping-parameters) - -Group your data by time periods using parameters in native queries. - -### [Filter widgets](./native-editor/filter-widgets) - -Configure filter widgets connected to variables in your native queries. - -### [Referencing saved questions in queries](./native-editor/referencing-saved-questions-in-queries) - -Use saved questions as data sources in your native queries. - ### [Snippets](./native-editor/snippets) Reuse and share bits of SQL. diff --git a/_docs/master/questions/visualizations/country-codes.md b/_docs/master/questions/visualizations/country-codes.md deleted file mode 100644 index ae4a15f291..0000000000 --- a/_docs/master/questions/visualizations/country-codes.md +++ /dev/null @@ -1,269 +0,0 @@ ---- -version: master -has_magic_breadcrumbs: true -show_category_breadcrumb: true -show_title_breadcrumb: true -category: Questions -title: 'Country codes' -source_url: 'https://github.com/metabase/metabase/blob/master/docs/questions/visualizations/country-codes.md' -layout: new-docs ---- - -# Country codes - -This reference lists all country codes and their corresponding country names used in Metabase's default world map visualizations. The data comes from the GeoJSON world map file and includes 250 countries, territories, and administrative regions. - -Use these ISO 3166-1 alpha-2 country codes and country names when working with geographic data in Metabase. - -| Country code | Country name | -| ------------ | ------------------------------------ | -| AD | Andorra | -| AE | United Arab Emirates | -| AF | Afghanistan | -| AG | Antigua and Barbuda | -| AI | Anguilla | -| AL | Albania | -| AM | Armenia | -| AO | Angola | -| AQ | Antarctica | -| AR | Argentina | -| AS | American Samoa | -| AT | Austria | -| AU | Australia | -| AW | Aruba | -| AX | Åland | -| AZ | Azerbaijan | -| BA | Bosnia and Herzegovina | -| BB | Barbados | -| BD | Bangladesh | -| BE | Belgium | -| BF | Burkina Faso | -| BG | Bulgaria | -| BH | Bahrain | -| BI | Burundi | -| BJ | Benin | -| BL | St-Barthélemy | -| BM | Bermuda | -| BN | Brunei | -| BO | Bolivia | -| BQ | Caribbean Netherlands | -| BR | Brazil | -| BS | Bahamas | -| BT | Bhutan | -| BV | Bouvet I. | -| BW | Botswana | -| BY | Belarus | -| BZ | Belize | -| CA | Canada | -| CC | Cocos Is. | -| CD | Dem. Rep. Congo | -| CF | Central African Rep. | -| CG | Congo | -| CH | Switzerland | -| CI | Côte d'Ivoire | -| CK | Cook Is. | -| CL | Chile | -| CM | Cameroon | -| CN | China | -| CO | Colombia | -| CR | Costa Rica | -| CU | Cuba | -| CV | Cabo Verde | -| CW | Curaçao | -| CX | Christmas I. | -| CY | Cyprus | -| CZ | Czechia | -| DE | Germany | -| DJ | Djibouti | -| DK | Denmark | -| DM | Dominica | -| DO | Dominican Rep. | -| DZ | Algeria | -| EC | Ecuador | -| EE | Estonia | -| EG | Egypt | -| EH | W. Sahara | -| ER | Eritrea | -| ES | Spain | -| ET | Ethiopia | -| FI | Finland | -| FJ | Fiji | -| FK | Falkland Is. | -| FM | Micronesia | -| FO | Faeroe Is. | -| FR | France | -| GA | Gabon | -| GB | United Kingdom | -| GD | Grenada | -| GE | Georgia | -| GF | French Guiana | -| GG | Guernsey | -| GH | Ghana | -| GI | Gibraltar | -| GL | Greenland | -| GM | Gambia | -| GN | Guinea | -| GP | Guadeloupe | -| GQ | Eq. Guinea | -| GR | Greece | -| GS | S. Geo. and the Is. | -| GT | Guatemala | -| GU | Guam | -| GW | Guinea-Bissau | -| GY | Guyana | -| HK | Hong Kong | -| HM | Heard I. and McDonald Is. | -| HN | Honduras | -| HR | Croatia | -| HT | Haiti | -| HU | Hungary | -| ID | Indonesia | -| IE | Ireland | -| IL | Israel | -| IM | Isle of Man | -| IN | India | -| IO | Br. Indian Ocean Ter. | -| IQ | Iraq | -| IR | Iran | -| IS | Iceland | -| IT | Italy | -| JE | Jersey | -| JM | Jamaica | -| JO | Jordan | -| JP | Japan | -| KE | Kenya | -| KG | Kyrgyzstan | -| KH | Cambodia | -| KI | Kiribati | -| KM | Comoros | -| KN | St. Kitts and Nevis | -| KP | North Korea | -| KR | South Korea | -| KW | Kuwait | -| KY | Cayman Is. | -| KZ | Kazakhstan | -| LA | Laos | -| LB | Lebanon | -| LC | Saint Lucia | -| LI | Liechtenstein | -| LK | Sri Lanka | -| LR | Liberia | -| LS | Lesotho | -| LT | Lithuania | -| LU | Luxembourg | -| LV | Latvia | -| LY | Libya | -| MA | Morocco | -| MC | Monaco | -| MD | Moldova | -| ME | Montenegro | -| MF | St-Martin | -| MG | Madagascar | -| MH | Marshall Is. | -| MK | Macedonia | -| ML | Mali | -| MM | Myanmar | -| MN | Mongolia | -| MO | Macao | -| MP | N. Mariana Is. | -| MQ | Martinique | -| MR | Mauritania | -| MS | Montserrat | -| MT | Malta | -| MU | Mauritius | -| MV | Maldives | -| MW | Malawi | -| MX | Mexico | -| MY | Malaysia | -| MZ | Mozambique | -| NA | Namibia | -| NC | New Caledonia | -| NE | Niger | -| NF | Norfolk Island | -| NG | Nigeria | -| NI | Nicaragua | -| NL | Netherlands | -| NO | Norway | -| NP | Nepal | -| NR | Nauru | -| NU | Niue | -| NZ | New Zealand | -| OM | Oman | -| PA | Panama | -| PE | Peru | -| PF | Fr. Polynesia | -| PG | Papua New Guinea | -| PH | Philippines | -| PK | Pakistan | -| PL | Poland | -| PM | St. Pierre and Miquelon | -| PN | Pitcairn Is. | -| PR | Puerto Rico | -| PS | Palestine | -| PT | Portugal | -| PW | Palau | -| PY | Paraguay | -| QA | Qatar | -| RE | Réunion | -| RO | Romania | -| RS | Serbia | -| RU | Russia | -| RW | Rwanda | -| SA | Saudi Arabia | -| SB | Solomon Is. | -| SC | Seychelles | -| SD | Sudan | -| SE | Sweden | -| SG | Singapore | -| SH | Saint Helena | -| SI | Slovenia | -| SJ | Svalbard and Jan Mayen | -| SK | Slovakia | -| SL | Sierra Leone | -| SM | San Marino | -| SN | Senegal | -| SO | Somalia | -| SR | Suriname | -| SS | S. Sudan | -| ST | São Tomé and Principe | -| SV | El Salvador | -| SX | Sint Maarten | -| SY | Syria | -| SZ | eSwatini | -| TC | Turks and Caicos Is. | -| TD | Chad | -| TF | Fr. S. Antarctic Lands | -| TG | Togo | -| TH | Thailand | -| TJ | Tajikistan | -| TK | Tokelau | -| TL | Timor-Leste | -| TM | Turkmenistan | -| TN | Tunisia | -| TO | Tonga | -| TR | Turkey | -| TT | Trinidad and Tobago | -| TV | Tuvalu | -| TW | Taiwan | -| TZ | Tanzania | -| UA | Ukraine | -| UG | Uganda | -| UM | United States Minor Outlying Islands | -| US | United States of America | -| UY | Uruguay | -| UZ | Uzbekistan | -| VA | Vatican | -| VC | St. Vin. and Gren. | -| VE | Venezuela | -| VG | British Virgin Is. | -| VI | U.S. Virgin Is. | -| VN | Vietnam | -| VU | Vanuatu | -| WF | Wallis and Futuna Is. | -| WS | Samoa | -| XK | Kosovo | -| YE | Yemen | -| YT | Mayotte | -| ZA | South Africa | -| ZM | Zambia | -| ZW | Zimbabwe | diff --git a/_docs/master/questions/visualizations/map.md b/_docs/master/questions/visualizations/map.md index 53cd2d0adc..85a4a6d535 100644 --- a/_docs/master/questions/visualizations/map.md +++ b/_docs/master/questions/visualizations/map.md @@ -45,7 +45,7 @@ To create a pin map: 1. Build a query with latitude and longitude columns for each data point (either in the query builder or using SQL); 2. Select **Visualization**, and pick **Map**; -3. If your query results have columns whose field type is set to latitude/longitude in [table metadata](../../data-modeling/metadata-editing#semantic-type), Metabase should build a pin map automatically. +3. If your query results have columns whose field type is set to latitude/longitude in [table metadata](../../data-modeling/metadata-editing#field-type), Metabase should build a pin map automatically. Otherwise, click on the **Gear** icon to go to visualization settings, choose **Map type: Pin map**, and pick columns that contain latitude and longitude coordinates. @@ -77,7 +77,7 @@ To create a grid map: 1. Build a query with summary by binned latitude and longitude columns (either in the query builder or using SQL); 2. Select **Visualization**, and pick **Map**; -3. If your query results have columns whose field type is set to latitude/longitude in [table metadata](../../data-modeling/metadata-editing#semantic-type), Metabase should build a grid map automatically. +3. If your query results have columns whose field type is set to latitude/longitude in [table metadata](../../data-modeling/metadata-editing#field-type), Metabase should build a grid map automatically. Otherwise, click on the **Gear** icon to go to visualization settings, choose **Map type: grid map**, and pick columns that contain latitude and longitude coordinates. @@ -118,7 +118,7 @@ You can change the base color used for the region map, but you can't currently u ### World Map -To visualize your results in the format of a map of the world broken out by country, your result must contain a column with [two-letter ISO country codes](./country-codes), like "US" or "BR", or country names like "United States of America" or "Brazil". For example: +To visualize your results in the format of a map of the world broken out by country, your result must contain a column with [two-letter ISO country codes](/glossary/country-code), like "US" or "BR", for example: | Country code | Metric | | ------------ | ------ | @@ -129,7 +129,7 @@ To visualize your results in the format of a map of the world broken out by coun The country codes in the query results must match the two-letter codes exactly: if the country codes are lowercase or contain extra spaces, Metabase won't recognize them. -If your query result has columns with [semantic type](../../data-modeling/metadata-editing#semantic-type) "Country", Metabase should build a world map automatically. Otherwise, you can choose which columns to use as the country name in the **Region field** visualization setting. +If your query result has columns with [semantic type](../../data-modeling/metadata-editing#field-type) "Country", Metabase should build a world map automatically. Otherwise, you can choose which columns to use as the country name in the **Region field** visualization setting. You can connect the country column in the world region map to a "Location" type dashboard filter. @@ -144,7 +144,7 @@ Creating a map of the United States from your data requires your results to cont | Texas | 34 | | Illinois | 67 | -If your query result has columns with [semantic type](../../data-modeling/metadata-editing#semantic-type) "State", Metabase should build a US map automatically. Otherwise, you can choose which columns to use as the country name in the visualization settings. +If your query result has columns with [semantic type](../../data-modeling/metadata-editing#field-type) "State", Metabase should build a US map automatically. Otherwise, you can choose which columns to use as the country name in the visualization settings. You can connect the state column in the US region map to a "Location" type dashboard filter. diff --git a/_docs/master/questions/visualizations/table.md b/_docs/master/questions/visualizations/table.md index c6d8bcd48b..935ee919f3 100644 --- a/_docs/master/questions/visualizations/table.md +++ b/_docs/master/questions/visualizations/table.md @@ -27,7 +27,7 @@ When viewing tables, you can click on the **gear** icon in the bottom left to br ![Adding or removing columns](../images/column-selection.png) -Admins (and people in groups with access to table metadata) can hide columns across your entire Metabase by marking them as hidden in the [table metadata settings](../../data-modeling/metadata-editing#field-visibility). +Admins (and people in groups with access to table metadata) can hide columns across your entire Metabase by marking them as hidden in the [table metadata settings](../../data-modeling/metadata-editing#column-visibility). > **Hiding columns should _not_ be used to secure sensitive information**. Hiding columns in table visualization settings only affects the visibility of the columns _in the visualization_, not in the query results. Even people with view-only permissions to the question will be able to change the visualization settings and unhide columns. To exclude a column from the results of a specific query, uncheck the column in the "Data" block of the query builder. diff --git a/_docs/master/troubleshooting-guide/filters.md b/_docs/master/troubleshooting-guide/filters.md index 92ed0eea69..ffe3c11bdc 100644 --- a/_docs/master/troubleshooting-guide/filters.md +++ b/_docs/master/troubleshooting-guide/filters.md @@ -39,7 +39,7 @@ If a question filter is giving you no results or the wrong results: - asking your database admin. 3. Ask your Metabase admin to help you check if: - Metabase is [up to date](../databases/sync-scan) with your database, - - the column is [visible](../data-modeling/metadata-editing#field-visibility) in Metabase, + - the column is [visible](../data-modeling/metadata-editing#column-visibility) in Metabase, - you have the correct [data permissions](../permissions/data) to access the column. ### Special cases @@ -47,7 +47,7 @@ If a question filter is giving you no results or the wrong results: If you're having trouble filtering on a: - [Custom column](../questions/query-builder/editor#custom-columns): check if the custom expression is working as expected. For example, your custom expression might be returning blank values when you expect numbers. -- [SQL field filter](../questions/native-editor/field-filters): make sure you're using the correct [field filter syntax](../questions/native-editor/field-filters#field-filter-syntax), then see [Troubleshooting SQL variables](./sql#sql-variables-and-field-filters). +- [SQL field filter](../questions/native-editor/sql-parameters#the-field-filter-variable-type): make sure you're using the correct [field filter syntax](../questions/native-editor/sql-parameters#field-filter-syntax), then see [Troubleshooting SQL variables](./sql#sql-variables-and-field-filters). **Explanation** @@ -72,7 +72,7 @@ To debug dashboard and question filters that involve timestamps, UUIDs, or numer - the [Table Metadata page](../data-modeling/metadata-editing) (admins only), or - directly from the database. 2. Cast the column to a data type that matches the desired [filter type](../questions/query-builder/filters#filter-types). You can: - - [cast strings or numbers to dates](../data-modeling/metadata-editing#cast-to-a-specific-data-type) from the Table Metadata page, or + - [cast strings or numbers to dates](../data-modeling/metadata-editing#casting-to-a-specific-data-type) from the Table Metadata page, or - change the data type of the column in your database, and [re-sync](../databases/sync-scan#manually-syncing-tables-and-columns) the database schema. If you're not a Metabase admin, you might have to ask your admin to help you with some of these steps. @@ -85,7 +85,7 @@ Timestamps, in particular, are the root of all evil, so please be patient with y ## Field filters in BigQuery and Oracle -If you are getting an error when using field filters with BigQuery or Oracle, make sure you use the correct syntax for the `FROM` clause. See [Field filters in BigQuery and Oracle](../questions/native-editor/field-filters#field-filters-in-bigquery-and-oracle). +If you are getting an error when using field filters with BigQuery or Oracle, make sure you use the correct syntax for the `FROM` clause. See [Field filters in BigQuery and Oracle](../questions/native-editor/sql-parameters#field-filters-in-bigquery-and-oracle). ## Missing or incorrect filter values diff --git a/_docs/master/troubleshooting-guide/linked-filters.md b/_docs/master/troubleshooting-guide/linked-filters.md index 563d7fbd5c..2313faf8a6 100644 --- a/_docs/master/troubleshooting-guide/linked-filters.md +++ b/_docs/master/troubleshooting-guide/linked-filters.md @@ -21,11 +21,11 @@ If you are having problems with a regular [filter widget][filter-widget-gloss], ## Does a connected dashboard card use a SQL variable? -**Root cause**: Native/SQL questions must have a [field filter](../questions/native-editor/field-filters) variable in order to be linked. Regular SQL variables won't work. +**Root cause**: Native/SQL questions must have a [field filter](../questions/native-editor/sql-parameters#the-field-filter-variable-type) variable in order to be linked. Regular SQL variables won't work. **Steps to take**: -1. Update the card's query to change the regular variable to a [field filter](../questions/native-editor/field-filters) variable. +1. Update the card's query to change the regular variable to a [field filter](../questions/native-editor/sql-parameters#the-field-filter-variable-type) variable. See [Limitations of linking filters](../dashboards/linked-filters#limitations-of-linked-filters). diff --git a/_docs/master/troubleshooting-guide/sql.md b/_docs/master/troubleshooting-guide/sql.md index 53983e0683..6149dd0a04 100644 --- a/_docs/master/troubleshooting-guide/sql.md +++ b/_docs/master/troubleshooting-guide/sql.md @@ -22,8 +22,9 @@ layout: new-docs ## SQL variables and field filters - [Filter widget doesn't display a dropdown menu of values](../data-modeling/metadata-editing#changing-a-search-box-filter-to-a-dropdown-filter). -- [SQL query contains table aliases](../questions/native-editor/field-filters#specifying-the-table-and-field-alias). -- [SQL syntax error: missing `FROM` clause](../questions/native-editor/field-filters#field-filters-must-be-connected-to-database-fields-included-in-the-query). +- [SQL query contains table aliases](../questions/native-editor/sql-parameters#field-filters-dont-work-with-table-aliases). +- [SQL syntax error: missing `FROM` clause](../questions/native-editor/sql-parameters#field-filters-must-be-connected-to-fields-included-in-the-query). +- [No option to display a filter widget](../questions/native-editor/sql-parameters#field-filter-compatible-types). - [I don't know the SQL variable type](/learn/metabase-basics/querying-and-dashboards/sql-in-metabase/sql-variables) ## SQL syntax errors diff --git a/_docs/master/usage-and-performance-tools/images/audit-dashboards.png b/_docs/master/usage-and-performance-tools/images/audit-dashboards.png index fb1801bc32..aa3faabac3 100644 Binary files a/_docs/master/usage-and-performance-tools/images/audit-dashboards.png and b/_docs/master/usage-and-performance-tools/images/audit-dashboards.png differ diff --git a/_docs/master/usage-and-performance-tools/images/audit-teammember.png b/_docs/master/usage-and-performance-tools/images/audit-teammember.png index 73fa55a29d..8c9b5bcbb9 100644 Binary files a/_docs/master/usage-and-performance-tools/images/audit-teammember.png and b/_docs/master/usage-and-performance-tools/images/audit-teammember.png differ diff --git a/_site/docs/master/api.html b/_site/docs/master/api.html index 1cdcfe3110..090c90c3e4 100644 --- a/_site/docs/master/api.html +++ b/_site/docs/master/api.html @@ -190,105 +190,6 @@ }, "required" : [ "zoom", "x", "y", "lat-field", "lon-field" ] }, - "gsheets.response" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "error" : { - "type" : "boolean" - }, - "message" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "error", "message" ] - }, { - "oneOf" : [ { - "type" : "object", - "properties" : { } - }, { - "type" : "object", - "properties" : { - "created_at" : { - "type" : "integer", - "minimum" : 1 - }, - "created_by_id" : { - "type" : "integer", - "minimum" : 1 - }, - "db_id" : { - "type" : "integer", - "minimum" : 1 - }, - "sync_started_at" : { - "type" : "integer", - "minimum" : 1 - }, - "url" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "url", "created_at", "sync_started_at", "created_by_id", "db_id" ] - }, { - "type" : "object", - "properties" : { - "created_at" : { - "type" : "integer", - "minimum" : 1 - }, - "created_by_id" : { - "type" : "integer", - "minimum" : 1 - }, - "db_id" : { - "type" : "integer", - "minimum" : 1 - }, - "last_sync_at" : { - "type" : "integer", - "minimum" : 1 - }, - "next_sync_at" : { - "type" : "integer", - "minimum" : 1 - }, - "url" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "url", "created_at", "last_sync_at", "next_sync_at", "created_by_id", "db_id" ] - }, { - "type" : "object", - "properties" : { - "created_at" : { - "type" : "integer", - "minimum" : 1 - }, - "created_by_id" : { - "type" : "integer", - "minimum" : 1 - }, - "db_id" : { - "type" : "integer", - "minimum" : 1 - }, - "error_message" : { - "type" : "string", - "minLength" : 1 - }, - "url" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "url", "created_at", "error_message", "created_by_id", "db_id" ] - } ] - } ] - }, "metabase-enterprise.metabot-v3.client.schema.message" : { "allOf" : [ { "type" : "object", @@ -374,126 +275,10 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.answer-sources-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "type" : "object", - "properties" : { - "metrics" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.full-metric" - } - }, - "models" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.full-table" - } - } - }, - "required" : [ "metrics", "models" ] - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.basic-metric" : { - "type" : "object", - "properties" : { - "default_time_dimension_field_id" : { - "type" : "string" - }, - "description" : { - "type" : "string" - }, - "id" : { - "type" : "integer" - }, - "name" : { - "type" : "string" - }, - "type" : { - "const" : "metric" - } - }, - "required" : [ "id", "type", "name" ] - }, - "metabase-enterprise.metabot-v3.tools.api.basic-table" : { - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "fields" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" - }, - "id" : { - "type" : "integer" - }, - "metrics" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.basic-metric" - } - }, - "name" : { - "type" : "string" - }, - "type" : { - "type" : "string", - "enum" : [ "model", "table" ] - } - }, - "required" : [ "id", "type", "name", "fields" ] - }, "metabase-enterprise.metabot-v3.tools.api.bucket" : { "type" : "string", "enum" : [ "millisecond", "second", "minute", "hour", "day", "week", "month", "quarter", "year", "second-of-minute", "minute-of-hour", "hour-of-day", "day-of-week", "day-of-month", "day-of-year", "week-of-year", "month-of-year", "quarter-of-year", "year-of-era" ] }, - "metabase-enterprise.metabot-v3.tools.api.column" : { - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "field_id" : { - "type" : "string" - }, - "field_values" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.field-values" - }, - "name" : { - "type" : "string" - }, - "semantic_type" : { - "type" : "string" - }, - "type" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.field-type" - } - }, - "required" : [ "field_id", "name" ] - }, - "metabase-enterprise.metabot-v3.tools.api.columns" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.column" - } - }, - "metabase-enterprise.metabot-v3.tools.api.count" : { - "type" : "integer" - }, "metabase-enterprise.metabot-v3.tools.api.create-dashboard-subscription-arguments" : { "allOf" : [ { "type" : "object", @@ -656,28 +441,6 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.field-type" : { - "type" : "string", - "enum" : [ "boolean", "date", "datetime", "time", "number", "string" ] - }, - "metabase-enterprise.metabot-v3.tools.api.field-values" : { - "anyOf" : [ { - "type" : "array", - "items" : { - "type" : "boolean" - } - }, { - "type" : "array", - "items" : { - "type" : "number" - } - }, { - "type" : "array", - "items" : { - "type" : "string" - } - } ] - }, "metabase-enterprise.metabot-v3.tools.api.field-values-arguments" : { "allOf" : [ { "type" : "object", @@ -702,38 +465,6 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.field-values-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "type" : "object", - "properties" : { - "field_id" : { - "type" : "string" - }, - "statistics" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.statistics" - }, - "values" : { - "type" : "array", - "items" : { } - } - }, - "required" : [ "field_id" ] - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, "metabase-enterprise.metabot-v3.tools.api.filter" : { "anyOf" : [ { "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.existence-filter" @@ -813,86 +544,6 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.filtering-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "type" : "object", - "properties" : { - "query" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Query" - }, - "query_id" : { - "type" : "string" - }, - "result_columns" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.column" - } - }, - "type" : { - "const" : "query" - } - }, - "required" : [ "type", "query_id", "query", "result_columns" ] - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.find-metric-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "type" : "object", - "properties" : { - "default_time_dimension_field_id" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.column" - }, - "description" : { - "type" : "string" - }, - "id" : { - "type" : "integer" - }, - "name" : { - "type" : "string" - }, - "queryable_dimensions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.column" - } - }, - "type" : { - "const" : "metric" - } - }, - "required" : [ "id", "type", "name", "queryable_dimensions" ] - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, "metabase-enterprise.metabot-v3.tools.api.find-outliers-arguments" : { "allOf" : [ { "type" : "object", @@ -962,97 +613,6 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.find-outliers-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "dimension" : { }, - "value" : { - "anyOf" : [ { - "type" : "integer" - }, { - "type" : "number" - } ] - } - }, - "required" : [ "dimension", "value" ] - } - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.full-metric" : { - "type" : "object", - "properties" : { - "default_time_dimension_field_id" : { - "type" : "string" - }, - "description" : { - "type" : "string" - }, - "id" : { - "type" : "integer" - }, - "name" : { - "type" : "string" - }, - "queryable_dimensions" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" - }, - "type" : { - "const" : "metric" - } - }, - "required" : [ "id", "type", "name" ] - }, - "metabase-enterprise.metabot-v3.tools.api.full-table" : { - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "fields" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" - }, - "id" : { - "type" : "integer" - }, - "metrics" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.basic-metric" - } - }, - "name" : { - "type" : "string" - }, - "queryable_foreign_key_tables" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.basic-table" - } - }, - "type" : { - "type" : "string", - "enum" : [ "model", "table" ] - } - }, - "required" : [ "id", "type", "name", "fields" ] - }, "metabase-enterprise.metabot-v3.tools.api.generate-insights-arguments" : { "type" : "object", "properties" : { @@ -1095,74 +655,6 @@ }, "required" : [ "for" ] }, - "metabase-enterprise.metabot-v3.tools.api.get-current-user-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "type" : "object", - "properties" : { - "email_address" : { - "type" : "string" - }, - "id" : { - "type" : "integer" - }, - "name" : { - "type" : "string" - }, - "type" : { - "const" : "user" - } - }, - "required" : [ "id", "type", "name", "email_address" ] - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.get-dashboard-details-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "id" : { - "type" : "integer" - }, - "name" : { - "type" : "string" - }, - "type" : { - "const" : "dashboard" - } - }, - "required" : [ "id", "type", "name" ] - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, "metabase-enterprise.metabot-v3.tools.api.get-metric-details-arguments" : { "allOf" : [ { "type" : "object", @@ -1189,60 +681,6 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.get-metric-details-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.full-metric" - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.get-query-details-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "type" : "object", - "properties" : { - "query" : { - "type" : "object", - "properties" : { } - }, - "query_id" : { - "type" : "string" - }, - "result_columns" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" - }, - "type" : { - "const" : "query" - } - }, - "required" : [ "type", "query_id", "query", "result_columns" ] - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, "metabase-enterprise.metabot-v3.tools.api.get-report-details-arguments" : { "allOf" : [ { "type" : "object", @@ -1265,43 +703,6 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.get-report-details-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "id" : { - "type" : "integer" - }, - "name" : { - "type" : "string" - }, - "result_columns" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" - }, - "type" : { - "const" : "question" - } - }, - "required" : [ "id", "type", "name", "result_columns" ] - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, "metabase-enterprise.metabot-v3.tools.api.get-table-details-arguments" : { "allOf" : [ { "type" : "object", @@ -1338,25 +739,6 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.get-table-details-result" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "structured_output" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.full-table" - } - }, - "required" : [ "structured_output" ] - }, { - "type" : "object", - "properties" : { - "output" : { - "type" : "string" - } - }, - "required" : [ "output" ] - } ] - }, "metabase-enterprise.metabot-v3.tools.api.group-by" : { "allOf" : [ { "type" : "object", @@ -1400,9 +782,6 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.proportion" : { - "type" : "number" - }, "metabase-enterprise.metabot-v3.tools.api.query-metric-arguments" : { "allOf" : [ { "type" : "object", @@ -1486,59 +865,6 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.statistics" : { - "type" : "object", - "properties" : { - "values" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.field-values" - }, - "min" : { - "type" : "number" - }, - "percent_url" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" - }, - "average_length" : { - "type" : "number" - }, - "earliest" : { - "type" : "string" - }, - "q1" : { - "type" : "number" - }, - "max" : { - "type" : "number" - }, - "distinct_count" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.count" - }, - "percent_state" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" - }, - "percent_null" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" - }, - "avg" : { - "type" : "number" - }, - "sd" : { - "type" : "number" - }, - "percent_email" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" - }, - "latest" : { - "type" : "string" - }, - "q3" : { - "type" : "number" - }, - "percent_json" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" - } - } - }, "metabase-enterprise.metabot-v3.tools.api.string-filter" : { "allOf" : [ { "type" : "object", @@ -1677,53 +1003,192 @@ }, "required" : [ "conversation_id" ] }, - "metabase.analyze.query-results.ResultsMetadata" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.legacy-column-metadata" - }, - "description" : "value must be an array of valid results column metadata maps.", - "optional" : true - }, - "metabase.cache.api..cache-strategy.base" : { + "metabase.analyze.fingerprint.schema.Fingerprint" : { "type" : "object", "properties" : { + "experimental" : { + "type" : "object", + "properties" : { } + }, + "global" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.GlobalFingerprint" + }, "type" : { - "type" : "string", - "enum" : [ "nocache", "ttl", "duration", "schedule" ] + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.TypeSpecificFingerprint" } - }, - "required" : [ "type" ] - }, - "metabase.cache.api..cache-strategy.ee" : { - "description" : "Schema for a caching strategy in EE when we have an premium token with `:cache-granular-controls`.", - "allOf" : [ { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.base" - }, { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.nocache" - }, { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ttl" - }, { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ee.duration" - }, { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ee.schedule" - } ] - } ] + } }, - "metabase.cache.api..cache-strategy.ee.duration" : { + "metabase.analyze.fingerprint.schema.GlobalFingerprint" : { "type" : "object", "properties" : { - "duration" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "refresh_automatically" : { - "type" : "boolean" - }, - "type" : { - "const" : "duration" + "distinct-count" : { + "type" : "integer" + }, + "nil%" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" + } + } + }, + "metabase.analyze.fingerprint.schema.NumberFingerprint" : { + "type" : "object", + "properties" : { + "avg" : { + "type" : "number" + }, + "max" : { + "type" : "number" + }, + "min" : { + "type" : "number" + }, + "q1" : { + "type" : "number" + }, + "q3" : { + "type" : "number" + }, + "sd" : { + "type" : "number" + } + } + }, + "metabase.analyze.fingerprint.schema.Percent" : { + "type" : "number" + }, + "metabase.analyze.fingerprint.schema.TemporalFingerprint" : { + "type" : "object", + "properties" : { + "earliest" : { + "type" : "string" + }, + "latest" : { + "type" : "string" + } + } + }, + "metabase.analyze.fingerprint.schema.TextFingerprint" : { + "type" : "object", + "properties" : { + "average-length" : { + "type" : "number" + }, + "percent-email" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" + }, + "percent-json" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" + }, + "percent-state" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" + }, + "percent-url" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" + } + } + }, + "metabase.analyze.fingerprint.schema.TypeSpecificFingerprint" : { + "type" : "object", + "properties" : { + "type/DateTime" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.TemporalFingerprint" + }, + "type/Number" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.NumberFingerprint" + }, + "type/Text" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.TextFingerprint" + } + } + }, + "metabase.analyze.query-results.MaybeUnnormalizedReference" : { }, + "metabase.analyze.query-results.ResultColumnMetadata" : { + "type" : "object", + "properties" : { + "field_ref" : { + "$ref" : "#/components/schemas/metabase.analyze.query-results.MaybeUnnormalizedReference" + }, + "fingerprint" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Fingerprint" + }, + "base_type" : { + "description" : "value must be a valid field data type (keyword or string)." + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "name" : { + "type" : "string" + }, + "semantic_type" : { + "description" : "value must be a valid field semantic or relation type (keyword or string)." + }, + "display_name" : { + "type" : "string" + }, + "converted_timezone" : { + "$ref" : "#/components/schemas/metabase.lib.schema.expression.temporal.timezone-id" + }, + "unit" : { + "description" : "value must be a keyword or string.", + "anyOf" : [ { + "type" : "string" + }, { + "type" : "string" + } ] + }, + "description" : { + "type" : "string" + } + }, + "required" : [ "name", "display_name", "base_type" ] + }, + "metabase.analyze.query-results.ResultsMetadata" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.analyze.query-results.ResultColumnMetadata" + }, + "description" : "value must be an array of valid results column metadata maps.", + "optional" : true + }, + "metabase.cache.api..cache-strategy.base" : { + "type" : "object", + "properties" : { + "type" : { + "type" : "string", + "enum" : [ "nocache", "ttl", "duration", "schedule" ] + } + }, + "required" : [ "type" ] + }, + "metabase.cache.api..cache-strategy.ee" : { + "description" : "Schema for a caching strategy in EE when we have an premium token with `:cache-granular-controls`.", + "allOf" : [ { + "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.base" + }, { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.nocache" + }, { + "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ttl" + }, { + "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ee.duration" + }, { + "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ee.schedule" + } ] + } ] + }, + "metabase.cache.api..cache-strategy.ee.duration" : { + "type" : "object", + "properties" : { + "duration" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "refresh_automatically" : { + "type" : "boolean" + }, + "type" : { + "const" : "duration" }, "unit" : { "type" : "string", @@ -1839,2470 +1304,82 @@ "properties" : { "path" : { "type" : "string" - }, - "recipient-type" : { - "enum" : [ "cc", "bcc", "cc", "bcc" ] - }, - "subject" : { - "type" : "string" - }, - "type" : { - "enum" : [ "email/handlebars-resource", "email/handlebars-text", "email/handlebars-resource", "email/handlebars-text" ] - } - }, - "required" : [ "type", "subject", "path" ] - }, { - "type" : "object", - "properties" : { - "body" : { - "type" : "string" - }, - "recipient-type" : { - "enum" : [ "cc", "bcc", "cc", "bcc" ] - }, - "subject" : { - "type" : "string" - }, - "type" : { - "enum" : [ "email/handlebars-resource", "email/handlebars-text", "email/handlebars-resource", "email/handlebars-text" ] - } - }, - "required" : [ "type", "subject", "body" ] - } ] - }, - "metabase.collections.api.DashboardQuestionCandidate" : { - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "id" : { - "type" : "integer", - "minimum" : 1 - }, - "name" : { - "type" : "string" - }, - "sole_dashboard_info" : { - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "id" : { - "type" : "integer", - "minimum" : 1 - }, - "name" : { - "type" : "string" - } - }, - "required" : [ "id", "name" ] - } - }, - "required" : [ "id", "name", "sole_dashboard_info" ] - }, - "metabase.collections.api.DashboardQuestionCandidatesResponse" : { - "type" : "object", - "properties" : { - "data" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.collections.api.DashboardQuestionCandidate" - } - }, - "total" : { - "type" : "integer" - } - }, - "required" : [ "data", "total" ] - }, - "metabase.collections.api.MoveDashboardQuestionCandidatesResponse" : { - "type" : "object", - "properties" : { - "moved" : { - "type" : "array", - "items" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - } - }, - "required" : [ "moved" ] - }, - "metabase.legacy-mbql.schema.!=" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.*" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.+" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.-" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema./" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.<" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.<=" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.=" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.>" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.>=" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.Addable" : { - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateTimeExpressionArg" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.interval" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpressionArg" - } ] - }, - "metabase.legacy-mbql.schema.Aggregation" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.aggregation-options" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.UnnamedAggregation" - } ] - }, - "metabase.legacy-mbql.schema.BooleanExpression" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.and" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.or" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.not" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.=" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.!=" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.<" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.>" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.<=" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.>=" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.between" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.starts-with" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ends-with" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.contains" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.in" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.not-in" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.does-not-contain" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.inside" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.is-empty" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.not-empty" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.is-null" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.not-null" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.relative-time-interval" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.time-interval" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.during" - } ] - }, - "metabase.legacy-mbql.schema.Constraints" : { - "description" : "Additional constraints added to a query limiting the maximum number of rows that can be returned. Mostly useful\n because native queries don't support the MBQL `:limit` clause. For MBQL queries, if `:limit` is set, it will\n override these values.", - "type" : "object", - "properties" : { - "max-results" : { - "description" : "Maximum number of results to allow for a query with aggregations. If `max-results-bare-rows` is unset, this\n applies to all queries", - "$ref" : "#/components/schemas/metabase.lib.schema.common.int-greater-than-or-equal-to-zero" - }, - "max-results-bare-rows" : { - "description" : "Maximum number of results to allow for a query with no aggregations. If set, this should be LOWER than\n `:max-results`.", - "$ref" : "#/components/schemas/metabase.lib.schema.common.int-greater-than-or-equal-to-zero" - } - } - }, - "metabase.legacy-mbql.schema.DatabaseID" : { - "description" : "Schema for a valid `:database` ID, in the top-level 'outer' query. Either a positive integer (referring to an\n actual Database), or the saved questions virtual ID, which is a placeholder used for queries using the\n `:source-table \"card__id\"` shorthand for a source query resolved by middleware (since clients might not know the\n actual DB for that source query.)", - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.id.saved-questions-virtual-database" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.id.database" - } ] - }, - "metabase.legacy-mbql.schema.DateOrDatetimeLiteral" : { - "description" : "Schema for a valid date or datetime literal.", - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.relative-datetime" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.absolute-datetime" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.literal.datetime" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.literal.date" - } ] - }, - "metabase.legacy-mbql.schema.DateTimeExpressionArg" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Aggregation" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatetimeExpression" - }, { - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateOrDatetimeLiteral" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - } ] - } ] - }, - "metabase.legacy-mbql.schema.DateTimeUnit" : { - "description" : "Valid unit for *datetime* bucketing.", - "type" : "string", - "enum" : [ "quarter", "day", "hour", "week", "second", "default", "day-of-week", "hour-of-day", "month", "month-of-year", "day-of-month", "year", "day-of-year", "millisecond", "year-of-era", "week-of-year", "quarter-of-year", "minute-of-hour", "minute" ] - }, - "metabase.legacy-mbql.schema.DateUnit" : { - "description" : "Valid unit for date bucketing.", - "type" : "string", - "enum" : [ "quarter", "day", "week", "default", "day-of-week", "month", "month-of-year", "day-of-month", "year", "day-of-year", "year-of-era", "week-of-year", "quarter-of-year" ] - }, - "metabase.legacy-mbql.schema.DatetimeDiffUnit" : { - "description" : "Valid units for a datetime-diff clause.", - "type" : "string", - "enum" : [ "second", "minute", "hour", "day", "week", "month", "quarter", "year" ] - }, - "metabase.legacy-mbql.schema.DatetimeExpression" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.+" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.datetime-add" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.datetime-subtract" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.convert-timezone" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.now" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.date" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.datetime" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.today" - } ] - }, - "metabase.legacy-mbql.schema.EqualityComparable" : { - "anyOf" : [ { - "type" : "boolean" - }, { - "type" : "number" - }, { - "type" : "string" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemporalLiteral" - }, { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.relative-datetime" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - } ] - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ExpressionArg" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" - } ], - "optional" : true - }, - "metabase.legacy-mbql.schema.ExpressionArg" : { - "oneOf" : [ { - "type" : "number" - }, { - "type" : "boolean" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.BooleanExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatetimeExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Aggregation" - }, { - "type" : "string" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.StringExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - } ] - }, - "metabase.legacy-mbql.schema.ExtractWeekMode" : { - "description" : "Valid modes to extract weeks.", - "type" : "string", - "enum" : [ "iso", "us", "instance" ] - }, - "metabase.legacy-mbql.schema.FieldOptions" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "base-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "binning" : { - "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning", - "description" : "Replaces `binning-strategy`.\n\n Using binning requires the driver to support the `:binning` feature." - }, - "inherited-temporal-unit" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateTimeUnit" - }, - "join-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.join.alias", - "description" : "Replaces `joined-field`.\n\n `:join-alias` is used to refer to a FieldOrExpression from a different Table/nested query that you are EXPLICITLY\n JOINING against." - }, - "source-field" : { - "description" : "Replaces `fk->`.\n\n `:source-field` is used to refer to a FieldOrExpression from a different Table you would like IMPLICITLY JOINED to\n the source table.\n\n If both `:source-field` and `:join-alias` are supplied, `:join-alias` should be used to perform the join;\n `:source-field` should be for information purposes only.", - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "source-field-join-alias" : { - "description" : "The join alias of the source field used for an implicit join.", - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "source-field-name" : { - "description" : "The name or desired alias of the field used for an implicit join.", - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "temporal-unit" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateTimeUnit", - "description" : "`:temporal-unit` is used to specify DATE BUCKETING for a FieldOrExpression that represents a moment in time of\n some sort.\n\n There is no requirement that all `:type/Temporal` derived FieldOrExpressions specify a `:temporal-unit`, but for\n legacy reasons `:field` clauses that refer to `:type/DateTime` FieldOrExpressions will be automatically \"bucketed\"\n in the `:breakout` and `:filter` clauses, but nowhere else. Auto-bucketing only applies to `:filter` clauses when\n values for comparison are `yyyy-MM-dd` date strings. See the `auto-bucket-datetimes` middleware for more details.\n `:field` clauses elsewhere will not be automatically bucketed, so drivers still need to make sure they do any\n special datetime handling for plain `:field` clauses when their FieldOrExpression derives from `:type/DateTime`." - } - } - }, { - "description" : "If `:base-type` is specified, the `:temporal-unit` must make sense, e.g. no bucketing by `:year`for\n a `:type/Time` column.", - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.validate-temporal-unit" - }, { - "description" : "You cannot use `:binning` keys like `:strategy` in the top level.", - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.no-binning-options-at-top-level" - } ] - }, - "metabase.legacy-mbql.schema.FieldOrExpressionDef" : { - "description" : "Schema for anything that is accepted as a top-level expression definition, either an arithmetic expression such as a\n `:+` clause or a `:field` or `:value` clause.", - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.StringExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.BooleanExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatetimeExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case:if" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.offset" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - } ] - }, - "metabase.legacy-mbql.schema.Fields" : { - "allOf" : [ { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - }, - "minItems" : 1 - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.helpers.distinct" - } ] - }, - "metabase.legacy-mbql.schema.Filter" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatetimeExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.StringExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.BooleanExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.segment" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - } ] - }, - "metabase.legacy-mbql.schema.Ident" : { - "description" : "Unique identifier string for new `:column` refs. The new refs aren't used in legacy MBQL (currently) but the\n idents for column-introducing new clauses (joins, aggregations, breakouts, expressions) are randomly generated when\n the clauses are created, so the idents must be preserved in legacy MBQL.\n\n These are opaque strings under the initial design; I've made them a separate schema for documentation and\n future-proofing.", - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, { - "type" : "string" - } ] - }, - "metabase.legacy-mbql.schema.IntGreaterThanZeroOrNumericExpression" : { - "oneOf" : [ { - "description" : "Must be a positive integer.", - "type" : "integer", - "minimum" : 1 - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" - } ] - }, - "metabase.legacy-mbql.schema.Join" : { - "description" : "Perform the equivalent of a SQL `JOIN` with another Table or nested `:source-query`. JOINs are either explicitly\n specified in the incoming query, or implicitly generated when one uses a `:field` clause with `:source-field`.\n\n In the top-level query, you can reference Fields from the joined table or nested query by including `:source-field`\n in the `:field` options (known as implicit joins); for explicit joins, you *must* specify `:join-alias` yourself; in\n the `:field` options, e.g.\n\n ;; for joins against other Tables/MBQL source queries\n [:field 1 {:join-alias \"my_join_alias\"}]\n\n ;; for joins against native queries\n [:field \"my_field\" {:base-type :field/Integer, :join-alias \"my_join_alias\"}]", - "type" : "object", - "properties" : { - "ident" : { - "description" : "An opaque string used as a unique identifier for this join clause, even if it evolves. This string is randomly\n generated when a join clause is created, so it can never be confused with another join of the same table.", - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Ident" - }, - "strategy" : { - "description" : "Defaults to `:left-join`; used for all automatically-generated JOINs\n\n Driver implementations: this is guaranteed to be present after pre-processing.", - "type" : "string", - "enum" : [ "full-join", "right-join", "left-join", "inner-join" ] - }, - "source-metadata" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.legacy-column-metadata" - }, - "description" : "Metadata about the source query being used, if pulled in from a Card via the\n `:source-table \"card__id\"` syntax. added automatically by the `resolve-card-id-source-tables` middleware." - }, - "condition" : { - "description" : "The condition on which to JOIN. Can be anything that is a valid `:filter` clause. For automatically-generated\n JOINs this is usually something like\n\n [:= [:field {:join-alias }]]", - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Filter" - }, - "source-query" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.SourceQuery" - }, - "fk-field-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field", - "description" : "Mostly used only internally. When a join is implicitly generated via a `:field` clause with\n `:source-field`, the ID of the foreign key field in the source Table will be recorded here. This information is used\n to add `fk_field_id` information to the `:cols` in the query results, and also for drill-thru. When generating\n explicit joins by hand you can usually omit this information, altho it doesn't hurt to include it if you know it.\n\n Don't set this information yourself. It will have no effect." - }, - "fields" : { - "description" : "The Fields from this join to include in parent-level results. This can be either `:none`, `:all`, or a sequence\n of `:field` clauses.\n\n * `:none`: no Fields from the joined table or nested query are included (unless indirectly included by breakouts or\n other clauses). This is the default, and what is used for automatically-generated joins.\n\n * `:all`: will include all of the Field from the joined table or query\n\n * a sequence of Field clauses: include only the Fields specified. Valid clauses are the same as the top-level\n `:fields` clause. This should be non-empty and all elements should be distinct. The normalizer will automatically\n remove duplicate fields for you, and replace empty clauses with `:none`.\n\n Driver implementations: you can ignore this clause. Relevant fields will be added to top-level `:fields` clause with\n appropriate aliases.", - "anyOf" : [ { - "type" : "string", - "enum" : [ "all", "none" ] - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Fields" - } ] - }, - "source-table" : { - "description" : "*What* to JOIN. Self-joins can be done by using the same `:source-table` as in the query where\n this is specified. YOU MUST SUPPLY EITHER `:source-table` OR `:source-query`, BUT NOT BOTH!", - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.id.table" - }, { - "description" : "`card__` string Table ID", - "type" : "string", - "pattern" : "^card__[1-9]\\d*$" - } ] - }, - "alias" : { - "description" : "The name used to alias the joined table or query. This is usually generated automatically and generally looks\n like `table__via__field`. You can specify this yourself if you need to reference a joined field with a `:join-alias`\n in the options.\n\n Driver implementations: This is guaranteed to be present after pre-processing.", - "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" - } - }, - "required" : [ "condition" ] - }, - "metabase.legacy-mbql.schema.Joins" : { - "description" : "Schema for a valid sequence of `Join`s. Must be a non-empty sequence, and `:alias`, if specified, must be unique.", - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Join" - }, - "minItems" : 1 - }, - "metabase.legacy-mbql.schema.MBQLQuery" : { - "type" : "object", - "properties" : { - "breakout" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - }, - "minItems" : 1 - }, - "source-metadata" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.legacy-column-metadata" - }, - "description" : "Info about the columns of the source query. Added in automatically by middleware. This metadata is\n primarily used to let power things like binning when used with Field Literals instead of normal Fields." - }, - "source-query" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.SourceQuery" - }, - "limit" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.int-greater-than-or-equal-to-zero" - }, - "filter" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Filter" - }, - "joins" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Joins" - }, - "aggregation" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Aggregation" - }, - "minItems" : 1 - }, - "fields" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Fields" - }, - "source-table" : { - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.id.table" - }, { - "description" : "`card__` string Table ID", - "type" : "string", - "pattern" : "^card__[1-9]\\d*$" - } ] - }, - "order-by" : { - "allOf" : [ { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.OrderBy" - }, - "minItems" : 1 - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.helpers.distinct" - } ] - }, - "page" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Page" - }, - "expressions" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.FieldOrExpressionDef" - } - } - } - }, - "metabase.legacy-mbql.schema.MiddlewareOptions" : { - "description" : "Additional options that can be used to toggle middleware on or off.", - "type" : "object", - "properties" : { - "add-default-userland-constraints?" : { - "type" : "boolean", - "description" : "Whether to add some default `max-results` and `max-results-bare-rows` constraints. By default, none are added,\n although the functions that ultimately power most API endpoints tend to set this to `true`. See\n `add-constraints` middleware for more details." - }, - "disable-max-results?" : { - "description" : "Disable applying a default limit on the query results. Handled in the `add-default-limit` middleware. If true,\n this will override the `:max-results` and `:max-results-bare-rows` values in `Constraints`.", - "type" : "boolean" - }, - "disable-mbql->native?" : { - "description" : "Disable the MBQL->native middleware. If you do this, the query will not work at all, so there are no cases where\n you should set this yourself. This is only used by the `metabase.query-processor.preprocess/preprocess` function to\n get the fully pre-processed query without attempting to convert it to native.", - "type" : "boolean" - }, - "format-rows?" : { - "description" : "Should we skip converting datetime types to ISO-8601 strings with appropriate timezone when post-processing\n results? Used by `metabase.query-processor.middleware.format-rows`default `false`.", - "type" : "boolean" - }, - "process-viz-settings?" : { - "type" : "boolean", - "description" : "Whether to process a question's visualization settings and include them in the result metadata so that they can\n incorporated into an export. Used by `metabase.query-processor.middleware.visualization-settings`; default\n `false`." - }, - "skip-results-metadata?" : { - "description" : "Should we skip adding `results_metadata` to query results after running the query? Used by\n `metabase.query-processor.middleware.results-metadata`; default `false`. (Note: we may change the name of this\n column in the near future, to `result_metadata`, to fix inconsistencies in how we name things.)", - "type" : "boolean" - }, - "userland-query?" : { - "type" : "boolean", - "description" : "Userland queries are ones ran as a result of an API call, Pulse, or the like. Special handling is done in\n certain userland-only middleware for such queries -- results are returned in a slightly different format, and\n QueryExecution entries are normally saved, unless you pass `:no-save` as the option." - } - } - }, - "metabase.legacy-mbql.schema.NativeSourceQuery" : { - "type" : "object", - "properties" : { - "collection" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "native" : { }, - "template-tags" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTagMap" - } - }, - "required" : [ "native" ] - }, - "metabase.legacy-mbql.schema.NumericExpression" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.+" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.-" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.~1" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.*" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.coalesce" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.length" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.floor" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ceil" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.round" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.abs" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.power" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.sqrt" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.exp" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.log" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case:if" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.datetime-diff" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.integer" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.float" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.temporal-extract" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-year" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-quarter" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-month" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-week" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-day" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-day-of-week" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-hour" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-minute" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-second" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.aggregation" - } ] - }, - "metabase.legacy-mbql.schema.NumericExpressionArg" : { - "oneOf" : [ { - "type" : "number" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Aggregation" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Reference" - } ] - }, - "metabase.legacy-mbql.schema.OrderBy" : { - "description" : "Schema for an `order-by` clause subclause.", - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.asc" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.desc" - } ] - }, - "metabase.legacy-mbql.schema.OrderComparable" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" - }, { - "anyOf" : [ { - "type" : "number" - }, { - "type" : "string" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemporalLiteral" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ExpressionArg" - }, { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.relative-datetime" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - } ] - } ] - } ] - }, - "metabase.legacy-mbql.schema.Page" : { - "description" : "`page` = page num, starting with 1. `items` = number of items per page.\n e.g.\n\n {:page 1, :items 10} = items 1-10\n {:page 2, :items 10} = items 11-20", - "type" : "object", - "properties" : { - "items" : { - "description" : "Must be a positive integer.", - "type" : "integer", - "minimum" : 1 - }, - "page" : { - "description" : "Must be a positive integer.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "page", "items" ] - }, - "metabase.legacy-mbql.schema.Parameter" : { - "description" : "Schema for the *value* of a parameter (e.g. a Dashboard parameter or a native query template tag) as passed in as\n part of the `:parameters` list in a query.", - "type" : "object", - "properties" : { - "default" : { }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "required" : { }, - "slug" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "target" : { - "oneOf" : [ { - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - }, { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.dimension" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.variable" - } ] - } ] - }, { - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - }, { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.dimension" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.variable" - } ] - } ] - }, { - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - }, { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.dimension" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.variable" - } ] - } ] - } ] - }, - "type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.type" - }, - "value" : { } - }, - "required" : [ "type" ] - }, - "metabase.legacy-mbql.schema.ParameterList" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Parameter" - }, - "optional" : true - }, - "metabase.legacy-mbql.schema.Query" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "update-row" : { - "$ref" : "#/components/schemas/metabase.lib.schema.actions.row" - }, - "settings" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Settings" - }, - "constraints" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Constraints" - }, - "query" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.MBQLQuery" - }, - "native" : { - "type" : "object", - "properties" : { - "collection" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "query" : { }, - "template-tags" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTagMap" - } - }, - "required" : [ "query" ] - }, - "info" : { - "$ref" : "#/components/schemas/metabase.lib.schema.info.info", - "description" : "Used when recording info about this run in the QueryExecution log; things like context query was\n ran in and User who ran it." - }, - "middleware" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.MiddlewareOptions" - }, - "database" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatabaseID" - }, - "type" : { - "description" : "Type of query. `:query` = MBQL; `:native` = native.", - "type" : "string", - "enum" : [ "query", "native" ] - }, - "parameters" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ParameterList" - }, - "create-row" : { - "$ref" : "#/components/schemas/metabase.lib.schema.actions.row" - } - }, - "required" : [ "type" ] - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.check-keys-for-query-type" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.check-query-does-not-have-source-metadata" - } ] - }, - "metabase.legacy-mbql.schema.Reference" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.aggregation" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.expression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" - } ] - }, - "metabase.legacy-mbql.schema.RelativeDatetimeUnit" : { - "type" : "string", - "enum" : [ "default", "minute", "hour", "day", "week", "month", "quarter", "year" ] - }, - "metabase.legacy-mbql.schema.Settings" : { - "description" : "Options that tweak the behavior of the query processor.", - "type" : "object", - "properties" : { - "report-timezone" : { - "description" : "The timezone the query should be ran in, overriding the default report timezone for the instance.", - "$ref" : "#/components/schemas/metabase.lib.schema.expression.temporal.timezone-id" - } - } - }, - "metabase.legacy-mbql.schema.SourceQuery" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NativeSourceQuery" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.MBQLQuery" - } ] - }, - "metabase.legacy-mbql.schema.StringExpression" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.substring" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.trim" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ltrim" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.rtrim" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.replace" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.lower" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.upper" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.concat" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.regex-match-first" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.coalesce" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case:if" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.host" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.domain" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.subdomain" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.path" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.month-name" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.quarter-name" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.day-name" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.text" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.split-part" - } ] - }, - "metabase.legacy-mbql.schema.StringExpressionArg" : { - "oneOf" : [ { - "type" : "string" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.StringExpression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" - } ] - }, - "metabase.legacy-mbql.schema.TemplateTag" : { - "description" : "Schema for a template tag as specified in a native query. There are four types of template tags, differentiated by\n `:type`.\n\n Template tags are used to specify in native queries that are replaced with some sort of value when\n the query itself runs. There are four basic types of template tag for native queries:\n\n 1. Field filters, which are used like\n\n SELECT * FROM table WHERE \n\n These reference specific Fields and are replaced with entire conditions, e.g. `some_field > 1000`\n\n 2. Raw values, which are used like\n\n SELECT * FROM table WHERE my_field = \n\n These are replaced with raw values.\n\n 3. Native query snippets, which might be used like\n\n SELECT * FROM () source\n\n These are replaced with `NativeQuerySnippet`s from the application database.\n\n 4. Source query Card IDs, which are used like\n\n SELECT * FROM () source\n\n These are replaced with the query from the Card with that ID.\n\n Field filters and raw values usually have their value specified by `:parameters`.", - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:FieldFilter" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:Snippet" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:SourceQuery" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:TemporalUnit" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:RawValue" - } ] - }, - "metabase.legacy-mbql.schema.TemplateTag:FieldFilter" : { - "description" : "Schema for a field filter template tag.", - "type" : "object", - "properties" : { - "display-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "required" : { - "type" : "boolean" - }, - "type" : { - "const" : "dimension" - }, - "alias" : { - "type" : "string" - }, - "options" : { - "type" : "object", - "additionalProperties" : { }, - "description" : "optional map to be appended to filter clause" - }, - "dimension" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" - }, - "default" : { }, - "widget-type" : { - "description" : "which type of widget the frontend should show for this Field Filter; this also affects which parameter types\n are allowed to be specified for it.", - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.WidgetType" - } - }, - "required" : [ "type", "name", "display-name", "dimension", "widget-type" ] - }, - "metabase.legacy-mbql.schema.TemplateTag:RawValue" : { - "description" : "Schema for a raw value template tag.", - "type" : "object", - "properties" : { - "default" : { }, - "display-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "required" : { - "type" : "boolean" - }, - "type" : { - "type" : "string", - "enum" : [ "date", "number", "boolean", "text" ] - } - }, - "required" : [ "type", "name", "display-name" ] - }, - "metabase.legacy-mbql.schema.TemplateTag:Snippet" : { - "description" : "Schema for a native query snippet template tag.", - "type" : "object", - "properties" : { - "database" : { - "description" : "Must be a positive integer.", - "type" : "integer", - "minimum" : 1 - }, - "display-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "snippet-id" : { - "description" : "Must be a positive integer.", - "type" : "integer", - "minimum" : 1 - }, - "snippet-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "type" : { - "const" : "snippet" - } - }, - "required" : [ "type", "name", "display-name", "snippet-name", "snippet-id" ] - }, - "metabase.legacy-mbql.schema.TemplateTag:SourceQuery" : { - "description" : "Schema for a source query template tag.", - "type" : "object", - "properties" : { - "card-id" : { - "description" : "Must be a positive integer.", - "type" : "integer", - "minimum" : 1 - }, - "display-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "type" : { - "const" : "card" - } - }, - "required" : [ "type", "name", "display-name", "card-id" ] - }, - "metabase.legacy-mbql.schema.TemplateTag:TemporalUnit" : { - "description" : "Schema for a temporal unit template tag.", - "type" : "object", - "properties" : { - "alias" : { - "type" : "string" - }, - "default" : { }, - "dimension" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" - }, - "display-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "required" : { - "type" : "boolean" - }, - "type" : { - "const" : "temporal-unit" - } - }, - "required" : [ "type", "name", "display-name", "dimension" ] - }, - "metabase.legacy-mbql.schema.TemplateTagMap" : { - "description" : "Schema for the `:template-tags` map passed in as part of a native query.\n\n Map of template tag name -> template tag definition", - "type" : "object", - "additionalProperties" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag" - } - }, - "metabase.legacy-mbql.schema.TemporalExtractUnit" : { - "description" : "Valid units to extract from a temporal.", - "type" : "string", - "enum" : [ "year-of-era", "quarter-of-year", "month-of-year", "week-of-year-iso", "week-of-year-us", "week-of-year-instance", "day-of-month", "day-of-week", "day-of-week-iso", "hour-of-day", "minute-of-hour", "second-of-minute" ] - }, - "metabase.legacy-mbql.schema.TemporalLiteral" : { - "description" : "Schema for valid temporal literals.", - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateOrDatetimeLiteral" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TimeLiteral" - } ] - }, - "metabase.legacy-mbql.schema.TimeLiteral" : { - "description" : "Schema for valid time literals.", - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.time" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.literal.time" - } ] - }, - "metabase.legacy-mbql.schema.TimeUnit" : { - "description" : "Valid unit for time bucketing.", - "type" : "string", - "enum" : [ "hour", "second", "default", "hour-of-day", "millisecond", "minute-of-hour", "minute" ] - }, - "metabase.legacy-mbql.schema.UnnamedAggregation" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" - }, { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.aggregation" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.avg" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.cum-sum" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.distinct" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.distinct-where" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.stddev" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.sum" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.min" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.max" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.metric" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.share" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.count-where" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.sum-where" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case:if" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.median" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.percentile" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ag:var" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.cum-count" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.count" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.offset" - } ] - } ] - }, - "metabase.legacy-mbql.schema.ValueTypeInfo" : { - "description" : "Type info about a value in a `:value` clause. Added automatically by `wrap-value-literals` middleware to values in filter clauses based on the Field in the clause.", - "type" : "object", - "properties" : { - "base_type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "database_type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "semantic_type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" - }, - "unit" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateTimeUnit" - } - } - }, - "metabase.legacy-mbql.schema.WidgetType" : { - "description" : "Schema for valid values of `:widget-type` for a [[::TemplateTag:FieldFilter]].", - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.widget-type" - }, - "metabase.legacy-mbql.schema.abs" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.absolute-datetime" : { - "oneOf" : [ { }, { - "allOf" : [ ] - }, { - "allOf" : [ ] - } ] - }, - "metabase.legacy-mbql.schema.ag:var" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.aggregation" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.aggregation-options" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.and" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.asc" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.avg" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.between" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.case" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.case:if" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.ceil" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.check-keys-for-query-type" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.check-query-does-not-have-source-metadata" : { - "description" : "`:source-metadata` is added to queries when `card__id` source queries are resolved. It contains info about the\n columns in the source query.\n\n Where this is added was changed in Metabase 0.33.0 -- previously, when `card__id` source queries were resolved, the\n middleware would add `:source-metadata` to the top-level; to support joins against source queries, this has been\n changed so it is always added at the same level the resolved `:source-query` is added.\n\n This should automatically be fixed by `normalize`; if we encounter it, it means some middleware is not functioning\n properly." - }, - "metabase.legacy-mbql.schema.coalesce" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.concat" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.contains" : { - "anyOf" : [ { - "allOf" : [ ] - }, { - "allOf" : [ ] - } ] - }, - "metabase.legacy-mbql.schema.convert-timezone" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.count" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.count-where" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.cum-count" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.cum-sum" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.date" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.datetime" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.datetime-add" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.datetime-diff" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.datetime-subtract" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.day-name" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.desc" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.dimension" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.distinct" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.distinct-where" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.does-not-contain" : { - "anyOf" : [ { - "allOf" : [ ] - }, { - "allOf" : [ ] - } ] - }, - "metabase.legacy-mbql.schema.domain" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.during" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.ends-with" : { - "anyOf" : [ { - "allOf" : [ ] - }, { - "allOf" : [ ] - } ] - }, - "metabase.legacy-mbql.schema.exp" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.expression" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.field" : { - "allOf" : [ { - "allOf" : [ ] - }, { - "description" : "Fields using names rather than integer IDs are required to specify `:base-type`.", - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.require-base-type-for-field-name" - } ] - }, - "metabase.legacy-mbql.schema.field-or-expression-ref" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.expression" - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" - } ] - }, - "metabase.legacy-mbql.schema.float" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.floor" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.get-day" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.get-day-of-week" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.get-hour" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.get-minute" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.get-month" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.get-quarter" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.get-second" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.get-week" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.get-year" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.helpers.distinct" : { - "description" : "values must be distinct" - }, - "metabase.legacy-mbql.schema.host" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.in" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.inside" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.integer" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.interval" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.is-empty" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.is-null" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.legacy-column-metadata" : { - "description" : "Schema for a single legacy metadata column. This is the pre-Lib equivalent of\n `:metabase.lib.schema.metadata/column`.", - "type" : "object", - "properties" : { - "field_ref" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Reference" - }, - "fingerprint" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.fingerprint" - }, - "visibility_type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.visibility-type" - }, - "base_type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "name" : { - "type" : "string" - }, - "semantic_type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" - }, - "display_name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "converted_timezone" : { - "$ref" : "#/components/schemas/metabase.lib.schema.expression.temporal.timezone-id" - }, - "source" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.legacy-source" - }, - "effective_type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "unit" : { - "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" - } - }, - "required" : [ "base_type", "display_name", "name" ] - }, - "metabase.legacy-mbql.schema.length" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.log" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.lower" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.ltrim" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.max" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.median" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.metric" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.min" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.month-name" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.no-binning-options-at-top-level" : { }, - "metabase.legacy-mbql.schema.not" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.not-empty" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.not-in" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.not-null" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.now" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.offset" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.or" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.path" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.percentile" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.power" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.quarter-name" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.regex-match-first" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.relative-datetime" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.relative-time-interval" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.replace" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.require-base-type-for-field-name" : { }, - "metabase.legacy-mbql.schema.round" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.rtrim" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.segment" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.share" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.split-part" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.sqrt" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.starts-with" : { - "anyOf" : [ { - "allOf" : [ ] - }, { - "allOf" : [ ] - } ] - }, - "metabase.legacy-mbql.schema.stddev" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.subdomain" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.substring" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.sum" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.sum-where" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.template-tag" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.temporal-extract" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.text" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.time" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.time-interval" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.today" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.trim" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.upper" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.validate-temporal-unit" : { }, - "metabase.legacy-mbql.schema.value" : { - "allOf" : [ ] - }, - "metabase.legacy-mbql.schema.variable" : { - "allOf" : [ ] - }, - "metabase.lib.schema.actions.row" : { - "type" : "object", - "additionalProperties" : { } - }, - "metabase.lib.schema.binning.bin-width" : { - "description" : "Bin width (size of each bin).", - "$ref" : "#/components/schemas/metabase.lib.schema.common.positive-number" - }, - "metabase.lib.schema.binning.binning" : { - "description" : "Schema for `:binning` options passed to a `:field` clause.", - "allOf" : [ { - "type" : "object", - "properties" : { - "strategy" : { - "$ref" : "#/components/schemas/metabase.lib.schema.binning.strategy" - } - }, - "required" : [ "strategy" ] - }, { - "oneOf" : [ { - "type" : "object", - "properties" : { - "strategy" : { - "const" : "default" - } - }, - "required" : [ "strategy" ] - }, { - "type" : "object", - "properties" : { - "bin-width" : { - "$ref" : "#/components/schemas/metabase.lib.schema.binning.bin-width" - }, - "strategy" : { - "const" : "bin-width" - } - }, - "required" : [ "strategy", "bin-width" ] - }, { - "type" : "object", - "properties" : { - "num-bins" : { - "$ref" : "#/components/schemas/metabase.lib.schema.binning.num-bins" - }, - "strategy" : { - "const" : "num-bins" - } - }, - "required" : [ "strategy", "num-bins" ] - } ] - } ] - }, - "metabase.lib.schema.binning.num-bins" : { - "description" : "Number of bins to use.", - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.binning.strategy" : { - "type" : "string", - "enum" : [ "bin-width", "default", "num-bins" ] - }, - "metabase.lib.schema.common.base-type" : { - "type" : "string" - }, - "metabase.lib.schema.common.int-greater-than-or-equal-to-zero" : { - "description" : "Schema representing an integer than must also be greater than or equal to zero.", - "type" : "integer", - "minimum" : 0 - }, - "metabase.lib.schema.common.non-blank-string" : { - "type" : "string", - "minLength" : 1 - }, - "metabase.lib.schema.common.options" : { - "default" : { }, - "type" : "object", - "properties" : { - "base-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "database-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "display-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "effective-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "lib/uuid" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.uuid" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "semantic-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" - } - }, - "required" : [ "lib/uuid" ] - }, - "metabase.lib.schema.common.positive-number" : { }, - "metabase.lib.schema.common.semantic-or-relation-type" : { - "description" : "valid semantic or relation type", - "type" : "string" - }, - "metabase.lib.schema.common.uuid" : { - "type" : "string", - "minLength" : 36, - "maxLength" : 36 - }, - "metabase.lib.schema.expression.temporal.timezone-id" : { - "allOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, { - "anyOf" : [ { - "type" : "string", - "enum" : [ "Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Asmera", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Timbuktu", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/ComodRivadavia", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Atka", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Buenos_Aires", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Catamarca", "America/Cayenne", "America/Cayman", "America/Chicago", "America/Chihuahua", "America/Ciudad_Juarez", "America/Coral_Harbour", "America/Cordoba", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson", "America/Dawson_Creek", "America/Denver", "America/Detroit", "America/Dominica", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Ensenada", "America/Fort_Nelson", "America/Fort_Wayne", "America/Fortaleza", "America/Glace_Bay", "America/Godthab", "America/Goose_Bay", "America/Grand_Turk", "America/Grenada", "America/Guadeloupe", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana/Indianapolis", "America/Indiana/Knox", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Indianapolis", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Jujuy", "America/Juneau", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Knox_IN", "America/Kralendijk", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Louisville", "America/Lower_Princes", "America/Maceio", "America/Managua", "America/Manaus", "America/Marigot", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Mendoza", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Montreal", "America/Montserrat", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota/Beulah", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/Nuuk", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port-au-Prince", "America/Port_of_Spain", "America/Porto_Acre", "America/Porto_Velho", "America/Puerto_Rico", "America/Punta_Arenas", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Rosario", "America/Santa_Isabel", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Shiprock", "America/Sitka", "America/St_Barthelemy", "America/St_Johns", "America/St_Kitts", "America/St_Lucia", "America/St_Thomas", "America/St_Vincent", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Tortola", "America/Vancouver", "America/Virgin", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/McMurdo", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/South_Pole", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Arctic/Longyearbyen", "Asia/Aden", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Ashkhabad", "Asia/Atyrau", "Asia/Baghdad", "Asia/Bahrain", "Asia/Baku", "Asia/Bangkok", "Asia/Barnaul", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Calcutta", "Asia/Chita", "Asia/Choibalsan", "Asia/Chongqing", "Asia/Chungking", "Asia/Colombo", "Asia/Dacca", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", "Asia/Harbin", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Istanbul", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kashgar", "Asia/Kathmandu", "Asia/Katmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Kuwait", "Asia/Macao", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Muscat", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Oral", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qostanay", "Asia/Qyzylorda", "Asia/Rangoon", "Asia/Riyadh", "Asia/Saigon", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Tel_Aviv", "Asia/Thimbu", "Asia/Thimphu", "Asia/Tokyo", "Asia/Tomsk", "Asia/Ujung_Pandang", "Asia/Ulaanbaatar", "Asia/Ulan_Bator", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vientiane", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yangon", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faeroe", "Atlantic/Faroe", "Atlantic/Jan_Mayen", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/St_Helena", "Atlantic/Stanley", "Australia/ACT", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Canberra", "Australia/Currie", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/LHI", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/NSW", "Australia/North", "Australia/Perth", "Australia/Queensland", "Australia/South", "Australia/Sydney", "Australia/Tasmania", "Australia/Victoria", "Australia/West", "Australia/Yancowinna", "Brazil/Acre", "Brazil/DeNoronha", "Brazil/East", "Brazil/West", "CET", "CST6CDT", "Canada/Atlantic", "Canada/Central", "Canada/Eastern", "Canada/Mountain", "Canada/Newfoundland", "Canada/Pacific", "Canada/Saskatchewan", "Canada/Yukon", "Chile/Continental", "Chile/EasterIsland", "Cuba", "EET", "EST5EDT", "Egypt", "Eire", "Etc/GMT", "Etc/GMT+0", "Etc/GMT+1", "Etc/GMT+10", "Etc/GMT+11", "Etc/GMT+12", "Etc/GMT+2", "Etc/GMT+3", "Etc/GMT+4", "Etc/GMT+5", "Etc/GMT+6", "Etc/GMT+7", "Etc/GMT+8", "Etc/GMT+9", "Etc/GMT-0", "Etc/GMT-1", "Etc/GMT-10", "Etc/GMT-11", "Etc/GMT-12", "Etc/GMT-13", "Etc/GMT-14", "Etc/GMT-2", "Etc/GMT-3", "Etc/GMT-4", "Etc/GMT-5", "Etc/GMT-6", "Etc/GMT-7", "Etc/GMT-8", "Etc/GMT-9", "Etc/GMT0", "Etc/Greenwich", "Etc/UCT", "Etc/UTC", "Etc/Universal", "Etc/Zulu", "Europe/Amsterdam", "Europe/Andorra", "Europe/Astrakhan", "Europe/Athens", "Europe/Belfast", "Europe/Belgrade", "Europe/Berlin", "Europe/Bratislava", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Busingen", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Guernsey", "Europe/Helsinki", "Europe/Isle_of_Man", "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Kirov", "Europe/Kyiv", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Mariehamn", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Nicosia", "Europe/Oslo", "Europe/Paris", "Europe/Podgorica", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/San_Marino", "Europe/Sarajevo", "Europe/Saratov", "Europe/Simferopol", "Europe/Skopje", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Tiraspol", "Europe/Ulyanovsk", "Europe/Uzhgorod", "Europe/Vaduz", "Europe/Vatican", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zagreb", "Europe/Zaporozhye", "Europe/Zurich", "GB", "GB-Eire", "GMT", "GMT0", "Greenwich", "Hongkong", "Iceland", "Indian/Antananarivo", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Comoro", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Mayotte", "Indian/Reunion", "Iran", "Israel", "Jamaica", "Japan", "Kwajalein", "Libya", "MET", "MST7MDT", "Mexico/BajaNorte", "Mexico/BajaSur", "Mexico/General", "NZ", "NZ-CHAT", "Navajo", "PRC", "PST8PDT", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Johnston", "Pacific/Kanton", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Ponape", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Samoa", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Truk", "Pacific/Wake", "Pacific/Wallis", "Pacific/Yap", "Poland", "Portugal", "ROK", "Singapore", "SystemV/AST4", "SystemV/AST4ADT", "SystemV/CST6", "SystemV/CST6CDT", "SystemV/EST5", "SystemV/EST5EDT", "SystemV/HST10", "SystemV/MST7", "SystemV/MST7MDT", "SystemV/PST8", "SystemV/PST8PDT", "SystemV/YST9", "SystemV/YST9YDT", "Turkey", "UCT", "US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa", "UTC", "Universal", "W-SU", "WET", "Zulu" ] - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.zone-offset" - } ] - } ] - }, - "metabase.lib.schema.expression.window..offset.n" : { - "type" : "integer" - }, - "metabase.lib.schema.id.action" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.id.card" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.id.dashboard" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.id.database" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.id.dimension" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.id.field" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.id.pulse" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.id.saved-questions-virtual-database" : { - "description" : "The ID used to signify that a database is 'virtual' rather than physical.\n\n A fake integer ID is used so as to minimize the number of changes that need to be made on the frontend -- by using\n something that would otherwise be a legal ID, *nothing* need change there, and the frontend can query against this\n 'database' none the wiser. (This integer ID is negative which means it will never conflict with a *real* database\n ID.)\n\n This ID acts as a sort of flag. The relevant places in the middleware can check whether the DB we're querying is\n this 'virtual' database and take the appropriate actions.", - "const" : -1337 - }, - "metabase.lib.schema.id.segment" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.id.table" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.id.user" : { - "type" : "integer", - "minimum" : 1 - }, - "metabase.lib.schema.info.context" : { - "type" : "string", - "enum" : [ "action", "ad-hoc", "cache-refresh", "collection", "map-tiles", "pulse", "dashboard-subscription", "dashboard", "question", "csv-download", "xlsx-download", "json-download", "public-dashboard", "public-question", "public-csv-download", "public-xlsx-download", "public-json-download", "embedded-dashboard", "embedded-question", "embedded-csv-download", "embedded-xlsx-download", "embedded-json-download", "table-grid" ] - }, - "metabase.lib.schema.info.hash" : { - "type" : "string", - "format" : "byte" - }, - "metabase.lib.schema.info.info" : { - "type" : "object", - "properties" : { - "query-hash" : { - "$ref" : "#/components/schemas/metabase.lib.schema.info.hash" - }, - "action-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.action" - }, - "pivot/original-query" : { - "type" : "object", - "additionalProperties" : { } - }, - "executed-by" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.user" - }, - "card-entity-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "card-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.card" - }, - "pivot/result-metadata" : { - "oneOf" : [ { - "const" : "none" - }, { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.column" - } - } ] - }, - "context" : { - "$ref" : "#/components/schemas/metabase.lib.schema.info.context" - }, - "dashboard-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.dashboard" - }, - "metadata/model-metadata" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.lib-or-legacy-column" - } - }, - "pulse-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.pulse" - }, - "card-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - } - } - }, - "metabase.lib.schema.join.alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "metabase.lib.schema.literal..string.date" : { - "type" : "string", - "pattern" : "^\\d{4}-\\d{2}-\\d{2}$" - }, - "metabase.lib.schema.literal..string.datetime" : { - "anyOf" : [ { - "type" : "string", - "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?$" - }, { - "type" : "string", - "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))$" - } ] - }, - "metabase.lib.schema.literal..string.time" : { - "anyOf" : [ { - "type" : "string", - "pattern" : "^\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?$" - }, { - "type" : "string", - "pattern" : "^\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))$" - } ] - }, - "metabase.lib.schema.literal..string.zone-offset" : { - "type" : "string", - "pattern" : "(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))" - }, - "metabase.lib.schema.literal.date" : { - "anyOf" : [ { }, { - "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.date" - } ] - }, - "metabase.lib.schema.literal.datetime" : { - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.datetime" - }, { }, { }, { } ] - }, - "metabase.lib.schema.literal.time" : { - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.time" - }, { }, { } ] - }, - "metabase.lib.schema.metadata..column.has-field-values" : { - "type" : "string", - "enum" : [ "auto-list", "list", "none", "search" ] - }, - "metabase.lib.schema.metadata..column.legacy-source" : { - "description" : "Possible values for `column.source` -- this is added by [[metabase.lib.metadata.result-metadata]] for historical\n reasons (it is used in a few places in the FE). DO NOT use this in the backend for any purpose, use `:lib/source`\n instead.", - "type" : "string", - "enum" : [ "aggregation", "fields", "breakout", "native" ] - }, - "metabase.lib.schema.metadata..column.remapping.external" : { - "description" : "External remapping (Dimension) for a column. From the [[metabase.warehouse-schema.models.dimension]] with `type =\n external` associated with a `Field` in the application database.\n See [[metabase.query-processor.middleware.add-dimension-projections]] for what this means.", - "type" : "object", - "properties" : { - "field-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.dimension" - }, - "lib/type" : { - "const" : "metadata.column.remapping/external" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - } - }, - "required" : [ "lib/type", "id", "name", "field-id" ] - }, - "metabase.lib.schema.metadata..column.remapping.internal" : { - "description" : "Internal remapping (FieldValues) for a column. From [[metabase.warehouse-schema.models.dimension]] with `type =\n internal` and the [[metabase.warehouse-schema.models.field-values]] associated with a `Field` in the application\n database. See [[metabase.query-processor.middleware.add-dimension-projections]] for what this means.", - "type" : "object", - "properties" : { - "human-readable-values" : { - "type" : "array", - "items" : { } - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.dimension" - }, - "lib/type" : { - "const" : "metadata.column.remapping/internal" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "values" : { - "type" : "array", - "items" : { } - } - }, - "required" : [ "lib/type", "id", "name", "values", "human-readable-values" ] - }, - "metabase.lib.schema.metadata..column.source" : { - "description" : "`:lib/source` -- where a column came from with respect to the current stage.\n\n Traditionally, `:lib/source` meant something slightly different -- it denoted what part of the current stage a\n column came from, and thus included two additional options -- `:source/fields`, for columns used by `:fields`, and\n `:source/breakouts`, for columns used in `:breakout`. This was not really useful information and made `:lib/source`\n itself useless for determining if a column was 'inherited' or not (i.e., whether it came from a previous stage,\n source card, or a join, and should get field name refs instead of field ID refs --\n see [[metabase.lib.field.util/inherited-column?]]).", - "type" : "string", - "enum" : [ "source/card", "source/native", "source/previous-stage", "source/table-defaults", "source/aggregations", "source/joins", "source/expressions", "source/implicitly-joinable" ] - }, - "metabase.lib.schema.metadata..column.validate-expression-source" : { - "description" : "Only allow `:lib/expression-name` when `:lib/source` is `:source/expressions`. If it's anything else, it probably\n means it's getting incorrectly propagated from a previous stage (QUE-1342)." - }, - "metabase.lib.schema.metadata..column.validate-native-column" : { - "description" : "Certain keys cannot possibly be set when a column comes from directly from native query results, for example\n `:lib/breakout?` or join aliases" - }, - "metabase.lib.schema.metadata..column.validate-table-defaults-column" : { - "description" : "A column with :lib/source :source/table-defaults cannot possibly have a join alias." - }, - "metabase.lib.schema.metadata..column.visibility-type" : { - "type" : "string", - "enum" : [ "retired", "sensitive", "normal", "hidden", "details-only" ] - }, - "metabase.lib.schema.metadata.column" : { - "description" : "Malli schema for a valid map of column metadata, which can mean one of two things:\n\n 1. Metadata about a particular Field in the application database. This will always have an `:id`\n\n 2. Results metadata from a column in `data.cols` and/or `data.results_metadata.columns` in a Query Processor\n response, or saved in something like `Card.result_metadata`. These *may* have an `:id`, or may not -- columns\n coming back from native queries or things like `SELECT count(*)` aren't associated with any particular `Field`\n and thus will not have an `:id`.\n\n Now maybe these should be two different schemas, but `:id` being there or not is the only real difference; besides\n that they are largely compatible. So they're the same for now. We can revisit this in the future if we actually want\n to differentiate between the two versions.", - "allOf" : [ { - "type" : "object", - "properties" : { - "visibility-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.visibility-type" - }, - "fk-join-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "lib/external-remap" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.remapping.external" - }, - "inherited-temporal-unit" : { - "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" - }, - "lib/source-column-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.source-column-alias" - }, - "database-type" : { - "type" : "string" - }, - "lib/type" : { - "default" : "metadata/column", - "const" : "metadata/column" - }, - "fingerprint" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.fingerprint" - }, - "display-name" : { - "type" : "string" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "effective-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "lib/deduplicated-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.deduplicated-name" - }, - "base-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "lib/original-expression-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "fk-field-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "type" : "string" - }, - "lib/card-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.card" - }, - "lib/expression-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "lib/breakout?" : { - "type" : "boolean" - }, - "metabase.lib.field/temporal-unit" : { - "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" - }, - "metabase.lib.field/binning" : { - "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning" - }, - "lib/model-display-name" : { - "type" : "string" - }, - "has-field-values" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.has-field-values" - }, - "lib/internal-remap" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.remapping.internal" - }, - "selected?" : { - "type" : "boolean" - }, - "source-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "source" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.legacy-source" - }, - "metabase.lib.join/join-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" - }, - "fk-field-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "lib/original-binning" : { - "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning" - }, - "lib/original-join-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" - }, - "lib/original-display-name" : { - "type" : "string" - }, - "lib/source" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.source" - }, - "active" : { - "type" : "boolean" - }, - "lib/ref-display-name" : { - "type" : "string" - }, - "lib/original-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.original-name" - }, - "lib/hack-original-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.original-name" - }, - "semantic-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" - }, - "fk-target-field-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "field-ref" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Reference" - }, - "lib/desired-column-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.desired-column-alias" - } - }, - "required" : [ "lib/type", "name", "base-type" ] - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.kebab-cased-map" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-expression-source" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-native-column" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-table-defaults-column" - } ] - }, - "metabase.lib.schema.metadata.deduplicated-name" : { - "type" : "string", - "description" : "The simply-deduplicated name that was historically used in QP results metadata (originally calculated by\n the [[metabase.query-processor.middleware.annotate]] middleware, now calculated\n by [[metabase.lib.middleware.result-metadata]]). This just adds suffixes to column names e.g. `ID` and `ID` become\n `ID` and `ID_2`, respectively. Kept around because many old field refs use this column name.", - "optional" : true - }, - "metabase.lib.schema.metadata.desired-column-alias" : { - "type" : "string", - "minLength" : 1 - }, - "metabase.lib.schema.metadata.fingerprint..fingerprint.global" : { - "description" : "Fingerprint values that Fields of all types should have.", - "type" : "object", - "properties" : { - "distinct-count" : { - "type" : "integer" - }, - "nil%" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" - } - } - }, - "metabase.lib.schema.metadata.fingerprint..fingerprint.number" : { - "description" : "Schema for fingerprint information for Fields deriving from `:type/Number`.", - "type" : "object", - "properties" : { - "avg" : { - "type" : "number" - }, - "max" : { - "type" : "number" - }, - "min" : { - "type" : "number" - }, - "q1" : { - "type" : "number" - }, - "q3" : { - "type" : "number" - }, - "sd" : { - "type" : "number" - } - } - }, - "metabase.lib.schema.metadata.fingerprint..fingerprint.temporal" : { - "description" : "Schema for fingerprint information for Fields deriving from `:type/Temporal`.", - "type" : "object", - "properties" : { - "earliest" : { - "type" : "string" - }, - "latest" : { - "type" : "string" - } - } - }, - "metabase.lib.schema.metadata.fingerprint..fingerprint.text" : { - "description" : "Schema for fingerprint information for Fields deriving from `:type/Text`.", - "type" : "object", - "properties" : { - "average-length" : { - "type" : "number" - }, - "percent-email" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" - }, - "percent-json" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" - }, - "percent-state" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" - }, - "percent-url" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" - } - } - }, - "metabase.lib.schema.metadata.fingerprint..fingerprint.type-specific" : { - "description" : "Schema for type-specific fingerprint information.", - "allOf" : [ { - "type" : "object", - "additionalProperties" : { - "type" : "object", - "properties" : { } - } - }, { - "type" : "object", - "properties" : { - "type/DateTime" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.temporal" - }, - "type/Number" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.number" - }, - "type/Text" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.text" - } - } - } ] - }, - "metabase.lib.schema.metadata.fingerprint.fingerprint" : { - "description" : "Schema for a Field 'fingerprint' generated as part of the analysis stage. Used to power the 'classification'\n sub-stage of analysis. Stored as the `fingerprint` column of Field.", - "type" : "object", - "properties" : { - "experimental" : { - "type" : "object", - "additionalProperties" : { } - }, - "global" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.global" - }, - "type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.type-specific" - } - } - }, - "metabase.lib.schema.metadata.fingerprint.percent" : { - "description" : "Schema for something represting a percentage. A floating-point value between (inclusive) 0 and 1.", - "type" : "number" - }, - "metabase.lib.schema.metadata.kebab-cased-map" : { }, - "metabase.lib.schema.metadata.lib-or-legacy-column" : { - "description" : "Schema for the maps in card `:result-metadata` and similar. These can be either\n `:metabase.lib.schema.metadata/result-metadata` (i.e., kebab-cased) maps, or map snake_cased as returned by QP\n metadata, but they should NOT be a mixture of both -- if we mixed them somehow there is a bug in our code.", - "oneOf" : [ { - "description" : "Malli schema for a valid map of column metadata, which can mean one of two things:\n\n 1. Metadata about a particular Field in the application database. This will always have an `:id`\n\n 2. Results metadata from a column in `data.cols` and/or `data.results_metadata.columns` in a Query Processor\n response, or saved in something like `Card.result_metadata`. These *may* have an `:id`, or may not -- columns\n coming back from native queries or things like `SELECT count(*)` aren't associated with any particular `Field`\n and thus will not have an `:id`.\n\n Now maybe these should be two different schemas, but `:id` being there or not is the only real difference; besides\n that they are largely compatible. So they're the same for now. We can revisit this in the future if we actually want\n to differentiate between the two versions.", - "allOf" : [ { - "type" : "object", - "properties" : { - "visibility-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.visibility-type" - }, - "fk-join-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "lib/external-remap" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.remapping.external" - }, - "inherited-temporal-unit" : { - "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" - }, - "lib/source-column-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.source-column-alias" - }, - "database-type" : { - "type" : "string" - }, - "lib/type" : { - "default" : "metadata/column", - "const" : "metadata/column" - }, - "fingerprint" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.fingerprint" - }, - "display-name" : { - "type" : "string" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "effective-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "lib/deduplicated-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.deduplicated-name" - }, - "base-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" - }, - "lib/original-expression-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "fk-field-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "type" : "string" - }, - "lib/card-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.card" - }, - "lib/expression-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "lib/breakout?" : { - "type" : "boolean" - }, - "metabase.lib.field/temporal-unit" : { - "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" - }, - "metabase.lib.field/binning" : { - "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning" - }, - "lib/model-display-name" : { - "type" : "string" - }, - "has-field-values" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.has-field-values" - }, - "lib/internal-remap" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.remapping.internal" - }, - "selected?" : { - "type" : "boolean" - }, - "source-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "source" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.legacy-source" - }, - "metabase.lib.join/join-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" - }, - "fk-field-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "lib/original-binning" : { - "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning" - }, - "lib/original-join-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" - }, - "lib/original-display-name" : { - "type" : "string" - }, - "lib/source" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.source" - }, - "active" : { - "type" : "boolean" - }, - "lib/ref-display-name" : { - "type" : "string" - }, - "lib/original-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.original-name" - }, - "lib/hack-original-name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.original-name" - }, - "semantic-type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" - }, - "fk-target-field-id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "field-ref" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Reference" - }, - "lib/desired-column-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.desired-column-alias" - } - }, - "required" : [ "lib/type", "name", "base-type" ] - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata.kebab-cased-map" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-expression-source" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-native-column" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-table-defaults-column" - } ] - }, { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.legacy-column-metadata" - } ] - }, - "metabase.lib.schema.metadata.original-name" : { - "type" : "string", - "description" : "The original name of the column as it appeared in the very first place it came from (i.e., the physical name of the\n column in the table it appears in). This should be the same as the `:lib/source-column-alias` for the very first\n usage of the column.\n Allowed to be blank because some databases like SQL Server allow blank column names.", - "optional" : true - }, - "metabase.lib.schema.metadata.source-column-alias" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "metabase.lib.schema.parameter..dimension.target" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.legacy-field-ref" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.legacy-expression-ref" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.template-tag" - } ] - }, - "metabase.lib.schema.parameter.DimensionOptions" : { - "type" : "object", - "properties" : { - "stage-number" : { - "type" : "integer" - } - } - }, - "metabase.lib.schema.parameter.dimension" : { }, - "metabase.lib.schema.parameter.legacy-expression-ref" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.expression" - }, - "metabase.lib.schema.parameter.legacy-field-ref" : { - "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" - }, - "metabase.lib.schema.parameter.parameter" : { - "type" : "object", - "properties" : { - "default" : { }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "required" : { }, - "slug" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "target" : { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.target" - }, - "type" : { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.type" + }, + "recipient-type" : { + "enum" : [ "cc", "bcc", "cc", "bcc" ] + }, + "subject" : { + "type" : "string" + }, + "type" : { + "enum" : [ "email/handlebars-resource", "email/handlebars-text", "email/handlebars-resource", "email/handlebars-text" ] + } }, - "value" : { } - }, - "required" : [ "type" ] - }, - "metabase.lib.schema.parameter.target" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.legacy-field-ref" - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.dimension" + "required" : [ "type", "subject", "path" ] }, { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.variable" + "type" : "object", + "properties" : { + "body" : { + "type" : "string" + }, + "recipient-type" : { + "enum" : [ "cc", "bcc", "cc", "bcc" ] + }, + "subject" : { + "type" : "string" + }, + "type" : { + "enum" : [ "email/handlebars-resource", "email/handlebars-text", "email/handlebars-resource", "email/handlebars-text" ] + } + }, + "required" : [ "type", "subject", "body" ] } ] }, - "metabase.lib.schema.parameter.template-tag" : { - "type" : "array", - "prefixItems" : [ { - "const" : "template-tag" + "metabase.lib.schema.common.non-blank-string" : { + "type" : "string", + "minLength" : 1 + }, + "metabase.lib.schema.expression.temporal.timezone-id" : { + "allOf" : [ { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" }, { - "oneOf" : [ { - "type" : "object", - "properties" : { - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - } - }, - "required" : [ "id" ] + "anyOf" : [ { + "type" : "string", + "enum" : [ "Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Asmera", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Timbuktu", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/ComodRivadavia", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Atka", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Buenos_Aires", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Catamarca", "America/Cayenne", "America/Cayman", "America/Chicago", "America/Chihuahua", "America/Ciudad_Juarez", "America/Coral_Harbour", "America/Cordoba", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson", "America/Dawson_Creek", "America/Denver", "America/Detroit", "America/Dominica", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Ensenada", "America/Fort_Nelson", "America/Fort_Wayne", "America/Fortaleza", "America/Glace_Bay", "America/Godthab", "America/Goose_Bay", "America/Grand_Turk", "America/Grenada", "America/Guadeloupe", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana/Indianapolis", "America/Indiana/Knox", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Indianapolis", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Jujuy", "America/Juneau", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Knox_IN", "America/Kralendijk", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Louisville", "America/Lower_Princes", "America/Maceio", "America/Managua", "America/Manaus", "America/Marigot", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Mendoza", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Montreal", "America/Montserrat", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota/Beulah", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/Nuuk", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port-au-Prince", "America/Port_of_Spain", "America/Porto_Acre", "America/Porto_Velho", "America/Puerto_Rico", "America/Punta_Arenas", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Rosario", "America/Santa_Isabel", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Shiprock", "America/Sitka", "America/St_Barthelemy", "America/St_Johns", "America/St_Kitts", "America/St_Lucia", "America/St_Thomas", "America/St_Vincent", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Tortola", "America/Vancouver", "America/Virgin", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/McMurdo", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/South_Pole", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Arctic/Longyearbyen", "Asia/Aden", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Ashkhabad", "Asia/Atyrau", "Asia/Baghdad", "Asia/Bahrain", "Asia/Baku", "Asia/Bangkok", "Asia/Barnaul", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Calcutta", "Asia/Chita", "Asia/Choibalsan", "Asia/Chongqing", "Asia/Chungking", "Asia/Colombo", "Asia/Dacca", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", "Asia/Harbin", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Istanbul", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kashgar", "Asia/Kathmandu", "Asia/Katmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Kuwait", "Asia/Macao", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Muscat", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Oral", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qostanay", "Asia/Qyzylorda", "Asia/Rangoon", "Asia/Riyadh", "Asia/Saigon", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Tel_Aviv", "Asia/Thimbu", "Asia/Thimphu", "Asia/Tokyo", "Asia/Tomsk", "Asia/Ujung_Pandang", "Asia/Ulaanbaatar", "Asia/Ulan_Bator", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vientiane", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yangon", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faeroe", "Atlantic/Faroe", "Atlantic/Jan_Mayen", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/St_Helena", "Atlantic/Stanley", "Australia/ACT", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Canberra", "Australia/Currie", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/LHI", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/NSW", "Australia/North", "Australia/Perth", "Australia/Queensland", "Australia/South", "Australia/Sydney", "Australia/Tasmania", "Australia/Victoria", "Australia/West", "Australia/Yancowinna", "Brazil/Acre", "Brazil/DeNoronha", "Brazil/East", "Brazil/West", "CET", "CST6CDT", "Canada/Atlantic", "Canada/Central", "Canada/Eastern", "Canada/Mountain", "Canada/Newfoundland", "Canada/Pacific", "Canada/Saskatchewan", "Canada/Yukon", "Chile/Continental", "Chile/EasterIsland", "Cuba", "EET", "EST5EDT", "Egypt", "Eire", "Etc/GMT", "Etc/GMT+0", "Etc/GMT+1", "Etc/GMT+10", "Etc/GMT+11", "Etc/GMT+12", "Etc/GMT+2", "Etc/GMT+3", "Etc/GMT+4", "Etc/GMT+5", "Etc/GMT+6", "Etc/GMT+7", "Etc/GMT+8", "Etc/GMT+9", "Etc/GMT-0", "Etc/GMT-1", "Etc/GMT-10", "Etc/GMT-11", "Etc/GMT-12", "Etc/GMT-13", "Etc/GMT-14", "Etc/GMT-2", "Etc/GMT-3", "Etc/GMT-4", "Etc/GMT-5", "Etc/GMT-6", "Etc/GMT-7", "Etc/GMT-8", "Etc/GMT-9", "Etc/GMT0", "Etc/Greenwich", "Etc/UCT", "Etc/UTC", "Etc/Universal", "Etc/Zulu", "Europe/Amsterdam", "Europe/Andorra", "Europe/Astrakhan", "Europe/Athens", "Europe/Belfast", "Europe/Belgrade", "Europe/Berlin", "Europe/Bratislava", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Busingen", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Guernsey", "Europe/Helsinki", "Europe/Isle_of_Man", "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Kirov", "Europe/Kyiv", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Mariehamn", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Nicosia", "Europe/Oslo", "Europe/Paris", "Europe/Podgorica", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/San_Marino", "Europe/Sarajevo", "Europe/Saratov", "Europe/Simferopol", "Europe/Skopje", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Tiraspol", "Europe/Ulyanovsk", "Europe/Uzhgorod", "Europe/Vaduz", "Europe/Vatican", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zagreb", "Europe/Zaporozhye", "Europe/Zurich", "GB", "GB-Eire", "GMT", "GMT0", "Greenwich", "Hongkong", "Iceland", "Indian/Antananarivo", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Comoro", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Mayotte", "Indian/Reunion", "Iran", "Israel", "Jamaica", "Japan", "Kwajalein", "Libya", "MET", "MST7MDT", "Mexico/BajaNorte", "Mexico/BajaSur", "Mexico/General", "NZ", "NZ-CHAT", "Navajo", "PRC", "PST8PDT", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Johnston", "Pacific/Kanton", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Ponape", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Samoa", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Truk", "Pacific/Wake", "Pacific/Wallis", "Pacific/Yap", "Poland", "Portugal", "ROK", "Singapore", "SystemV/AST4", "SystemV/AST4ADT", "SystemV/CST6", "SystemV/CST6CDT", "SystemV/EST5", "SystemV/EST5EDT", "SystemV/HST10", "SystemV/MST7", "SystemV/MST7MDT", "SystemV/PST8", "SystemV/PST8PDT", "SystemV/YST9", "SystemV/YST9YDT", "Turkey", "UCT", "US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa", "UTC", "Universal", "W-SU", "WET", "Zulu" ] }, { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.zone-offset" } ] } ] }, - "metabase.lib.schema.parameter.type" : { - "type" : "string", - "enum" : [ "category", "date", "string/!=", "number/=", "string/ends-with", "location/state", "boolean/=", "number/between", "date/all-options", "number", "number/>=", "location/country", "temporal-unit", "string/=", "string/does-not-contain", "date/range", "string/starts-with", "string/contains", "date/single", "location/city", "id", "date/relative", "location/zip_code", "date/month-year", "date/quarter-year", "number/!=", "boolean", "text", "number/<=" ] + "metabase.lib.schema.id.card" : { + "type" : "integer", + "minimum" : 1 }, - "metabase.lib.schema.parameter.variable" : { - "type" : "array", - "prefixItems" : [ { - "const" : "variable" + "metabase.lib.schema.id.field" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.literal..string.datetime" : { + "anyOf" : [ { + "type" : "string", + "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?$" }, { - "$ref" : "#/components/schemas/metabase.lib.schema.parameter.template-tag" + "type" : "string", + "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))$" } ] }, - "metabase.lib.schema.parameter.widget-type" : { + "metabase.lib.schema.literal..string.zone-offset" : { "type" : "string", - "enum" : [ "none", "category", "date", "string/!=", "number/=", "string/ends-with", "location/state", "boolean/=", "number/between", "date/all-options", "number", "number/>=", "location/country", "temporal-unit", "string/=", "string/does-not-contain", "date/range", "string/starts-with", "string/contains", "date/single", "location/city", "id", "date/relative", "location/zip_code", "date/month-year", "date/quarter-year", "number/!=", "boolean", "text", "number/<=" ] + "pattern" : "(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))" }, - "metabase.lib.schema.template-tag..raw-value.type" : { + "metabase.lib.schema.metadata..column.has-field-values" : { "type" : "string", - "enum" : [ "date", "number", "boolean", "text" ] + "enum" : [ "auto-list", "list", "none", "search" ] }, "metabase.lib.schema.temporal-bucketing.unit" : { "type" : "string", "enum" : [ "quarter", "day", "hour", "week", "second", "default", "day-of-week", "hour-of-day", "month", "month-of-year", "day-of-month", "year", "day-of-year", "millisecond", "year-of-era", "second-of-minute", "week-of-year", "quarter-of-year", "minute-of-hour", "minute" ] }, - "metabase.logger.api.log-level" : { - "type" : "string", - "enum" : [ "off", "fatal", "error", "warn", "info", "debug", "trace" ] - }, "metabase.logger.api.time-unit" : { "type" : "string", "enum" : [ "days", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds" ] @@ -4375,69 +1452,7 @@ } }, "required" : [ "payload_type", "payload" ] - }, { - "type" : "object", - "properties" : { - "creator" : { - "type" : "object", - "properties" : { } - }, - "handlers" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "active" : { - "type" : "boolean" - }, - "channel" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" - }, - "channel_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "channel_type" : { }, - "notification_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "recipients" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" - } - }, - "template" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplate" - }, - "template_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "channel_type" ] - } - }, - "payload_id" : { - "type" : "null" - }, - "payload_type" : { - "type" : "string", - "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] - }, - "subscriptions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" - } - } - }, - "required" : [ "payload_type" ] - } ] + }, { } ] }, { "oneOf" : [ { "type" : "object", @@ -4507,72 +1522,7 @@ } }, "required" : [ "payload_type", "payload" ] - }, { - "type" : "object", - "properties" : { - "creator" : { - "type" : "object", - "properties" : { } - }, - "creator_id" : { - "type" : "integer" - }, - "handlers" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "active" : { - "type" : "boolean" - }, - "channel" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" - }, - "channel_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "channel_type" : { }, - "notification_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "recipients" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" - } - }, - "template" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplate" - }, - "template_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "channel_type" ] - } - }, - "payload_id" : { - "type" : "integer" - }, - "payload_type" : { - "type" : "string", - "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] - }, - "subscriptions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" - } - } - }, - "required" : [ "payload_type" ] - } ] + }, { } ] }, { "oneOf" : [ { "type" : "object", @@ -4629,64 +1579,10 @@ "items" : { "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" } - } - }, - "required" : [ "payload" ] - }, { - "type" : "object", - "properties" : { - "creator" : { - "type" : "object", - "properties" : { } - }, - "handlers" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "active" : { - "type" : "boolean" - }, - "channel" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" - }, - "channel_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "channel_type" : { }, - "notification_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "recipients" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" - } - }, - "template" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplate" - }, - "template_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "channel_type" ] - } - }, - "subscriptions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" - } - } - } - } ] + } + }, + "required" : [ "payload" ] + }, { } ] } ] }, "metabase.notification.models.Notification" : { @@ -5002,16 +1898,6 @@ } } }, - "metabase.timeline.api.timeline.Timeline" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "id" ] - }, "metabase.timeline.api.timeline.include" : { "type" : "string", "enum" : [ "events" ] @@ -5071,18 +1957,6 @@ } }, "required" : [ "schedule_type" ] - }, - "metabot.reaction.redirect" : { - "type" : "object", - "properties" : { - "type" : { - "const" : "metabot.reaction/redirect" - }, - "url" : { - "type" : "string" - } - }, - "required" : [ "type", "url" ] } } }, @@ -5101,34 +1975,12 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/action" ] }, "post" : { "summary" : "POST /api/action/", "description" : "Create a new action.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -5233,17 +2085,6 @@ "summary" : "GET /api/action/public", "description" : "Fetch a list of Actions with public UUIDs. These actions are publicly-accessible *if* public sharing is enabled.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/action" ] } }, @@ -5261,17 +2102,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/action" ] }, "delete" : { @@ -5287,17 +2117,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/action" ] } }, @@ -5323,17 +2142,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/action" ] } }, @@ -5351,17 +2159,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -5481,17 +2278,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -5525,17 +2311,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/action" ] }, "delete" : { @@ -5551,17 +2326,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/action" ] } }, @@ -5570,17 +2334,6 @@ "summary" : "GET /api/activity/most_recently_viewed_dashboard", "description" : "Get the most recently viewed dashboard for the current user. Returns a 204 if the user has not viewed any dashboards\n in the last 24 hours.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/activity" ] } }, @@ -5589,17 +2342,6 @@ "summary" : "GET /api/activity/popular_items", "description" : "Get the list of 5 popular things on the instance. Query takes 8 and limits to 5 so that if it finds anything\n archived, deleted, etc it can usually still get 5. ", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/activity" ] } }, @@ -5608,17 +2350,6 @@ "summary" : "GET /api/activity/recent_views", "description" : "Get a list of 100 models (cards, models, tables, dashboards, and collections) that the current user has been viewing most\n recently. Return a maximum of 20 model of each, if they've looked at at least 20.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/activity" ] } }, @@ -5646,34 +2377,12 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/activity" ] }, "post" : { "summary" : "POST /api/activity/recents", "description" : "Adds a model to the list of recently selected items.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -5724,17 +2433,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/alert" ] } }, @@ -5752,17 +2450,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/alert" ] } }, @@ -5780,17 +2467,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/alert" ] } }, @@ -5799,17 +2475,6 @@ "summary" : "GET /api/analytics/anonymous-stats", "description" : "Anonymous usage stats. Endpoint for testing, and eventually exposing this to instance admins to let them see\n what is being phoned home.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/analytics" ] } }, @@ -5818,17 +2483,6 @@ "summary" : "POST /api/api-key/", "description" : "Create a new API key (and an associated `User`) with the provided name and group ID.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -5856,17 +2510,6 @@ "summary" : "GET /api/api-key/", "description" : "Get a list of API keys with the default scope. Non-paginated.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/api-key" ] } }, @@ -5875,17 +2518,6 @@ "summary" : "GET /api/api-key/count", "description" : "Get the count of API keys in the DB with the default scope.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/api-key" ] } }, @@ -5903,17 +2535,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -5949,17 +2570,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/api-key" ] } }, @@ -5977,17 +2587,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/api-key" ] } }, @@ -6005,17 +2604,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6038,17 +2626,6 @@ "type" : "integer" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6077,17 +2654,6 @@ } ] } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6132,17 +2698,6 @@ }, "description" : "invalid show value" } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6196,17 +2751,6 @@ }, "description" : "invalid show value" } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6262,17 +2806,6 @@ }, "description" : "invalid show value" } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6337,17 +2870,6 @@ }, "description" : "invalid show value" } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6395,17 +2917,6 @@ }, "description" : "invalid show value" } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6422,17 +2933,6 @@ "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6482,17 +2982,6 @@ }, "description" : "invalid show value" } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6551,17 +3040,6 @@ }, "description" : "invalid show value" } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -6570,17 +3048,6 @@ "summary" : "GET /api/bookmark/", "description" : "Fetch all bookmarks for the user", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/bookmark" ] } }, @@ -6589,17 +3056,6 @@ "summary" : "PUT /api/bookmark/ordering", "description" : "Sets the order of bookmarks for user.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -6655,17 +3111,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/bookmark" ] }, "delete" : { @@ -6689,17 +3134,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/bookmark" ] } }, @@ -6708,17 +3142,6 @@ "summary" : "GET /api/bug-reporting/connection-pool-details", "description" : "Returns database connection pool info for the current Metabase instance.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/bug-reporting" ] } }, @@ -6727,17 +3150,6 @@ "summary" : "GET /api/bug-reporting/details", "description" : "Returns version and system information relevant to filing a bug report against Metabase.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/bug-reporting" ] } }, @@ -6777,34 +3189,12 @@ }, "description" : "Model id to get configuration for." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/cache" ] }, "put" : { "summary" : "PUT /api/cache/", "description" : "Store cache configuration.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -6835,17 +3225,6 @@ "summary" : "DELETE /api/cache/", "description" : "Delete cache configurations.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -6925,17 +3304,6 @@ }, "description" : "A list of question ids" } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/cache" ] } }, @@ -6962,34 +3330,12 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] }, "post" : { "summary" : "POST /api/card/", "description" : "Create a new `Card`. Card `type` can be `question`, `metric`, or `model`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -7079,17 +3425,6 @@ "summary" : "POST /api/card/collections", "description" : "Bulk update endpoint for Card Collections. Move a set of `Cards` with `card_ids` into a `Collection` with\n `collection_id`, or remove them from any Collections by passing a `null` `collection_id`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -7123,17 +3458,6 @@ "summary" : "GET /api/card/embeddable", "description" : "Fetch a list of Cards where `enable_embedding` is `true`. The cards can be embedded using the embedding endpoints\n and a signed JWT.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7151,17 +3475,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -7184,17 +3497,6 @@ "summary" : "GET /api/card/public", "description" : "Fetch a list of Cards with public UUIDs. These cards are publicly-accessible *if* public sharing is enabled.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7228,17 +3530,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7264,17 +3555,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7292,17 +3572,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] }, "delete" : { @@ -7318,17 +3587,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7341,28 +3599,11 @@ "name" : "card-id", "required" : true, "schema" : { - "anyOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "description" : "String must be a valid 21-character NanoID string.", - "type" : "string", - "pattern" : "^[A-Za-z0-9_\\-]{21}$" - } ] - } - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" + "type" : "integer", + "minimum" : 1 }, - "5XX" : { - "description" : "Server error response" - } - }, + "description" : "value must be an integer greater than zero." + } ], "requestBody" : { "content" : { "application/json" : { @@ -7411,17 +3652,6 @@ "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -7461,16 +3691,10 @@ "name" : "id", "required" : true, "schema" : { - "anyOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "description" : "String must be a valid 21-character NanoID string.", - "type" : "string", - "pattern" : "^[A-Za-z0-9_\\-]{21}$" - } ] - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." }, { "in" : "query", "name" : "ignore_view", @@ -7487,17 +3711,6 @@ "enum" : [ "collection" ] } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] }, "put" : { @@ -7520,17 +3733,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -7632,17 +3834,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7660,17 +3851,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7688,17 +3868,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7730,17 +3899,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7753,28 +3911,11 @@ "name" : "id", "required" : true, "schema" : { - "anyOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "description" : "String must be a valid 21-character NanoID string.", - "type" : "string", - "pattern" : "^[A-Za-z0-9_\\-]{21}$" - } ] - } - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" + "type" : "integer", + "minimum" : 1 }, - "5XX" : { - "description" : "Server error response" - } - }, + "description" : "value must be an integer greater than zero." + } ], "tags" : [ "/api/card" ] } }, @@ -7812,17 +3953,6 @@ "required" : false, "schema" : { } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/card" ] } }, @@ -7831,17 +3961,6 @@ "summary" : "POST /api/cards/dashboards", "description" : "Get the dashboards that multiple cards appear in. The response is a sequence of maps, each of which has a `card_id`\n and `dashboards`. `dashboard` may include an `:error` key, either `:unreadable-dashboard` or\n `:unwritable-dashboard`. In the case of an `unreadable-dashboard` the dashboard details (name, ID) will NOT be\n present.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -7870,17 +3989,6 @@ "summary" : "POST /api/cards/move", "description" : "Moves a number of Cards to a single collection or dashboard.\n\n For now, just either succeed or fail as a batch - we can think more about error handling later down the road.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -7919,17 +4027,6 @@ "summary" : "GET /api/channel/", "description" : "Get all channels", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -7951,17 +4048,6 @@ "summary" : "POST /api/channel/", "description" : "Create a channel", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -8001,17 +4087,6 @@ "summary" : "POST /api/channel/test", "description" : "Test a channel connection", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -8048,17 +4123,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/channel" ] }, "put" : { @@ -8074,17 +4138,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -8122,34 +4175,12 @@ "summary" : "POST /api/cloud-migration/", "description" : "Initiate a new cloud migration.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/cloud-migration" ] }, "get" : { "summary" : "GET /api/cloud-migration/", "description" : "Get the latest cloud migration, if any.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/cloud-migration" ] } }, @@ -8158,17 +4189,6 @@ "summary" : "PUT /api/cloud-migration/cancel", "description" : "Cancel any ongoing cloud migrations, if any.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/cloud-migration" ] } }, @@ -8209,34 +4229,12 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/collection" ] }, "post" : { "summary" : "POST /api/collection/", "description" : "Create a new Collection.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -8286,17 +4284,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/collection" ] }, "put" : { @@ -8319,17 +4306,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -8370,17 +4346,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/collection" ] } }, @@ -8389,24 +4354,6 @@ "summary" : "GET /api/collection/root/dashboard-question-candidates", "description" : "Find cards in the root collection that can be moved into dashboards in the root collection. (Same as the above\n endpoint, but for the root collection)", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:data -> , :name -> , :description -> , :sole_dashboard_info -> , :name -> , :description -> }>}>, :total -> }", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/metabase.collections.api.DashboardQuestionCandidatesResponse" - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/collection" ] } }, @@ -8488,17 +4435,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/collection" ] } }, @@ -8507,24 +4443,6 @@ "summary" : "POST /api/collection/root/move-dashboard-question-candidates", "description" : "Move candidate cards to the dashboards they appear in (for the root collection)", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:moved -> }", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/metabase.collections.api.MoveDashboardQuestionCandidatesResponse" - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -8554,17 +4472,6 @@ "summary" : "GET /api/collection/trash", "description" : "Fetch the trash collection, as in `/api/collection/:trash-id`", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/collection" ] } }, @@ -8614,17 +4521,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/collection" ] } }, @@ -8637,28 +4533,11 @@ "name" : "id", "required" : true, "schema" : { - "anyOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "description" : "String must be a valid 21-character NanoID string.", - "type" : "string", - "pattern" : "^[A-Za-z0-9_\\-]{21}$" - } ] - } - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" + "type" : "integer", + "minimum" : 1 }, - "5XX" : { - "description" : "Server error response" - } - }, + "description" : "value must be an integer greater than zero." + } ], "tags" : [ "/api/collection" ] }, "put" : { @@ -8674,17 +4553,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -8735,24 +4603,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "map where {:data -> , :name -> , :description -> , :sole_dashboard_info -> , :name -> , :description -> }>}>, :total -> }", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/metabase.collections.api.DashboardQuestionCandidatesResponse" - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/collection" ] } }, @@ -8765,16 +4615,10 @@ "name" : "id", "required" : true, "schema" : { - "anyOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "description" : "String must be a valid 21-character NanoID string.", - "type" : "string", - "pattern" : "^[A-Za-z0-9_\\-]{21}$" - } ] - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." }, { "in" : "query", "name" : "models", @@ -8842,17 +4686,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/collection" ] } }, @@ -8870,24 +4703,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "map where {:moved -> }", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/metabase.collections.api.MoveDashboardQuestionCandidatesResponse" - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -8925,34 +4740,12 @@ "enum" : [ "all", "mine", "archived" ] } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] }, "post" : { "summary" : "POST /api/dashboard/", "description" : "Create a new Dashboard.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -9001,17 +4794,6 @@ "summary" : "GET /api/dashboard/embeddable", "description" : "Fetch a list of Dashboards where `enable_embedding` is `true`. The dashboards can be embedded using the embedding\n endpoints and a signed JWT.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -9044,17 +4826,6 @@ } } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -9090,17 +4861,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -9139,17 +4899,6 @@ "summary" : "GET /api/dashboard/public", "description" : "Fetch a list of Dashboards with public UUIDs. These dashboards are publicly-accessible *if* public sharing is\n enabled.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -9158,17 +4907,6 @@ "summary" : "POST /api/dashboard/save", "description" : "Save a denormalized description of dashboard.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -9186,17 +4924,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -9232,17 +4959,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -9319,17 +5035,6 @@ "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -9408,17 +5113,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] }, "post" : { @@ -9443,17 +5137,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -9486,17 +5169,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] }, "delete" : { @@ -9512,17 +5184,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -9540,17 +5201,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -9596,28 +5246,11 @@ "name" : "id", "required" : true, "schema" : { - "anyOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "description" : "String must be a valid 21-character NanoID string.", - "type" : "string", - "pattern" : "^[A-Za-z0-9_\\-]{21}$" - } ] - } - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" + "type" : "integer", + "minimum" : 1 }, - "5XX" : { - "description" : "Server error response" - } - }, + "description" : "value must be an integer greater than zero." + } ], "tags" : [ "/api/dashboard" ] }, "delete" : { @@ -9633,17 +5266,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] }, "put" : { @@ -9659,17 +5281,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -9836,17 +5447,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -9954,17 +5554,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -9996,17 +5585,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -10032,17 +5610,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -10060,17 +5627,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -10083,28 +5639,11 @@ "name" : "id", "required" : true, "schema" : { - "anyOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "description" : "String must be a valid 21-character NanoID string.", - "type" : "string", - "pattern" : "^[A-Za-z0-9_\\-]{21}$" - } ] - } - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" + "type" : "integer", + "minimum" : 1 }, - "5XX" : { - "description" : "Server error response" - } - }, + "description" : "value must be an integer greater than zero." + } ], "tags" : [ "/api/dashboard" ] } }, @@ -10122,17 +5661,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/dashboard" ] } }, @@ -10198,34 +5726,12 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] }, "post" : { "summary" : "POST /api/database/", "description" : "Add a new `Database`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -10284,17 +5790,6 @@ "summary" : "POST /api/database/sample_database", "description" : "Add the sample database as a new `Database`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10303,17 +5798,6 @@ "summary" : "POST /api/database/validate", "description" : "Validate that we can connect to a database given a set of details.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -10380,17 +5864,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] }, "put" : { @@ -10406,17 +5879,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -10485,17 +5947,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10529,17 +5980,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10572,17 +6012,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10600,17 +6029,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10628,17 +6046,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10656,17 +6063,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10684,17 +6080,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10712,17 +6097,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10772,17 +6146,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10800,17 +6163,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10844,17 +6196,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10888,17 +6229,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10932,17 +6262,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10960,17 +6279,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -10988,17 +6296,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -11016,17 +6313,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -11035,17 +6321,6 @@ "summary" : "GET /api/database/{virtual-db}/datasets", "description" : "Returns a list of all the datasets found for the saved questions virtual database.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -11054,17 +6329,6 @@ "summary" : "GET /api/database/{virtual-db}/datasets/{schema}", "description" : "Returns a list of Tables for the datasets virtual database.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -11073,17 +6337,6 @@ "summary" : "GET /api/database/{virtual-db}/metadata", "description" : "Endpoint that provides metadata for the Saved Questions 'virtual' database. Used for fooling the frontend\n and allowing it to treat the Saved Questions virtual DB just like any other database.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -11092,17 +6345,6 @@ "summary" : "GET /api/database/{virtual-db}/schema/{schema}", "description" : "Returns a list of Tables for the saved questions virtual database.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -11111,17 +6353,6 @@ "summary" : "GET /api/database/{virtual-db}/schemas", "description" : "Returns a list of all the schemas found for the saved questions virtual database.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/database" ] } }, @@ -11130,17 +6361,6 @@ "summary" : "POST /api/dataset/", "description" : "Execute a query and retrieve the results in the usual format. The query will not use the cache.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11163,17 +6383,6 @@ "summary" : "POST /api/dataset/native", "description" : "Fetch a native version of an MBQL query.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11203,17 +6412,6 @@ "summary" : "POST /api/dataset/parameter/remapping", "description" : "Return the remapped parameter values for cards or dashboards that are being edited.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11252,17 +6450,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11292,17 +6479,6 @@ "summary" : "POST /api/dataset/parameter/values", "description" : "Return parameter values for cards or dashboards that are being edited.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11332,17 +6508,6 @@ "summary" : "POST /api/dataset/pivot", "description" : "Generate a pivoted dataset for an ad-hoc query", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11368,17 +6533,6 @@ "summary" : "POST /api/dataset/query_metadata", "description" : "Get all of the required query metadata for an ad-hoc query.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11411,17 +6565,6 @@ "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11459,17 +6602,6 @@ "summary" : "GET /api/ee/advanced-permissions/application/graph", "description" : "Fetch a graph of Application Permissions.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/advanced-permissions/application" ] }, "put" : { @@ -11492,17 +6624,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11539,17 +6660,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/advanced-permissions/impersonation" ] } }, @@ -11567,17 +6677,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/advanced-permissions/impersonation" ] } }, @@ -11586,17 +6685,6 @@ "summary" : "POST /api/ee/ai-entity-analysis/analyze-chart", "description" : "Analyze a chart image using an AI vision model. This function sends the image data to a separate external AI service for analysis.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11644,17 +6732,6 @@ "summary" : "POST /api/ee/ai-sql-fixer/fix", "description" : "Suggest fixes for a SQL query.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11689,17 +6766,6 @@ "summary" : "POST /api/ee/ai-sql-generation/generate", "description" : "Generate a SQL query.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11729,17 +6795,6 @@ "summary" : "GET /api/ee/audit-app/user/audit-info", "description" : "Gets audit info for the current user if he has permissions to access the audit collection.\n Otherwise return an empty map.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/audit-app/user" ] } }, @@ -11757,17 +6812,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/audit-app/user" ] } }, @@ -11776,17 +6820,6 @@ "summary" : "POST /api/ee/autodescribe/card/summarize", "description" : "Summarize a question.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -11867,17 +6900,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/autodescribe" ] } }, @@ -11886,17 +6908,6 @@ "summary" : "GET /api/ee/billing/", "description" : "Get billing information. This acts as a proxy between `metabase-billing-info-url` and the client,\n using the embedding token and signed in user's email to fetch the billing information.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/billing" ] } }, @@ -11905,17 +6916,6 @@ "summary" : "GET /api/ee/content-translation/csv", "description" : "Provides content translation dictionary in CSV", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/content-translation" ] } }, @@ -11931,17 +6931,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/content-translation" ] } }, @@ -11950,17 +6939,6 @@ "summary" : "POST /api/ee/content-translation/upload-dictionary", "description" : "Upload a CSV of content translations", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -11986,60 +6964,6 @@ "tags" : [ "/api/ee/content-translation" ] } }, - "/api/ee/database-replication/connection/{database-id}" : { - "post" : { - "summary" : "POST /api/ee/database-replication/connection/{database-id}", - "description" : "Create a new PG replication connection for the specified database.", - "parameters" : [ { - "in" : "path", - "name" : "database-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/ee/database-replication" ] - }, - "delete" : { - "summary" : "DELETE /api/ee/database-replication/connection/{database-id}", - "description" : "Delete PG replication connection for the specified database.", - "parameters" : [ { - "in" : "path", - "name" : "database-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/ee/database-replication" ] - } - }, "/api/ee/database-routing/destination-database" : { "post" : { "summary" : "POST /api/ee/database-routing/destination-database", @@ -12052,17 +6976,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12115,17 +7028,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12144,111 +7046,11 @@ "tags" : [ "/api/ee/database-routing" ] } }, - "/api/ee/email/override" : { - "put" : { - "summary" : "PUT /api/ee/email/override", - "description" : "Update multiple cloud email Settings. You must be a superuser or have `setting` permission to do this.\n Calling this automatically sets `cloud-smtp-enabled` to true if the settings are valid.", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "email-smtp-host-override" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "null" - } ] - }, - "email-smtp-password-override" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "null" - } ] - }, - "email-smtp-port-override" : { - "anyOf" : [ { - "type" : "integer" - }, { - "type" : "null" - } ] - }, - "email-smtp-security-override" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "null" - } ] - }, - "email-smtp-username-override" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "null" - } ] - } - } - } - } - } - }, - "tags" : [ "/api/ee/email" ] - }, - "delete" : { - "summary" : "DELETE /api/ee/email/override", - "description" : "Clear all cloud email related settings. You must be a superuser or have `setting` permission to do this.", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/ee/email" ] - } - }, "/api/ee/gsheets/connection" : { "post" : { "summary" : "POST /api/ee/gsheets/connection", "description" : "Hook up a new google drive folder or sheet that will be watched and have its content ETL'd into Metabase.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:error -> , :message -> }, or one of , :created_at -> , :sync_started_at -> , :created_by_id -> , :db_id -> } | active = map where {:url -> , :created_at -> , :last_sync_at -> , :next_sync_at -> , :created_by_id -> , :db_id -> } | error = map where {:url -> , :created_at -> , :error_message -> , :created_by_id -> , :db_id -> }> dispatched by :status", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/gsheets.response" - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12271,41 +7073,12 @@ "summary" : "GET /api/ee/gsheets/connection", "description" : "Check the status of a connection. This endpoint gets polled by FE to determine when to\n stop showing the setup widget.\n\n Returns the gsheets shape, with the attached datawarehouse db id at `:db_id`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:error -> , :message -> }, or one of , :created_at -> , :sync_started_at -> , :created_by_id -> , :db_id -> } | active = map where {:url -> , :created_at -> , :last_sync_at -> , :next_sync_at -> , :created_by_id -> , :db_id -> } | error = map where {:url -> , :created_at -> , :error_message -> , :created_by_id -> , :db_id -> }> dispatched by :status", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/gsheets.response" - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/gsheets" ] }, "delete" : { "summary" : "DELETE /api/ee/gsheets/connection", "description" : "Disconnect the google service account. There is only one (or zero) at the time of writing.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/gsheets" ] } }, @@ -12314,17 +7087,6 @@ "summary" : "POST /api/ee/gsheets/connection/sync", "description" : "Force a sync of the connection now.\n\n Returns the gsheets shape, with the attached datawarehouse db id at `:db_id`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/gsheets" ] } }, @@ -12333,30 +7095,6 @@ "summary" : "GET /api/ee/gsheets/service-account", "description" : "Checks to see if service-account is setup or not, delegates to HM only if we haven't set it from a metabase cluster\n before.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:email -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "email" : { - "type" : "string" - } - }, - "required" : [ ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/gsheets" ] } }, @@ -12374,17 +7112,6 @@ }, "description" : "Must be a string like 2020-04 or 2222-11." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/logs" ] } }, @@ -12393,32 +7120,6 @@ "summary" : "POST /api/ee/metabot-tools/answer-sources", "description" : "Return top level meta information about available information sources.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12447,35 +7148,6 @@ "summary" : "POST /api/ee/metabot-tools/create-dashboard-subscription", "description" : "Create a dashboard subscription.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:output -> , :conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - }, - "output" : { - "type" : "string" - } - }, - "required" : [ "output", "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12504,32 +7176,6 @@ "summary" : "POST /api/ee/metabot-tools/field-values", "description" : "Return statistics and/or values for a given field of a given entity.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12558,32 +7204,6 @@ "summary" : "POST /api/ee/metabot-tools/filter-records", "description" : "Construct a query from a metric.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12612,32 +7232,6 @@ "summary" : "POST /api/ee/metabot-tools/find-metric", "description" : "Find a metric matching a description.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12672,32 +7266,6 @@ "summary" : "POST /api/ee/metabot-tools/find-outliers", "description" : "Find outliers in the values provided by a data source for a given column.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12710,57 +7278,22 @@ "conversation_id" : { "description" : "value must be a valid UUID.", "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "arguments", "conversation_id" ] - } - } - } - }, - "tags" : [ "/api/ee/metabot-tools" ] - } - }, - "/api/ee/metabot-tools/generate-insights" : { - "post" : { - "summary" : "POST /api/ee/metabot-tools/generate-insights", - "description" : "Generate insights.", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:output -> , :reactions -> , :url -> }>, :conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - }, - "output" : { - "type" : "string" - }, - "reactions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabot.reaction.redirect" - } - } - }, - "required" : [ "output", "reactions", "conversation_id" ] - } + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "arguments", "conversation_id" ] } } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" } }, + "tags" : [ "/api/ee/metabot-tools" ] + } + }, + "/api/ee/metabot-tools/generate-insights" : { + "post" : { + "summary" : "POST /api/ee/metabot-tools/generate-insights", + "description" : "Generate insights.", + "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { @@ -12789,32 +7322,6 @@ "summary" : "POST /api/ee/metabot-tools/get-current-user", "description" : "Get information about user that started the conversation.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12832,32 +7339,6 @@ "summary" : "POST /api/ee/metabot-tools/get-dashboard-details", "description" : "Get information about a given dashboard.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12892,32 +7373,6 @@ "summary" : "POST /api/ee/metabot-tools/get-metric-details", "description" : "Get information about a given metric.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -12946,32 +7401,6 @@ "summary" : "POST /api/ee/metabot-tools/get-query-details", "description" : "Get information about a given query.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -13007,32 +7436,6 @@ "summary" : "POST /api/ee/metabot-tools/get-report-details", "description" : "Get information about a given report.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -13061,32 +7464,6 @@ "summary" : "POST /api/ee/metabot-tools/get-table-details", "description" : "Get information about a given table or model.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -13115,32 +7492,6 @@ "summary" : "POST /api/ee/metabot-tools/query-metric", "description" : "Construct a query from a metric.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -13169,32 +7520,6 @@ "summary" : "POST /api/ee/metabot-tools/query-model", "description" : "Construct a query from a model.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:conversation_id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -13223,17 +7548,6 @@ "summary" : "GET /api/ee/metabot-v3/metabot/", "description" : "List configured metabot instances", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -13250,17 +7564,6 @@ "minimum" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -13277,17 +7580,6 @@ "minimum" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/metabot-v3/metabot" ] }, "put" : { @@ -13302,17 +7594,6 @@ "minimum" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -13374,17 +7655,6 @@ "minimum" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -13424,17 +7694,6 @@ "minimum" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/metabot-v3/metabot" ] }, "delete" : { @@ -13449,17 +7708,6 @@ "minimum" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -13476,17 +7724,6 @@ "minimum" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -13511,17 +7748,6 @@ "minimum" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -13530,17 +7756,6 @@ "summary" : "POST /api/ee/metabot-v3/v2/agent", "description" : "Send a chat message to the LLM via the AI Service.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -13583,17 +7798,6 @@ "summary" : "POST /api/ee/metabot-v3/v2/agent-streaming", "description" : "Send a chat message to the LLM via the AI Proxy.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -13631,39 +7835,48 @@ "tags" : [ "/api/ee/metabot-v3" ] } }, + "/api/ee/permission_debug/" : { + "get" : { + "summary" : "GET /api/ee/permission_debug/", + "description" : "This endpoint expects a `user_id`, a `model_id` to debug permissions against, and `action_type`.\n The type of model we are debugging against is inferred by the `action_type`.\n\n It will return:\n - `decision`: The overall permission decision (\"allow\", \"denied\", or \"limited\")\n - `model-type`: The type of model being checked (e.g., \"question\")\n - `model-id`: The ID of the model being checked\n - `segment`: A set of segmentation types applied (e.g., \"sandboxed\", \"impersonated\", \"routed\")\n - `message`: A sequence of strings explaining the decision\n - `data`: A map containing details about permissions (table or collection names to group names)\n - `suggestions`: A map of group IDs to group names that could provide access\n\n Example requests:\n - Check if user can read a card: `GET /api/ee/permission_debug?user_id=123&model_id=456&action_type=card/read`\n - Check if user can query a card: `GET /api/ee/permission_debug?user_id=123&model_id=456&action_type=card/query`\n - Check if user can download data: `GET /api/ee/permission_debug?user_id=123&model_id=456&action_type=card/download-data`\n\n Example responses:\n - Allowed access:\n ```json\n {\n \"decision\": \"allow\",\n \"model-type\": \"question\",\n \"model-id\": \"456\",\n \"segment\": [],\n \"message\": [\"User has permission to read this card\"],\n \"data\": {},\n \"suggestions\": {}\n }\n ```\n - Denied access with blocked table:\n ```json\n {\n \"decision\": \"denied\",\n \"model-type\": \"question\",\n \"model-id\": \"456\",\n \"segment\": [],\n \"message\": [\"User does not have permission to query this card\"],\n \"data\": {\"sample-db.PUBLIC.ORDERS\": [\"All Users\"]},\n \"suggestions\": {}\n }\n ```\n - Limited access:\n ```json\n {\n \"decision\": \"limited\",\n \"model-type\": \"question\",\n \"model-id\": \"456\",\n \"segment\": [],\n \"message\": [\"User has permission to download some data from this card\"],\n \"data\": {},\n \"suggestions\": {}\n }\n ```", + "parameters" : [ { + "in" : "query", + "name" : "user_id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + } + }, { + "in" : "query", + "name" : "model_id", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "query", + "name" : "action_type", + "required" : true, + "schema" : { + "type" : "string", + "enum" : [ "card/read", "card/query", "card/download-data" ] + } + } ], + "tags" : [ "/api/ee/permission_debug" ] + } + }, "/api/ee/scim/api_key" : { "get" : { "summary" : "GET /api/ee/scim/api_key", "description" : "Fetch the SCIM API key if one exists. Does *not* return an unmasked key, since we don't have access\n to that after it is created.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/scim" ] }, "post" : { "summary" : "POST /api/ee/scim/api_key", "description" : "Create a new SCIM API key, or refresh one that already exists. When called for the first time,\n this is equivalent to enabling SCIM.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/scim" ] } }, @@ -13698,34 +7911,12 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/scim/v2" ] }, "post" : { "summary" : "POST /api/ee/scim/v2/Groups", "description" : "Create a single group, and populates it if necessary.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -13786,34 +7977,12 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/scim/v2" ] }, "put" : { "summary" : "PUT /api/ee/scim/v2/Groups/{id}", "description" : "Update a group.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -13872,17 +8041,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/scim/v2" ] } }, @@ -13917,34 +8075,12 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/scim/v2" ] }, "post" : { "summary" : "POST /api/ee/scim/v2/Users", "description" : "Create a single user.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -14048,34 +8184,12 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/scim/v2" ] }, "put" : { "summary" : "PUT /api/ee/scim/v2/Users/{id}", "description" : "Update a user.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -14177,17 +8291,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -14321,17 +8424,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/serialization" ] } }, @@ -14356,17 +8448,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -14451,17 +8532,6 @@ "enum" : [ "asc", "desc" ] } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/stale" ] } }, @@ -14470,17 +8540,6 @@ "summary" : "GET /api/ee/upload-management/tables", "description" : "Get all `Tables` visible to the current user which were created by uploading a file.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/ee/upload-management" ] } }, @@ -14505,18 +8564,7 @@ "type" : "boolean", "default" : false } - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, + } ], "tags" : [ "/api/ee/upload-management" ] } }, @@ -14525,17 +8573,6 @@ "summary" : "POST /api/eid-translation/translate", "description" : "Translate entity IDs to model IDs.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -14560,59 +8597,12 @@ "summary" : "PUT /api/email/", "description" : "Update multiple email Settings. You must be a superuser or have `setting` permission to do this.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", - "properties" : { - "email-smtp-host" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "null" - } ] - }, - "email-smtp-password" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "null" - } ] - }, - "email-smtp-port" : { - "anyOf" : [ { - "type" : "integer" - }, { - "type" : "null" - } ] - }, - "email-smtp-security" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "null" - } ] - }, - "email-smtp-username" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "null" - } ] - } - } + "properties" : { } } } } @@ -14623,17 +8613,6 @@ "summary" : "DELETE /api/email/", "description" : "Clear all email related settings. You must be a superuser or have `setting` permission to do this.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/email" ] } }, @@ -14642,17 +8621,6 @@ "summary" : "POST /api/email/test", "description" : "Send a test email using the SMTP Settings. You must be a superuser or have `setting` permission to do this.\n Returns `{:ok true}` if we were able to send the message successfully, otherwise a standard 400 error response.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/email" ] } }, @@ -14668,17 +8636,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14708,17 +8665,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14727,17 +8673,6 @@ "summary" : "GET /api/embed/card/{token}/params/{param-key}/search/{prefix}", "description" : "Embedded version of chain filter search endpoint.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14760,17 +8695,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14786,17 +8710,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14835,17 +8748,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14861,17 +8763,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14905,17 +8796,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14965,17 +8845,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -14984,17 +8853,6 @@ "summary" : "GET /api/embed/dashboard/{token}/params/{param-key}/remapping", "description" : "Embedded version of the remapped dashboard param value endpoint.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -15003,17 +8861,6 @@ "summary" : "GET /api/embed/dashboard/{token}/params/{param-key}/search/{prefix}", "description" : "Embedded version of chain filter search endpoint.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -15036,17 +8883,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -15062,17 +8898,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -15106,17 +8931,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -15178,17 +8992,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -15268,17 +9071,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/embed" ] } }, @@ -15304,17 +9096,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/field" ] }, "put" : { @@ -15330,17 +9111,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -15418,17 +9188,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -15469,17 +9228,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/field" ] } }, @@ -15497,17 +9245,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/field" ] } }, @@ -15525,17 +9262,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/field" ] } }, @@ -15570,17 +9296,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/field" ] } }, @@ -15598,17 +9313,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/field" ] } }, @@ -15643,17 +9347,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/field" ] } }, @@ -15671,17 +9364,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/field" ] } }, @@ -15699,17 +9381,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/field" ] }, "post" : { @@ -15725,17 +9396,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -15779,17 +9439,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/geojson" ] } }, @@ -15806,17 +9455,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/geojson" ] } }, @@ -15825,17 +9463,6 @@ "summary" : "PUT /api/google/settings", "description" : "Update Google Sign-In related settings. You must be a superuser to do this.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -15864,17 +9491,6 @@ "summary" : "PUT /api/ldap/settings", "description" : "Update LDAP related settings. You must be a superuser to do this.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -15907,17 +9523,6 @@ "summary" : "POST /api/logger/adjustment", "description" : "Temporarily adjust the log levels.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -15943,17 +9548,6 @@ "summary" : "DELETE /api/logger/adjustment", "description" : "Undo any log level adjustments.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/logger" ] } }, @@ -15962,17 +9556,6 @@ "summary" : "GET /api/logger/logs", "description" : "Logs.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/logger" ] } }, @@ -15981,51 +9564,6 @@ "summary" : "GET /api/logger/presets", "description" : "Get all known presets.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "sequence of map where {:id -> , :display_name -> , :loggers -> , :level -> }>}", - "content" : { - "application/json" : { - "schema" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "display_name" : { - "type" : "string" - }, - "id" : { - "type" : "string" - }, - "loggers" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "level" : { - "$ref" : "#/components/schemas/metabase.logger.api.log-level" - }, - "name" : { - "type" : "string" - } - }, - "required" : [ "name", "level" ] - } - } - }, - "required" : [ "id", "display_name", "loggers" ] - } - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/logger" ] } }, @@ -16034,17 +9572,6 @@ "summary" : "GET /api/login-history/current", "description" : "Fetch recent logins for the current user.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/login-history" ] } }, @@ -16053,17 +9580,6 @@ "summary" : "POST /api/model-index/", "description" : "Create ModelIndex.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16098,17 +9614,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/model-index" ] } }, @@ -16126,17 +9631,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/model-index" ] }, "delete" : { @@ -16152,17 +9646,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/model-index" ] } }, @@ -16171,17 +9654,6 @@ "summary" : "POST /api/moderation-review/", "description" : "Create a new `ModerationReview`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16235,34 +9707,12 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/mt/gtap" ] }, "post" : { "summary" : "POST /api/mt/gtap/", "description" : "Create a new GTAP.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16299,17 +9749,6 @@ "summary" : "POST /api/mt/gtap/validate", "description" : "Validate a sandbox which may not have yet been saved. This runs the same validation that is performed when the\n sandbox is saved, but doesn't actually save the sandbox.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16349,17 +9788,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/mt/gtap" ] }, "put" : { @@ -16374,18 +9802,7 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, + } ], "requestBody" : { "content" : { "application/json" : { @@ -16418,17 +9835,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/mt/gtap" ] } }, @@ -16437,17 +9843,6 @@ "summary" : "GET /api/mt/user/attributes", "description" : "Fetch a list of possible keys for User `login_attributes`. This just looks at keys that have already been set for\n existing Users and returns those. ", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/mt/user" ] } }, @@ -16465,17 +9860,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16508,34 +9892,12 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/native-query-snippet" ] }, "post" : { "summary" : "POST /api/native-query-snippet/", "description" : "Create a new `NativeQuerySnippet`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16579,17 +9941,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/native-query-snippet" ] }, "put" : { @@ -16605,17 +9956,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16703,34 +10043,12 @@ "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/notification" ] }, "post" : { "summary" : "POST /api/notification/", "description" : "Create a new notification, return the created notification.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16748,17 +10066,6 @@ "summary" : "POST /api/notification/send", "description" : "Send an unsaved notification.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16776,17 +10083,6 @@ "summary" : "POST /api/notification/unsubscribe/", "description" : "Allow non-users to unsubscribe from notifications, with the hash given through email.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16818,17 +10114,6 @@ "summary" : "POST /api/notification/unsubscribe/undo", "description" : "Allow non-users to undo an unsubscribe from notifications, with the hash given through email.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16869,17 +10154,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/notification" ] }, "put" : { @@ -16895,17 +10169,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16932,17 +10195,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -16979,17 +10231,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/notification" ] } }, @@ -16998,17 +10239,6 @@ "summary" : "POST /api/notify/db/attached_datawarehouse", "description" : "Sync the attached datawarehouse. Can provide in the body:\n - table_name and schema_name: both strings. Will look for an existing table and sync it, otherwise will try to find a\n new table with that name and sync it. If it cannot find a table it will throw an error. If table_name is empty or\n blank, will sync the entire database.\n - synchronous?: is a boolean value to indicate if this should block on the result.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -17049,17 +10279,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -17101,17 +10320,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -17140,17 +10348,6 @@ "summary" : "GET /api/permissions/graph", "description" : "Fetch a graph of all Permissions.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/permissions" ] }, "put" : { @@ -17173,17 +10370,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -17211,17 +10397,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/permissions" ] } }, @@ -17239,17 +10414,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/permissions" ] } }, @@ -17258,34 +10422,12 @@ "summary" : "GET /api/permissions/group", "description" : "Fetch all `PermissionsGroups`, including a count of the number of `:members` in that group.\n This API requires superuser or group manager of more than one group.\n Group manager is only available if `advanced-permissions` is enabled and returns only groups that user\n is manager of.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/permissions" ] }, "post" : { "summary" : "POST /api/permissions/group", "description" : "Create a new `PermissionsGroup`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -17319,17 +10461,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -17361,17 +10492,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/permissions" ] } }, @@ -17389,17 +10509,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/permissions" ] } }, @@ -17408,34 +10517,12 @@ "summary" : "GET /api/permissions/membership", "description" : "Fetch a map describing the group memberships of various users.\n This map's format is:\n\n { [{:membership_id \n :group_id \n :is_group_manager boolean}]}", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/permissions" ] }, "post" : { "summary" : "POST /api/permissions/membership", "description" : "Add a `User` to a `PermissionsGroup`. Returns updated list of members belonging to the group.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -17479,17 +10566,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/permissions" ] } }, @@ -17507,17 +10583,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -17548,17 +10613,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/permissions" ] } }, @@ -17567,17 +10621,6 @@ "summary" : "GET /api/persist/", "description" : "List the entries of [[PersistedInfo]] in order to show a status page.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17595,17 +10638,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17623,17 +10655,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17651,17 +10672,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17679,17 +10689,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17707,17 +10706,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17735,17 +10723,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17754,17 +10731,6 @@ "summary" : "POST /api/persist/disable", "description" : "Disable global setting to allow databases to persist models. This will remove all tasks to refresh tables, remove\n that option from databases which might have it enabled, and delete all cached tables.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17773,17 +10739,6 @@ "summary" : "POST /api/persist/enable", "description" : "Enable global setting to allow databases to persist models.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17792,17 +10747,6 @@ "summary" : "POST /api/persist/set-refresh-schedule", "description" : "Set the cron schedule to refresh persisted models.\n Shape should be JSON like {cron: \"0 30 1/8 * * ? *\"}.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -17837,17 +10781,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/persist" ] } }, @@ -17856,17 +10789,6 @@ "summary" : "GET /api/premium-features/token/status", "description" : "Fetch info about the current Premium-Features premium features token including whether it is `valid`, a `trial` token, its\n `features`, when it is `valid-thru`, and the `status` of the account.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/premium-features" ] } }, @@ -17883,17 +10805,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/preview_embed" ] } }, @@ -17923,17 +10834,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/preview_embed" ] } }, @@ -17950,17 +10850,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/preview_embed" ] } }, @@ -17977,17 +10866,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/preview_embed" ] } }, @@ -18022,17 +10900,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/preview_embed" ] } }, @@ -18041,17 +10908,6 @@ "summary" : "GET /api/preview_embed/dashboard/{token}/params/{param-key}/remapping", "description" : "Embedded version of the remapped dashboard param value endpoint.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/preview_embed" ] } }, @@ -18060,17 +10916,6 @@ "summary" : "GET /api/preview_embed/dashboard/{token}/params/{param-key}/values", "description" : "Embedded version of chain filter values endpoint.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/preview_embed" ] } }, @@ -18087,17 +10932,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/preview_embed" ] } }, @@ -18132,17 +10966,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/preview_embed" ] } }, @@ -18151,17 +10974,6 @@ "summary" : "POST /api/product-feedback/", "description" : "Endpoint to provide feedback from the product", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -18203,17 +11015,6 @@ }, "description" : "value must be a valid UUID." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18231,17 +11032,6 @@ }, "description" : "value must be a valid UUID." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -18274,17 +11064,6 @@ }, "description" : "value must be a valid UUID." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18315,17 +11094,6 @@ "required" : true, "schema" : { } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18359,17 +11127,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18395,17 +11152,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18431,17 +11177,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18487,20 +11222,9 @@ "required" : false, "schema" : { "type" : "string" - }, - "description" : "value must be a valid JSON string." - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, + }, + "description" : "value must be a valid JSON string." + } ], "tags" : [ "/api/public" ] } }, @@ -18518,17 +11242,6 @@ }, "description" : "value must be a valid UUID." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18572,17 +11285,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18625,17 +11327,6 @@ "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -18697,17 +11388,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] }, "post" : { @@ -18732,17 +11412,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -18788,17 +11457,6 @@ "required" : true, "schema" : { } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18832,17 +11490,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18868,17 +11515,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18922,17 +11558,6 @@ "minimum" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -18958,17 +11583,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -19012,17 +11626,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -19086,17 +11689,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -19178,17 +11770,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/public" ] } }, @@ -19222,34 +11803,12 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/pulse" ] }, "post" : { "summary" : "POST /api/pulse/", "description" : "Create a new `Pulse`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -19302,17 +11861,6 @@ "summary" : "GET /api/pulse/form_input", "description" : "Provides relevant configuration information and user choices for creating/updating Pulses.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/pulse" ] } }, @@ -19330,17 +11878,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/pulse" ] } }, @@ -19358,17 +11895,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/pulse" ] } }, @@ -19386,17 +11912,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/pulse" ] } }, @@ -19414,17 +11929,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/pulse" ] } }, @@ -19433,17 +11937,6 @@ "summary" : "POST /api/pulse/test", "description" : "Test send an unsaved pulse.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -19489,17 +11982,6 @@ "summary" : "POST /api/pulse/unsubscribe/", "description" : "Allow non-users to unsubscribe from pulses/subscriptions, with the hash given through email.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -19531,17 +12013,6 @@ "summary" : "POST /api/pulse/unsubscribe/undo", "description" : "Allow non-users to undo an unsubscribe from pulses/subscriptions, with the hash given through email.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -19582,17 +12053,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/pulse" ] }, "put" : { @@ -19608,17 +12068,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -19675,17 +12124,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/pulse" ] } }, @@ -19711,17 +12149,6 @@ "enum" : [ "card", "dashboard", "segment" ] } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/revision" ] } }, @@ -19730,17 +12157,6 @@ "summary" : "POST /api/revision/revert", "description" : "Revert an object to a prior revision.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -19792,24 +12208,13 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/revision" ] } }, "/api/search/" : { "get" : { "summary" : "GET /api/search/", - "description" : "Search for items in Metabase.\n For the list of supported models, check [[metabase.search.config/all-models]].\n\n Filters:\n - `archived`: set to true to search archived items only, default is false\n - `table_db_id`: search for tables, cards, and models of a certain DB\n - `models`: only search for items of specific models. If not provided, search for all models\n - `filters_items_in_personal_collection`: only search for items in personal collections\n - `created_at`: search for items created at a specific timestamp\n - `created_by`: search for items created by a specific user\n - `last_edited_at`: search for items last edited at a specific timestamp\n - `last_edited_by`: search for items last edited by a specific user\n - `search_native_query`: set to true to search the content of native queries\n - `verified`: set to true to search for verified items only (requires Content Management or Official Collections premium feature)\n - `ids`: search for items with those ids, works iff single value passed to `models`\n - `display_type`: search for cards/models with specific display types\n - `has_temporal_dimensions`: set to true to search for cards with temporal dimensions only\n\n Note that not all item types support all filters, and the results will include only models that support the provided filters. For example:\n - The `created-by` filter supports dashboards, models, actions, and cards.\n - The `verified` filter supports models and cards.\n\n A search query that has both filters applied will only return models and cards.", + "description" : "Search for items in Metabase.\n For the list of supported models, check [[metabase.search.config/all-models]].\n\n Filters:\n - `archived`: set to true to search archived items only, default is false\n - `table_db_id`: search for tables, cards, and models of a certain DB\n - `models`: only search for items of specific models. If not provided, search for all models\n - `filters_items_in_personal_collection`: only search for items in personal collections\n - `created_at`: search for items created at a specific timestamp\n - `created_by`: search for items created by a specific user\n - `last_edited_at`: search for items last edited at a specific timestamp\n - `last_edited_by`: search for items last edited by a specific user\n - `search_native_query`: set to true to search the content of native queries\n - `verified`: set to true to search for verified items only (requires Content Management or Official Collections premium feature)\n - `ids`: search for items with those ids, works iff single value passed to `models`\n\n Note that not all item types support all filters, and the results will include only models that support the provided filters. For example:\n - The `created-by` filter supports dashboards, models, actions, and cards.\n - The `verified` filter supports models and cards.\n\n A search query that has both filters applied will only return models and cards.", "parameters" : [ { "in" : "query", "name" : "q", @@ -19881,24 +12286,6 @@ "minimum" : 1 } } - }, { - "in" : "query", - "name" : "display_type", - "required" : false, - "schema" : { - "type" : "array", - "items" : { - "type" : "string", - "minLength" : 1 - } - } - }, { - "in" : "query", - "name" : "has_temporal_dimensions", - "required" : false, - "schema" : { - "type" : "boolean" - } }, { "in" : "query", "name" : "last_edited_at", @@ -19984,17 +12371,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/search" ] } }, @@ -20003,17 +12379,6 @@ "summary" : "POST /api/search/force-reindex", "description" : "This will trigger an immediate reindexing, if we are using search index.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/search" ] } }, @@ -20022,17 +12387,6 @@ "summary" : "POST /api/search/re-init", "description" : "This will blow away any search indexes, re-create, and re-populate them.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/search" ] } }, @@ -20054,17 +12408,6 @@ "required" : false, "schema" : { } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/search" ] }, "put" : { @@ -20084,17 +12427,6 @@ "required" : false, "schema" : { } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/search" ] } }, @@ -20103,17 +12435,6 @@ "summary" : "POST /api/segment/", "description" : "Create a new `Segment`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20149,17 +12470,6 @@ "summary" : "GET /api/segment/", "description" : "Fetch *all* `Segments`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/segment" ] } }, @@ -20177,17 +12487,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/segment" ] }, "put" : { @@ -20203,17 +12502,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20276,17 +12564,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/segment" ] } }, @@ -20304,17 +12581,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/segment" ] } }, @@ -20323,17 +12589,6 @@ "summary" : "POST /api/session/", "description" : "Login.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20360,17 +12615,6 @@ "summary" : "DELETE /api/session/", "description" : "Logout.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/session" ] } }, @@ -20379,17 +12623,6 @@ "summary" : "POST /api/session/forgot_password", "description" : "Send a reset email when user has forgotten their password.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20414,17 +12647,6 @@ "summary" : "POST /api/session/google_auth", "description" : "Login with Google Auth.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20449,17 +12671,6 @@ "summary" : "POST /api/session/password-check", "description" : "Endpoint that checks if the supplied password meets the currently configured password complexity rules.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20492,17 +12703,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/session" ] } }, @@ -20511,17 +12711,6 @@ "summary" : "GET /api/session/properties", "description" : "Get all properties and their values. These are the specific `Settings` that are readable by the current user, or are\n public if no user is logged in.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/session" ] } }, @@ -20530,17 +12719,6 @@ "summary" : "POST /api/session/reset_password", "description" : "Reset password with a reset token.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20569,34 +12747,12 @@ "summary" : "GET /api/setting/", "description" : "Get all `Settings` and their values. You must be a superuser or have `setting` permission to do this.\n For non-superusers, a list of visible settings and values can be retrieved using the /api/session/properties endpoint.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/setting" ] }, "put" : { "summary" : "PUT /api/setting/", "description" : "Update multiple `Settings` values. If called by a non-superuser, only user-local settings can be updated.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20622,17 +12778,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/setting" ] }, "put" : { @@ -20646,30 +12791,6 @@ "type" : "string" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "value" : { } - }, - "required" : [ "value" ] - } - } - } - }, "tags" : [ "/api/setting" ] } }, @@ -20678,17 +12799,6 @@ "summary" : "POST /api/setup/", "description" : "Special endpoint for creating the first user during setup. This endpoint both creates the user AND logs them in and\n returns a session ID. This endpoint can also be used to add a database, create and invite a second admin, and/or\n set specific settings from the setup flow.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20768,17 +12878,6 @@ "summary" : "GET /api/setup/user_defaults", "description" : "Returns object containing default user details for initial setup, if configured,\n and if the provided token value matches the token in the configuration value.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/setup" ] } }, @@ -20787,17 +12886,6 @@ "summary" : "POST /api/slack/bug-report", "description" : "Send diagnostic information to the configured Slack channels.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20819,19 +12907,8 @@ "/api/slack/manifest" : { "get" : { "summary" : "GET /api/slack/manifest", - "description" : "Returns the YAML manifest file that should be used to bootstrap new Slack apps", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, + "description" : "Returns the YAML manifest file that should be used to bootstrap new Slack apps", + "parameters" : [ ], "tags" : [ "/api/slack" ] } }, @@ -20840,17 +12917,6 @@ "summary" : "PUT /api/slack/settings", "description" : "Update Slack related settings. You must be a superuser to do this. Also updates the slack-cache.\n There are 3 cases where we alter the slack channel/user cache:\n 1. falsy token -> clear\n 2. invalid token -> clear\n 3. truthy, valid token -> refresh ", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20877,34 +12943,12 @@ "summary" : "GET /api/table/", "description" : "Get all `Tables`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/table" ] }, "put" : { "summary" : "PUT /api/table/", "description" : "Update all `Table` in `ids`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -20965,17 +13009,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/table" ] } }, @@ -20993,17 +13026,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/table" ] } }, @@ -21028,17 +13050,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/table" ] }, "put" : { @@ -21054,17 +13065,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -21120,17 +13120,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -21170,17 +13159,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/table" ] } }, @@ -21198,30 +13176,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "map where {:success -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "success" : { - "const" : true - } - }, - "required" : [ "success" ] - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -21253,17 +13207,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/table" ] } }, @@ -21305,17 +13248,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/table" ] } }, @@ -21333,17 +13265,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/table" ] } }, @@ -21361,17 +13282,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -21384,418 +13294,109 @@ "filename" : { "type" : "string" }, - "tempfile" : { } - }, - "required" : [ "filename", "tempfile" ] - } - }, - "required" : [ "file" ] - } - } - } - }, - "tags" : [ "/api/table" ] - } - }, - "/api/table/{id}/rescan_values" : { - "post" : { - "summary" : "POST /api/table/{id}/rescan_values", - "description" : "Manually trigger an update for the FieldValues for the Fields belonging to this Table. Only applies to Fields that\n are eligible for FieldValues.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/table" ] - } - }, - "/api/table/{id}/sync_schema" : { - "post" : { - "summary" : "POST /api/table/{id}/sync_schema", - "description" : "Trigger a manual update of the schema metadata for this `Table`.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/table" ] - } - }, - "/api/table/{table-id}/data" : { - "get" : { - "summary" : "GET /api/table/{table-id}/data", - "description" : "Get the data for the given table", - "parameters" : [ { - "in" : "path", - "name" : "table-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/table" ] - } - }, - "/api/task/" : { - "get" : { - "summary" : "GET /api/task/", - "description" : "Fetch a list of recent tasks stored as Task History", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/task" ] - } - }, - "/api/task/info" : { - "get" : { - "summary" : "GET /api/task/info", - "description" : "Return raw data about all scheduled tasks (i.e., Quartz Jobs and Triggers).", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/task" ] - } - }, - "/api/task/unique-tasks" : { - "get" : { - "summary" : "GET /api/task/unique-tasks", - "description" : "Returns possibly empty vector of unique task names in alphabetical order. It is expected that number of unique\n tasks is small, hence no need for pagination. If that changes this endpoint and function that powers it should\n reflect that.", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/task" ] - } - }, - "/api/task/{id}" : { - "get" : { - "summary" : "GET /api/task/{id}", - "description" : "Get `TaskHistory` entry with ID.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/task" ] - } - }, - "/api/testing/echo" : { - "post" : { - "summary" : "POST /api/testing/echo", - "description" : "Simple echo hander. Fails when you POST with `?fail=true`.", - "parameters" : [ { - "in" : "query", - "name" : "fail", - "required" : true, - "schema" : { - "default" : false, - "type" : "boolean" - } - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/testing" ] - }, - "get" : { - "summary" : "GET /api/testing/echo", - "description" : "Simple echo hander. Fails when you GET with `?fail=true`.", - "parameters" : [ { - "in" : "query", - "name" : "fail", - "required" : true, - "schema" : { - "default" : false, - "type" : "boolean" - } - }, { - "in" : "query", - "name" : "body", - "required" : true, - "schema" : { - "type" : "string" - }, - "description" : "value must be a valid JSON string." - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/testing" ] - } - }, - "/api/testing/mark-stale" : { - "post" : { - "summary" : "POST /api/testing/mark-stale", - "description" : "Mark the card or dashboard as stale", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "date-str" : { - "type" : "string" - }, - "id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "model" : { - "type" : "string" + "tempfile" : { } + }, + "required" : [ "filename", "tempfile" ] } }, - "required" : [ "id", "model" ] + "required" : [ "file" ] } } } }, - "tags" : [ "/api/testing" ] - } - }, - "/api/testing/refresh-caches" : { - "post" : { - "summary" : "POST /api/testing/refresh-caches", - "description" : "Manually triggers the cache refresh task, if Enterprise code is available.", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/testing" ] + "tags" : [ "/api/table" ] } }, - "/api/testing/restore/{name}" : { + "/api/table/{id}/rescan_values" : { "post" : { - "summary" : "POST /api/testing/restore/{name}", - "description" : "Restore a database snapshot for testing purposes.", + "summary" : "POST /api/table/{id}/rescan_values", + "description" : "Manually trigger an update for the FieldValues for the Fields belonging to this Table. Only applies to Fields that\n are eligible for FieldValues.", "parameters" : [ { "in" : "path", - "name" : "name", + "name" : "id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" + "type" : "integer", + "minimum" : 1 }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/testing" ] + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/table" ] } }, - "/api/testing/set-time" : { + "/api/table/{id}/sync_schema" : { "post" : { - "summary" : "POST /api/testing/set-time", - "description" : "Make java-time see world at exact time.", - "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" + "summary" : "POST /api/table/{id}/sync_schema", + "description" : "Trigger a manual update of the schema metadata for this `Table`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 }, - "5XX" : { - "description" : "Server error response" - } - }, - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "add-ms" : { - "description" : "value must be an integer.", - "type" : "integer" - }, - "time" : { - "description" : "value must be a valid date string", - "type" : "string" - } - } - } - } - } - }, - "tags" : [ "/api/testing" ] + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/table" ] } }, - "/api/testing/snapshot/{name}" : { - "post" : { - "summary" : "POST /api/testing/snapshot/{name}", - "description" : "Snapshot the database for testing purposes.", + "/api/table/{table-id}/data" : { + "get" : { + "summary" : "GET /api/table/{table-id}/data", + "description" : "Get the data for the given table", "parameters" : [ { "in" : "path", - "name" : "name", + "name" : "table-id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } - } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" + "type" : "integer", + "minimum" : 1 }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/testing" ] + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/table" ] } }, - "/api/testing/stats" : { - "post" : { - "summary" : "POST /api/testing/stats", - "description" : "Triggers a send of instance usage stats", + "/api/task/" : { + "get" : { + "summary" : "GET /api/task/", + "description" : "Fetch a list of recent tasks stored as Task History", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" + "tags" : [ "/api/task" ] + } + }, + "/api/task/info" : { + "get" : { + "summary" : "GET /api/task/info", + "description" : "Return raw data about all scheduled tasks (i.e., Quartz Jobs and Triggers).", + "parameters" : [ ], + "tags" : [ "/api/task" ] + } + }, + "/api/task/unique-tasks" : { + "get" : { + "summary" : "GET /api/task/unique-tasks", + "description" : "Returns possibly empty vector of unique task names in alphabetical order. It is expected that number of unique\n tasks is small, hence no need for pagination. If that changes this endpoint and function that powers it should\n reflect that.", + "parameters" : [ ], + "tags" : [ "/api/task" ] + } + }, + "/api/task/{id}" : { + "get" : { + "summary" : "GET /api/task/{id}", + "description" : "Get `TaskHistory` entry with ID.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 }, - "5XX" : { - "description" : "Server error response" - } - }, - "tags" : [ "/api/testing" ] + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/task" ] } }, "/api/tiles/{card-id}/{zoom}/{x}/{y}/{lat-field}/{lon-field}" : { @@ -21858,17 +13459,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/tiles" ] } }, @@ -21950,17 +13540,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/tiles" ] } }, @@ -21977,17 +13556,6 @@ }, "description" : "value must be a valid JSON string." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/tiles" ] } }, @@ -21996,17 +13564,6 @@ "summary" : "POST /api/timeline-event/", "description" : "Create a new [[TimelineEvent]].", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -22074,17 +13631,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/timeline-event" ] }, "put" : { @@ -22100,17 +13646,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -22166,17 +13701,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/timeline-event" ] } }, @@ -22185,24 +13709,6 @@ "summary" : "POST /api/timeline/", "description" : "Create a new [[Timeline]].", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "map where {:id -> }", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/metabase.timeline.api.timeline.Timeline" - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -22258,27 +13764,6 @@ "type" : "boolean" } } ], - "responses" : { - "2XX" : { - "description" : "sequence of map where {:id -> }", - "content" : { - "application/json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.timeline.api.timeline.Timeline" - } - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/timeline" ] } }, @@ -22302,17 +13787,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/timeline" ] } }, @@ -22345,17 +13819,6 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/timeline" ] } }, @@ -22404,24 +13867,6 @@ }, "description" : "value must be a valid date string" } ], - "responses" : { - "2XX" : { - "description" : "map where {:id -> }", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/metabase.timeline.api.timeline.Timeline" - } - } - } - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/timeline" ] }, "put" : { @@ -22437,17 +13882,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -22496,17 +13930,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/timeline" ] } }, @@ -22515,17 +13938,6 @@ "summary" : "POST /api/upload/csv", "description" : "Create a table and model populated with the values from the attached CSV. Returns the model ID if successful.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -22568,17 +13980,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user-key-value" ] } }, @@ -22603,17 +14004,6 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -22651,34 +14041,12 @@ "minLength" : 1 } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user-key-value" ] }, "delete" : { "summary" : "DELETE /api/user-key-value/namespace/{namespace}/key/{key}", "description" : "Deletes a KV-pair for the user", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user-key-value" ] } }, @@ -22718,34 +14086,12 @@ "default" : false } } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user" ] }, "post" : { "summary" : "POST /api/user/", "description" : "Create a new `User`, return a 400 if the email address is already taken", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -22789,17 +14135,6 @@ "summary" : "GET /api/user/current", "description" : "Fetch the current `User`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user" ] } }, @@ -22808,17 +14143,6 @@ "summary" : "GET /api/user/recipients", "description" : "Fetch a list of `Users`. Returns only active users. Meant for non-admins unlike GET /api/user.\n\n - If user-visibility is :all or the user is an admin, include all users.\n - If user-visibility is :group, include only users in the same group (excluding the all users group).\n - If user-visibility is :none or the user is sandboxed, include only themselves.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user" ] } }, @@ -22836,17 +14160,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user" ] }, "put" : { @@ -22862,17 +14175,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -22933,17 +14235,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user" ] } }, @@ -22961,17 +14252,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user" ] } }, @@ -22989,17 +14269,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "requestBody" : { "content" : { "application/json" : { @@ -23033,17 +14302,6 @@ }, "description" : "value must be an integer greater than zero." } ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/user" ] } }, @@ -23052,17 +14310,6 @@ "summary" : "GET /api/util/random_token", "description" : "Return a cryptographically secure random 32-byte token, encoded as a hexadecimal string.\n Intended for use when creating a value for `embedding-secret-key`.", "parameters" : [ ], - "responses" : { - "2XX" : { - "description" : "Successful response" - }, - "4XX" : { - "description" : "Client error response" - }, - "5XX" : { - "description" : "Server error response" - } - }, "tags" : [ "/api/util" ] } } diff --git a/_site/docs/master/configuring-metabase/appearance.html b/_site/docs/master/configuring-metabase/appearance.html index 78b49c2e00..fea15c06a1 100644 --- a/_site/docs/master/configuring-metabase/appearance.html +++ b/_site/docs/master/configuring-metabase/appearance.html @@ -5000,7 +5000,7 @@

    Further reading

    diff --git a/_site/docs/master/configuring-metabase/config-template.html b/_site/docs/master/configuring-metabase/config-template.html index 1f047e290d..5cbb067e20 100644 --- a/_site/docs/master/configuring-metabase/config-template.html +++ b/_site/docs/master/configuring-metabase/config-template.html @@ -5055,6 +5055,7 @@

    Metabase config file template

    surveys-enabled: true synchronous-batch-updates: false unaggregated-query-row-limit: null + update-channel: latest uploads-settings: null use-tenants: false user-visibility: all diff --git a/_site/docs/master/configuring-metabase/email.html b/_site/docs/master/configuring-metabase/email.html index aff75f456d..11f5c94307 100644 --- a/_site/docs/master/configuring-metabase/email.html +++ b/_site/docs/master/configuring-metabase/email.html @@ -49,7 +49,7 @@ - + @@ -59,7 +59,7 @@ - + @@ -4803,96 +4803,31 @@
    Other resources

    Set up email

    -

    Once you connect your database to Metabase, you’ll want to configure an email account to send system notifications to your organization’s users. Metabase uses email to reset passwords, onboard new users, and notify you when something happens (see dashboard subscriptions and alerts).

    +

    Once you connect your database to Metabase, you’ll want to configure an email account to send system notifications to your organization’s users. Metabase uses email to reset passwords, onboard new users, and notify you when something happens.

    -

    Email on Metabase Cloud

    +

    To edit email settings:

    -

    Admin settings > Settings > Email

    - -

    On Metabase Cloud, you can use the default SMTP server, or set up a custom server.

    +
      +
    1. Click on the gear icon in the upper right.
    2. +
    3. Select Admin Settings.
    4. +
    5. From the default Settings tab, click on Notification channels in the left sidebar.
    6. +
    7. Select Email.
    8. +
    -

    Default SMTP server on Metabase Cloud

    +

    Metabase Cloud

    -

    By default, Metabase Cloud will manage an email server for you, so you don’t need to set up email.

    +

    Metabase Cloud manages an email server for you, so you don’t need to set up email (and you won’t see SMTP settings in your Admin console).

    If you like, you can still set up:

      -
    • A display name for your Cloud email account (the “from” name). The email will still be sent from a Metabase address, however.
    • -
    • An email address to receive email replies (reply-to address).
    • -
    - -

    When Metabase manages the SMTP server, you can’t change the from address. If you want Metabase to send emails from a different domain, you’ll need to bring your own SMTP server. See below.

    - -

    Custom SMTP Server on Metabase Cloud

    - -
    -
    - - - - - - - - -

    Custom SMTP server on Metabase Cloud is only available on Pro and Enterprise plans - - - (both self-hosted and on Metabase Cloud). -

    -
    -
    - -

    Admin settings > Settings > Email > Set up a custom SMTP server

    - -

    By default, Metabase Cloud manages an SMTP server for you. But if you want to use your own SMTP server, you can bring your own.

    - -

    You may want to use your own SMTP server if you want to:

    - -
      -
    • Customize the From domain (for example, if you’re white-labeling Metabase).
    • -
    • Avoid having emails pass through 3rd-party services.
    • -
    • Own IP reputation, logs, monitoring.
    • -
    • Own auditing.
    • -
    - -

    When setting up a custom SMTP server on Metabase Cloud, you’ll configure these fields:

    - -
      -
    • SMTP HOST: The address of the SMTP server that handles your emails (e.g., smtp.yourservice.com).
    • -
    • SMTP PORT: The port your SMTP server uses for outgoing emails. Only encrypted email ports are supported: -
        -
      • 465 (SSL)
      • -
      • 587 (TLS)
      • -
      • 2525 (STARTTLS)
      • -
      -
    • -
    • SMTP SECURITY: Choose the security protocol for your connection: -
        -
      • SSL
      • -
      • TLS
      • -
      • STARTTLS
      • -
      -
    • -
    • SMTP USERNAME: Your SMTP account username.
    • -
    • SMTP PASSWORD: Your SMTP account password.
    • -
    - -

    You’ll also need to specify:

    - -
      -
    • From address: The email address you want to use for the sender of emails.
    • -
    • Reply-to address: The email address you want replies to go to, if different from the From address.
    • +
    • A name for your Cloud email account (from name)
    • +
    • An email address to receive email replies (reply-to address)
    -

    You can edit these settings at any time. You can also toggle between this custom SMTP server and the server managed by Metabase Cloud.

    -

    Configuring your email account

    -

    Admin settings > Settings > Email

    - -

    For Metabase to send messages to people, you’ll need to set up an email account to send emails via SMTP (simple mail transfer protocol). SMTP is an email standard that, when combined with SSL/TLS, provides security protection for emails.

    +

    For Metabase to send messages to your organization’s users, you’ll need to set up an email account to send emails via SMTP (simple mail transfer protocol), which is an email standard that secures emails with SSL security protection.

    To start, go to the Admin Panel from the dropdown menu in the top right of Metabase, then from the Settings page, click on Email in the left menu.

    @@ -4913,15 +4848,15 @@

    Configuring your email account

  • STARTTLS
  • -
  • SMTP USERNAME: Your SMTP account username.
  • -
  • SMTP PASSWORD: Your SMTP account password.
  • +
  • SMTP Username.
  • +
  • SMTP Password.
  • You’ll also need to specify your:

    • From address: The email address you want to use for the sender of emails.
    • -
    • Reply-to address: The email address you want replies to go to, if different from the From address.
    • +
    • Reply-to address: The email address you want the replies to go to, if different from the from address.

    Add recipients as CC or BCC

    @@ -4932,7 +4867,7 @@
    • SSL is strongly recommended because it’s more secure and gives your account extra protection from threats.
    • -
    • If your email service has a whitelist of email addresses that are allowed to send email, be sure to whitelist the email address that you put in the From address field to ensure you and your teammates receive all emails from Metabase.
    • +
    • If your email service has a whitelist of email addresses that are allowed to send email, be sure to whitelist the email address that you put in the From Address field to ensure you and your teammates receive all emails from Metabase.

    Notes for common email services

    @@ -4946,12 +4881,12 @@

    Notes for common email services

    Google Apps

      -
    1. In the SMTP HOST field, enter smtp.gmail.com
    2. -
    3. Fill in 465 for the SMTP PORT field
    4. -
    5. For the SMTP SECURITY field, enter SSL
    6. -
    7. In the SMTP USERNAME field, enter your Google Apps email address (e.g. hello@yourdomain.com)
    8. -
    9. Enter your Google Apps password in the SMTP PASSWORD field
    10. -
    11. Enter the email address you would like to be used as the sender of system notifications in the From address field.
    12. +
    13. In the SMTP host field, enter smtp.gmail.com
    14. +
    15. Fill in 465 for the SMTP port field
    16. +
    17. For the SMTP Security field, enter SSL
    18. +
    19. In the SMTP username field, enter your Google Apps email address (e.g. hello@yourdomain.com)
    20. +
    21. Enter your Google Apps password in the SMTP password field
    22. +
    23. Enter the email address you would like to be used as the sender of system notifications in the *From Address field.

    Amazon SES

    @@ -4998,7 +4933,7 @@

    Approved domains for notificationsAllowed email address domain(s) for new dashboard subscriptions and alerts.

    -

    Adding approved domains allows you to restrict which email addresses people can send alerts and subscriptions to. This restriction only applies to sending email to people who lack an account with that Metabase. People with Metabase accounts who aren’t sandboxed will be able to email any other person with an account in that same Metabase.

    +

    Adding approved domains allows you to restrict which email addresses people can send alerts and subscriptions to. This restriction only applies to sending email to people who lack an account with that Metabase. People with accounts in a Metabase who aren’t sandboxed will be able to email any other person with an account in that same Metabase.

    To allow all domains, leave the field empty (allowing all domains is the default).

    diff --git a/_site/docs/master/configuring-metabase/environment-variables.html b/_site/docs/master/configuring-metabase/environment-variables.html index 6884a6d42d..b9f4b8580e 100644 --- a/_site/docs/master/configuring-metabase/environment-variables.html +++ b/_site/docs/master/configuring-metabase/environment-variables.html @@ -6960,6 +6960,17 @@

    MB_UPDATE_CHANNEL

    + + + +

    We’ll notify you here when there’s a new version of this type of release.

    +

    MB_UPLOADS_DATABASE_ID [DEPRECATED]

    diff --git a/_site/docs/master/configuring-metabase/images/AccountSetup.png b/_site/docs/master/configuring-metabase/images/AccountSetup.png index d3bf7c1ba2..e19016a0b9 100644 Binary files a/_site/docs/master/configuring-metabase/images/AccountSetup.png and b/_site/docs/master/configuring-metabase/images/AccountSetup.png differ diff --git a/_site/docs/master/configuring-metabase/images/table-view.png b/_site/docs/master/configuring-metabase/images/table-view.png index 7b253a5ff6..b561a8dc44 100644 Binary files a/_site/docs/master/configuring-metabase/images/table-view.png and b/_site/docs/master/configuring-metabase/images/table-view.png differ diff --git a/_site/docs/master/configuring-metabase/setting-up-metabase.html b/_site/docs/master/configuring-metabase/setting-up-metabase.html index a73a14814d..9b9be33e3c 100644 --- a/_site/docs/master/configuring-metabase/setting-up-metabase.html +++ b/_site/docs/master/configuring-metabase/setting-up-metabase.html @@ -4835,7 +4835,7 @@

    What will you use Metabase for?

    Gathering your database info

    -

    At this point you’ll need to gather some information about the database you want to use with Metabase. We won’t be able to connect to your database without it, but you’d like to deal with all of this later, that’s okay: just click I’ll add my data later. Metabase comes with a Sample Database that you can play around with to get a feel for how Metabase works.

    +

    At this point you’ll need to gather some information about the database you want to use with Metabase. We won’t be able to connect to your database without it, but you’d like to deal with all of this later, that’s okay: just click I’ll add my data later. Metabase comes with a Sample Database that you can play around with to get a feel for how Metabase works.

    If you’re ready to connect, here’s what you’ll need:

    diff --git a/_site/docs/master/dashboards/filters.html b/_site/docs/master/dashboards/filters.html index 40a7d0102e..cbcdfe5ca2 100644 --- a/_site/docs/master/dashboards/filters.html +++ b/_site/docs/master/dashboards/filters.html @@ -49,7 +49,7 @@ - + @@ -59,7 +59,7 @@ - + @@ -4805,15 +4805,32 @@

    Dashboard filters and parameters

    Dashboard Filters

    -

    Instead of creating duplicate dashboards to show different cuts of the same data (like a different dashboard for each quarter), you can add filter or parameter widgets to let people change what data is displayed (filter the data), or how its displayed (parameterize the data).

    +

    Have you ever found yourself in a situation where it seems like you need to create nearly identical copies of the same dashboard, with just one different variable? Maybe you have an Earnings dashboard, but you want to see the data for each city your business is in, or maybe you have a KPI dashboard that you want to see broken out by month.

    -

    Filter and parameter widgets

    +

    Instead of creating duplicate dashboards, you can add filter or parameter widgets to let people change variables for cards on a dashboard.

    -

    There are two basic types of widgets you can add. The type of filter or parameter widget you choose determines how the widget works, including which fields you’ll can connect to the widget.

    +

    Adding a filter or parameter

    + +

    Add a Filter

    + + + +

    Metabase will display the filter only if the filter is connected to a card on the current dashboard tab.

    + +

    Filter and parameter types

    + +

    The type of filter or parameter widget you choose determines how the widget works, including which fields you’ll be able to filter your cards by.

    Filter widgets

    -

    Filters determine what data to show. For example, a date filter might show only data from the last 30 days, or a category filter might show only specific product categories.

    +

    Filters determine what data to show. For example, a date filter might show only data from the last 30 days, or a category filter might show only specific product categories.

    -

    If Metabase doesn’t support the casting option you need, you can create a SQL question that casts the data and save it as a model, or create a view directly in your database.

    - -

    Field metadata

    +

    Casting is different from setting the field type. For example, say you have a “Created At” column with a string data type in your database. You’ll need to cast “Created At” to one of the datetime types above if you want to do things like:

    -

    Admin settings > Table Metadata > Database > Table > Field

    - -

    Semantic type

    +
      +
    • Create relative date filters, such as “Created At = Last week”.
    • +
    • Use “Created At” with formulas like datetimeAdd.
    • +
    -

    You can change the semantic type to give people more context and enable additional functionality, such as displaying text as an image (if the text is an image URL. Another example: you could set an Integer as a “Score” so people have a better idea what those integers indicate.

    +
    +

    Casting data types from the Table Metadata admin settings won’t affect the original data types in your database.

    +
    -

    The semantic types you can choose from depend on the data type. If none of the options describe the values in the column, you can set this setting to “No semantic type”.

    +

    Changing the filter widget

    -

    See semantic types.

    +

    To change a column’s filter widget:

    -

    Field behavior

    +
      +
    1. Go to Admin settings > Table Metadata.
    2. +
    3. Find your database and table.
    4. +
    5. Click on the gear icon at the right of a column’s settings box.
    6. +
    7. Scroll to Filtering on this field.
    8. +
    9. Select a filter widget option.
    10. +
    -

    Admin settings > Table Metadata > Database > Table > Field

    +

    Filter widget options

    -

    Field visibility

    +

    The default behavior for the Is filter for the field.

      -
    • Everywhere: By default, users can see all of the columns in a table.
    • -
    • Only in detail views: The detail view is the view you seen when you expand a single row in a table. This will hide lengthy text from question results. This setting is applied by default if a column’s values have an average length of more than 50 characters. For example, you could use this setting on a column like “Customer Comments” if you already have a column for “Customer Rating”.
    • -
    • Do not include: Columns won’t show up in the query builder or data reference. You can set this option on sensitive columns (such as PII) or irrelevant columns. But this visibility option is a simple omit/hide option; it’s not a permissions feature. These columns are still accessible for people with native query privileges; they can write SELECT hidden_column FROM table or SELECT * FROM table in the SQL editor and they’ll be able to view these fields and their values.
    • +
    • Search box: Display a search box and suggest autocompletions for values in that column that match the search term(s).
    • +
    • A list of all values: Display a search box, as well as a list of checkboxes for values in a dropdown menu that people can select as search terms.
    • +
    • Plain input box: Display a search box, but do NOT suggest autocompletions.
    -

    To restrict what data people can view and query, see data permissions.

    +

    Changing a search box filter to a dropdown filter

    -

    Filtering

    +

    The dropdown filter widget can be finicky, because Metabase needs to run a scan to get the list of values for the dropdown menu.

    -

    The Filtering setting changes a column’s default filter widget. Options include:

    +
      +
    1. Go to Admin settings > Table Metadata.
    2. +
    3. Find your database and table.
    4. +
    5. Scroll to your column.
    6. +
    7. In the column’s settings box, set Type to “Category”.
    8. +
    9. Set Filtering on this field to “A list of all values”.
    10. +
    -
      -
    • Search box: Display a search box and suggest autocompletions for values in that column that match the search term(s).
    • -
    • A list of all values: Display a search box, as well as a dropdown menu with checkboxes for values. If the number of distinct values exceeds 1000, however, Metabase will instead display a search box. See Changing a search box filter to a dropdown filter.
    • -
    • Plain input box: Display a search box, but don’t suggest autocompletions.
    • -
    +

    When you change a default filter to a dropdown filter, you’ll trigger a database query that gets the first 1,000 distinct values (ordered ascending) for that column. Metabase will cache the first 100kB of text to display in the dropdown menu. If you have columns with more than 1,000 distinct values, or columns with text-heavy data, we recommend setting Filtering on this field to “Search box” instead.

    -

    The settings here will also affect dashboard filters. For example, if you set this to plain input box, you won’t be able to set up a dashboard filter that has a dropdown menu. See dropdown list.

    +

    Remapping column values

    -

    Changing a search box filter to a dropdown filter

    +

    Say you have a column with the values 1, 2, and 3, and you want to map each number to the values “low”, “medium” and “high”. This kind of mapping can be done on columns that have numeric or foreign key field types.

    -

    The dropdown filter widget can be finicky, because Metabase needs to run a scan to get the list of values for the dropdown menu. If you’re having trouble:

    +

    Remapping numbers

      -
    1. Set the Semantic type to “Category”.
    2. -
    3. Set Filtering to “A list of all values”.
    4. +
    5. Go to Admin settings > Table Metadata.
    6. +
    7. Find your database and table.
    8. +
    9. Click gear icon at the right of a column’s settings box.
    10. +
    11. Scroll to Display values.
    12. +
    13. Select “Custom mapping” from the dropdown menu.
    14. +
    15. Enter the display values under Mapped values.
    -

    When you change a default filter to a dropdown filter, you’ll trigger a database query that gets the first 1,000 distinct values (ordered ascending) for that column. Metabase will cache the first 100kB of text to display in the dropdown menu.

    +

    Remapping foreign keys

    -

    If you have columns with more than 1,000 distinct values, or columns with text-heavy data, we recommend setting Filtering to “Search box” instead.

    +
      +
    1. Go to Admin settings > Table Metadata.
    2. +
    3. Find your database and table.
    4. +
    5. Click gear icon at the right of a column’s settings box.
    6. +
    7. Scroll to Display values.
    8. +
    9. Select “Use foreign key” from the dropdown menu.
    10. +
    11. Select a column name from the second dropdown menu.
    12. +
    -

    Display values

    + -

    You can map another column connected by a foreign key relationship, like mapping a Product_ID column to instead display the name of the product.

    +
      +
    1. Go to Admin settings > Table Metadata.
    2. +
    3. Find your database and table.
    4. +
    5. Click on the gear icon at the right of a column’s settings box.
    6. +
    7. Select Formatting from the sidebar.
    8. +
    9. From Display as, select Link.
    10. +
    11. Optional: set display text under Link text.
    12. +
    13. Enter the URL in the Link URL field.
    14. +
    15. Optional: create a dynamic URL by adding the column name as a {{parameter}}.
    16. +
    + +

    Format as URL

    + +

    For example, if you set the Link URL for an “Adjective” column to:

    -

    Mapping values to foreign keys

    +
    https://www.google.com/search?q={{adjective}}
    +
    -

    You can map another column connected by a foreign key relationship, like mapping a Product_ID column to instead display the name of the product.

    +

    When someone clicks on the value “askew” in the “Adjective” column, they’ll be taken to the Google search URL:

    -

    Mapping numbers to custom values

    +
    https://www.google.com/search?q=askew
    +
    -

    Say you have a column with values 1, 2, and 3. You could instead display “low”, “medium”, and “high”.

    +

    Refresh or discard cached values

    -

    For this option to be available, you’ll need to set the filtering settings to “A list of all values”.

    +

    To update the values in your filter dropdown menus, refresh or reset the cached values. Cache actions include:

    + +
      +
    • Re-scan this table or field to run a manual scan for new or updated column values. If possible, re-scan the table during off-peak hours, as scans can slow down your database.
    • +
    • Discard cached field values to clear cached values and stop them from showing up in your filter widgets.
    • +
    -

    Select “Custom mapping” from the dropdown menu. For each value in the column, enter a display value under Mapped values.

    +

    Table cache actions

    -

    Field formatting

    +
      +
    1. Go to Admin settings > Table Metadata.
    2. +
    3. Find your database and table.
    4. +
    5. Click the gear icon at the top right (below Exit admin).
    6. +
    7. Select a cache action.
    8. +
    -

    Admin settings > Table Metadata > Database > Table > Field

    +

    Column cache actions

    -

    See Field formatting.

    +
      +
    1. Go to Admin settings > Table Metadata.
    2. +
    3. Find your database and table.
    4. +
    5. Click the gear icon at the right of a column’s settings box.
    6. +
    7. Scroll to Cached field values.
    8. +
    9. Select a cache action.
    10. +

    Unfold JSON

    -

    See Working with JSON.

    +

    If Metabase supports JSON unfolding for your database, you can decide whether to unfold JSON into component fields, where each JSON key becomes a column. You can turn this off if performance is slow.

    + +
      +
    1. Go to Admin settings > Table Metadata.
    2. +
    3. Find your database and table.
    4. +
    5. Click the gear icon at the right of a column’s settings box.
    6. +
    7. Scroll to Unfold JSON.
    8. +
    9. Toggle JSON unfolding.
    10. +

    Further reading

    diff --git a/_site/docs/master/data-modeling/models.html b/_site/docs/master/data-modeling/models.html index 7b90a780a1..4e8a958d67 100644 --- a/_site/docs/master/data-modeling/models.html +++ b/_site/docs/master/data-modeling/models.html @@ -4892,9 +4892,9 @@

    Database column this maps to

    Column type

    -

    You can set the column type. The default is “No special type”.

    +

    You can set the column type. The default is “No special type”.

    -

    If your model is based on a SQL query and you want people to be able to explore the results with the query builder, you’ll need to set the column type for each column in your model.

    +

    If your model is based on a SQL query and you want people to be able to explore the results with the query builder, you’ll need to set the column type for each column in your model.

    This column should appear in…

    diff --git a/_site/docs/master/data-modeling/segments.html b/_site/docs/master/data-modeling/segments.html index 11cbf3f61e..80445910cc 100644 --- a/_site/docs/master/data-modeling/segments.html +++ b/_site/docs/master/data-modeling/segments.html @@ -49,7 +49,7 @@ - + @@ -59,7 +59,7 @@ - + @@ -4803,16 +4803,7 @@
    Other resources

    Segments

    -

    Metabase allows admins to create segments so people can quickly and easily reference them in the query builder.

    - -

    To manage segments:

    - -
      -
    1. Click the gear icon in the upper right.
    2. -
    3. Select Admin setting.
    4. -
    5. Go to the Table Metadata tab.
    6. -
    7. Click Segments at the bottom left.
    8. -
    +

    Metabase allows admins to create segments so people can quickly and easily reference them in the query builder. Just head over to the Admin Panel and select Table Metadata from the top menu.

    Creating a Segment

    diff --git a/_site/docs/master/data-modeling/semantic-types.html b/_site/docs/master/data-modeling/semantic-types.html deleted file mode 100644 index f455881d0a..0000000000 --- a/_site/docs/master/data-modeling/semantic-types.html +++ /dev/null @@ -1,5534 +0,0 @@ - - - - - - - - - - - - - - - - - - -Data types and semantic types | Metabase Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - - - -
    -
    - - - -
    -
    -
    - -
    - - - - - - - - - -
    - - - -
    - - -
    - -
    - -
    - - - -
    - - - master - - - - - - - - -
    - - - - - What’s new - - - - - -
    - - - - -
    -
    - - -
    - - -
    - - -
    - These are the docs for the Metabase master branch. Some features documented here may not yet be available in the latest release. - Check out the docs for the latest version, Metabase v0.55. -
    - - -
    - - -

    Data types and semantic types

    - -

    Metabase distinguishes between two types of column metadata: data types and field types.

    - -
      -
    • Data types are the underlying column type as defined in your database, like Date or Text. Metabase reads the data types during the database sync process.
    • -
    • Semantic types, also called field types, are labels that describe how the data should be interpreted. For example, if you have a column with a data type of Text that you use to store emails, you can add a semantic type of Email to let people (and Metabase) know what kind of text the column stores.
    • -
    - -

    Data and semantic types determine how Metabase formats the data, which charts are available, how the filters work, and other functionality.

    - -

    Data types

    - -

    Data types are the underlying column types as defined in your database. Metabase reads the data types during the database sync process. Because Metabase connects to many different databases, it uses its own type hierarchy under the hood, so that it can, for example, handle date fields in databases as different as PostgreSQL and MongoDB.

    - -

    The main data types in Metabase:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Data TypeExample database types
    NumericINTEGER, FLOAT
    TemporalDATE, TIMESTAMP
    TextVARCHAR, TEXT
    Text-likeMongoDB BSONID, Postgres Enum
    BooleanBoolean
    CollectionJSON, BigQuery RECORD, MongoDB Object
    - -

    Metabase currently doesn’t support array types. On columns containing arrays, you’ll only be able to filter by Is empty or Is not empty.

    - -

    For some fields, you can tell Metabase to cast the field to a different data type (for example, changing a text type to a date type).

    - -

    Semantic types

    - -

    You can think of semantic types as adding meaning and context to a field to communicate its purpose and enable additional functionality. Available semantic types depend on the underlying data types.

    - -

    Semantic types for any field

    - -
      -
    • -

      Entity key. Used to indicate that the field uniquely identifies each row. Could be a Product ID, serial number, etc.

      -
    • -
    • -

      Foreign key. Used to refer to an Entity key of another table in order to connect data from different tables that are related. For example, in a Products table, you might have a Customer ID field that points to a Customers table, where Customer ID is the Entity key. If you want to use linked filters on dashboards, you must set up foreign key relationships.

      -
    • -
    - -

    Semantic types for numeric fields

    - -
      -
    • Quantity
    • -
    • Score
    • -
    • Percentage
    • -
    • Financial -
        -
      • Currency
      • -
      • Discount
      • -
      • Income
      • -
      -
    • -
    • Location -
        -
      • Latitude
      • -
      • Longitude
      • -
      -
    • -
    • Category
    • -
    - -

    Semantic types for temporal fields

    - -
      -
    • Creation date
    • -
    • Creation time
    • -
    • Creation timestamp
    • -
    • Joined date
    • -
    • Joined time
    • -
    • Joined timestamp
    • -
    • Birthday
    • -
    - -

    Semantic types for text fields

    - -
      -
    • Entity name
    • -
    • Email -
        -
      • URL
      • -
      • Image URL
      • -
      • Avatar URL
      • -
      -
    • -
    • Category
    • -
    • Name
    • -
    • Title
    • -
    • Description
    • -
    • Product
    • -
    • Source
    • -
    • Location -
        -
      • City
      • -
      • State
      • -
      • Country
      • -
      • ZipCode
      • -
      -
    • -
    - -

    Semantic types for collection fields

    - - - -

    Editing data and semantic types

    - -

    Admins, and people with permission to manage table metadata, can cast data types and edit semantic types in the Admin settings’ Table Metadata tab.

    - -

    Cast data types

    - -

    Data types can’t be edited in Metabase directly, but you can cast certain data types to different types so that, for example, Metabase will interpret a text data type as a date type.

    - -

    Changes made in Table Metadata apply across your entire Metabase. Metabase currently only supports casting to a datetime type in Metadata settings. However, if you build a query in the query builder, you can use type casting custom expressions like date() or integer() to cast a string to a different type in your query.

    - -

    Semantic types don’t change the data types

    - -

    You can pick a semantic type compatible with the underlying data type in table metadata settings.

    - -

    Semantic types only add meaning; they should not be used for type casting. For example, if you set a text field’s semantic type to “Quantity”, Metabase will still treat the field as a text field. Instead, apply semantic types to tell Metabase how to format or visualize the field (like telling Metabase that a numeric value represents a percentage).

    - -

    What data and semantic types enable

    - -

    Display format

    - -

    Some semantic types change the way the data in the field is displayed.

    - -

    Formatting settings from Table Metadata settings will be applied across your Metabase, but people can change them for individual charts.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Semantic typeFormat
    PercentageDisplayed as percentage, for example 0.75 will be displayed as 75%
    CurrencyOn charts and in detail view, the values are prepended by the currency symbol, e.g., $134.65. By default in the table view, the currency symbol is only displayed in the header, but you can change the metadata formatting settings to show the symbol for every row.
    Latitude/LongitudeDisplayed as coordinates, e.g., 0.00000000° N
    EmailDisplay as a mailto link
    URLCan format as a clickable link
    Image URLCan display as an image. See table format settings
    Avatar URLCan display as avatar circle image. See table format settings
    Field containing JSONIn detail view, display as prettified JSON
    Entity and Foreign keyHighlighted in table view
    - -

    Visualizations

    - -

    When you create a question in the query builder, Metabase will automatically choose the most suitable chart for you based on the data types and the semantic types of the field in the “Group by” step (you can change the chart type later).

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Group by data typeAutomatic chart
    Text/CategoryBar chart
    TemporalLine chart
    Numeric - binnedBar chart
    Numeric - not binnedTable
    BooleanBar chart
    No aggregationTable
    - -

    Additionally, if you use location semantic types:

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Group by semantic typeFunctionality
    Latitude/Longitude - binnedGrid map
    Latitude/longitude - not binnedPin map
    CountryWorld region map
    StateUnited States region map
    - -

    Extract values from columns

    - -

    For some fields, you can quickly extract values from columns using shortcuts in table view or in the custom expression editor in the query builder:

    - - - - - - - - - - - - - - - - - - - - - - -
    Group by data typeExtract
    URL semantic typesExtract host, domain, subdomain, path
    Email semantic typeExtract host, domain
    Temporal data typesExtract date parts like month, day, etc
    - -

    X-rays

    - -

    When you X-ray a table, model, or entity, Metabase considers both the data type and the field type to display different charts that summarize that data.

    - -

    Field Filters

    - -

    Knowing what field types are and how they work is helpful when using field filters, as you can only create field filters for certain field types.

    - -

    JSON unfolding

    - -

    See Working with JSON.

    - -

    Set semantic types in models to enable people to explore results with the query builder

    - -

    You can set field types for models, which helps Metabase understand how to work with data in models built using SQL. If you set each column type in a SQL model, people will be able to explore that model using the query builder and drill-through menus.

    - -

    With records that include integer entity keys, you can also configure text fields in models to surface individual records in search.

    - -

    Further Reading

    - - - - -
    -
    - -

    - Read docs for other versions of Metabase. -

    - -
    -
    - -
    - -
    -
    -
    Was this helpful?
    - - -
    - -
    -

    - -
    - - - -
    -
    - -
    -
    Thanks for your feedback!
    -
    - - - - Want to improve these docs? Propose a change. - - -
    - - - -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/_site/docs/master/data-modeling/start.html b/_site/docs/master/data-modeling/start.html index 080f52498b..692022b083 100644 --- a/_site/docs/master/data-modeling/start.html +++ b/_site/docs/master/data-modeling/start.html @@ -4821,11 +4821,11 @@

    Table metada

    Guide people to the right data by adding display names, hiding outdated tables, configuring filter types, and more.

    -

    Field types

    +

    Field types

    Field types dictate how Metabase displays its data, as well as the column’s special functionality, if any.

    -

    Setting default formatting for your data

    +

    Setting default formatting for your data

    Define formatting and display defaults for numbers, currencies, datetimes, and more.

    diff --git a/_site/docs/master/databases/connecting.html b/_site/docs/master/databases/connecting.html index 016eff8a28..6330958c06 100644 --- a/_site/docs/master/databases/connecting.html +++ b/_site/docs/master/databases/connecting.html @@ -4866,7 +4866,7 @@

    Deleting databases

    Restoring the Sample Database

    -

    If you’ve deleted the Metabase Sample Database, go to Admin settings > Databases and click Bring the Sample Database back.

    +

    If you’ve deleted the Metabase Sample Database, go to Admin settings > Databases and click Bring the Sample Database back.

    Troubleshooting

    diff --git a/_site/docs/master/databases/connections/bigquery.html b/_site/docs/master/databases/connections/bigquery.html index 1e388a04ae..9fe7fc4320 100644 --- a/_site/docs/master/databases/connections/bigquery.html +++ b/_site/docs/master/databases/connections/bigquery.html @@ -4980,12 +4980,6 @@

    Model features

    There aren’t (yet) any model features available for BigQuery.

    -

    Database routing

    - -

    Database routing for BigQuery works between BigQuery projects with identical schemas.

    - -

    See Database routing.

    -

    Danger zone

    See Danger zone.

    diff --git a/_site/docs/master/databases/images/atlas-connect.png b/_site/docs/master/databases/images/atlas-connect.png index 4377047e1f..cda55015c1 100644 Binary files a/_site/docs/master/databases/images/atlas-connect.png and b/_site/docs/master/databases/images/atlas-connect.png differ diff --git a/_site/docs/master/databases/images/connection-string.png b/_site/docs/master/databases/images/connection-string.png index ab5411a6fb..edba66aced 100644 Binary files a/_site/docs/master/databases/images/connection-string.png and b/_site/docs/master/databases/images/connection-string.png differ diff --git a/_site/docs/master/databases/images/snowflake-copy-account-url.png b/_site/docs/master/databases/images/snowflake-copy-account-url.png index 82457d4e06..cf9a18f67a 100644 Binary files a/_site/docs/master/databases/images/snowflake-copy-account-url.png and b/_site/docs/master/databases/images/snowflake-copy-account-url.png differ diff --git a/_site/docs/master/databases/sync-scan.html b/_site/docs/master/databases/sync-scan.html index 95edac3089..a130a58e8b 100644 --- a/_site/docs/master/databases/sync-scan.html +++ b/_site/docs/master/databases/sync-scan.html @@ -4813,7 +4813,7 @@

    Syncing and scanning databases

    Initial sync, scan, and fingerprinting

    -

    When Metabase first connects to your database, it performs a sync to determine the metadata of the columns in your tables and automatically assign each column a semantic type.

    +

    When Metabase first connects to your database, it performs a sync to determine the metadata of the columns in your tables and automatically assign each column a semantic type.

    You can follow the progress of these queries from Gear icon >Admin settings > Tools > Tasks and filtering by the various sync tasks.

    @@ -4856,7 +4856,7 @@

    Scanning for filter values

  • Never, I’ll do this manually if I need to is an option for databases that are either prohibitively large or which never really have new values added. Use the Re-scan field values button to run a manual scan and bring your filter values up to date.
  • -

    Regardless of which option you pick, if you set a field to use a dropdown list in filter widgets, Metabase will need to get values for that dropdown. Whenever someone uses that filter widget, Metabase will first look for cached values (valid for fourteen days) to populate that dropdown; otherwise, it will re-scan that field for the most up-to-date values.

    +

    Regardless of which option you pick, if you set a field to use a dropdown list in filter widgets, Metabase will need to get values for that dropdown. Whenever someone uses that filter widget, Metabase will first look for cached values (valid for fourteen days) to populate that dropdown; otherwise, it will re-scan that field for the most up-to-date values.

    Manually syncing tables and columns

    @@ -4954,7 +4954,7 @@

    How database syncs work

    By default, this query runs against your database during setup and again every hour. This scanning query is fast with most relational databases but can be slower with MongoDB and some community-built database drivers. Syncing can’t be turned off completely, otherwise Metabase wouldn’t work.

    -

    Here’s the kind of data that gets synced and why:

    +

    Here’s the kind of data that syncs get and why:

    diff --git a/_site/docs/master/developers-guide/community-drivers.html b/_site/docs/master/developers-guide/community-drivers.html index a00c738a1a..13bcf179b0 100644 --- a/_site/docs/master/developers-guide/community-drivers.html +++ b/_site/docs/master/developers-guide/community-drivers.html @@ -4887,11 +4887,6 @@

    Community drivers

    - - - - - diff --git a/_site/docs/master/developers-guide/driver-changelog.html b/_site/docs/master/developers-guide/driver-changelog.html index 72bcc625bf..36398c9bd5 100644 --- a/_site/docs/master/developers-guide/driver-changelog.html +++ b/_site/docs/master/developers-guide/driver-changelog.html @@ -4821,10 +4821,6 @@

    Metabase 0.56.0

    Also note that driver-api/add-alias-info only adds additional keys to field refs and join maps, and does not replace existing keys like :alias, :join-alias, or :name; make sure you use driver-api/qp.add.alias, driver-api/qp.add.source-table, and driver-api/qp.add.source-alias respectively.

    - -
  • -

    Added the driver multi-method driver/extra-info for drivers to provide info such as db routing configuration details -from their metabase-plugin.yaml file.

  • Extend datetime() to accept UTF-8 encoded binary and numbers (unix timestamps) in addition to strings.

    @@ -4834,12 +4830,6 @@

    Metabase 0.56.0

  • -

    Metabase 0.55.9

    - -
      -
    • Add multi-method driver/do-with-resilient-connection for executing functions in a context where closed connections may be automatically reopened
    • -
    -

    Metabase 0.55.0

      @@ -4879,6 +4869,7 @@

      Metabase 0.55.0

      metabase.driver/upload-type->database-type or metabase.driver/allowed-promotions – make sure you use :metabase.upload/varchar-255 rather than something like ::upload/varchar-255.

      +
    • Added the multi-method metabase.driver.sql.parameters.substitution/time-grouping->replacement-snippet-info. This is effectively ->replacement-snippet-info for the new native query time grouping feature, but is its own separate multimethod because it needs an extra parameter.
    • The metabase.models.secret namespace has been replaced with metabase.secrets.core; if you were using it please update your usages.

      @@ -4915,11 +4906,9 @@

      Metabase 0.55.0

    • The namespace metabase.query-processor.context, deprecated in 0.50.0, has been removed.

    • -
    • -

      All settings formerly in a metabase.driver.* namespace have been moved to metabase.driver.settings, and all +

    • All settings formerly in a metabase.driver.* namespace have been moved to metabase.driver.settings, and all settings formerly in a metabase.query-processor.* namespace have been moved to -metabase.query-processor.settings.

      -
    • +metabase.query-processor.settings.

    Metabase 0.54.12

    diff --git a/_site/docs/master/developers-guide/security-token-scanner.html b/_site/docs/master/developers-guide/security-token-scanner.html deleted file mode 100644 index 9f63225ba0..0000000000 --- a/_site/docs/master/developers-guide/security-token-scanner.html +++ /dev/null @@ -1,5242 +0,0 @@ - - - - - - - - - - - - - - - - - - -Security Token Scanner | Metabase Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - - - -
    -
    - - - -
    -
    -
    - -
    - - - - - - - - - -
    - - - -
    - - -
    - -
    - -
    - - - -
    - - - master - - - - - - - - -
    - - - - - What’s new - - - - - -
    - - - - -
    -
    - - -
    - - -
    - - -
    - These are the docs for the Metabase master branch. Some features documented here may not yet be available in the latest release. - Check out the docs for the latest version, Metabase v0.55. -
    - - -
    - - -

    Security Token Scanner

    - -

    Security token scanner detects potentially leaked API keys and secrets in the Metabase codebase. Runs automatically as a git precommit hook on staged files.

    - -

    Usage

    - -
    # Scan specific files
    -./bin/mage -token-scan deps.edn bb.edn
    -
    -# Scan all files
    -./bin/mage -token-scan -a
    -
    -# Verbose output
    -./bin/mage -token-scan -v deps.edn
    -
    - -

    Token Types Detected

    - -
      -
    • Airgap tokens (airgap_)
    • -
    • Dev tokens (mb_dev_, 64-char hex)
    • -
    • OpenAI API keys (sk-)
    • -
    • JWT/JWE tokens
    • -
    • GitHub tokens (gh[pousr]_)
    • -
    • Slack bot tokens (xoxb-)
    • -
    • AWS access keys (AKIA)
    • -
    - -

    The scanner uses .gitignore to filter files and will block commits containing detected tokens.

    - -

    False positives

    - -

    If the scanner flags a non-token string, you should exclude the literal token string by adding it to: mage/resources/token_scanner/token_whitelist.txt.

    - -
    echo 'my-token-string' >> mage/resources/token_scanner/token_whitelist.txt && git add mage/resources/token_scanner/token_whitelist.txt
    -
    - - - -
    git commit --no-verify -m "commit message"
    -
    - - -
    -
    - -

    - Read docs for other versions of Metabase. -

    - -
    -
    - -
    - -
    -
    -
    Was this helpful?
    - - -
    - -
    -

    - -
    - - - - -
    - -
    -
    Thanks for your feedback!
    -
    - - - - Want to improve these docs? Propose a change. - - -
    - - - -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/_site/docs/master/embedding/images/create-a-public-link.png b/_site/docs/master/embedding/images/create-a-public-link.png index a37656aa28..da4c9844b4 100644 Binary files a/_site/docs/master/embedding/images/create-a-public-link.png and b/_site/docs/master/embedding/images/create-a-public-link.png differ diff --git a/_site/docs/master/embedding/images/dashboard-sharing.png b/_site/docs/master/embedding/images/dashboard-sharing.png index 58e904072b..d4033342d1 100644 Binary files a/_site/docs/master/embedding/images/dashboard-sharing.png and b/_site/docs/master/embedding/images/dashboard-sharing.png differ diff --git a/_site/docs/master/embedding/images/full-data-picker.png b/_site/docs/master/embedding/images/full-data-picker.png index 012e37c3e9..31aa99c04c 100644 Binary files a/_site/docs/master/embedding/images/full-data-picker.png and b/_site/docs/master/embedding/images/full-data-picker.png differ diff --git a/_site/docs/master/embedding/images/interactive-question-sample-app.png b/_site/docs/master/embedding/images/interactive-question-sample-app.png index 306f2d33ca..82b59fed3a 100644 Binary files a/_site/docs/master/embedding/images/interactive-question-sample-app.png and b/_site/docs/master/embedding/images/interactive-question-sample-app.png differ diff --git a/_site/docs/master/embedding/images/interactive-question.png b/_site/docs/master/embedding/images/interactive-question.png index da4c9844b4..2789fb4304 100644 Binary files a/_site/docs/master/embedding/images/interactive-question.png and b/_site/docs/master/embedding/images/interactive-question.png differ diff --git a/_site/docs/master/embedding/images/jwt-setup.png b/_site/docs/master/embedding/images/jwt-setup.png index 005a76fc45..0c639d1032 100644 Binary files a/_site/docs/master/embedding/images/jwt-setup.png and b/_site/docs/master/embedding/images/jwt-setup.png differ diff --git a/_site/docs/master/embedding/images/powered-by-metabase.png b/_site/docs/master/embedding/images/powered-by-metabase.png index 2daa70728b..32282cca33 100644 Binary files a/_site/docs/master/embedding/images/powered-by-metabase.png and b/_site/docs/master/embedding/images/powered-by-metabase.png differ diff --git a/_site/docs/master/embedding/images/public-embed.png b/_site/docs/master/embedding/images/public-embed.png index 1bad0d4e3c..31aa99c04c 100644 Binary files a/_site/docs/master/embedding/images/public-embed.png and b/_site/docs/master/embedding/images/public-embed.png differ diff --git a/_site/docs/master/embedding/images/public-link-custom-destination.png b/_site/docs/master/embedding/images/public-link-custom-destination.png index 73f3cb9799..7e4d253fc1 100644 Binary files a/_site/docs/master/embedding/images/public-link-custom-destination.png and b/_site/docs/master/embedding/images/public-link-custom-destination.png differ diff --git a/_site/docs/master/embedding/images/see-shared-content.png b/_site/docs/master/embedding/images/see-shared-content.png index 1b7630c428..4039f66dd8 100644 Binary files a/_site/docs/master/embedding/images/see-shared-content.png and b/_site/docs/master/embedding/images/see-shared-content.png differ diff --git a/_site/docs/master/embedding/interactive-embedding.html b/_site/docs/master/embedding/interactive-embedding.html index cde8d71508..8f011cda53 100644 --- a/_site/docs/master/embedding/interactive-embedding.html +++ b/_site/docs/master/embedding/interactive-embedding.html @@ -4843,7 +4843,7 @@

    Interactive embedding

    Interactive embedding is what you want if you want to offer multi-tenant, self-service analytics.

    -

    Interactive embedding is the only type of embedding that integrates with your permissions and SSO to give people the right level of access to query and drill-down into your data.

    +

    Interactive embedding is the only type of embedding that integrates with your permissions and SSO to give people the right level of access to query and drill-down into your data.

    Interactive embedding demo

    diff --git a/_site/docs/master/embedding/introduction.html b/_site/docs/master/embedding/introduction.html index e4be2fae67..a625e3cac4 100644 --- a/_site/docs/master/embedding/introduction.html +++ b/_site/docs/master/embedding/introduction.html @@ -4907,7 +4907,7 @@

    Comparison of embedding types

    - + diff --git a/_site/docs/master/embedding/sdk/api/BaseSdkQuestionProps.html b/_site/docs/master/embedding/sdk/api/BaseInteractiveQuestionProps.html similarity index 73% rename from _site/docs/master/embedding/sdk/api/BaseSdkQuestionProps.html rename to _site/docs/master/embedding/sdk/api/BaseInteractiveQuestionProps.html index fad77816ca..015313c7bb 100644 --- a/_site/docs/master/embedding/sdk/api/BaseSdkQuestionProps.html +++ b/_site/docs/master/embedding/sdk/api/BaseInteractiveQuestionProps.html @@ -1,4 +1,4 @@ -BaseSdkQuestionProps | Embedded analytics SDK API +BaseInteractiveQuestionProps | Embedded analytics SDK API @@ -10,8 +10,8 @@ - - + + @@ -19,11 +19,11 @@ - - - + + + -

    Interface BaseSdkQuestionProps

    interface BaseSdkQuestionProps {
        children?: ReactNode;
        entityTypes?: EmbeddingEntityType[];
        initialSqlParameters?: SqlParameterValues;
        isSaveEnabled?: boolean;
        onBeforeSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => Promise<void>;
        onRun?: (question: undefined | MetabaseQuestion) => void;
        onSave?: (
            question: MetabaseQuestion,
            context: { dashboardTabId?: number; isNewQuestion: boolean },
        ) => void;
        plugins?: MetabasePluginsConfig;
        questionId: null | SdkQuestionId;
        targetCollection?: SdkCollectionId;
        withDownloads?: boolean;
    }
    Index

    Properties

    children? +

    Interface BaseInteractiveQuestionProps

    interface BaseInteractiveQuestionProps {
        children?: ReactNode;
        entityTypes?: EmbeddingEntityType[];
        initialSqlParameters?: SqlParameterValues;
        isSaveEnabled?: boolean;
        onBeforeSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => Promise<void>;
        onRun?: (question: undefined | MetabaseQuestion) => void;
        onSave?: (
            question: MetabaseQuestion,
            context: { dashboardTabId?: number; isNewQuestion: boolean },
        ) => void;
        plugins?: MetabasePluginsConfig;
        questionId: null | SdkQuestionId;
        targetCollection?: SdkCollectionId;
        withDownloads?: boolean;
    }
    Index

    Properties

    children? entityTypes? initialSqlParameters? isSaveEnabled? diff --git a/_site/docs/master/embedding/sdk/api/CreateQuestion.html b/_site/docs/master/embedding/sdk/api/CreateQuestion.html index f6978f4af2..6fb7f49748 100644 --- a/_site/docs/master/embedding/sdk/api/CreateQuestion.html +++ b/_site/docs/master/embedding/sdk/api/CreateQuestion.html @@ -23,23 +23,14 @@ -

    Function CreateQuestion

    • Parameters

      • Optionalprops: CreateQuestionProps
        • OptionalclassName?: string

          A custom class name to be added to the root element.

          -
        • OptionalcomponentPlugins?: MetabasePluginsConfig

          Additional mapper function to override or add drill-down menu

          -
        • OptionalentityTypes?: EmbeddingEntityType[]

          An array that specifies which entity types are available in the data picker

          -
        • Optionalheight?: Height<string | number>

          A number or string specifying a CSS size value that specifies the height of the component

          +

          Function CreateQuestion

          • Parameters

            • Optionalprops: CreateQuestionProps
              • OptionalentityTypes?: EmbeddingEntityType[]

                An array that specifies which entity types are available in the data picker

              • OptionalinitialSqlParameters?: SqlParameterValues

                Initial values for the SQL parameters.

              • OptionalisSaveEnabled?: boolean

                Whether to show the save button.

              • OptionalonBeforeSave?: (
                    question: undefined | MetabaseQuestion,
                    context: { isNewQuestion: boolean },
                ) => Promise<void>

                A callback function that triggers before saving. Only relevant when isSaveEnabled = true

                -
              • OptionalonNavigateBack?: () => void

                A callback function that triggers when a user clicks the back button.

              • OptionalonRun?: (question: undefined | MetabaseQuestion) => void

                A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

              • OptionalonSave?: (
                    question: MetabaseQuestion,
                    context: { dashboardTabId?: number; isNewQuestion: boolean },
                ) => void

                A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

                -
              • Optionalplugins?: MetabasePluginsConfig
              • Optionalstyle?: CSSProperties

                A custom style object to be added to the root element.

                -
              • OptionaltargetCollection?: SdkCollectionId

                The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

                -
              • Optionaltitle?: SdkQuestionTitleProps

                Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

                -
              • Optionalwidth?: Width<string | number>

                A number or string specifying a CSS size value that specifies the width of the component

                -
              • OptionalwithChartTypeSelector?: boolean

                Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

                +
              • Optionalplugins?: MetabasePluginsConfig
              • OptionaltargetCollection?: SdkCollectionId

                The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

              • OptionalwithDownloads?: boolean

                Enables the ability to download results in the interactive question.

                -
              • OptionalwithResetButton?: boolean

                Determines whether a reset button is displayed. Only relevant when using the default layout.

            Returns Element

            Use <InteractiveQuestion questionId="new" /> instead.

          diff --git a/_site/docs/master/embedding/sdk/api/CreateQuestionProps.html b/_site/docs/master/embedding/sdk/api/CreateQuestionProps.html index ea617c58d9..2f680f9343 100644 --- a/_site/docs/master/embedding/sdk/api/CreateQuestionProps.html +++ b/_site/docs/master/embedding/sdk/api/CreateQuestionProps.html @@ -23,41 +23,23 @@ -

          Interface CreateQuestionProps

          interface CreateQuestionProps {
              className?: string;
              componentPlugins?: MetabasePluginsConfig;
              entityTypes?: EmbeddingEntityType[];
              height?: Height<string | number>;
              initialSqlParameters?: SqlParameterValues;
              isSaveEnabled?: boolean;
              onBeforeSave?: (
                  question: undefined | MetabaseQuestion,
                  context: { isNewQuestion: boolean },
              ) => Promise<void>;
              onNavigateBack?: () => void;
              onRun?: (question: undefined | MetabaseQuestion) => void;
              onSave?: (
                  question: MetabaseQuestion,
                  context: { dashboardTabId?: number; isNewQuestion: boolean },
              ) => void;
              plugins?: MetabasePluginsConfig;
              style?: CSSProperties;
              targetCollection?: SdkCollectionId;
              title?: SdkQuestionTitleProps;
              width?: Width<string | number>;
              withChartTypeSelector?: boolean;
              withDownloads?: boolean;
              withResetButton?: boolean;
          }
          Index

          Properties

          className? -componentPlugins? -entityTypes? -height? +

          Interface CreateQuestionProps

          interface CreateQuestionProps {
              entityTypes?: EmbeddingEntityType[];
              initialSqlParameters?: SqlParameterValues;
              isSaveEnabled?: boolean;
              onBeforeSave?: (
                  question: undefined | MetabaseQuestion,
                  context: { isNewQuestion: boolean },
              ) => Promise<void>;
              onRun?: (question: undefined | MetabaseQuestion) => void;
              onSave?: (
                  question: MetabaseQuestion,
                  context: { dashboardTabId?: number; isNewQuestion: boolean },
              ) => void;
              plugins?: MetabasePluginsConfig;
              targetCollection?: SdkCollectionId;
              withDownloads?: boolean;
          }
          Index

          Properties

          className?: string

          A custom class name to be added to the root element.

          -
          componentPlugins?: MetabasePluginsConfig

          Additional mapper function to override or add drill-down menu

          -
          entityTypes?: EmbeddingEntityType[]

          An array that specifies which entity types are available in the data picker

          -
          height?: Height<string | number>

          A number or string specifying a CSS size value that specifies the height of the component

          +

          Properties

          entityTypes?: EmbeddingEntityType[]

          An array that specifies which entity types are available in the data picker

          initialSqlParameters?: SqlParameterValues

          Initial values for the SQL parameters.

          isSaveEnabled?: boolean

          Whether to show the save button.

          onBeforeSave?: (
              question: undefined | MetabaseQuestion,
              context: { isNewQuestion: boolean },
          ) => Promise<void>

          A callback function that triggers before saving. Only relevant when isSaveEnabled = true

          -
          onNavigateBack?: () => void

          A callback function that triggers when a user clicks the back button.

          onRun?: (question: undefined | MetabaseQuestion) => void

          A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

          onSave?: (
              question: MetabaseQuestion,
              context: { dashboardTabId?: number; isNewQuestion: boolean },
          ) => void

          A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

          -

          A custom style object to be added to the root element.

          -
          targetCollection?: SdkCollectionId

          The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

          -

          Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

          -
          width?: Width<string | number>

          A number or string specifying a CSS size value that specifies the width of the component

          -
          withChartTypeSelector?: boolean

          Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

          +
          targetCollection?: SdkCollectionId

          The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

          withDownloads?: boolean

          Enables the ability to download results in the interactive question.

          -
          withResetButton?: boolean

          Determines whether a reset button is displayed. Only relevant when using the default layout.

          -

          +

    \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/EditableDashboard.html b/_site/docs/master/embedding/sdk/api/EditableDashboard.html index 32e64a876f..cf22fd37d6 100644 --- a/_site/docs/master/embedding/sdk/api/EditableDashboard.html +++ b/_site/docs/master/embedding/sdk/api/EditableDashboard.html @@ -34,7 +34,7 @@
  • the string ID found in the entity_id key of the dashboard object when using the API directly or using the SDK Collection Browser to return data
  • -
  • OptionaldataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    +
  • OptionaldataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

  • OptionaldrillThroughQuestionHeight?: Height<string | number>

    Height of a question component when drilled from the dashboard to a question level.

  • OptionaldrillThroughQuestionProps?: DrillThroughQuestionProps

    Props of a question component when drilled from the dashboard to a question level.

  • OptionalhiddenParameters?: string[]

    A list of parameters to hide. diff --git a/_site/docs/master/embedding/sdk/api/EditableDashboardProps.html b/_site/docs/master/embedding/sdk/api/EditableDashboardProps.html index 29fa42c275..277bc8a0f7 100644 --- a/_site/docs/master/embedding/sdk/api/EditableDashboardProps.html +++ b/_site/docs/master/embedding/sdk/api/EditableDashboardProps.html @@ -23,7 +23,7 @@ -

    Interface EditableDashboardProps

    interface EditableDashboardProps {
        className?: string;
        dashboardId: SdkDashboardId;
        dataPickerProps?: Pick<SdkQuestionProps, "entityTypes">;
        drillThroughQuestionHeight?: Height<string | number>;
        drillThroughQuestionProps?: DrillThroughQuestionProps;
        hiddenParameters?: string[];
        initialParameters?: ParameterValues;
        onLoad?: (dashboard: null | MetabaseDashboard) => void;
        onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void;
        plugins?: MetabasePluginsConfig;
        renderDrillThroughQuestion?: () => ReactNode;
        style?: CSSProperties;
        withCardTitle?: boolean;
        withDownloads?: boolean;
        withTitle?: boolean;
    }
    Index

    Properties

    className? +

    Interface EditableDashboardProps

    interface EditableDashboardProps {
        className?: string;
        dashboardId: SdkDashboardId;
        dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">;
        drillThroughQuestionHeight?: Height<string | number>;
        drillThroughQuestionProps?: DrillThroughQuestionProps;
        hiddenParameters?: string[];
        initialParameters?: ParameterValues;
        onLoad?: (dashboard: null | MetabaseDashboard) => void;
        onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void;
        plugins?: MetabasePluginsConfig;
        renderDrillThroughQuestion?: () => ReactNode;
        style?: CSSProperties;
        withCardTitle?: boolean;
        withDownloads?: boolean;
        withTitle?: boolean;
    }
    Index
  • the string ID found in the entity_id key of the dashboard object when using the API directly or using the SDK Collection Browser to return data
  • -
    dataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    +
    dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    drillThroughQuestionHeight?: Height<string | number>

    Height of a question component when drilled from the dashboard to a question level.

    drillThroughQuestionProps?: DrillThroughQuestionProps

    Props of a question component when drilled from the dashboard to a question level.

    Type declaration

    Props for the drill-through question

    diff --git a/_site/docs/master/embedding/sdk/api/IconName.html b/_site/docs/master/embedding/sdk/api/IconName.html index b60ab90ca4..091b524b08 100644 --- a/_site/docs/master/embedding/sdk/api/IconName.html +++ b/_site/docs/master/embedding/sdk/api/IconName.html @@ -23,6 +23,6 @@ -

    Type Alias IconName

    IconName:
        | "string"
        | "number"
        | "function"
        | "model"
        | "table"
        | "question"
        | "collection"
        | "dashboard"
        | "revert"
        | "add"
        | "add_column"
        | "add_data"
        | "add_folder"
        | "add_row"
        | "add_to_dash"
        | "ai"
        | "alert"
        | "alert_filled"
        | "alert_confirm"
        | "archive"
        | "area"
        | "attachment"
        | "arrow_up"
        | "arrow_down"
        | "arrow_left"
        | "arrow_left_to_line"
        | "arrow_right"
        | "arrow_split"
        | "audit"
        | "badge"
        | "bar"
        | "bell"
        | "birthday"
        | "bookmark"
        | "bookmark_filled"
        | "bolt"
        | "bolt_filled"
        | "breakout"
        | "bubble"
        | "burger"
        | "calendar"
        | "check"
        | "check_filled"
        | "chevrondown"
        | "chevronleft"
        | "chevronright"
        | "chevronup"
        | "click"
        | "clipboard"
        | "clock"
        | "clone"
        | "close"
        | "cloud"
        | "cloud_filled"
        | "compare"
        | "combine"
        | "connections"
        | "contract"
        | "copy"
        | "curved"
        | "database"
        | "dash"
        | "curve"
        | "document"
        | "download"
        | "dyno"
        | "edit_document"
        | "ellipsis"
        | "embed"
        | "empty"
        | "enter_or_return"
        | "expand"
        | "expand_arrow"
        | "extract"
        | "eye"
        | "eye_crossed_out"
        | "eye_outline"
        | "field"
        | "fields"
        | "filter"
        | "filter_plus"
        | "bug"
        | "format_code"
        | "formula"
        | "funnel"
        | "funnel_outline"
        | "folder"
        | "folder_filled"
        | "gauge"
        | "gear"
        | "gear_settings_filled"
        | "gem"
        | "globe"
        | "grabber"
        | "grid"
        | "group"
        | "google"
        | "google_drive"
        | "google_sheet"
        | "history"
        | "home"
        | "horizontal_bar"
        | "hourglass"
        | "info"
        | "info_filled"
        | "info_outline"
        | "insight"
        | "int"
        | "io"
        | "join_full_outer"
        | "join_inner"
        | "join_left_outer"
        | "join_right_outer"
        | "index"
        | "key"
        | "label"
        | "ldap"
        | "learn"
        | "lightbulb"
        | "link"
        | "line"
        | "lines"
        | "lineandbar"
        | "line_style_dashed"
        | "line_style_dotted"
        | "line_style_solid"
        | "list"
        | "location"
        | "lock"
        | "lock_filled"
        | "mail"
        | "mail_filled"
        | "metabot"
        | "metabot_sad"
        | "metric"
        | "model_with_badge"
        | "moon"
        | "move"
        | "move_card"
        | "new_folder"
        | "notebook"
        | "palette"
        | "pause"
        | "pencil"
        | "pencil_lines"
        | "permissions_limited"
        | "person"
        | "pie"
        | "pin"
        | "pinmap"
        | "pivot_table"
        | "play"
        | "play_outlined"
        | "popover"
        | "popular"
        | "progress"
        | "pulse"
        | "recents"
        | "sankey"
        | "share"
        | "split"
        | "sql"
        | "subscription"
        | "straight"
        | "stepped"
        | "sort"
        | "sort_arrows"
        | "sum"
        | "sync"
        | "redo"
        | "return"
        | "reference"
        | "refresh"
        | "refresh_downstream"
        | "rocket"
        | "ruler"
        | "schema"
        | "search"
        | "section"
        | "segment"
        | "shield"
        | "sidebar_closed"
        | "sidebar_open"
        | "slack"
        | "slack_colorized"
        | "smartscalar"
        | "snail"
        | "snippet"
        | "sparkles"
        | "star_filled"
        | "star"
        | "stop"
        | "store"
        | "sun"
        | "t-shirt"
        | "tab"
        | "table2"
        | "time_history"
        | "trash"
        | "trash_filled"
        | "triangle_left"
        | "triangle_right"
        | "unarchive"
        | "undo"
        | "unknown"
        | "unpin"
        | "unsubscribe"
        | "upload"
        | "variable"
        | "verified"
        | "official_collection"
        | "verified_filled"
        | "view_archive"
        | "warning"
        | "warning_round_filled"
        | "warning_triangle_filled"
        | "waterfall"
        | "webhook"
        | "10k"
        | "1m"
        | "zoom_in"
        | "zoom_out"
        | "scalar"
        | "cake"
        | "external"
        | "table_spaced"
        | "beaker"
        | "eye_filled"

    +

    Type Alias IconName

    IconName:
        | "string"
        | "number"
        | "function"
        | "model"
        | "table"
        | "question"
        | "collection"
        | "dashboard"
        | "add"
        | "add_column"
        | "add_data"
        | "add_folder"
        | "add_row"
        | "add_to_dash"
        | "ai"
        | "alert"
        | "alert_filled"
        | "alert_confirm"
        | "archive"
        | "area"
        | "attachment"
        | "arrow_up"
        | "arrow_down"
        | "arrow_left"
        | "arrow_left_to_line"
        | "arrow_right"
        | "arrow_split"
        | "audit"
        | "badge"
        | "bar"
        | "bell"
        | "birthday"
        | "bookmark"
        | "bookmark_filled"
        | "bolt"
        | "bolt_filled"
        | "breakout"
        | "bubble"
        | "burger"
        | "calendar"
        | "check"
        | "check_filled"
        | "chevrondown"
        | "chevronleft"
        | "chevronright"
        | "chevronup"
        | "click"
        | "clipboard"
        | "clock"
        | "clone"
        | "close"
        | "cloud"
        | "cloud_filled"
        | "compare"
        | "combine"
        | "connections"
        | "contract"
        | "copy"
        | "curved"
        | "database"
        | "dash"
        | "curve"
        | "document"
        | "download"
        | "dyno"
        | "edit_document"
        | "ellipsis"
        | "embed"
        | "empty"
        | "enter_or_return"
        | "expand"
        | "expand_arrow"
        | "extract"
        | "eye"
        | "eye_crossed_out"
        | "eye_outline"
        | "field"
        | "fields"
        | "filter"
        | "filter_plus"
        | "bug"
        | "format_code"
        | "formula"
        | "funnel"
        | "funnel_outline"
        | "folder"
        | "folder_filled"
        | "gauge"
        | "gear"
        | "gear_settings_filled"
        | "gem"
        | "globe"
        | "grabber"
        | "grid"
        | "group"
        | "google"
        | "google_drive"
        | "google_sheet"
        | "history"
        | "home"
        | "horizontal_bar"
        | "hourglass"
        | "info"
        | "info_filled"
        | "info_outline"
        | "insight"
        | "int"
        | "io"
        | "join_full_outer"
        | "join_inner"
        | "join_left_outer"
        | "join_right_outer"
        | "index"
        | "key"
        | "label"
        | "ldap"
        | "learn"
        | "lightbulb"
        | "link"
        | "line"
        | "lines"
        | "lineandbar"
        | "line_style_dashed"
        | "line_style_dotted"
        | "line_style_solid"
        | "list"
        | "location"
        | "lock"
        | "lock_filled"
        | "mail"
        | "mail_filled"
        | "metabot"
        | "metabot_sad"
        | "metric"
        | "model_with_badge"
        | "moon"
        | "move"
        | "move_card"
        | "new_folder"
        | "notebook"
        | "palette"
        | "pause"
        | "pencil"
        | "pencil_lines"
        | "permissions_limited"
        | "person"
        | "pie"
        | "pin"
        | "pinmap"
        | "pivot_table"
        | "play"
        | "play_outlined"
        | "popover"
        | "popular"
        | "progress"
        | "pulse"
        | "recents"
        | "revert"
        | "sankey"
        | "share"
        | "split"
        | "sql"
        | "subscription"
        | "straight"
        | "stepped"
        | "sort"
        | "sort_arrows"
        | "sum"
        | "sync"
        | "redo"
        | "return"
        | "reference"
        | "refresh"
        | "refresh_downstream"
        | "rocket"
        | "ruler"
        | "schema"
        | "search"
        | "section"
        | "segment"
        | "shield"
        | "sidebar_closed"
        | "sidebar_open"
        | "slack"
        | "slack_colorized"
        | "smartscalar"
        | "snail"
        | "snippet"
        | "sparkles"
        | "star_filled"
        | "star"
        | "stop"
        | "store"
        | "sun"
        | "t-shirt"
        | "tab"
        | "table2"
        | "time_history"
        | "trash"
        | "trash_filled"
        | "triangle_left"
        | "triangle_right"
        | "unarchive"
        | "undo"
        | "unknown"
        | "unpin"
        | "unsubscribe"
        | "upload"
        | "variable"
        | "verified"
        | "official_collection"
        | "verified_filled"
        | "view_archive"
        | "warning"
        | "warning_round_filled"
        | "warning_triangle_filled"
        | "waterfall"
        | "webhook"
        | "10k"
        | "1m"
        | "zoom_in"
        | "zoom_out"
        | "scalar"
        | "cake"
        | "external"
        | "table_spaced"
        | "beaker"
        | "eye_filled"

    \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/InteractiveDashboard.html b/_site/docs/master/embedding/sdk/api/InteractiveDashboard.html index a9fe0e6fca..f902519d01 100644 --- a/_site/docs/master/embedding/sdk/api/InteractiveDashboard.html +++ b/_site/docs/master/embedding/sdk/api/InteractiveDashboard.html @@ -23,8 +23,8 @@ -

    Function InteractiveDashboard

    dataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    +
    dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    drillThroughQuestionHeight?: Height<string | number>

    Height of a question component when drilled from the dashboard to a question level.

    drillThroughQuestionProps?: DrillThroughQuestionProps

    Props of a question component when drilled from the dashboard to a question level.

    Type declaration

    Props for the drill-through question

    diff --git a/_site/docs/master/embedding/sdk/api/InteractiveQuestion.html b/_site/docs/master/embedding/sdk/api/InteractiveQuestion.html index 25a9b05f7a..4ba3fbfa50 100644 --- a/_site/docs/master/embedding/sdk/api/InteractiveQuestion.html +++ b/_site/docs/master/embedding/sdk/api/InteractiveQuestion.html @@ -23,25 +23,35 @@ -

    Function InteractiveQuestion

    • A question component with drill-downs enabled.

      -

      Parameters

      • props: InteractiveQuestionProps
        • OptionalclassName?: string

          A custom class name to be added to the root element.

          -
        • OptionalcomponentPlugins?: MetabasePluginsConfig

          Additional mapper function to override or add drill-down menu

          +

          Function InteractiveQuestion

          • A component that renders an interactive question.

            +

            Parameters

            • props: InteractiveQuestionProps
              • Optionalchildren?: ReactNode

                The children of the MetabaseProvider component.s

                +
              • OptionalclassName?: string

                A custom class name to be added to the root element.

              • OptionalentityTypes?: EmbeddingEntityType[]

                An array that specifies which entity types are available in the data picker

              • Optionalheight?: Height<string | number>

                A number or string specifying a CSS size value that specifies the height of the component

              • OptionalinitialSqlParameters?: SqlParameterValues

                Initial values for the SQL parameters.

              • OptionalisSaveEnabled?: boolean

                Whether to show the save button.

              • OptionalonBeforeSave?: (
                    question: undefined | MetabaseQuestion,
                    context: { isNewQuestion: boolean },
                ) => Promise<void>

                A callback function that triggers before saving. Only relevant when isSaveEnabled = true

                -
              • OptionalonNavigateBack?: () => void

                A callback function that triggers when a user clicks the back button.

              • OptionalonRun?: (question: undefined | MetabaseQuestion) => void

                A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

              • OptionalonSave?: (
                    question: MetabaseQuestion,
                    context: { dashboardTabId?: number; isNewQuestion: boolean },
                ) => void

                A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

                -
              • Optionalplugins?: MetabasePluginsConfig
              • questionId: null | SdkQuestionId
              • Optionalstyle?: CSSProperties

                A custom style object to be added to the root element.

                +
              • Optionalplugins?: MetabasePluginsConfig
              • questionId: null | SdkQuestionId

                The ID of the question. +
                +This is either: +

                +
                  +
                • The numerical ID when accessing a question link, e.g., http://localhost:3000/question/1-my-question where the ID is 1 +
                • +
                • The entity_id key of the question object. You can find a question's Entity ID in the info panel when viewing a question +
                • +
                • new to show the notebook editor for creating new questions. isSaveEnabled must be true to allow saving the question
                • +
                +
              • Optionalstyle?: CSSProperties

                A custom style object to be added to the root element.

              • OptionaltargetCollection?: SdkCollectionId

                The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

              • Optionaltitle?: SdkQuestionTitleProps

                Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

              • Optionalwidth?: Width<string | number>

                A number or string specifying a CSS size value that specifies the width of the component

              • OptionalwithChartTypeSelector?: boolean

                Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

              • OptionalwithDownloads?: boolean

                Enables the ability to download results in the interactive question.

              • OptionalwithResetButton?: boolean

                Determines whether a reset button is displayed. Only relevant when using the default layout.

                -

            Returns Element

          Index

          InteractiveQuestion

      Returns null | Element

    Index

    InteractiveQuestion

    Parameters

    Returns Element

    SaveQuestionForm: (
        props: InteractiveQuestionSaveQuestionFormProps,
    ) => null | Element

    Type declaration

    \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/SdkQuestionProps.html b/_site/docs/master/embedding/sdk/api/SdkQuestionProps.html deleted file mode 100644 index 1f5a43e9ab..0000000000 --- a/_site/docs/master/embedding/sdk/api/SdkQuestionProps.html +++ /dev/null @@ -1,64 +0,0 @@ -SdkQuestionProps | Embedded analytics SDK API - - - - - - - - - - - - - - - - - - - - - - - - -

    Interface SdkQuestionProps

    interface SdkQuestionProps {
        className?: string;
        componentPlugins?: MetabasePluginsConfig;
        entityTypes?: EmbeddingEntityType[];
        height?: Height<string | number>;
        initialSqlParameters?: SqlParameterValues;
        isSaveEnabled?: boolean;
        onBeforeSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => Promise<void>;
        onNavigateBack?: () => void;
        onRun?: (question: undefined | MetabaseQuestion) => void;
        onSave?: (
            question: MetabaseQuestion,
            context: { dashboardTabId?: number; isNewQuestion: boolean },
        ) => void;
        plugins?: MetabasePluginsConfig;
        questionId: null | SdkQuestionId;
        style?: CSSProperties;
        targetCollection?: SdkCollectionId;
        title?: SdkQuestionTitleProps;
        width?: Width<string | number>;
        withChartTypeSelector?: boolean;
        withDownloads?: boolean;
        withResetButton?: boolean;
    }
    Index

    Properties

    className?: string

    A custom class name to be added to the root element.

    -
    componentPlugins?: MetabasePluginsConfig

    Additional mapper function to override or add drill-down menu

    -
    entityTypes?: EmbeddingEntityType[]

    An array that specifies which entity types are available in the data picker

    -
    height?: Height<string | number>

    A number or string specifying a CSS size value that specifies the height of the component

    -
    initialSqlParameters?: SqlParameterValues

    Initial values for the SQL parameters.

    -
    isSaveEnabled?: boolean

    Whether to show the save button.

    -
    onBeforeSave?: (
        question: undefined | MetabaseQuestion,
        context: { isNewQuestion: boolean },
    ) => Promise<void>

    A callback function that triggers before saving. Only relevant when isSaveEnabled = true

    -
    onNavigateBack?: () => void

    A callback function that triggers when a user clicks the back button.

    -
    onRun?: (question: undefined | MetabaseQuestion) => void

    A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

    -
    onSave?: (
        question: MetabaseQuestion,
        context: { dashboardTabId?: number; isNewQuestion: boolean },
    ) => void

    A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

    -
    questionId: null | SdkQuestionId

    A custom style object to be added to the root element.

    -
    targetCollection?: SdkCollectionId

    The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

    -

    Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

    -
    width?: Width<string | number>

    A number or string specifying a CSS size value that specifies the width of the component

    -
    withChartTypeSelector?: boolean

    Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

    -
    withDownloads?: boolean

    Enables the ability to download results in the interactive question.

    -
    withResetButton?: boolean

    Determines whether a reset button is displayed. Only relevant when using the default layout.

    -

    - - \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/StaticDashboard.html b/_site/docs/master/embedding/sdk/api/StaticDashboard.html index 3a427a3fc1..76929144aa 100644 --- a/_site/docs/master/embedding/sdk/api/StaticDashboard.html +++ b/_site/docs/master/embedding/sdk/api/StaticDashboard.html @@ -23,8 +23,8 @@ -

    Function StaticDashboard

    dataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    +
    dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    drillThroughQuestionHeight?: Height<string | number>

    Height of a question component when drilled from the dashboard to a question level.

    drillThroughQuestionProps?: DrillThroughQuestionProps

    Props of a question component when drilled from the dashboard to a question level.

    Type declaration

    Props for the drill-through question

    diff --git a/_site/docs/master/embedding/sdk/api/StaticQuestion.html b/_site/docs/master/embedding/sdk/api/StaticQuestion.html index 4034300404..9fe7eebc5e 100644 --- a/_site/docs/master/embedding/sdk/api/StaticQuestion.html +++ b/_site/docs/master/embedding/sdk/api/StaticQuestion.html @@ -23,63 +23,24 @@ -

    Function StaticQuestion

    \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/StaticQuestionProps.html b/_site/docs/master/embedding/sdk/api/StaticQuestionProps.html index 45423dcfb7..5355f8d73b 100644 --- a/_site/docs/master/embedding/sdk/api/StaticQuestionProps.html +++ b/_site/docs/master/embedding/sdk/api/StaticQuestionProps.html @@ -23,23 +23,31 @@ -

    Interface StaticQuestionProps

    interface StaticQuestionProps {
        className?: string;
        height?: Height<string | number>;
        initialSqlParameters?: SqlParameterValues;
        questionId: null | SdkQuestionId;
        style?: CSSProperties;
        title?: SdkQuestionTitleProps;
        width?: Width<string | number>;
        withChartTypeSelector?: boolean;
        withDownloads?: boolean;
    }
    Index

    Properties

    className? +

    Interface StaticQuestionProps

    interface StaticQuestionProps {
        className?: string;
        height?: Height<string | number>;
        initialSqlParameters?: SqlParameterValues;
        questionId: null | SdkQuestionId;
        style?: CSSProperties;
        width?: Width<string | number>;
        withChartTypeSelector?: boolean;
        withDownloads?: boolean;
    }
    Index

    Properties

    className?: string

    A custom class name to be added to the root element.

    height?: Height<string | number>

    A number or string specifying a CSS size value that specifies the height of the component

    initialSqlParameters?: SqlParameterValues

    Initial values for the SQL parameters.

    -
    questionId: null | SdkQuestionId

    A custom style object to be added to the root element.

    -

    Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

    +
    questionId: null | SdkQuestionId

    The ID of the question. +
    +This is either: +

    +
      +
    • The numerical ID when accessing a question link, e.g., http://localhost:3000/question/1-my-question where the ID is 1 +
    • +
    • The entity_id key of the question object. You can find a question's Entity ID in the info panel when viewing a question +
    • +
    • new to show the notebook editor for creating new questions. isSaveEnabled must be true to allow saving the question
    • +
    +

    A custom style object to be added to the root element.

    width?: Width<string | number>

    A number or string specifying a CSS size value that specifies the width of the component

    -
    withChartTypeSelector?: boolean

    Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

    -
    withDownloads?: boolean

    Enables the ability to download results in the interactive question.

    -

    +
    withChartTypeSelector?: boolean
    withDownloads?: boolean

    Enables the ability to download results in the interactive question.

    +

    \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/assets/navigation.js b/_site/docs/master/embedding/sdk/api/assets/navigation.js index f695acbc75..ba4359a8d1 100644 --- a/_site/docs/master/embedding/sdk/api/assets/navigation.js +++ b/_site/docs/master/embedding/sdk/api/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "eJylWV1z0zgU/S9+7uywzAKzfWvTZKCU3W5T4IHhQbEusTayZKTrhsLw3xknTSLLVx82T+3onHuOdHWtr3z6USB8w+K8mGkpoUSh1aXRWwumOCvKSkhuQBXnn6K8hmFFQX9UWMvirNgIxYvzl3/9PAvL3Brd2IjWDu8LPn/x8udnV9MAQ7hitlppZvg7zZkMjYKmHswJNDKW1oIXcdGIkxoJx1JDuPvZCVGGCQrqfmCyhbDmHs5J+H8t2G6ioql2SD2/Q7ufj7OilMza4rzg0BgoGQIvgtZkenpgfCDHUQfGMOcC2UqCy3vyGkCRmX2jEAwrUTxQShQaEVsiQ1ESOh4QkRj03csjjcdqjBqDJxqkxHS9MXmSFBqfcKcTifKlmcOxhArZrTIjpLyvjG7XVaByg5TMpB9iupnT5rJFHFjksCe55fpMcUhrT1E9/F0ColBre2V0w/U2wy0aObEXH4RtmRTfWd6Aw2Ej/e/AAuaWik8e6bVkp/8X2tRpQzJipOu9QAlpqxMtuhTxTaAqfWRkLy9ZucmdBo/rOT37+9WfL54n3AywjW4xv+bJiAnOs4oZvH9sIN+aDvkd7yV0x8ucRYsOmeB9pbdKasY/Cr6GEXmPxP12L8a6T3VdCIlg8sdM8Ce75rpNdfH3gvG7x1Tnbm3MXTE87hS3tq6ZEd9HfLd0CO3tHs/eAbIVs91i/CB48C7K4YtQcCBftFjNtPoi1qc+hRiRUxrh/STmIyNEvFSRcGy7iI0xNbrh5A4jPgqsLhrxFh5juifWNIfrLabkr7c4TXvJapkS7zjp4tvfJhLXggGpdxXJuAz0ieSFZsQFVmMV/EoumYXwoYVCcypxpqU2REnv23MUhsnzkRyV+wpqGErsmmPx5Lo5YoHcHQt2g3XeHY5tyWj/eetG2C6yrVXsEcxhJR1ai7o+3oln3TMRqPYNQu0YhEkp/V7QXmeoHyGN0u+CAqodNFpr35W5hBoURoR7vBwXOs0+klKa1yvgXKj1XKHAx+7w6TzKDMGk3pG5P+m8hUf3lYdAk8eDUqt/mPvhHVpSkTd6LVS3vrVOF5zG3NV/JkW5uSjpBcQBJ+jdynYtlA3tsyFmttPxqyZXzydsvFq/5mg8X7VutAKFgeW1j+eqEo+VA2i0VmK2aF6+C7JbLRT+u/ofSuL04hFydY8f8RKs7Z4e9AaIciBpuR4LwLK6g6/dZroLXBAOBClbXytcsFpI4sx4wnLVEtM4afbeW+r4/n7wy9RQ4ZYZVgOC8X8l8YCUzpJvnA/QfaTvAxk6x0L2ZJz2MSo3mvH5Q2/7I+EMzf0G4nXr0JgTb4w2xxWlr9KDRmsNH+gIPEe1y8RrprgEMyhRGs9QPRxzvcydmkdoUE+cJJyh2X0gXp/2TcnYrzL44QyxlFrn2b1zguLXW7wD22hlnb2IxkP3u8+/ALqey/Q=" \ No newline at end of file +window.navigationData = "eJylWU1z2zYQ/S88ezpppkmmvtmyPI3jtK7lJIeMDxC5EVGBAAMsrTod//cMzZIigcUH6ZNm8N6+t1h8U1//yxD+xew0WykhIEeu5LlWBwM6O8nykotCg8xOvwZ5NcOSgn4psRLZSbbnsshO3/72dOKXudGqNgGtZ3wq+PrN26f7saYGhnDBTLlVTBcfVcGErxc0tTcn0FBfCLrdHR/F7ZFX9zMTDfg1Ozik1xiwYs5qftQjYafbbsH/bsC0AxUs9Yg0Sb9vt31OslwwY7LTrIBaQ84QisxrTVZ7AoZnztBjTx/WBUe2FTDm/e/lQIGJ4nCtvGk8NKTvJYJmOfIHKjcKDaRH0a0MvZRQkhtkyHMiPwsIpGYxrawoNDzgo35Epu+F5kLclVo1u9Iz3byUxJFz1wYBpo1bzz5n+f68QXRyjXOtpF/9/u7XN68jbhrYXjV4oVVdqEOKJxWxwHlVMo13jzWkW9MhL/HeQHtUKfsISw5Z4H2hDlIoVnzhxQ5m1D0Q9+Is5rovdW13SaVTZ7fDnrkou/hUnyUOl1wg6PQxJPgLqtippLotdYnrL6lY/7sBRC53Jr12wcgXZjHffWlV+9/P3DRM8B8srdT+sJk9vwUDmLoAbfJMrw17gFQri7ugsq3CMPOVrtI8nYi5fWyqimn+Y8YpRocs6PEdRwFxvyMtfLH6CMi2zLTUB154X5EFfOMSevJZg+VKyW98d8zBxwjcg0JyMSG3Vm7EF47lWc0/wGNI98ha5nB1wJj81QGXaW9YJWLiLSdVfTTKlmaPJAxXT7UmIQmHJ1/3Dohc6B3S5BGRcN2eEsmnyIynp8LSu0rOmYH4oRpihTYicledsX0+X2ZXSqjxJ6ChLRptf+C55qaNbCoZ+gw0YkUdGoOqGl6Fq/a7C8jmPUI1MvCTYvqToE7H1Q+QZum3QR7VFpqt1aWyFlCBxIDwhJfiQpfZRmJK62oLRcHlbi2R42P7ZBp9JnHBqN7A7O6zH+Bx/N2FQKNHaa7kn6wapdW3xCKv1Y7Ldp9oRimMGlM335Xg+f4sn+5iBLhA70Y0Oy6N7xD1MZOdhlVNaA/YfLXpnKPxGapKE8dR1x7aV4/MqlYSJN6VMJ4nNJ6aF/EZzYFma0XGm+aluyC7UVziX9t/ICcuNxYhVXfYBjZgTHtFVXsgJhRJS/W4BMzLW/jenqnPgZeEA0FK1lcSL1nFBXGlPGLJ17HwMC4aPfeiZCMpa8GzBKiZT8Z/MtQl85PzH5PbjxumWQUI2v77xAJiOptiP9pIxh+xp0CCzrCcLJlR+xyVa8WK9cPkGCfhBM3uILTS6htT4rVWetjXpioTaLaWfc0m8RTVthJ/MFkI0M5CofEE1X4pWJU7Ns/QoB7kJJyg2S4QK6euKRr7XXgXjovF1FrP9l8GkMXVAW/B1Eqa0XZA47Tq/dP9Ty1Guno=" \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/assets/search.js b/_site/docs/master/embedding/sdk/api/assets/search.js index 57a2948c77..a91212dd5e 100644 --- a/_site/docs/master/embedding/sdk/api/assets/search.js +++ b/_site/docs/master/embedding/sdk/api/assets/search.js @@ -1 +1 @@ -window.searchData = "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"; \ No newline at end of file +window.searchData = "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"; \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/index.html b/_site/docs/master/embedding/sdk/api/index.html index c742f3dc65..33ef352033 100644 --- a/_site/docs/master/embedding/sdk/api/index.html +++ b/_site/docs/master/embedding/sdk/api/index.html @@ -23,6 +23,6 @@ -

    Embedded analytics SDK API

    CollectionBrowser

    CollectionBrowser
    CollectionBrowserProps

    CreateDashboardModal

    CreateDashboardModal
    useCreateDashboardApi
    CreateDashboardModalProps
    CreateDashboardValues

    CreateQuestion

    CreateQuestion
    CreateQuestionProps

    Dashboard

    EditableDashboard
    InteractiveDashboard
    StaticDashboard
    EditableDashboardProps
    InteractiveDashboardProps
    StaticDashboardProps

    InteractiveQuestion

    InteractiveQuestion
    DrillThroughQuestionProps
    InteractiveQuestionEditorButtonProps
    InteractiveQuestionEditorProps
    InteractiveQuestionProps
    InteractiveQuestionQuestionSettingsDropdownProps
    InteractiveQuestionQuestionVisualizationProps
    InteractiveQuestionResetButtonProps
    InteractiveQuestionSaveQuestionFormProps
    InteractiveQuestionTitleProps
    SdkQuestionProps
    InteractiveQuestionBackButtonProps
    InteractiveQuestionBreakoutDropdownProps
    InteractiveQuestionChartTypeDropdownProps
    InteractiveQuestionChartTypeSelectorProps
    InteractiveQuestionDownloadWidgetDropdownProps
    InteractiveQuestionDownloadWidgetProps
    InteractiveQuestionFilterDropdownProps
    InteractiveQuestionFilterProps
    InteractiveQuestionQuestionSettingsProps
    InteractiveQuestionSaveButtonProps
    InteractiveQuestionSummarizeDropdownProps

    MetabaseProvider

    defineMetabaseAuthConfig
    MetabaseProvider
    MetabaseProviderProps
    MetabaseAuthConfig
    MetabaseAuthConfigWithApiKey
    MetabaseAuthConfigWithJwt
    MetabaseAuthConfigWithSaml

    StaticQuestion

    StaticQuestion
    StaticQuestionProps

    other

    BaseSdkQuestionProps
    MetabaseColors
    MetabaseQuestion
    MetabaseTheme
    ButtonProps
    ChartColor
    CollectionBrowserListColumns
    CustomDashboardCardMenuItem
    DashboardCardCustomMenuItem
    DashboardCardMenu
    DashboardCardMenuCustomElement
    DashCardMenuItem
    EmbeddingEntityType
    EntityTypeFilterKeys
    IconName
    LoginStatus
    MetabaseClickAction
    MetabaseClickActionPluginsConfig
    MetabaseCollection
    MetabaseCollectionItem
    MetabaseComponentTheme
    MetabaseDashboard
    MetabaseDashboardPluginsConfig
    MetabaseDataPointObject
    MetabaseEmbeddingSessionToken
    MetabaseFetchRequestTokenFn
    MetabaseFontFamily
    MetabasePluginsConfig
    MetabaseUser
    ParameterValues
    SdkCollectionId
    SdkDashboardId
    SdkDashboardLoadEvent
    SdkEntityId
    SdkErrorComponent
    SdkErrorComponentProps
    SdkEventHandlersConfig
    SdkQuestionId
    SdkQuestionTitleProps
    SdkUserId
    SqlParameterValues
    UserBackendJwtResponse

    +

    Embedded analytics SDK API

    CollectionBrowser

    CollectionBrowser
    CollectionBrowserProps

    CreateDashboardModal

    CreateDashboardModal
    CreateDashboardModalProps
    CreateDashboardValues
    useCreateDashboardApi

    CreateQuestion

    CreateQuestion
    CreateQuestionProps

    Dashboard

    EditableDashboard
    EditableDashboardProps
    InteractiveDashboard
    InteractiveDashboardProps
    StaticDashboard
    StaticDashboardProps

    InteractiveQuestion

    DrillThroughQuestionProps
    InteractiveQuestion
    InteractiveQuestionBackButtonProps
    InteractiveQuestionBreakoutDropdownProps
    InteractiveQuestionChartTypeDropdownProps
    InteractiveQuestionChartTypeSelectorProps
    InteractiveQuestionDownloadWidgetDropdownProps
    InteractiveQuestionDownloadWidgetProps
    InteractiveQuestionEditorButtonProps
    InteractiveQuestionEditorProps
    InteractiveQuestionFilterDropdownProps
    InteractiveQuestionFilterProps
    InteractiveQuestionProps
    InteractiveQuestionQuestionSettingsDropdownProps
    InteractiveQuestionQuestionSettingsProps
    InteractiveQuestionQuestionVisualizationProps
    InteractiveQuestionResetButtonProps
    InteractiveQuestionSaveButtonProps
    InteractiveQuestionSaveQuestionFormProps
    InteractiveQuestionSummarizeDropdownProps
    InteractiveQuestionTitleProps

    MetabaseProvider

    defineMetabaseAuthConfig
    MetabaseAuthConfig
    MetabaseAuthConfigWithApiKey
    MetabaseAuthConfigWithJwt
    MetabaseAuthConfigWithSaml
    MetabaseProvider
    MetabaseProviderProps

    StaticQuestion

    StaticQuestion
    StaticQuestionProps

    other

    BaseInteractiveQuestionProps
    ButtonProps
    ChartColor
    CollectionBrowserListColumns
    CustomDashboardCardMenuItem
    DashboardCardCustomMenuItem
    DashboardCardMenu
    DashboardCardMenuCustomElement
    DashCardMenuItem
    EmbeddingEntityType
    EntityTypeFilterKeys
    IconName
    LoginStatus
    MetabaseClickAction
    MetabaseClickActionPluginsConfig
    MetabaseCollection
    MetabaseCollectionItem
    MetabaseColors
    MetabaseComponentTheme
    MetabaseDashboard
    MetabaseDashboardPluginsConfig
    MetabaseDataPointObject
    MetabaseEmbeddingSessionToken
    MetabaseFetchRequestTokenFn
    MetabaseFontFamily
    MetabasePluginsConfig
    MetabaseQuestion
    MetabaseTheme
    MetabaseUser
    ParameterValues
    SdkCollectionId
    SdkDashboardId
    SdkDashboardLoadEvent
    SdkEntityId
    SdkErrorComponent
    SdkErrorComponentProps
    SdkEventHandlersConfig
    SdkQuestionId
    SdkQuestionTitleProps
    SdkUserId
    SqlParameterValues
    UserBackendJwtResponse

    \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/dashboards.html b/_site/docs/master/embedding/sdk/dashboards.html index 19150f8770..706ddded55 100644 --- a/_site/docs/master/embedding/sdk/dashboards.html +++ b/_site/docs/master/embedding/sdk/dashboards.html @@ -4862,7 +4862,7 @@

    Props

    - + @@ -4961,7 +4961,7 @@

    Props

    - + @@ -5060,7 +5060,7 @@

    Props

    - + diff --git a/_site/docs/master/embedding/sdk/introduction.html b/_site/docs/master/embedding/sdk/introduction.html index 1a00a072ae..71d5a25ce8 100644 --- a/_site/docs/master/embedding/sdk/introduction.html +++ b/_site/docs/master/embedding/sdk/introduction.html @@ -4924,7 +4924,7 @@

    Changelog

    Embedded analytics SDK on NPM

    -

    Check out the Metabase Embedded analytics SDK on NPM: metaba.se/sdk-npm.

    +

    Check out the Metabase Embedded analytics SDK on NPM: metaba.se/sdk.

    SDK limitations

    diff --git a/_site/docs/master/embedding/sdk/questions.html b/_site/docs/master/embedding/sdk/questions.html index a55677f465..0817f73ea1 100644 --- a/_site/docs/master/embedding/sdk/questions.html +++ b/_site/docs/master/embedding/sdk/questions.html @@ -4900,18 +4900,13 @@

    Props

    - + - - - - - @@ -4920,7 +4915,7 @@

    Props

    - + @@ -4977,16 +4972,16 @@

    Props

    + + + + + - - - - - @@ -5012,11 +5007,6 @@

    Props

    - - - - - @@ -5035,7 +5025,7 @@

    Props

    - + diff --git a/_site/docs/master/embedding/sdk/upgrade.html b/_site/docs/master/embedding/sdk/upgrade.html deleted file mode 100644 index 3dc468f0ac..0000000000 --- a/_site/docs/master/embedding/sdk/upgrade.html +++ /dev/null @@ -1,5273 +0,0 @@ - - - - - - - - - - - - - - - - - - -Upgrading Metabase and the Embedded analytics SDK | Metabase Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - - - -
    -
    - - - -
    -
    -
    - -
    - - - - - - - - - -
    - - - -
    - - -
    - -
    - -
    - - - -
    - - - master - - - - - - - - -
    - - - - - What’s new - - - - - -
    - - - - -
    -
    - - -
    - - -
    - - -
    - These are the docs for the Metabase master branch. Some features documented here may not yet be available in the latest release. - Check out the docs for the latest version, Metabase v0.55. -
    - - -
    - - -

    Upgrading Metabase and the Embedded analytics SDK

    - -

    Here’s a basic overview of the steps you’ll want to take when upgrading your SDK.

    - -

    1. Read the release post and changelog for both Metabase and the Embedded analytics SDK

    - - - -

    Check for any relevant changes, especially breaking changes that require you to update your application’s code. If there are breaking changes, we’ll have docs that’ll walk you through what changes you’ll need to make and why.

    - -

    2. Test the upgrade

    - -

    When upgrading to a new major version, you’ll want to upgrade both Metabase and the SDK version in parallel, as having Metabase and the SDK major versions out of sync can cause errors.

    - -

    Spin up the new version of Metabase for testing

    - -

    You can do this locally or in a dev instance. If your testing setup involves a lot of test user accounts, getting a development instance could be more cost-effective.

    - -

    See upgrading Metabase.

    - -

    Upgrade the SDK with npm or yarn

    - -

    You’ll want to test the changes locally first, as there may be breaking changes that require you to upgrade your application code.

    - -

    Check out a new branch in your application and install the next stable version, either with npm or yarn:

    - -

    Via npm:

    - -
    npm install @metabase/embedding-sdk-react@{next-major-version-number}-stable
    -
    - -

    For example, if you were upgrading to version 55 of the SDK:

    - -
    npm install @metabase/embedding-sdk-react@55-stable
    -
    - -

    If you’re using yarn:

    - -
    yarn add @metabase/embedding-sdk-react@{next-major-version-number}-stable
    -
    - -

    See more on SDK versions.

    - -

    If there are breaking changes, make the necessary changes to your application code

    - -

    Breaking changes are rare, but if you do need to make changes, we’ll mention it in the release notes for the new major version and have docs that walk you through the changes.

    - -

    Update or add tests for any application code changes that you make.

    - -

    Deploy to your staging environment

    - -

    Before deploying your app to your staging environment, make sure you’ve tested your app locally (manually, as well as running any automated tests).

    - -

    If all goes well with your local tests, deploy to your staging environment. Check that the Metabase embeds in your staging app are still working as expected, and perform any other testing you normally do with your application with respect to your embedded analytics.

    - -

    3. Deploy to production

    - -

    If everything is working in staging, you’re ready to deploy to production.

    - -

    Be sure to deploy your application changes and upgrade your Metabase in parallel so that the SDK version and the Metabase version stay in sync.

    - -

    If your instance is on Metabase Cloud, you’ll need to request an upgrade

    - -

    If you’re on Metabase Cloud, your instance version is pinned, so you’ll need to request an upgrade by contacting support.

    - -

    We’ll coordinate with you so that your instance is upgraded when you deploy the changes to your application.

    - - -
    -
    - -

    - Read docs for other versions of Metabase. -

    - -
    -
    - -
    - -
    -
    -
    Was this helpful?
    - - -
    - -
    -

    - -
    - - - - -
    - -
    -
    Thanks for your feedback!
    -
    - - - - Want to improve these docs? Propose a change. - - -
    - - - -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/version.html b/_site/docs/master/embedding/sdk/version.html index b70984e8b4..6760b67509 100644 --- a/_site/docs/master/embedding/sdk/version.html +++ b/_site/docs/master/embedding/sdk/version.html @@ -4823,36 +4823,39 @@

    Embedded analytics SDK - versions

    The SDK stable version tracks with the Metabase version.

    -

    So, for example, if you’re on Metabase 55 (0.55.x, 1.55.x), any version 0.55.x of the @metabase/embedding-sdk-react npm package will be compatible.

    +

    So, for example, if you’re on Metabase 53 (0.53.x, 1.53.x), any version 0.53.x of the @metabase/embedding-sdk-react npm package will be compatible.

    -

    To simplify things, we publish dist-tags for each stable Metabase version. For example, to install the latest version of the SDK compatible with Metabase 55, run:

    +

    To simplify things, we publish dist-tags for each stable Metabase version. For example, to install the latest version of the SDK compatible with Metabase 53, run:

    -
    npm install @metabase/embedding-sdk-react@55-stable
    +
    npm install @metabase/embedding-sdk-react@53-stable
     

    To grab the latest version of the SDK that works with Metabase nightly builds, use the canary dist-tag.

    Minimum SDK version

    -

    Version 52 is the minimum version supported for the Embedded analytics SDK.

    +

    52 is the minimum version supported for the Embedded analytics SDK.

    -

    Instances on Metabase Cloud will be pinned to a specific version

    +

    Version pinning when using the SDK with Metabase Cloud

    -

    By default, if you’re running on Metabase Cloud and using the Embedded analytics SDK, we’ll pin your version to avoid breaking changes.

    +

    To pin your version of Metabase, go to Admin settings > Settings > Embedding. Go to the Embedded analytics SDK card and scroll to Version pinning and click Request version pinning.

    -

    Normally, Metabase Cloud upgrades your Metabase as new versions roll out so you don’t have to deal with upgrades. But if you’re using the SDK with Metabase Cloud, you’ll want to upgrade manually to make sure your embeds don’t break when you upgrade both your Metabase and your SDK version.

    +

    Version pinning requirements

    -

    Manually pinning your instance version on Metabase Cloud

    +

    To pin a version of Metabase, you must:

    -

    To manually pin your version of Metabase:

    +
      +
    • Be on Metabase Cloud (obviously)
    • +
    • Be on the Pro or Enterprise plans
    • +
    -
      -
    1. Go to Admin settings > Settings > Embedding.
    2. -
    3. Go to the Embedded analytics SDK card.
    4. -
    5. Scroll to Version pinning and click Request version pinning.
    6. -
    +

    Why you’d want to pin your Metabase Cloud version

    -

    This will open a mailto link to our support team.

    +

    Normally, Metabase Cloud upgrades your Metabase as new versions roll out so that you don’t have to deal with upgrades.

    + +

    But if you’re using the SDK with Metabase Cloud, you’ll want to upgrade manually to make sure your embeds don’t break when you upgrade both your Metabase and your SDK version.

    + +

    To upgrade manually, you can pin your Metabase version so that it stays in sync with the SDK version you’re using. That way you can choose when to upgrade your Metabase.

    diff --git a/_site/docs/master/exploration-and-organization/images/DataReference.png b/_site/docs/master/exploration-and-organization/images/DataReference.png index 5b8967a7b2..1b91e84ebc 100644 Binary files a/_site/docs/master/exploration-and-organization/images/DataReference.png and b/_site/docs/master/exploration-and-organization/images/DataReference.png differ diff --git a/_site/docs/master/exploration-and-organization/images/browse-data.png b/_site/docs/master/exploration-and-organization/images/browse-data.png index f857430ff8..9429442b26 100644 Binary files a/_site/docs/master/exploration-and-organization/images/browse-data.png and b/_site/docs/master/exploration-and-organization/images/browse-data.png differ diff --git a/_site/docs/master/exploration-and-organization/images/event-on-a-time-series.png b/_site/docs/master/exploration-and-organization/images/event-on-a-time-series.png index acc04a435b..66168ce82a 100644 Binary files a/_site/docs/master/exploration-and-organization/images/event-on-a-time-series.png and b/_site/docs/master/exploration-and-organization/images/event-on-a-time-series.png differ diff --git a/_site/docs/master/exploration-and-organization/images/pinned-show-viz.png b/_site/docs/master/exploration-and-organization/images/pinned-show-viz.png index 41ac861ee0..6c58b5e734 100644 Binary files a/_site/docs/master/exploration-and-organization/images/pinned-show-viz.png and b/_site/docs/master/exploration-and-organization/images/pinned-show-viz.png differ diff --git a/_site/docs/master/exploration-and-organization/images/question-checkbox.png b/_site/docs/master/exploration-and-organization/images/question-checkbox.png index d9ba8c5014..4887db0e22 100644 Binary files a/_site/docs/master/exploration-and-organization/images/question-checkbox.png and b/_site/docs/master/exploration-and-organization/images/question-checkbox.png differ diff --git a/_site/docs/master/exploration-and-organization/images/search-results.png b/_site/docs/master/exploration-and-organization/images/search-results.png index 1b91e84ebc..177b5b507a 100644 Binary files a/_site/docs/master/exploration-and-organization/images/search-results.png and b/_site/docs/master/exploration-and-organization/images/search-results.png differ diff --git a/_site/docs/master/index.html b/_site/docs/master/index.html index b0d1e750cb..acce821a7a 100644 --- a/_site/docs/master/index.html +++ b/_site/docs/master/index.html @@ -5030,7 +5030,7 @@

    Data modeling

  • Model persistence
  • Metrics
  • Table metadata admin settings
  • -
  • Field types
  • +
  • Field types
  • Formatting defaults
  • Working with JSON
  • Segments
  • diff --git a/_site/docs/master/installation-and-operation/activating-the-enterprise-edition.html b/_site/docs/master/installation-and-operation/activating-the-enterprise-edition.html index 6e7c25cc37..bc70805f55 100644 --- a/_site/docs/master/installation-and-operation/activating-the-enterprise-edition.html +++ b/_site/docs/master/installation-and-operation/activating-the-enterprise-edition.html @@ -4856,7 +4856,7 @@

    Back up your application database. -
  • Download the Enterprise Edition version that corresponds with your current Metabase version. So if you’re running the Docker image for v0.55.2, you should switch to the Docker image for v1.55.2. To see a list of available versions for both the Open Source and Enterprise Editions, check out Metabase releases.
  • +
  • Download the Enterprise Edition version that corresponds with your current Metabase version. So if you’re running the Docker image for , you should switch to the Docker image for . To see a list of available versions for both the Open Source and Enterprise Editions, check out Metabase releases.
  • Stop your current Metabase Open Source edition.
  • Swap in the Enterprise Edition Docker image or jar that you downloaded.
  • Start your Metabase like you normally would using the new Enterprise Edition image or jar. You don’t need to do anything with your application database (which you’ve backed up in step one, right?).
  • diff --git a/_site/docs/master/installation-and-operation/images/AZPrivateLink.png b/_site/docs/master/installation-and-operation/images/AZPrivateLink.png index 1834491eb7..c520b55bdd 100644 Binary files a/_site/docs/master/installation-and-operation/images/AZPrivateLink.png and b/_site/docs/master/installation-and-operation/images/AZPrivateLink.png differ diff --git a/_site/docs/master/installation-and-operation/images/AZVNETintegration.png b/_site/docs/master/installation-and-operation/images/AZVNETintegration.png index 7bb1d7a4f0..f69b404401 100644 Binary files a/_site/docs/master/installation-and-operation/images/AZVNETintegration.png and b/_site/docs/master/installation-and-operation/images/AZVNETintegration.png differ diff --git a/_site/docs/master/installation-and-operation/images/AddRemoteHost.png b/_site/docs/master/installation-and-operation/images/AddRemoteHost.png index ab8def0988..a3bdb2b9c8 100644 Binary files a/_site/docs/master/installation-and-operation/images/AddRemoteHost.png and b/_site/docs/master/installation-and-operation/images/AddRemoteHost.png differ diff --git a/_site/docs/master/installation-and-operation/images/LocalProcessVisualVM.png b/_site/docs/master/installation-and-operation/images/LocalProcessVisualVM.png index f07a2758c5..d71e3e03d6 100644 Binary files a/_site/docs/master/installation-and-operation/images/LocalProcessVisualVM.png and b/_site/docs/master/installation-and-operation/images/LocalProcessVisualVM.png differ diff --git a/_site/docs/master/installation-and-operation/images/Metabase-AWS-SI.png b/_site/docs/master/installation-and-operation/images/Metabase-AWS-SI.png index d60c5504d6..6a49e9a6dc 100644 Binary files a/_site/docs/master/installation-and-operation/images/Metabase-AWS-SI.png and b/_site/docs/master/installation-and-operation/images/Metabase-AWS-SI.png differ diff --git a/_site/docs/master/installation-and-operation/images/OpenRemoteInstance.png b/_site/docs/master/installation-and-operation/images/OpenRemoteInstance.png index 454be8a831..fa97c0e30a 100644 Binary files a/_site/docs/master/installation-and-operation/images/OpenRemoteInstance.png and b/_site/docs/master/installation-and-operation/images/OpenRemoteInstance.png differ diff --git a/_site/docs/master/installation-and-operation/running-metabase-on-azure.html b/_site/docs/master/installation-and-operation/running-metabase-on-azure.html index 6bc9a71e08..5f8220bb68 100644 --- a/_site/docs/master/installation-and-operation/running-metabase-on-azure.html +++ b/_site/docs/master/installation-and-operation/running-metabase-on-azure.html @@ -4912,7 +4912,7 @@

    Step 5: Create web applic
  • Options: Single container.
  • Image source: DockerHub.
  • Access Type: Public.
  • -
  • Image and tag: metabase/metabase:latest (or choose any other docker image tag of your preference, like our Enterprise Edition). To find the latest version, check our Community Edition Docker Hub repository and also our Enterprise Edition Docker Hub Repository.
  • +
  • Image and tag: metabase/metabase:latest (or choose any other docker image tag of your preference, like our Enterprise Edition). To find the latest version, check our Community Edition Dockerhub repository and also our Enterprise Edition Dockerhub Repository.
  • Startup command: Leave this field empty.
  • diff --git a/_site/docs/master/installation-and-operation/running-metabase-on-docker.html b/_site/docs/master/installation-and-operation/running-metabase-on-docker.html index 113e1e4434..c59d3857c0 100644 --- a/_site/docs/master/installation-and-operation/running-metabase-on-docker.html +++ b/_site/docs/master/installation-and-operation/running-metabase-on-docker.html @@ -49,7 +49,7 @@ - + @@ -59,7 +59,7 @@ - + @@ -4807,7 +4807,7 @@

    Running Metabase on Docker

    To get fast, reliable, and secure deployment with none of the work or hidden costs that come with self-hosting, check out Metabase Cloud.

    -

    Metabase provides an official Docker image via Docker Hub that can be used for deployments on any system that is running Docker.

    +

    Metabase provides an official Docker image via Dockerhub that can be used for deployments on any system that is running Docker.

    If you’re trying to upgrade your Metabase version on Docker, check out these upgrading instructions.

    diff --git a/_site/docs/master/installation-and-operation/upgrading-metabase.html b/_site/docs/master/installation-and-operation/upgrading-metabase.html index 670154f283..dc7e44a8de 100644 --- a/_site/docs/master/installation-and-operation/upgrading-metabase.html +++ b/_site/docs/master/installation-and-operation/upgrading-metabase.html @@ -49,7 +49,7 @@ - + @@ -59,7 +59,7 @@ - + @@ -4803,17 +4803,11 @@
    Other resources

    Upgrading Metabase

    -

    This page covers how to upgrade to a new Metabase release.

    - - +

    This page covers how to upgrade to a new Metabase release.

    Upgrading Metabase Cloud

    -

    If you’re on a Metabase Cloud plan, we’ll upgrade your Metabase automatically with each new release; no action needed on your end (unless you’re using the Embedded analytics SDK).

    +

    If you’re on a Metabase Cloud plan, we’ll upgrade your Metabase automatically with each new release; no action needed on your end.

    How soon we upgrade you depends on the type of release:

    @@ -4824,14 +4818,6 @@

    Upgrading Metabase Cloud

    Cloud customers can request an early upgrade by emailing support at help@metabase.com. Include the URL of the Metabase you want us to upgrade.

    -

    Instances using the Embedded analtyics SDK on Metabase Cloud must request an upgrade

    - -

    If you’re using the Embedded analytics SDK on Metabase Cloud, we pin your version so that it doesn’t upgrade automatically, as you should test the changes before upgrading.

    - -

    To upgrade your Metabase, you’ll need to request an upgrade by contacting support.

    - -

    See our upgrade guide for the Embedded analytics SDK.

    -

    Upgrading a self-hosted Metabase

    Here are the steps for upgrading to a new Metabase version (major or minor):

    @@ -4958,10 +4944,6 @@

    What happens during an upgr

    Rolling back an upgrade or to an older version

    -
    -

    The downgrade command must be run on the JAR with the higher version number.

    -
    -

    In general, regular backups (especially backups before upgrading), are the best policy, so we recommend reverting to a backup of your application database to roll back an upgrade.

    But if you’ve made any change (adding new questions/dashboards, etc) since upgrading that you want to keep, you may be able to use the migrate down command to roll back your Metabase application database to support the previous Metabase version you were running. When Metabase upgrades to a new version, it runs migrations that may change the application database schema. The migrate down command undoes those schema changes. In general, we recommend restoring from a backup (the backup that you definitely remembered to generate before upgrading), and only using the migrate down command if you really need to keep changes made after your upgrade.

    diff --git a/_site/docs/master/people-and-groups/images/JWT-auth-form.png b/_site/docs/master/people-and-groups/images/JWT-auth-form.png index ed91fea29b..ce5b0e7415 100644 Binary files a/_site/docs/master/people-and-groups/images/JWT-auth-form.png and b/_site/docs/master/people-and-groups/images/JWT-auth-form.png differ diff --git a/_site/docs/master/people-and-groups/images/auth0callbackurl.png b/_site/docs/master/people-and-groups/images/auth0callbackurl.png index 8371279d7d..dda21e391d 100644 Binary files a/_site/docs/master/people-and-groups/images/auth0callbackurl.png and b/_site/docs/master/people-and-groups/images/auth0callbackurl.png differ diff --git a/_site/docs/master/people-and-groups/images/auth0createapp.png b/_site/docs/master/people-and-groups/images/auth0createapp.png index 2fb7bd3907..6fbdab7fcf 100644 Binary files a/_site/docs/master/people-and-groups/images/auth0createapp.png and b/_site/docs/master/people-and-groups/images/auth0createapp.png differ diff --git a/_site/docs/master/people-and-groups/images/auth0regularapp.png b/_site/docs/master/people-and-groups/images/auth0regularapp.png index 7d23c598f1..6fbdab7fcf 100644 Binary files a/_site/docs/master/people-and-groups/images/auth0regularapp.png and b/_site/docs/master/people-and-groups/images/auth0regularapp.png differ diff --git a/_site/docs/master/people-and-groups/images/auth0saml2addon.png b/_site/docs/master/people-and-groups/images/auth0saml2addon.png index 6fbdab7fcf..8926f599ba 100644 Binary files a/_site/docs/master/people-and-groups/images/auth0saml2addon.png and b/_site/docs/master/people-and-groups/images/auth0saml2addon.png differ diff --git a/_site/docs/master/people-and-groups/images/auth0samlmappings.png b/_site/docs/master/people-and-groups/images/auth0samlmappings.png index a673bc98ba..6fbdab7fcf 100644 Binary files a/_site/docs/master/people-and-groups/images/auth0samlmappings.png and b/_site/docs/master/people-and-groups/images/auth0samlmappings.png differ diff --git a/_site/docs/master/people-and-groups/images/auth0samlusage.png b/_site/docs/master/people-and-groups/images/auth0samlusage.png index 7dbf8c7523..6fbdab7fcf 100644 Binary files a/_site/docs/master/people-and-groups/images/auth0samlusage.png and b/_site/docs/master/people-and-groups/images/auth0samlusage.png differ diff --git a/_site/docs/master/people-and-groups/images/groups.png b/_site/docs/master/people-and-groups/images/groups.png index 759a222b61..8926f599ba 100644 Binary files a/_site/docs/master/people-and-groups/images/groups.png and b/_site/docs/master/people-and-groups/images/groups.png differ diff --git a/_site/docs/master/people-and-groups/images/okta-group-attribute.png b/_site/docs/master/people-and-groups/images/okta-group-attribute.png index baf8cdc518..a48ae1a137 100644 Binary files a/_site/docs/master/people-and-groups/images/okta-group-attribute.png and b/_site/docs/master/people-and-groups/images/okta-group-attribute.png differ diff --git a/_site/docs/master/people-and-groups/images/saml-azure-step-1.png b/_site/docs/master/people-and-groups/images/saml-azure-step-1.png index 4becab567e..e8ae330628 100644 Binary files a/_site/docs/master/people-and-groups/images/saml-azure-step-1.png and b/_site/docs/master/people-and-groups/images/saml-azure-step-1.png differ diff --git a/_site/docs/master/people-and-groups/images/saml-okta-groups.png b/_site/docs/master/people-and-groups/images/saml-okta-groups.png index 9df2d9fb1d..98a4a6fc63 100644 Binary files a/_site/docs/master/people-and-groups/images/saml-okta-groups.png and b/_site/docs/master/people-and-groups/images/saml-okta-groups.png differ diff --git a/_site/docs/master/people-and-groups/saml-google.html b/_site/docs/master/people-and-groups/saml-google.html index 25bbc1d593..23b3324ebe 100644 --- a/_site/docs/master/people-and-groups/saml-google.html +++ b/_site/docs/master/people-and-groups/saml-google.html @@ -4898,12 +4898,7 @@

    Setting up attribute mappings

    Setting up synchronize group membership

      -
    1. In Google Admin, you can EITHER: - -
    2. +
    3. In Google Admin, setup a multi-value custom user attribute for your users (recommended if you manage multiple SAML app permissions in Google or do not have existing Google Groups that align with your desired Metabase groups) OR map to existing Google Groups.
    4. Follow the instructions for Configuring the group schema using the App attribute that you used in Google as the Group attribute name in Metabase.
    diff --git a/_site/docs/master/permissions/database-routing.html b/_site/docs/master/permissions/database-routing.html index 37dc2aa359..94e672672b 100644 --- a/_site/docs/master/permissions/database-routing.html +++ b/_site/docs/master/permissions/database-routing.html @@ -4826,7 +4826,7 @@

    Database routing

    Database routing is useful for:

      -
    • Managing interactive embedding setups where each customer has their own database with identical schemas.
    • +
    • Managing embedding setups where each customer has their own database with identical schemas.
    • Switching between dev and prod data warehouses.
    • Changing the target data warehouse for certain teams.
    • Managing separate connections to the same data warehouse, with each connection having separate privileges. This connection management is akin to connection impersonation for databases that prevent the same connection from changing roles.
    • @@ -4835,7 +4835,6 @@

      Database routing

      Databases that support database routing

        -
      • BigQuery
      • Druid
      • MongoDB
      • MariaDB
      • diff --git a/_site/docs/master/permissions/images/admin-panel-collections.png b/_site/docs/master/permissions/images/admin-panel-collections.png index 155d34f84e..cc2c707278 100644 Binary files a/_site/docs/master/permissions/images/admin-panel-collections.png and b/_site/docs/master/permissions/images/admin-panel-collections.png differ diff --git a/_site/docs/master/permissions/images/advanced-example-1-sandbox-modal.png b/_site/docs/master/permissions/images/advanced-example-1-sandbox-modal.png index e84c8f1aef..f0997404d5 100644 Binary files a/_site/docs/master/permissions/images/advanced-example-1-sandbox-modal.png and b/_site/docs/master/permissions/images/advanced-example-1-sandbox-modal.png differ diff --git a/_site/docs/master/permissions/images/dashboard-no-permissions.png b/_site/docs/master/permissions/images/dashboard-no-permissions.png index 3c02e69fc9..c9c10c5129 100644 Binary files a/_site/docs/master/permissions/images/dashboard-no-permissions.png and b/_site/docs/master/permissions/images/dashboard-no-permissions.png differ diff --git a/_site/docs/master/permissions/images/pinned-items.png b/_site/docs/master/permissions/images/pinned-items.png index 960bcb87f1..76c2b7c0aa 100644 Binary files a/_site/docs/master/permissions/images/pinned-items.png and b/_site/docs/master/permissions/images/pinned-items.png differ diff --git a/_site/docs/master/permissions/images/select-user-attribute.png b/_site/docs/master/permissions/images/select-user-attribute.png index 6fe341045c..5fb459752f 100644 Binary files a/_site/docs/master/permissions/images/select-user-attribute.png and b/_site/docs/master/permissions/images/select-user-attribute.png differ diff --git a/_site/docs/master/permissions/impersonation.html b/_site/docs/master/permissions/impersonation.html index 7d7428c3d3..d9b604eecb 100644 --- a/_site/docs/master/permissions/impersonation.html +++ b/_site/docs/master/permissions/impersonation.html @@ -4822,7 +4822,7 @@

        Impersonation permissions

    -

    For now, impersonation access is only available for ClickHouse, MySQL, PostgreSQL, Redshift, Snowflake, and SQL Server. If you want to switch database connections based on who is logged in, check out Database routing.

    +

    For now, impersonation access is only available for MySQL, PostgreSQL, Redshift, Snowflake, and SQL Server. If you want to switch database connections based on who is logged in, check out Database routing.

    diff --git a/_site/docs/master/questions/images/02-widget.png b/_site/docs/master/questions/images/02-widget.png new file mode 100644 index 0000000000..4ce9fda455 Binary files /dev/null and b/_site/docs/master/questions/images/02-widget.png differ diff --git a/_site/docs/master/questions/images/SQL-filter-widget.png b/_site/docs/master/questions/images/SQL-filter-widget.png index 318c459779..22f38f2e92 100644 Binary files a/_site/docs/master/questions/images/SQL-filter-widget.png and b/_site/docs/master/questions/images/SQL-filter-widget.png differ diff --git a/_site/docs/master/questions/images/add-comparison.png b/_site/docs/master/questions/images/add-comparison.png index d193fa0481..416c5e974f 100644 Binary files a/_site/docs/master/questions/images/add-comparison.png and b/_site/docs/master/questions/images/add-comparison.png differ diff --git a/_site/docs/master/questions/images/area.png b/_site/docs/master/questions/images/area.png index 8008354d87..676d7840a3 100644 Binary files a/_site/docs/master/questions/images/area.png and b/_site/docs/master/questions/images/area.png differ diff --git a/_site/docs/master/questions/images/bin-by-latlong.png b/_site/docs/master/questions/images/bin-by-latlong.png index ac8e7481e4..60cbdafba4 100644 Binary files a/_site/docs/master/questions/images/bin-by-latlong.png and b/_site/docs/master/questions/images/bin-by-latlong.png differ diff --git a/_site/docs/master/questions/images/chart-formatting-options.png b/_site/docs/master/questions/images/chart-formatting-options.png index 5e1fe30691..14d64cca39 100644 Binary files a/_site/docs/master/questions/images/chart-formatting-options.png and b/_site/docs/master/questions/images/chart-formatting-options.png differ diff --git a/_site/docs/master/questions/images/diff-and-percentage.png b/_site/docs/master/questions/images/diff-and-percentage.png index eaeaf64500..181ab4e47c 100644 Binary files a/_site/docs/master/questions/images/diff-and-percentage.png and b/_site/docs/master/questions/images/diff-and-percentage.png differ diff --git a/_site/docs/master/questions/images/filter-and-parameter.png b/_site/docs/master/questions/images/filter-and-parameter.png deleted file mode 100644 index e0df5f3c81..0000000000 Binary files a/_site/docs/master/questions/images/filter-and-parameter.png and /dev/null differ diff --git a/_site/docs/master/questions/images/function-browser.png b/_site/docs/master/questions/images/function-browser.png index 71c4f4a9fa..eaeaf64500 100644 Binary files a/_site/docs/master/questions/images/function-browser.png and b/_site/docs/master/questions/images/function-browser.png differ diff --git a/_site/docs/master/questions/images/histogram.png b/_site/docs/master/questions/images/histogram.png index 77a47cdb2d..efbaebb582 100644 Binary files a/_site/docs/master/questions/images/histogram.png and b/_site/docs/master/questions/images/histogram.png differ diff --git a/_site/docs/master/questions/images/join-with-custom-expression.png b/_site/docs/master/questions/images/join-with-custom-expression.png deleted file mode 100644 index 713683583e..0000000000 Binary files a/_site/docs/master/questions/images/join-with-custom-expression.png and /dev/null differ diff --git a/_site/docs/master/questions/images/legend.png b/_site/docs/master/questions/images/legend.png index 159ee2b139..1cfd092a11 100644 Binary files a/_site/docs/master/questions/images/legend.png and b/_site/docs/master/questions/images/legend.png differ diff --git a/_site/docs/master/questions/images/multiple-values.png b/_site/docs/master/questions/images/multiple-values.png deleted file mode 100644 index 604c5ed4b1..0000000000 Binary files a/_site/docs/master/questions/images/multiple-values.png and /dev/null differ diff --git a/_site/docs/master/questions/images/number.png b/_site/docs/master/questions/images/number.png index b650a3cb61..6a503dc977 100644 Binary files a/_site/docs/master/questions/images/number.png and b/_site/docs/master/questions/images/number.png differ diff --git a/_site/docs/master/questions/images/pie-other-slice.png b/_site/docs/master/questions/images/pie-other-slice.png index 6e08d9e9a0..dcbd6a8bdf 100644 Binary files a/_site/docs/master/questions/images/pie-other-slice.png and b/_site/docs/master/questions/images/pie-other-slice.png differ diff --git a/_site/docs/master/questions/images/pin-data-shape.png b/_site/docs/master/questions/images/pin-data-shape.png index b9079a1c01..fab199632b 100644 Binary files a/_site/docs/master/questions/images/pin-data-shape.png and b/_site/docs/master/questions/images/pin-data-shape.png differ diff --git a/_site/docs/master/questions/images/pivot-table-options.png b/_site/docs/master/questions/images/pivot-table-options.png index e3d9ba981c..a912dce7f6 100644 Binary files a/_site/docs/master/questions/images/pivot-table-options.png and b/_site/docs/master/questions/images/pivot-table-options.png differ diff --git a/_site/docs/master/questions/images/raw-table.png b/_site/docs/master/questions/images/raw-table.png index 5c753beebe..2bd6a50036 100644 Binary files a/_site/docs/master/questions/images/raw-table.png and b/_site/docs/master/questions/images/raw-table.png differ diff --git a/_site/docs/master/questions/images/region-maps.png b/_site/docs/master/questions/images/region-maps.png index 8dec0e9d90..91ae89db11 100644 Binary files a/_site/docs/master/questions/images/region-maps.png and b/_site/docs/master/questions/images/region-maps.png differ diff --git a/_site/docs/master/questions/images/rolling-average.png b/_site/docs/master/questions/images/rolling-average.png index 233e8508dd..17463efde4 100644 Binary files a/_site/docs/master/questions/images/rolling-average.png and b/_site/docs/master/questions/images/rolling-average.png differ diff --git a/_site/docs/master/questions/images/sum-of-totals-for-previous-period.png b/_site/docs/master/questions/images/sum-of-totals-for-previous-period.png index 3e95ecd43d..c2c2978f4f 100644 Binary files a/_site/docs/master/questions/images/sum-of-totals-for-previous-period.png and b/_site/docs/master/questions/images/sum-of-totals-for-previous-period.png differ diff --git a/_site/docs/master/questions/images/switch-to-editor.png b/_site/docs/master/questions/images/switch-to-editor.png index 0945f38fa4..3c8a32cc82 100644 Binary files a/_site/docs/master/questions/images/switch-to-editor.png and b/_site/docs/master/questions/images/switch-to-editor.png differ diff --git a/_site/docs/master/questions/images/table.png b/_site/docs/master/questions/images/table.png index 63af470596..4ce9fda455 100644 Binary files a/_site/docs/master/questions/images/table.png and b/_site/docs/master/questions/images/table.png differ diff --git a/_site/docs/master/questions/images/unpivoted-results.png b/_site/docs/master/questions/images/unpivoted-results.png index 14d64cca39..e3d9ba981c 100644 Binary files a/_site/docs/master/questions/images/unpivoted-results.png and b/_site/docs/master/questions/images/unpivoted-results.png differ diff --git a/_site/docs/master/questions/images/viz-options.png b/_site/docs/master/questions/images/viz-options.png index 08e8dc6af0..49a0bf0703 100644 Binary files a/_site/docs/master/questions/images/viz-options.png and b/_site/docs/master/questions/images/viz-options.png differ diff --git a/_site/docs/master/questions/images/week-iso.png b/_site/docs/master/questions/images/week-iso.png index d75254a7bf..5ebb209705 100644 Binary files a/_site/docs/master/questions/images/week-iso.png and b/_site/docs/master/questions/images/week-iso.png differ diff --git a/_site/docs/master/questions/native-editor/basic-sql-parameters.html b/_site/docs/master/questions/native-editor/basic-sql-parameters.html deleted file mode 100644 index bd988e4fdb..0000000000 --- a/_site/docs/master/questions/native-editor/basic-sql-parameters.html +++ /dev/null @@ -1,5290 +0,0 @@ - - - - - - - - - - - - - - - - - - -Basic SQL parameters | Metabase Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - - - -
    -
    - - - -
    -
    -
    - -
    - - - - - - - - - -
    - - - -
    - - -
    - -
    - -
    - - - -
    - - - master - - - - - - - - -
    - - - - - What’s new - - - - - -
    - - - - -
    -
    - - -
    - - -
    - - -
    - These are the docs for the Metabase master branch. Some features documented here may not yet be available in the latest release. - Check out the docs for the latest version, Metabase v0.55. -
    - - -
    - - -

    Basic SQL parameters

    - -
    -

    If you want to filter on a database field in your query, you should prefer using field filter variables, which require a different syntax.

    -
    - -

    Text, number, and date variables let you plug basic values into your SQL code.

    - -

    To add a basic variable to a SQL query, enclose the variable in double braces: {{variable_name}}.

    - -

    This example defines a Text variable called category_filter (but you can call the variable whatever you want):

    - -
    
    -SELECT
    -  count(*)
    -FROM
    -  products
    -WHERE
    -  category = {{category_filter}};
    -
    -
    - -

    These basic variabless simply plug in the values set by the widget into the placeholder in the code. Basic variables have a different syntax than field filters.

    - -

    Here’s the field filter syntax:

    - -
    
    -WHERE
    -  {{category}}
    -
    -
    - -

    Whereas the basic variable syntax includes an = operator:

    - -
    
    -WHERE
    -  category = {{category}};
    -
    -
    - -

    Here, we don’t connect the variable to a database field; we merely insert the value into the variable.

    - -

    Metabase will read the variable and attach a filter widget to the query, which people can use to change the value inserted into the category variable. So if someone enters “Gizmo” into the filter widget, the query Metabase would run would be:

    - -
    SELECT
    -  count(*)
    -FROM
    -  products
    -WHERE
    -  category = 'Gizmo';
    -
    - -

    If you’re writing a native MongoDB query, your query would look more like this, with the category variable being defined inside the match clause:

    - -
    [{ $match: { category: {{category}} } }]
    -
    - -

    Basic variable that allows people to select multiple values

    - -

    Basic variable with multiple values

    - -

    To let people plug multiple values into your variable, you’ll need to write the code in such a way that multiple values will make sense when interpolated into your code. The most common way to do this would be to use an WHERE clause with IN:

    - -
    
    -SELECT
    -  *
    -FROM
    -  products
    -WHERE
    -  category IN ({{category_vars}});
    -
    -
    - -

    With your code in place, you’ll need to set the People can pick setting to multiple values. In this case, however, you’re probably better off using a field filter.

    - -

    Basic SQL variables offer limited options for filter types

    - -
      -
    • Text: a plain input box
    • -
    • Number: a plain input box
    • -
    • Date: a simple date picker
    • -
    • Boolean: a this or that picker.
    • -
    - -

    If you want a more expressive filter widget, like a dynamic date picker, you should use a field filter variable.

    - -

    Making a variable optional

    - -

    See optional variables.

    - - -
    -
    - -

    - Read docs for other versions of Metabase. -

    - -
    -
    - -
    - -
    -
    -
    Was this helpful?
    - - -
    - -
    -

    - -
    - - - - -
    - -
    -
    Thanks for your feedback!
    -
    - - - - Want to improve these docs? Propose a change. - - -
    - - - -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/_site/docs/master/questions/native-editor/field-filters.html b/_site/docs/master/questions/native-editor/field-filters.html deleted file mode 100644 index da05d8215b..0000000000 --- a/_site/docs/master/questions/native-editor/field-filters.html +++ /dev/null @@ -1,5357 +0,0 @@ - - - - - - - - - - - - - - - - - - -Field filters | Metabase Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - - - -
    -
    - - - -
    -
    -
    - -
    - - - - - - - - - -
    - - - -
    - - -
    - -
    - -
    - - - -
    - - - master - - - - - - - - -
    - - - - - What’s new - - - - - -
    - - - - -
    -
    - - -
    - - -
    - - -
    - These are the docs for the Metabase master branch. Some features documented here may not yet be available in the latest release. - Check out the docs for the latest version, Metabase v0.55. -
    - - -
    - - -

    Field filters

    - -

    When to use a field filter variable vs a basic variable

    - -

    In general, prefer using field filter variables. They offer “smart” filter widgets with dropdown menus and dynamic date pickers.

    - -

    If your query lacks a database field for the filter to connect to, however, then you’ll instead need to use a basic variable. For example, if you want to filter by a custom column you created, you’d need to use a basic variable.

    - -

    Field filter variables

    - -

    To add a field filter:

    - -
      -
    1. Add a variable to a WHERE clause.
    2. -
    3. Connect the field filter to a database field.
    4. -
    5. Configure your filter widget.
    6. -
    - -

    Field filter syntax

    - -

    Let’s say you want to create a field filter variable that filters the People table by the state field.

    - -

    Here’s the field filter syntax:

    - -
    
    -SELECT
    -  *
    -FROM
    -  PEOPLE
    -WHERE
    -  {{state}}
    -
    -
    - -

    Note the lack of the column and operator (it’s not WHERE state = {{state}}, it’s just WHERE {{state}}). The reason you need to structure field filter variables in this way is to handle cases where Metabase generates the code for you. For example, for handling cases where someone selects multiple values in the filter widget, or a range of dates, Metabase will have to interpolate the SQL code to handle those inputs into the variable.

    - -

    In a MongoDB native query, you’ll need to put the field filter in a $match clause.

    - -
    [ {$match: {{date_var}} } ]
    -
    - -

    Connect the field filter to a database field

    - -

    In order for a field filter variable to work, you’ll need to associate the variable with a database field.

    - -
      -
    1. Go to the variables and parameters side panel.
    2. -
    3. Under Variable type, select the “Field filter” variable type.
    4. -
    5. Choose which Field to map to your variable (in this case, we’ll map the Category field in the products table).
    6. -
    - -

    You can only map a field filter to a database field. If you can’t use a field filter, you can fall back to using a basic variable.

    - -

    Specifying the table and field alias

    - -

    If you map a filter to a field from an aliased table, you’ll need to tell Metabase about that alias, or the filter won’t work.

    - -

    For example, let’s say you want to map a field filter to the category field from the products table, but in your query you use the alias p for the products table, like so:

    - -
    
    -SELECT
    -  *
    -FROM
    -  products AS p
    -WHERE
    -  {{category_filter}}
    -
    -
    - -

    If you map to the category field from the products table, you’ll also need to fill out the Table and field alias input to let Metabase know about the alias. In this case, you input p.category.

    - -

    Setting this Table and field alias is only required if your query uses an alias to refer to a table that contains the field you want to map the filter to.

    - -

    Here’s another example, this time with a CTE

    - -
    
    -WITH
    -  expensive_products AS (
    -    SELECT
    -      *
    -    FROM
    -      products
    -    WHERE
    -      price > 50
    -  )
    -SELECT
    -  *
    -FROM
    -  expensive_products
    -WHERE
    -  {{category_filter}}
    -
    -
    - -

    Here, we again map the field filter to thecategory field in the products table. But since we use a CTE, aliased as expensive_products, we’d need to put expensive_products.category in the Table and field alias input for the mapping to work correctly.

    - -

    Field filters must be connected to database fields included in the query

    - -

    Your main query should be aware of all the tables that your Field Filter variable is pointing to, otherwise you’ll get a SQL syntax error. For example, let’s say that your main query includes a field filter like this:

    - -
    
    -SELECT
    -  *
    -FROM
    -  ORDERS
    -WHERE
    -  {{ product_category }}
    -
    -
    - -

    Let’s say the {{ product_category }} variable refers to another question that uses the Products table. For the field filter to work, you’ll need to include a join to Products in your main query.

    - -
    
    -SELECT
    -  *
    -FROM
    -  ORDERS
    -  JOIN PRODUCTS ON ORDERS.product_id = PRODUCTS.id
    -WHERE
    -  {{ product_category }}
    -
    -
    - -

    If you can’t use a field filter, you can instead fall back to using a basic variable.

    - -

    Field filters in BigQuery and Oracle

    - -

    Make sure your SQL dialect matches the database you’ve selected. Common issues involving how tables are quoted in the query:

    - -
    GitHub stars GitHub (Pre-)Release Date
    InterSystems IRISGitHub starsGitHub (Pre-)Release Date
    Materialize GitHub stars
    Self-serve via query builderSelf-serve via query builder
    dataPickerProps?Pick<SdkQuestionProps, "entityTypes">Pick<InteractiveQuestionProps, "entityTypes"> Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.
    dataPickerProps?Pick<SdkQuestionProps, "entityTypes">Pick<InteractiveQuestionProps, "entityTypes"> Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.
    dataPickerProps?Pick<SdkQuestionProps, "entityTypes">Pick<InteractiveQuestionProps, "entityTypes"> Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.
    questionId null | SdkQuestionId-The ID of the question.
    This is either:
    - The numerical ID when accessing a question link, e.g., http://localhost:3000/question/1-my-question where the ID is 1
    - The entity_id key of the question object. You can find a question’s Entity ID in the info panel when viewing a question
    - new to show the notebook editor for creating new questions. isSaveEnabled must be true to allow saving the question
    style? CSSProperties A custom style object to be added to the root element.
    title?SdkQuestionTitlePropsDetermines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.
    width? Width<string | number>
    withChartTypeSelector? booleanDetermines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.-
    withDownloads?
    children?ReactNodeThe children of the MetabaseProvider component.s
    className? string A custom class name to be added to the root element.
    componentPlugins?MetabasePluginsConfigAdditional mapper function to override or add drill-down menu
    entityTypes? EmbeddingEntityType[] (question: undefined | MetabaseQuestion, context: { isNewQuestion: boolean; }) => Promise<void> A callback function that triggers before saving. Only relevant when isSaveEnabled = true
    onNavigateBack?() => voidA callback function that triggers when a user clicks the back button.
    onRun? (question: undefined | MetabaseQuestion) => void
    questionId null | SdkQuestionId-The ID of the question.
    This is either:
    - The numerical ID when accessing a question link, e.g., http://localhost:3000/question/1-my-question where the ID is 1
    - The entity_id key of the question object. You can find a question’s Entity ID in the info panel when viewing a question
    - new to show the notebook editor for creating new questions. isSaveEnabled must be true to allow saving the question
    style?
    - - - - - - - - - - - - - - - - - - - -
    DatabaseDialect quirkExample
    BigQuerySchemas and tables must be quoted with backticks.FROM `dataset.table`
    OracleSchemas and tables must be quoted in double quotes.FROM "schema.table"
    - -

    For more help, see Troubleshooting SQL error messages.

    - -

    Making a field filter optional

    - -

    See optional variables.

    - - -
    -
    - -

    - Read docs for other versions of Metabase. -

    - -
    -
    - -
    - -
    -
    -
    Was this helpful?
    - - -
    - -
    -

    - -
    - - - -
    -
    - -
    -
    Thanks for your feedback!
    -
    - - - - Want to improve these docs? Propose a change. - - -
    - - - -
    - -
    -
    - - - - - - - - - - - - - - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/_site/docs/master/questions/native-editor/filter-widgets.html b/_site/docs/master/questions/native-editor/filter-widgets.html deleted file mode 100644 index c1e762493a..0000000000 --- a/_site/docs/master/questions/native-editor/filter-widgets.html +++ /dev/null @@ -1,5333 +0,0 @@ - - - - - - - - - - - - - - - - - - -Filter and parameter widgets for native code | Metabase Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - - - -
    -
    - - - -
    -
    -
    - -
    - - - - - - - - - -
    - - - -
    - - -
    - -
    - -
    - - - -
    - - - master - - - - - - - - -
    - - - - - What’s new - - - - - -
    - - - - -
    -
    - - -
    - - -
    - - -
    - These are the docs for the Metabase master branch. Some features documented here may not yet be available in the latest release. - Check out the docs for the latest version, Metabase v0.55. -
    - - -
    - - -

    Filter and parameter widgets for native code

    - -

    When you add a SQL variable or parameter to your native/SQL query, Metabase will add a widget to the top of the query that people can use to set the variable’s value.

    - -

    How to create different types of filter and parameter widgets

    - -

    The kind of filter widget that Metabase displays when you create a field filter widget depends on a setting for that field in Metabase called Filtering on this field. Admins can set this field option to:

    - - - -

    Date fields will either have a simple date filter (for date variables) or a dynamic date picker (for field filters mapped to a date field).

    - -

    If you want to change the default filter widget for a particular field, you’ll need to ask an admin to update that field in the Table Metadata and set the desired “Filtering on this field” option.

    - -

    For dropdown lists and search boxes, you can also customize values available in the list. See below.

    - -

    Input box

    - -
      -
    1. Include a SQL variable in your query.
    2. -
    3. Set the Variable type to Field filter. If the query lacks a database field, you could use a Text or Number type as well, depending on what you’re filtering.
    4. -
    5. Set Field to map to to the appropriate field (only if you selected the field filter variable type).
    6. -
    7. Set Filter widget operator to whatever operator you want.
    8. -
    9. Set How should users filter on this variable to “Input box”.
    10. -
    - - - -
      -
    1. Include a SQL variable in your query.
    2. -
    3. Set the Variable type to Field filter. If the query lacks a database field, you could use a Text or Number type as well, depending on what you’re filtering.
    4. -
    5. Set Field to map to to a field of type “Category” (only if you selected the field filter variable type).
    6. -
    7. Set Filter widget operator to whatever operator you want.
    8. -
    9. Set How should users filter on this variable to “Search box”. If you’re not using a field filter, you’ll need to edit the search box settings to tell Metabase where to get the values to search.
    10. -
    - -

    To guard against SQL injection attacks, Metabase converts whatever is in the search box to a string. If you want to use wildcards, check out [our Learn article][sql-variables].

    - - - -

    To create a dropdown menu with search and a list of all values:

    - -
      -
    1. Include a variable in your query.
    2. -
    3. Set the Variable type to Field filter. If the query lacks a database field, you could use a Text or Number type as well, depending on what you’re filtering.
    4. -
    5. Set Field to map to to the appropriate field (only if you selected the field filter variable type).
    6. -
    7. Set Filter widget operator to whatever operator you want.
    8. -
    9. Set How should users filter on this variable to “Dropdown list”. If you’re not using a field filter, you’ll need to edit the dropdown list settings to tell Metabase where to get the values to list in the dropdown.
    10. -
    - -

    If there are too many different values in that column to display in a dropdown menu, Metabase will simply display a search box instead. So if you have a lot of email addresses, you may just get a search box anyway. The dropdown menu widgets work better when there’s a small set of values to choose from (like the fifty U.S. states).

    - -

    Customizing values for dropdown lists and search boxes

    - -

    When you add a dropdown menu or search box, you can tell Metabase which values people can choose from when using a filter with a dropdown list or search box.

    - -
      -
    1. Add a dropdown list or search box.
    2. -
    3. Next to the option you chose, click Edit.
    4. -
    5. Metabase will pop up a modal where you can select Where the values should come from.
    6. -
    - -

    You can choose:

    - -
      -
    • From connected fields. If you selected the Field filter variable type, you’ll also have the option to use the connected field.
    • -
    • From another model or question. If you select this option, you’ll need to pick a model or question, then a field from that model or question that Metabase will use to supply the values for that dropdown or search box. For example, if you want the dropdown to list the different plans an account could be on, you could select an “Account” model you created, and select the field “Plan” to power that dropdown. The dropdown would then list all of the distinct plan options that appear in the “Plan” column in the Accounts model.
    • -
    • Custom list. Enter each item on a line. You can enter any string values you like.
    • -
    - -

    You can also change a dashboard filter’s selectable values.

    - -

    Setting a default value in the filter widget

    - -

    In the variables sidebar, you can set a default value for your variable. This value will be inserted into the corresponding filter widget by default (even if the filter widget is empty).

    - -

    To override the default value, insert a new value into the filter widget.

    - -

    Requiring a value for a filter widget

    - -

    In the Variable settings sidebar, you can toggle the Always require a value option. If you turn this on:

    - -
      -
    • You must enter a default value.
    • -
    • The default value will override any optional syntax in your code (like an optional WHERE clause). If no value is passed to the filter, Metabase will run the query using the default value. Click on the Eye icon in the editor to preview the SQL Metabase will run.
    • -
    - -

    Filter widget operators

    - -

    For text, number, and date filter widgets, you’ll need to select a filter operator.

    - -

    Text

    - -

    Filter operator options include:

    - -
      -
    • String
    • -
    • String is not
    • -
    • String contains
    • -
    • String does not contain
    • -
    • String starts with
    • -
    • String ends with
    • -
    - -

    Number

    - -

    Filter operator options include:

    - -
      -
    • Equal to
    • -
    • Not equal to
    • -
    • Between
    • -
    • Greater than or equal to
    • -
    • Less than or equal to
    • -
    - -

    Dates

    - -

    Filter operator options include:

    - -
      -
    • Month and year
    • -
    • Quarter and year
    • -
    • Single date
    • -
    • Date range
    • -
    • Relative date
    • -
    • All options. Metabase will give you a menu where you can choose how they filter dates: by range, relative dates, etc.
    • -
    - - -
    -
    - -

    - Read docs for other versions of Metabase. -

    - -
    -
    - -
    - -
    -
    -
    Was this helpful?
    - - -
    - -
    -

    - -
    - - - -
    -
    - -
    -
    Thanks for your feedback!
    -
    - - - - Want to improve these docs? Propose a change. - - -
    - - - -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/_site/docs/master/questions/native-editor/optional-variables.html b/_site/docs/master/questions/native-editor/optional-variables.html deleted file mode 100644 index deab3798c0..0000000000 --- a/_site/docs/master/questions/native-editor/optional-variables.html +++ /dev/null @@ -1,5337 +0,0 @@ - - - - - - - - - - - - - - - - - - -Optional variables | Metabase Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - - - -
    -
    - - - -
    -
    -
    - -
    - - - - - - - - - -
    - - - -
    - - -
    - -
    - -
    - - - -
    - - - master - - - - - - - - -
    - - - - - What’s new - - - - - -
    - - - - -
    -
    - - -
    - - -
    - - -
    - These are the docs for the Metabase master branch. Some features documented here may not yet be available in the latest release. - Check out the docs for the latest version, Metabase v0.55. -
    - - -
    - - -

    Optional variables

    - -

    You can make a clause optional in a query. For example, you can create an optional WHERE clause that contains a SQL variable, so that if no value is supplied to the variable (either in the filter or via the URL), the query will still run as if there were no WHERE clause.

    - -

    To make a variable optional in your native query, put [[ .. ]] brackets around the entire clause containing the {{variable}}. If someone inputs a value in the filter widget for the variable, Metabase will place the clause in the template; otherwise Metabase will ignore the clause and run the query as though the clause didn’t exist.

    - -

    In this example, if no value is given to cat, then the query will just select all the rows from the products table. But if cat does have a value, like “Widget”, then the query will only grab the products with a category type of Widget:

    - -
    
    -SELECT
    -  count(*)
    -FROM
    -  products
    -[[WHERE category = {{cat}}]]
    -
    -
    - -

    Your SQL must also be able to run without the optional clause in [[ ]]

    - -

    You need to make sure that your SQL is still valid when no value is passed to the variable in the bracketed clause.

    - -

    For example, excluding the WHERE keyword from the bracketed clause will cause an error if there’s no value given for cat:

    - -
    -- this will cause an error:
    -
    -SELECT
    -  count(*)
    -FROM
    -  products
    -WHERE
    -  [[category = {{cat}}]]
    -
    -
    - -

    That’s because when no value is given for cat, Metabase will try to execute SQL as if the clause in [[ ]] didn’t exist:

    - -
    SELECT
    -  count(*)
    -FROM
    -  products
    -WHERE
    -
    - -

    Which is not a valid SQL query. Instead, put the entire WHERE clause in [[ ]]:

    - -
    
    -SELECT
    -  count(*)
    -FROM
    -  products
    -[[WHERE
    -  category = {{cat}}]]
    -
    -
    - -

    When there’s no value given for cat, Metabase will still execute a valid query:

    - -
    
    -SELECT
    -  count(*)
    -FROM
    -  products
    -
    -
    - -

    You need at least one WHERE when using multiple optional clauses

    - -

    To use multiple optional clauses, you must include at least one regular WHERE clause followed by optional clauses, each starting with AND:

    - -
    
    -SELECT
    -  count(*)
    -FROM
    -  products
    -WHERE
    -  TRUE
    -  [[AND id = {{id}}]]
    -  [[AND {{category}}]]
    -
    -
    - -

    That last clause uses a field filter (note the lack of a column in the AND clause). When using a field filter, you must exclude the column in the query; you need to map the variable in the side panel.

    - -

    Optional variables in MongoDB

    - -

    If you’re using MongoDB, you can make a clause optional like so:

    - -
    
    -[
    -    [[{
    -        $match: {category: {{cat}}}
    -    },]]
    -    {
    -        $count: "Total"
    -    }
    -]
    -
    -
    - -

    Or with multiple optional filters:

    - -
    
    -[
    -    [[{ $match: {{cat}} },]]
    -    [[{ $match: { price: { "$gt": {{minprice}} } } },]]
    -    {
    -        $count: "Total"
    -    }
    -]
    -
    -
    - -

    Setting complex default values in the query

    - -

    You can also define default values directly in your query by enclosing comment syntax inside the end brackets of an optional parameter.

    - -
    WHERE column = [[ {{ your_parameter }} --]] your_default_value
    -
    - -

    The comment will “activate” whenever you pass a value to your_parameter.

    - -

    This is useful when defining complex default values (for example, if your default value is a function like CURRENT_DATE). Here’s a PostgreSQL example that sets the default value of a Date filter to the current date using CURRENT_DATE:

    - -
    
    -SELECT
    -  *
    -FROM
    -  orders
    -WHERE
    -  DATE(created_at) = [[ {{dateOfCreation}} --]] CURRENT_DATE
    -
    -
    - -

    If you pass a value to the variable, the WHERE clause runs, including the comment syntax that comments out the default CURRENT_DATE function.

    - -

    Note that the hash (--) used to comment the text might need to be replaced by the comment syntax specific to the database you’re using.

    - - -
    -
    - -

    - Read docs for other versions of Metabase. -

    - -
    -
    - -
    - -
    -
    -
    Was this helpful?
    - - -
    - -
    -

    - -
    - - - -
    -
    - -
    -
    Thanks for your feedback!
    -
    - - - - Want to improve these docs? Propose a change. - - -
    - - - -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/_site/docs/master/questions/native-editor/sql-parameters.html b/_site/docs/master/questions/native-editor/sql-parameters.html index 601cd599e9..a6aa276fdc 100644 --- a/_site/docs/master/questions/native-editor/sql-parameters.html +++ b/_site/docs/master/questions/native-editor/sql-parameters.html @@ -49,7 +49,7 @@ - + @@ -59,7 +59,7 @@ - + @@ -4803,90 +4803,442 @@
    Other resources

    SQL parameters

    -

    Variables

    +

    You can create SQL templates by adding variables to your SQL queries in the Native/SQL editor. These variables will create filter widgets that you can use to change the variable’s value in the query. You can also add parameters to your question’s URL to set the filters’ values, so that when the question loads, those values are inserted into the variables.

    -

    You can create SQL templates by adding parameters (a.k.a. variables) to your SQL queries in the Native/SQL editor.

    +

    Variables

    -

    These variables create widgets that people can use to plug in values for those variables. You can also connect dashboard widgets to these parameters.

    +

    Defining variables

    -

    SQL variable types

    +

    Typing {{variable_name}} in your native query creates a variable called variable_name.

    -

    When you define a variable, the variables and parameters side panel will appear. You can set a type for a variable, which changes the kind of filter widget that Metabase presents.

    +

    Field Filters, a special type of filter, have a slightly different syntax.

    -

    Variable types include:

    +

    This example defines a Text variable called category:

    -
      -
    • Field filter variables: create “smart” filter widgets with date pickers or dropdown menus. To use a field filter, you’ll need to connect to a database field included in your query.
    • -
    • Basic variables: text, number, and date variables. You’ll almost always want to use field filters instead of these basic variables, as field filters create “smart” filter widgets, but Metabase provides these basic variables for situations where you can’t use field filters.
    • -
    • Time grouping parameters: allows people to change how the results are grouped by a date column: by month, week, day, etc.
    • -
    +
    
    +SELECT
    +  count(*)
    +FROM
    +  products
    +WHERE
    +  category = {{category}}
     
    -

    You can include multiple variables in a single query, and Metabase will add multiple widgets to the question. To rearrange the order of the widgets, enter edit mode and click on any widget and drag it around.

    +
    -

    Configure your filter widget

    +

    Metabase will read the variable and attach a filter widget to the query, which people can use to change the value inserted into the cat variable with quotes. So if someone entered “Gizmo” into the filter widget, the query Metabase would run would be:

    -

    When you add a field filter variable or basic variable to your SQL code, you’ll need to configure it in the sidebar.

    +
    SELECT
    +  count(*)
    +FROM
    +  products
    +WHERE
    +  category = 'Gizmo'
    +
    -
      -
    1. Set the Filter widget type. Options will differ depending on whether you used a field filter (preferred) or a basic variable (if you can’t use a field filter).
    2. -
    3. Set the Filter widget label.
    4. -
    5. Set How should users filter on this variable?: -
        -
      • Dropdown list. A dropdown list shows all available values for the field in a selectable list.
      • -
      • Search box. A search box allows people to type to search for specific values.
      • -
      • Input box. An input box provides a simple text field for entering values.
      • -
      -
    6. -
    7. If the filter is mapped to a field in an aliased table, you’ll need to specify the table and field alias.
    8. -
    9. Optionally, set a Default filter widget value.
    10. -
    +

    If you’re writing a native MongoDB query, your query would look more like this, with the cat variable being defined inside of the match clause.

    -

    Check out filter widgets.

    +
    [{ $match: { category: {{cat}} } }]
    +
    -

    Setting values for SQL variables

    +

    Setting SQL variables

    To set a SQL variable to a value, you can either:

      -
    • Enter a value into the filter widget, and re-run the question.
    • +
    • Enter a value into the filter widget, and re-run the question, or
    • Add a parameter to the URL and load the page.
    -

    Setting a parameter via URL

    -

    To add a value to the URL, follow this syntax:

    ?variable_name=value
     
    -

    For example, to set the {{category}} variable on a question to the value “Gizmo”, your URL would look something like:

    +

    For example, to set the {{cat}} variable on a question to the value “Gizmo”, your URL would look something like:

    -
    https://metabase.example.com/question/42-eg-question?category=Gizmo
    +
    https://metabase.example.com/question/42-eg-question?cat=Gizmo
     

    To set multiple variables, separate parameters with an ampersand (&):

    -
    https://metabase.example.com/question/42-eg-question?category=Gizmo&maxprice=50
    +
    https://metabase.example.com/question/42-eg-question?cat=Gizmo&maxprice=50
     
    -

    Connecting a SQL question to a dashboard filter

    +

    SQL variable types

    + +

    When you define a variable, the Variables side panel will appear. You can set a type for a variable, which changes the kind of filter widget that Metabase presents.

    + +

    There are four types of variables:

    + +
      +
    • Text: a plain input box.
    • +
    • Number: a plain input box.
    • +
    • Date: a simple date picker. If you want a more expressive date picker, like specifying a range, you’ll want to use a Field Filter.
    • +
    • Field Filter: different filter widgets, depending on the mapped field.
    • +
    + +

    That last variable type, Field Filter, is special; it lets you create “smart” filter widgets, like a search box, or a dropdown menu of values, or a dynamic date picker that allows you to specify a date range.

    + +

    You can include multiple variables in the query, and Metabase will add multiple filter widgets to the question. When you have multiple filter widgets, you can click on a filter widget and drag it around to rearrange the order.

    + +

    The Field Filter variable type

    + +

    Setting a variable to the Field Filter type allows you to map the variable to a field in any table in the current database. Field filters let you create a “smart” filter widget that makes sense for that field.

    -

    In order for a SQL/native question to be usable with a dashboard filter, the question must contain at least one variable or parameter.

    +

    Field Filter variables should be used inside of a WHERE clause in SQL, or a $match clause in MongoDB.

    + +

    Field Filter compatible types

    + +

    Field Filters ONLY work with the following field types:

    + +
      +
    • Category
    • +
    • Entity Name
    • +
    • Entity Key
    • +
    • Foreign Key
    • +
    • City
    • +
    • State
    • +
    • ZIP or Postal Code
    • +
    + +

    The field can also be a date or timestamp, which can be left as “No semantic type” in the Table Metadata.

    + +

    When you set the Variable type to “Field Filter”, Metabase will present an option to set the Field to map to, as well as the Filter widget type. The options available for the Filter widget type depend on the field’s type. For example, if you map to a field of type Category, you’ll see options for either “Category” or None. If you map to a Date Field, you’ll see options for None, Month and year, Quarter and year, Single date, Date range, or Date filter.

    + +

    If you’re not seeing the option to display a filter widget, make sure the mapped field is set to one of the above types, and then try manually syncing your database from the “Databases” section of the Admin Panel to force Metabase to scan and cache the field’s values.

    + +

    If you want to map a Field Filter to a field that isn’t one of the compatible types listed above, you’ll need an Admin to change the field type for that column. See metadata editing.

    + +

    Field Filter syntax

    + +

    Let’s say you want to create a Field Filter that filters the People table by state, and you want people to be able to select multiple states at a time. Here’s the query:

    + +

    The syntax for Field Filters differs from a Text, Number, or Date variable.

    + +
    
    +SELECT
    +  *
    +FROM
    +  PEOPLE
    +WHERE
    +  {{state}}
    +
    +
    + +

    Then, in the side panel, select the “Field Filter” variable type, and choose which field to map your variable to (in this case, State).

    + +

    Note the lack of the column and operator (like =). The reason you need to structure Field Filters this way is to handle cases where Metabase generates the code for you. For example, for handling cases where someone selects multiple values in the filter widget, or a range of dates. With Field Filters, you can’t control the generated SQL, so if you need greater control, you should use one (or more) Text, Number, or Date variables.

    + +

    A MongoDB native query example might look like this:

    + +
    [ {$match: {{date_var}} } ]
    +
    -

    The kind of dashboard filter that can be used with the SQL question depends on the field. For example, if you have a field filter called {{var}} and you map it to a field with State semantic type, you can map a location dashboard filter to your SQL question. In this example, you’d:

    +

    For a more in-depth guide, check out Field Filters: create smart filter widgets for SQL questions.

    + +

    Field filters in BigQuery and Oracle

    + +

    Make sure your SQL dialect matches the database you’ve selected. Common issues involving how tables are quoted in the query:

    + + + + + + + + + + + + + + + + + + + + + +
    DatabaseDialect quirkExample
    BigQuerySchemas and tables must be quoted with backticks.FROM `dataset.table`
    OracleSchemas and tables must be quoted in double quotes.FROM "schema.table"
    + +

    For more help, see Troubleshooting SQL error messages.

    + +

    How to create different types of filter widgets

    + +

    The kind of filter widget that Metabase displays when you create a Field Filter widget depends on a setting for that field in Metabase called Filtering on this field. Admins can set this field option to:

    + +
      +
    • Plain input box
    • +
    • Search box
    • +
    • A list of all values (also known as a dropdown menu)
    • +
    + +

    Date fields will either have a simple date filter (for Date variables) or a dynamic date picker (for Field Filters mapped to a date field).

    + +

    If you want to change the filter widget for a particular field, you’ll need to ask an Admin to update that field in the Table Metadata and set the desired “Filtering on this field” option.

    + +

    Filter widget with plain input box

    + +

    Create a simple Text or Number variable. Additionally, you can use a Field Filter with a field that has its Filtering on this field value set to “Plain input box”.

    + +

    Note: to guard against SQL injection attacks, Metabase converts whatever is in the Search box to a string. If you want to use wildcards, check out our Learn article.

    + + + +
      +
    • Include a SQL variable in your query.
    • +
    • Set the Variable type to Field Filter.
    • +
    • Set the Field to map to to a field of type “Category” that has its Filtering on this field option set to “Search box”
    • +
    + + + +

    To create a dropdown menu with search and a list of all values, you need to:

    + +
      +
    • Include a SQL variable in your query.
    • +
    • Set the Variable type to Field Filter.
    • +
    • Set the Field to map to to a field of type “Category” that has its Filtering on this field option set to “A list of all values”.
    • +
    • Set the Filter widget type to “Category”.
    • +
    + +

    If the field you want to create a dropdown for is not set to the type “Category” with Filtering on this field set to “A list of all values”, an Admin will need to update the settings for that field. For example, if you want to create a dropdown menu for an incompatible field type like an Email field, an admin will need to change that field type to “Category”, set the Filtering on this field option to A list of all values, then re-scan the values for that field.

    + +

    If however, there are too many different values in that column to display in a dropdown menu, Metabase will simply display a search box instead. So if you have a lot of email addresses, you may just get a search box anyway. The dropdown menu widgets work better when there’s a small set of values to choose from (like the fifty U.S. states).

    + +

    Field filter limitations

    + +

    Some things that could trip you up when trying to set up a Field Filter variable.

    + +

    Field Filters don’t work with table aliases

    + +

    You won’t be able to select values from field filters in queries that use table aliases for joins or CTEs.

    + +

    The reason is that field filters generate SQL based on the mapped field; Metabase doesn’t parse the SQL, so it can’t tell what an alias refers to. You have three options for workarounds, depending on the complexity of your query.

      -
    1. Create a new dashboard (or go to an existing dashboard).
    2. -
    3. Click the Pencil icon to enter Dashboard edit mode.
    4. -
    5. Add the SQL question that contains your State field filter.
    6. -
    7. Add a new dashboard filter (or edit an existing Location filter).
    8. -
    9. Click the dropdown on the SQL question card to connect the widget to the State field filter.
    10. +
    11. Use full table names.
    12. +
    13. Replace CTEs with subqueries.
    14. +
    15. Create a view in your database, and use the view as the basis of your query.
    -

    If you add a basic Date variable to the question (i.e., not a field filter), then it’s only possible to use the dashboard filter option Single Date. So if you’re trying to use one of the other Time options on the dashboard, you’ll need to change the variable to a field filter and map it to a date field.

    +

    Field Filters must be connected to fields included in the query

    + +

    Your main query should be aware of all the tables that your Field Filter variable is pointing to, otherwise you’ll get a SQL syntax error. For example, let’s say that your main query includes a field filter like this:

    + +
    
    +SELECT
    +  *
    +FROM
    +  ORDERS
    +WHERE
    +  {{ product_category }}
    +
    +
    + +

    Let’s say the {{ product_category }} variable refers to another question that uses the Products table. For the field filter to work, you’ll need to include a join to Products in your main query.

    + +
    
    +SELECT
    +  *
    +FROM
    +  ORDERS
    +  JOIN PRODUCTS ON ORDERS.product_id = PRODUCTS.id
    +WHERE
    +  {{ product_category }}
    +
    +
    + +

    Customizing dropdown lists and search box values

    + +

    With Text and Field filter variables, you can tell Metabase what values people can choose from when using a filter with a dropdown list or search box.

    + +
      +
    1. In the native editor, add a {{variable}} in double braces.
    2. +
    3. If the sidebar doesn’t open, you can click on the {x} icon on the right to open the Variables sidebar.
    4. +
    5. In the Settings tab, set the Variable type to either “Text” or “Field Filter”.
    6. +
    7. In the sidebar, go to How should users filter on this variable? Pick either Dropdown list or Search box.
    8. +
    9. Next to the option you chose, click Edit.
    10. +
    11. Metabase will pop up a modal where you can select Where the values should come from.
    12. +
    + +

    You can choose:

    + +
      +
    • From connected fields If you selected the Field filter variable type, you’ll also have the option to use the connected field.
    • +
    • From another model or question. If you select this option, you’ll need to pick a model or question, then a field from that model or question that Metabase will use to supply the values for that dropdown or search box. For example, if you want the dropdown to list the different plans an account could be on, you could select an “Account” model you created, and select the field “Plan” to power that dropdown. The dropdown would then list all of the distinct plan options that appear in the “Plan” column in the Accounts model.
    • +
    • Custom list. Enter each item on a line. You can enter any string values you like.
    • +
    + +

    You can also change a dashboard filter’s selectable values.

    + +

    Setting a default value in the filter widget

    + +

    In the variables sidebar, you can set a default value for your variable. This value will be inserted into the corresponding filter widget by default (even if the filter widget is empty). You’ll need to insert a new value into the filter widget to override the default.

    + +

    Setting complex default values in the query

    + +

    You can also define default values directly in your query by enclosing comment syntax inside the end brackets of an optional parameter.

    + +
    WHERE column = [[ {{ your_parameter }} --]] your_default_value
    +
    + +

    The comment will “activate” whenever you pass a value to your_parameter.

    + +

    This is useful when defining complex default values (for example, if your default value is a function like CURRENT_DATE). Here’s a PostgreSQL example that sets the default value of a Date filter to the current date using CURRENT_DATE:

    + +
    
    +SELECT
    +  *
    +FROM
    +  orders
    +WHERE
    +  DATE(created_at) = [[ {{dateOfCreation}} --]] CURRENT_DATE
    +
    +
    + +

    If you pass a value to the variable, the WHERE clause runs, including the comment syntax that comments out the default CURRENT_DATE function.

    + +

    Note that the hash (--) used to comment the text might need to be replaced by the comment syntax specific to the database you’re using.

    + +

    Requiring a value for a filter widget

    + +

    In the Variable settings sidebar, you can toggle the Always require a value option. If you turn this on:

    + +
      +
    • You must enter a default value.
    • +
    • The default value will override any optional syntax in your code (like an optional WHERE clause). If no value is passed to the filter, Metabase will run the query using the default value. Click on the Eye icon in the editor to preview the SQL Metabase will run.
    • +
    + +

    Making variables optional

    + +

    You can make a clause optional in a query. For example, you can create an optional WHERE clause that contains a SQL variable, so that if no value is supplied to the variable (either in the filter or via the URL), the query will still run as if there were no WHERE clause.

    + +

    To make a variable optional in your native query, put [[ .. ]] brackets around the entire clause containing the {{variable}}. If someone inputs a value in the filter widget for the variable, Metabase will place the clause in the template; otherwise Metabase will ignore the clause and run the query as though the clause didn’t exist.

    + +

    In this example, if no value is given to cat, then the query will just select all the rows from the products table. But if cat does have a value, like “Widget”, then the query will only grab the products with a category type of Widget:

    + +
    
    +SELECT
    +  count(*)
    +FROM
    +  products
    +[[WHERE category = {{cat}}]]
    +
    +
    + +

    Your SQL must also be able to run without the optional clause in [[ ]]

    + +

    You need to make sure that your SQL is still valid when no value is passed to the variable in the bracketed clause.

    + +

    For example, excluding the WHERE keyword from the bracketed clause will cause an error if there’s no value given for cat:

    + +
    -- this will cause an error:
    +
    +SELECT
    +  count(*)
    +FROM
    +  products
    +WHERE
    +  [[category = {{cat}}]]
    +
    +
    + +

    That’s because when no value is given for cat, Metabase will try to execute SQL as if the clause in [[ ]] didn’t exist:

    + +
    SELECT
    +  count(*)
    +FROM
    +  products
    +WHERE
    +
    + +

    which is not a valid SQL query.

    + +

    Instead, put the entire WHERE clause in [[ ]]:

    + +
    
    +SELECT
    +  count(*)
    +FROM
    +  products
    +[[WHERE
    +  category = {{cat}}]]
    +
    +
    + +

    When there’s no value given for cat, Metabase will just execute:

    + +
    
    +SELECT
    +  count(*)
    +FROM
    +  products
    +
    +
    + +

    which is still a valid query.

    + +

    You need at least one WHERE when using multiple optional clauses

    + +

    To use multiple optional clauses, you must include at least one regular WHERE clause followed by optional clauses, each starting with AND:

    + +
    
    +SELECT
    +  count(*)
    +FROM
    +  products
    +WHERE
    +  TRUE
    +  [[AND id = {{id}}]
    +  [[AND {{category}}]]
    +
    +
    + +

    That last clause uses a Field filter (note the lack of a column in the AND clause). When using a field filter, you must exclude the column in the query; you need to map the variable in the side panel.

    + +

    Optional variables in MongoDB

    + +

    If you’re using MongoDB, you can make an clause optional like so:

    + +
    
    +[
    +    [[{
    +        $match: {category: {{cat}}}
    +    },]]
    +    {
    +        $count: "Total"
    +    }
    +]
    +
    +
    + +

    Or with multiple optional filters:

    + +
    
    +[
    +    [[{ $match: {{cat}} },]]
    +    [[{ $match: { price: { "$gt": {{minprice}} } } },]]
    +    {
    +        $count: "Total"
    +    }
    +]
    +
    +
    + +

    Connecting a SQL question to a dashboard filter

    + +

    In order for a saved SQL/native question to be usable with a dashboard filter, the question must contain at least one variable.

    + +

    The kind of dashboard filter that can be used with the SQL question depends on the field. For example, if you have a field filter called {{var}} and you map it to a State field, you can map a Location dashboard filter to your SQL question. In this example, you’d create a new dashboard (or go to an existing dashboard), click the Pencil icon to enter Dashboard edit mode, add the SQL question that contains your State Field Filter variable, add a new dashboard filter (or edit an existing Location filter), then click the dropdown on the SQL question card to see the State Field Filter.

    + +

    If you add a Date variable to the question, then it’s only possible to use the dashboard filter option Single Date. So if you are trying to use one of the other Time options on the dashboard, you’ll need to change the variable to a Field Filter variable and map it to a date column.

    Field filter

    +

    More on Dashboard filters.

    +

    Further reading

      @@ -4898,6 +5250,7 @@

      Further reading

    +
    diff --git a/_site/docs/master/questions/native-editor/time-grouping-parameters.html b/_site/docs/master/questions/native-editor/time-grouping-parameters.html deleted file mode 100644 index d24b7e24f1..0000000000 --- a/_site/docs/master/questions/native-editor/time-grouping-parameters.html +++ /dev/null @@ -1,5252 +0,0 @@ - - - - - - - - - - - - - - - - - - -Time grouping parameter | Metabase Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - - - -
    -
    - - - -
    -
    -
    - -
    - - - - - - - - - -
    - - - -
    - - -
    - -
    - -
    - - - -
    - - - master - - - - - - - - -
    - - - - - What’s new - - - - - -
    - - - - -
    -
    - - -
    - - -
    - - -
    - These are the docs for the Metabase master branch. Some features documented here may not yet be available in the latest release. - Check out the docs for the latest version, Metabase v0.55. -
    - - -
    - - -

    Time grouping parameter

    - -

    You can add a parameter to SQL questions to change how results are grouped by time: by day, week, month, and so on.

    - -

    To add a time grouping parameter, you’ll need:

    - -
      -
    • An aggregation (like COUNT).
    • -
    • A parameter in the SELECT clause
    • -
    • That same parameter in the GROUP BY clause.
    • -
    - -

    Time grouping parameter example

    - -

    Here’s an example that counts the number of orders in the orders table and inserts a parameter to allow people to change how Metabase groups the results by the created_at column.

    - -
    
    -SELECT
    -  COUNT(*) AS "Orders",
    -  {{mb.time_grouping("Time grouping", "created_at")}} AS "Created At"
    -FROM
    -  orders
    -GROUP BY
    -  {{mb.time_grouping("Time grouping", "created_at")}}
    -
    -
    - -

    Like in all SQL groupings, you must include the parameter in both the SELECT and GROUP BY clauses. You can also use the mb.time_grouping function on different columns in the same query, like this:

    - -
    SELECT
    -  COUNT(*) AS "Count",
    -   AS "Created at",
    -   AS "Trial ends at"
    -FROM
    -  accounts
    -GROUP BY
    -  ,
    -  
    -
    - -

    Like with all parameters, you can set a default value (e.g., “month”). With time grouping parameters, you’re limited to the options for the time grouping parameter.

    - -

    If people don’t set a value for the parameter, Metabase won’t group to a date part (like day or week). It will just group by untruncated dates.

    - -

    Handling aliases

    - -

    Just like with field filters, if you alias a table, then map a time grouping parameter to a field in that aliased table, you’ll need to tell Metabase about the table and field alias.

    - -

    Connecting to a dashboard filter

    - -

    See dashboard filters and parameters.

    - - -
    -
    - -

    - Read docs for other versions of Metabase. -

    - -
    -
    - -
    - -
    -
    -
    Was this helpful?
    - - -
    - -
    -

    - -
    - - - -
    -
    - -
    -
    Thanks for your feedback!
    -
    - - - - Want to improve these docs? Propose a change. - - -
    - - - -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/_site/docs/master/questions/native-editor/writing-sql.html b/_site/docs/master/questions/native-editor/writing-sql.html index 399f969837..a890602eca 100644 --- a/_site/docs/master/questions/native-editor/writing-sql.html +++ b/_site/docs/master/questions/native-editor/writing-sql.html @@ -4819,7 +4819,7 @@

    Starting a new SQL query

    SQL editor

    -

    To try it out, make sure you’ve selected the Sample Database, then paste in this short SQL query:

    +

    To try it out, make sure you’ve selected the Sample Database, then paste in this short SQL query:

    SELECT
         sum(subtotal),
    diff --git a/_site/docs/master/questions/query-builder/expressions/coalesce.html b/_site/docs/master/questions/query-builder/expressions/coalesce.html
    index b3e51f5309..ef827aeb8b 100644
    --- a/_site/docs/master/questions/query-builder/expressions/coalesce.html
    +++ b/_site/docs/master/questions/query-builder/expressions/coalesce.html
    @@ -4986,7 +4986,7 @@ 

    Limitations

    If you want to use coalesce with JSON or JSONB data types, you’ll need to flatten the JSON objects first. For more information, look up the JSON functions that are available in your SQL dialect. You can find some common SQL reference guides here.

    diff --git a/_site/docs/master/questions/query-builder/expressions/converttimezone.html b/_site/docs/master/questions/query-builder/expressions/converttimezone.html index 7691b04403..a7f03eb712 100644 --- a/_site/docs/master/questions/query-builder/expressions/converttimezone.html +++ b/_site/docs/master/questions/query-builder/expressions/converttimezone.html @@ -4986,7 +4986,7 @@

    Accepted data types

    We use “timestamp” and “datetime” to talk about any temporal data type that’s supported by Metabase.

    -

    If your timestamps are stored as strings or numbers in your database, an admin can cast them to timestamps from the Table Metadata page.

    +

    If your timestamps are stored as strings or numbers in your database, an admin can cast them to timestamps from the Table Metadata page.

    To use convertTimezone without running into errors or pesky undetectable mistakes, you should know that there are a few varieties of timestamp data types:

    @@ -5117,7 +5117,7 @@

    SQL

    -

    When you run a question using the query builder, Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results.

    +

    When you run a question using the query builder, Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results.

    If our timestamp sample data is a timestamp without time zone stored in a PostgreSQL database:

    diff --git a/_site/docs/master/questions/query-builder/expressions/countif.html b/_site/docs/master/questions/query-builder/expressions/countif.html index 52c5d377a7..8b26a6ac67 100644 --- a/_site/docs/master/questions/query-builder/expressions/countif.html +++ b/_site/docs/master/questions/query-builder/expressions/countif.html @@ -5141,7 +5141,7 @@

    Conditional running counts

    SQL

    -

    When you run a question using the query builder, Metabase will convert your query builder settings (filters, summaries, etc.) into a SQL query, and run that query against your database to get your results.

    +

    When you run a question using the query builder, Metabase will convert your query builder settings (filters, summaries, etc.) into a SQL query, and run that query against your database to get your results.

    If our sample data is stored in a PostgreSQL database, the SQL query:

    diff --git a/_site/docs/master/questions/query-builder/expressions/datetimeadd.html b/_site/docs/master/questions/query-builder/expressions/datetimeadd.html index dfdefd6f4c..110951392b 100644 --- a/_site/docs/master/questions/query-builder/expressions/datetimeadd.html +++ b/_site/docs/master/questions/query-builder/expressions/datetimeadd.html @@ -4970,7 +4970,7 @@

    Accepted data types

    We use “timestamp” and “datetime” to talk about any temporal data type that’s supported by Metabase. For more info about these data types in Metabase, see Timezones.

    -

    If your timestamps are stored as strings or numbers in your database, an admin can cast them to timestamps from the Table Metadata page.

    +

    If your timestamps are stored as strings or numbers in your database, an admin can cast them to timestamps from the Table Metadata page.

    Limitations

    @@ -5008,7 +5008,7 @@

    datetimeSubtract

    SQL

    -

    When you run a question using the query builder, Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results.

    +

    When you run a question using the query builder, Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results.

    If our coffee sample data is stored in a PostgreSQL database:

    diff --git a/_site/docs/master/questions/query-builder/expressions/datetimediff.html b/_site/docs/master/questions/query-builder/expressions/datetimediff.html index 5276f66b0f..c8f9260657 100644 --- a/_site/docs/master/questions/query-builder/expressions/datetimediff.html +++ b/_site/docs/master/questions/query-builder/expressions/datetimediff.html @@ -4932,7 +4932,7 @@

    Accepted data types

    We use “timestamp” and “datetime” to talk about any temporal data type that’s supported by Metabase. For more info about these data types in Metabase, see Timezones.

    -

    If your timestamps are stored as strings or numbers in your database, an admin can cast them to timestamps from the Table Metadata page.

    +

    If your timestamps are stored as strings or numbers in your database, an admin can cast them to timestamps from the Table Metadata page.

    Limitations

    @@ -4954,7 +4954,7 @@

    SQL

    -

    When you run a question using the query builder, Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results.

    +

    When you run a question using the query builder, Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results.

    If our cheese sample data is stored in a PostgreSQL database:

    diff --git a/_site/docs/master/questions/query-builder/expressions/datetimesubtract.html b/_site/docs/master/questions/query-builder/expressions/datetimesubtract.html index a61dca567d..a23883d051 100644 --- a/_site/docs/master/questions/query-builder/expressions/datetimesubtract.html +++ b/_site/docs/master/questions/query-builder/expressions/datetimesubtract.html @@ -4970,7 +4970,7 @@

    Accepted data types

    We use “timestamp” and “datetime” to talk about any temporal data type that’s supported by Metabase. For more info about these data types in Metabase, see Timezones.

    -

    If your timestamps are stored as strings or numbers in your database, an admin can cast them to timestamps from the Table Metadata page.

    +

    If your timestamps are stored as strings or numbers in your database, an admin can cast them to timestamps from the Table Metadata page.

    Limitations

    @@ -5008,7 +5008,7 @@

    datetimeAdd

    SQL

    -

    When you run a question using the query builder, Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results.

    +

    When you run a question using the query builder, Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results.

    If our events sample data is stored in a PostgreSQL database:

    diff --git a/_site/docs/master/questions/query-builder/expressions/isempty.html b/_site/docs/master/questions/query-builder/expressions/isempty.html index ca0d711dc5..2f68168b06 100644 --- a/_site/docs/master/questions/query-builder/expressions/isempty.html +++ b/_site/docs/master/questions/query-builder/expressions/isempty.html @@ -4966,7 +4966,7 @@

    SQL

    -

    In most cases (unless you’re using a NoSQL database), questions created from the query builder are converted into SQL queries that run against your database or data warehouse.

    +

    In most cases (unless you’re using a NoSQL database), questions created from the query builder are converted into SQL queries that run against your database or data warehouse.

    CASE WHEN (Feedback = "" OR Feedback IS NULL) THEN "No feedback"
          ELSE Feedback END
    diff --git a/_site/docs/master/questions/query-builder/expressions/isnull.html b/_site/docs/master/questions/query-builder/expressions/isnull.html
    index 78cb4f3b86..787229547d 100644
    --- a/_site/docs/master/questions/query-builder/expressions/isnull.html
    +++ b/_site/docs/master/questions/query-builder/expressions/isnull.html
    @@ -4970,7 +4970,7 @@ 
     
     

    SQL

    -

    In most cases (unless you’re using a NoSQL database), questions created from the query builder are converted into SQL queries that run against your database or data warehouse.

    +

    In most cases (unless you’re using a NoSQL database), questions created from the query builder are converted into SQL queries that run against your database or data warehouse.

    CASE WHEN Feedback IS NULL THEN "Unknown feedback",
          ELSE Feedback END
    diff --git a/_site/docs/master/questions/query-builder/expressions/now.html b/_site/docs/master/questions/query-builder/expressions/now.html
    index 5411d37328..78b880dd0e 100644
    --- a/_site/docs/master/questions/query-builder/expressions/now.html
    +++ b/_site/docs/master/questions/query-builder/expressions/now.html
    @@ -4920,7 +4920,7 @@ 
     
     

    SQL

    -

    When you run a question using the query builder, Metabase will convert your query builder settings (filters, summaries, etc.) into a SQL query, and run that query against your database to get your results.

    +

    When you run a question using the query builder, Metabase will convert your query builder settings (filters, summaries, etc.) into a SQL query, and run that query against your database to get your results.

    By default, now uses your Metabase’s report time zone. If your admin hasn’t set a report time zone, now will use your database’s time zone.

    diff --git a/_site/docs/master/questions/query-builder/expressions/sumif.html b/_site/docs/master/questions/query-builder/expressions/sumif.html index 09e1504fd9..3ce97a1896 100644 --- a/_site/docs/master/questions/query-builder/expressions/sumif.html +++ b/_site/docs/master/questions/query-builder/expressions/sumif.html @@ -5118,7 +5118,7 @@

    CumulativeSum

    SQL

    -

    When you run a question using the query builder, Metabase will convert your query builder settings (filters, summaries, etc.) into a SQL query, and run that query against your database to get your results.

    +

    When you run a question using the query builder, Metabase will convert your query builder settings (filters, summaries, etc.) into a SQL query, and run that query against your database to get your results.

    If our payment sample data is stored in a PostgreSQL database, the SQL query:

    diff --git a/_site/docs/master/questions/query-builder/join.html b/_site/docs/master/questions/query-builder/join.html index cf00d504d2..bc78b607a7 100644 --- a/_site/docs/master/questions/query-builder/join.html +++ b/_site/docs/master/questions/query-builder/join.html @@ -49,7 +49,7 @@ - + @@ -59,7 +59,7 @@ - + @@ -4807,28 +4807,28 @@

    Joining data

    You can join data to combine your current data with another table, or even with a saved question.

    -

    After you click the “Join Data” button to add a join step, you’ll need to pick the data (from the same database) that you want to join. You can only pick tables and saved questions that are from the same database as your starting data.

    +

    After you click on the Join Data button to add a join step, you’ll need to pick the data (from the same database) that you want to join. You can only pick tables and saved questions that are from the same database as your starting data.

    Picking the data to join

    -

    Next, you’ll need to pick the columns you want to join on. This means you pick a column from the first table and a column from the second table, and the join will stitch rows together where the value from the first column equals the value in the second column. A very common example is joining on an ID column in each table. If you pick a table to join where there’s a foreign key relationship between the tables, Metabase will automatically pick those corresponding ID columns for you. At the end of your join step, there’s a “Columns” button you can click to choose which columns you want to include from the joined data.

    +

    Next, you’ll need to pick the columns you want to join on. This means you pick a column from the first table, and a column from the second table, and the join will stitch rows together where the value from the first column is equal to the value in the second column. A very common example is to join on an ID column in each table, so if you happened to pick a table to join on where there is a foreign key relationship between the tables, Metabase will automatically pick those corresponding ID columns for you. At the end of your join step, there’s a Columns button you can click to choose which columns you want to include from the joined data.

    -

    By default, Metabase will do a left outer join, but you can click the Venn diagram icon to select a different type of join. Not all databases support all types of joins, so Metabase will only display the options supported by the database you’re using.

    +

    By default, Metabase will do a left outer join, but you can click on the Venn diagram icon to select a different type of join. Not all databases support all types of joins, so Metabase will only display the options supported by the database you’re using.

    Here are the basic types of joins:

      -
    • Left outer join: Select all records from Table A, along with records from Table B that meet the join condition, if any.
    • -
    • Right outer join: Select all records from Table B, along with records from Table A that meet the join condition, if any.
    • -
    • Inner join: Only select the records from Table A and B where the join condition is met.
    • -
    • Full outer join: Select all records from both tables, whether or not the join condition is met.
    • +
    • Left outer join: select all records from Table A, along with records from Table B that meet the join condition, if any.
    • +
    • Right outer join: select all records from Table B, along with records from Table A that meet the join condition, if any.
    • +
    • Inner join: only select the records from Table A and B where the join condition is met.
    • +
    • Full outer join: select all records from both tables, whether or not the join condition is met.
    -

    A left outer join example: If Table A is Orders and Table B is Customers, and you do a join where the customer_id column in Orders equals the ID column in Customers, when you do a left outer join your results will be a full list of all your orders, and each order row will also display the columns of the customer who placed that order. Since a single customer can place many orders, a given customer’s information might be repeated many times for different order rows. If there isn’t a corresponding customer for a given order, the order’s information will be shown, but the customer columns will just be blank for that row.

    +

    A left outer join example: If Table A is Orders and Table B is Customers, and assuming you do a join where the customer_id column in Orders is equal to the ID column in Customers, when you do a left outer join your results will be a full list of all your orders, and each order row will also display the columns of the customer who placed that order. Since a single customer can place many orders, a given customer’s information might be repeated many times for different order rows. If there isn’t a corresponding customer for a given order, the order’s information will be shown, but the customer columns will just be blank for that row.

    Multiple stages of joins

    -

    In many cases you might have tables A, B, and C, where A and B have a connection, and B and C have a connection, but A and C don’t. If you want to join A to B to C, all you have to do is add multiple join steps. Click “Join Data,” join table A to table B, then click the “Join Data” step below that completed join block to add a second join step, and join the results of your last join to table C.

    +

    In many cases you might have tables A, B, and C, where A and B have a connection, and B and C have a connection, but A and C don’t. If you want to join A to B to C, all you have to do is add multiple join steps. Click on Join Data, join table A to table B, then click the Join Data step below that completed join block to add a second join step, and join the results of your last join to table C.

    An A to B to C join

    @@ -4853,46 +4853,11 @@

    Joining with different operators

    Join operators

    -

    Joins with custom expressions

    - -

    Sometimes you want to join data using constant values, relative dates, or some other custom conditions.

    - -

    For example, let’s say you have a table of reviews and want to add a column that includes the average rating for all products.

    - -

    You could first calculate the average rating, then join the result to the reviews table on 1=1.

    - -

    Join with custom expression

    - -

    To use a custom expression to define a join key:

    - -
      -
    1. Click on one of the join keys.
    2. -
    3. Select custom expression.
    4. -
    5. Enter your expression (including a constant like 1).
    6. -
    7. Click Done.
    8. -
    - -

    Another example: Let’s say you have:

    - -
      -
    • A customers table that stores names under first_name and last_name
    • -
    • An accounts table that stores first and last names in a single column, full_name
    • -
    - -

    You could join those tables using a custom expression. The join key for the customers table would look something like:

    - -
    concat([first_name], " ", [last_name])
    -
    - -

    And the join key for the accounts table would simply be the full_name column.

    - -

    Take a look at our list of expressions.

    -

    Further reading

    diff --git a/_site/docs/master/questions/start.html b/_site/docs/master/questions/start.html index dffa3217a8..b110e698d9 100644 --- a/_site/docs/master/questions/start.html +++ b/_site/docs/master/questions/start.html @@ -4839,30 +4839,6 @@

    SQL templatesPass parameters into variables in your SQL templates.

    -

    Field filters

    - -

    Create smart filter widgets by connecting field filter variables to fields in your database.

    - -

    Basic SQL parameters

    - -

    Learn the basics of using parameters in SQL queries.

    - -

    Optional variables

    - -

    Use brackets to create parameters that can be left empty in your queries.

    - -

    Time grouping parameters

    - -

    Group your data by time periods using parameters in native queries.

    - -

    Filter widgets

    - -

    Configure filter widgets connected to variables in your native queries.

    - -

    Referencing saved questions in queries

    - -

    Use saved questions as data sources in your native queries.

    -

    Snippets

    Reuse and share bits of SQL.

    diff --git a/_site/docs/master/questions/visualizations/country-codes.html b/_site/docs/master/questions/visualizations/country-codes.html deleted file mode 100644 index 4a638125d4..0000000000 --- a/_site/docs/master/questions/visualizations/country-codes.html +++ /dev/null @@ -1,6217 +0,0 @@ - - - - - - - - - - - - - - - - - - -Country codes | Metabase Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - - - -
    -
    - - - -
    -
    -
    - -
    - - - - - - - - - -
    - - - -
    - - -
    - -
    - -
    - - - -
    - - - master - - - - - - - - -
    - - - - - What’s new - - - - - -
    - - - - -
    -
    - - -
    - - -
    - - -
    - These are the docs for the Metabase master branch. Some features documented here may not yet be available in the latest release. - Check out the docs for the latest version, Metabase v0.55. -
    - - -
    - - -

    Country codes

    - -

    This reference lists all country codes and their corresponding country names used in Metabase’s default world map visualizations. The data comes from the GeoJSON world map file and includes 250 countries, territories, and administrative regions.

    - -

    Use these ISO 3166-1 alpha-2 country codes and country names when working with geographic data in Metabase.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Country codeCountry name
    ADAndorra
    AEUnited Arab Emirates
    AFAfghanistan
    AGAntigua and Barbuda
    AIAnguilla
    ALAlbania
    AMArmenia
    AOAngola
    AQAntarctica
    ARArgentina
    ASAmerican Samoa
    ATAustria
    AUAustralia
    AWAruba
    AXÅland
    AZAzerbaijan
    BABosnia and Herzegovina
    BBBarbados
    BDBangladesh
    BEBelgium
    BFBurkina Faso
    BGBulgaria
    BHBahrain
    BIBurundi
    BJBenin
    BLSt-Barthélemy
    BMBermuda
    BNBrunei
    BOBolivia
    BQCaribbean Netherlands
    BRBrazil
    BSBahamas
    BTBhutan
    BVBouvet I.
    BWBotswana
    BYBelarus
    BZBelize
    CACanada
    CCCocos Is.
    CDDem. Rep. Congo
    CFCentral African Rep.
    CGCongo
    CHSwitzerland
    CICôte d’Ivoire
    CKCook Is.
    CLChile
    CMCameroon
    CNChina
    COColombia
    CRCosta Rica
    CUCuba
    CVCabo Verde
    CWCuraçao
    CXChristmas I.
    CYCyprus
    CZCzechia
    DEGermany
    DJDjibouti
    DKDenmark
    DMDominica
    DODominican Rep.
    DZAlgeria
    ECEcuador
    EEEstonia
    EGEgypt
    EHW. Sahara
    EREritrea
    ESSpain
    ETEthiopia
    FIFinland
    FJFiji
    FKFalkland Is.
    FMMicronesia
    FOFaeroe Is.
    FRFrance
    GAGabon
    GBUnited Kingdom
    GDGrenada
    GEGeorgia
    GFFrench Guiana
    GGGuernsey
    GHGhana
    GIGibraltar
    GLGreenland
    GMGambia
    GNGuinea
    GPGuadeloupe
    GQEq. Guinea
    GRGreece
    GSS. Geo. and the Is.
    GTGuatemala
    GUGuam
    GWGuinea-Bissau
    GYGuyana
    HKHong Kong
    HMHeard I. and McDonald Is.
    HNHonduras
    HRCroatia
    HTHaiti
    HUHungary
    IDIndonesia
    IEIreland
    ILIsrael
    IMIsle of Man
    INIndia
    IOBr. Indian Ocean Ter.
    IQIraq
    IRIran
    ISIceland
    ITItaly
    JEJersey
    JMJamaica
    JOJordan
    JPJapan
    KEKenya
    KGKyrgyzstan
    KHCambodia
    KIKiribati
    KMComoros
    KNSt. Kitts and Nevis
    KPNorth Korea
    KRSouth Korea
    KWKuwait
    KYCayman Is.
    KZKazakhstan
    LALaos
    LBLebanon
    LCSaint Lucia
    LILiechtenstein
    LKSri Lanka
    LRLiberia
    LSLesotho
    LTLithuania
    LULuxembourg
    LVLatvia
    LYLibya
    MAMorocco
    MCMonaco
    MDMoldova
    MEMontenegro
    MFSt-Martin
    MGMadagascar
    MHMarshall Is.
    MKMacedonia
    MLMali
    MMMyanmar
    MNMongolia
    MOMacao
    MPN. Mariana Is.
    MQMartinique
    MRMauritania
    MSMontserrat
    MTMalta
    MUMauritius
    MVMaldives
    MWMalawi
    MXMexico
    MYMalaysia
    MZMozambique
    NANamibia
    NCNew Caledonia
    NENiger
    NFNorfolk Island
    NGNigeria
    NINicaragua
    NLNetherlands
    NONorway
    NPNepal
    NRNauru
    NUNiue
    NZNew Zealand
    OMOman
    PAPanama
    PEPeru
    PFFr. Polynesia
    PGPapua New Guinea
    PHPhilippines
    PKPakistan
    PLPoland
    PMSt. Pierre and Miquelon
    PNPitcairn Is.
    PRPuerto Rico
    PSPalestine
    PTPortugal
    PWPalau
    PYParaguay
    QAQatar
    RERéunion
    RORomania
    RSSerbia
    RURussia
    RWRwanda
    SASaudi Arabia
    SBSolomon Is.
    SCSeychelles
    SDSudan
    SESweden
    SGSingapore
    SHSaint Helena
    SISlovenia
    SJSvalbard and Jan Mayen
    SKSlovakia
    SLSierra Leone
    SMSan Marino
    SNSenegal
    SOSomalia
    SRSuriname
    SSS. Sudan
    STSão Tomé and Principe
    SVEl Salvador
    SXSint Maarten
    SYSyria
    SZeSwatini
    TCTurks and Caicos Is.
    TDChad
    TFFr. S. Antarctic Lands
    TGTogo
    THThailand
    TJTajikistan
    TKTokelau
    TLTimor-Leste
    TMTurkmenistan
    TNTunisia
    TOTonga
    TRTurkey
    TTTrinidad and Tobago
    TVTuvalu
    TWTaiwan
    TZTanzania
    UAUkraine
    UGUganda
    UMUnited States Minor Outlying Islands
    USUnited States of America
    UYUruguay
    UZUzbekistan
    VAVatican
    VCSt. Vin. and Gren.
    VEVenezuela
    VGBritish Virgin Is.
    VIU.S. Virgin Is.
    VNVietnam
    VUVanuatu
    WFWallis and Futuna Is.
    WSSamoa
    XKKosovo
    YEYemen
    YTMayotte
    ZASouth Africa
    ZMZambia
    ZWZimbabwe
    - - -
    -
    - -

    - Read docs for other versions of Metabase. -

    - -
    -
    - -
    - -
    -
    -
    Was this helpful?
    - - -
    - -
    -

    - -
    - - - -
    -
    - -
    -
    Thanks for your feedback!
    -
    - - - - Want to improve these docs? Propose a change. - - -
    - - - -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/_site/docs/master/questions/visualizations/map.html b/_site/docs/master/questions/visualizations/map.html index 2b213bc64e..0f4b8dc31f 100644 --- a/_site/docs/master/questions/visualizations/map.html +++ b/_site/docs/master/questions/visualizations/map.html @@ -4853,7 +4853,7 @@

    Create a pin map

  • Build a query with latitude and longitude columns for each data point (either in the query builder or using SQL);
  • Select Visualization, and pick Map;
  • -

    If your query results have columns whose field type is set to latitude/longitude in table metadata, Metabase should build a pin map automatically.

    +

    If your query results have columns whose field type is set to latitude/longitude in table metadata, Metabase should build a pin map automatically.

    Otherwise, click on the Gear icon to go to visualization settings, choose Map type: Pin map, and pick columns that contain latitude and longitude coordinates.

  • @@ -4889,7 +4889,7 @@

    Create a grid map

  • Build a query with summary by binned latitude and longitude columns (either in the query builder or using SQL);
  • Select Visualization, and pick Map;
  • -

    If your query results have columns whose field type is set to latitude/longitude in table metadata, Metabase should build a grid map automatically.

    +

    If your query results have columns whose field type is set to latitude/longitude in table metadata, Metabase should build a grid map automatically.

    Otherwise, click on the Gear icon to go to visualization settings, choose Map type: grid map, and pick columns that contain latitude and longitude coordinates.

  • @@ -4933,7 +4933,7 @@

    Create a region map

    World Map

    -

    To visualize your results in the format of a map of the world broken out by country, your result must contain a column with two-letter ISO country codes, like “US” or “BR”, or country names like “United States of America” or “Brazil”. For example:

    +

    To visualize your results in the format of a map of the world broken out by country, your result must contain a column with two-letter ISO country codes, like “US” or “BR”, for example:

    @@ -4964,7 +4964,7 @@

    World Map

    The country codes in the query results must match the two-letter codes exactly: if the country codes are lowercase or contain extra spaces, Metabase won’t recognize them.

    -

    If your query result has columns with semantic type “Country”, Metabase should build a world map automatically. Otherwise, you can choose which columns to use as the country name in the Region field visualization setting.

    +

    If your query result has columns with semantic type “Country”, Metabase should build a world map automatically. Otherwise, you can choose which columns to use as the country name in the Region field visualization setting.

    You can connect the country column in the world region map to a “Location” type dashboard filter.

    @@ -4999,7 +4999,7 @@

    United States map

    -

    If your query result has columns with semantic type “State”, Metabase should build a US map automatically. Otherwise, you can choose which columns to use as the country name in the visualization settings.

    +

    If your query result has columns with semantic type “State”, Metabase should build a US map automatically. Otherwise, you can choose which columns to use as the country name in the visualization settings.

    You can connect the state column in the US region map to a “Location” type dashboard filter.

    diff --git a/_site/docs/master/questions/visualizations/table.html b/_site/docs/master/questions/visualizations/table.html index 62130964e0..738234c8ef 100644 --- a/_site/docs/master/questions/visualizations/table.html +++ b/_site/docs/master/questions/visualizations/table.html @@ -4817,7 +4817,7 @@

    Rearranging, adding, and hiding c

    Adding or removing columns

    -

    Admins (and people in groups with access to table metadata) can hide columns across your entire Metabase by marking them as hidden in the table metadata settings.

    +

    Admins (and people in groups with access to table metadata) can hide columns across your entire Metabase by marking them as hidden in the table metadata settings.

    Hiding columns should not be used to secure sensitive information. Hiding columns in table visualization settings only affects the visibility of the columns in the visualization, not in the query results. Even people with view-only permissions to the question will be able to change the visualization settings and unhide columns. To exclude a column from the results of a specific query, uncheck the column in the “Data” block of the query builder.

    diff --git a/_site/docs/master/troubleshooting-guide/filters.html b/_site/docs/master/troubleshooting-guide/filters.html index d42dd395ea..acba5de8eb 100644 --- a/_site/docs/master/troubleshooting-guide/filters.html +++ b/_site/docs/master/troubleshooting-guide/filters.html @@ -4843,7 +4843,7 @@

    Question filters

  • Ask your Metabase admin to help you check if:
  • @@ -4855,7 +4855,7 @@

    Special cases

    Explanation

    @@ -4888,7 +4888,7 @@

    Time, ID, and number filters

  • Cast the column to a data type that matches the desired filter type. You can:
  • @@ -4904,7 +4904,7 @@

    Time, ID, and number filters

    Field filters in BigQuery and Oracle

    -

    If you are getting an error when using field filters with BigQuery or Oracle, make sure you use the correct syntax for the FROM clause. See Field filters in BigQuery and Oracle.

    +

    If you are getting an error when using field filters with BigQuery or Oracle, make sure you use the correct syntax for the FROM clause. See Field filters in BigQuery and Oracle.

    Missing or incorrect filter values

    diff --git a/_site/docs/master/troubleshooting-guide/linked-filters.html b/_site/docs/master/troubleshooting-guide/linked-filters.html index f5d17b6745..e2ffc5b8a9 100644 --- a/_site/docs/master/troubleshooting-guide/linked-filters.html +++ b/_site/docs/master/troubleshooting-guide/linked-filters.html @@ -4815,12 +4815,12 @@

    My linked filters don’t work

    Does a connected dashboard card use a SQL variable?

    -

    Root cause: Native/SQL questions must have a field filter variable in order to be linked. Regular SQL variables won’t work.

    +

    Root cause: Native/SQL questions must have a field filter variable in order to be linked. Regular SQL variables won’t work.

    Steps to take:

      -
    1. Update the card’s query to change the regular variable to a field filter variable.
    2. +
    3. Update the card’s query to change the regular variable to a field filter variable.

    See Limitations of linking filters.

    diff --git a/_site/docs/master/troubleshooting-guide/sql.html b/_site/docs/master/troubleshooting-guide/sql.html index b6daafc6b2..e3d6e4694c 100644 --- a/_site/docs/master/troubleshooting-guide/sql.html +++ b/_site/docs/master/troubleshooting-guide/sql.html @@ -4817,8 +4817,9 @@

    SQL variables and field filters

    diff --git a/_site/docs/master/usage-and-performance-tools/images/audit-dashboards.png b/_site/docs/master/usage-and-performance-tools/images/audit-dashboards.png index fb1801bc32..aa3faabac3 100644 Binary files a/_site/docs/master/usage-and-performance-tools/images/audit-dashboards.png and b/_site/docs/master/usage-and-performance-tools/images/audit-dashboards.png differ diff --git a/_site/docs/master/usage-and-performance-tools/images/audit-teammember.png b/_site/docs/master/usage-and-performance-tools/images/audit-teammember.png index 73fa55a29d..8c9b5bcbb9 100644 Binary files a/_site/docs/master/usage-and-performance-tools/images/audit-teammember.png and b/_site/docs/master/usage-and-performance-tools/images/audit-teammember.png differ diff --git a/_site/docs/master/users-guide/field-types.html b/_site/docs/master/users-guide/field-types.html index ca5b4dfc32..13b01bb18b 100644 --- a/_site/docs/master/users-guide/field-types.html +++ b/_site/docs/master/users-guide/field-types.html @@ -1,10 +1,10 @@ Redirecting… - - - + + +

    Redirecting…

    - Click here if you are not redirected. + Click here if you are not redirected. \ No newline at end of file