Compare commits
91 Commits
fix-t2-mul
...
single-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f55dc0d3b5 | ||
|
|
1b75ad7c5a | ||
|
|
51a7fdb409 | ||
|
|
15dcbf0b7c | ||
|
|
5703bc13d1 | ||
|
|
3f3b925eed | ||
|
|
6fe8a78990 | ||
|
|
6a5566453f | ||
|
|
65420ff3fd | ||
|
|
15306c17e7 | ||
|
|
a5acb871bb | ||
|
|
b10b0dce4b | ||
|
|
060ca28cc3 | ||
|
|
d2448daf08 | ||
|
|
c6a55b0f90 | ||
|
|
7c86d9d269 | ||
|
|
9b42a0ae7b | ||
|
|
610ee2e900 | ||
|
|
658c1e4704 | ||
|
|
44e0478525 | ||
|
|
b13dd15c41 | ||
|
|
03cf63892c | ||
|
|
40f15d3ce7 | ||
|
|
f5b5de0dbd | ||
|
|
50cf80b158 | ||
|
|
40d2b1bfa1 | ||
|
|
bc4750a562 | ||
|
|
4523266d6c | ||
|
|
46fc871718 | ||
|
|
8150ee9bbd | ||
|
|
4f376c4ce5 | ||
|
|
8540e3cc26 | ||
|
|
3220b41358 | ||
|
|
e00e7d8668 | ||
|
|
99dbd78088 | ||
|
|
7437bfc147 | ||
|
|
f67b4aae0e | ||
|
|
3a9e1d2380 | ||
|
|
4e98918192 | ||
|
|
ab5465ec9b | ||
|
|
653d9e616e | ||
|
|
21c90d92c3 | ||
|
|
6165712a53 | ||
|
|
269009d1f3 | ||
|
|
aa5dab0b8c | ||
|
|
d710fb129f | ||
|
|
36573b38fa | ||
|
|
c7fb35e7fc | ||
|
|
558af5e372 | ||
|
|
537d4169ee | ||
|
|
5846360d58 | ||
|
|
4410db3aea | ||
|
|
59326bee8c | ||
|
|
f463fa21bc | ||
|
|
a1cf3cbe6b | ||
|
|
010c5510fc | ||
|
|
ba4b0a30c8 | ||
|
|
dc92ed99e3 | ||
|
|
3e9ef060ed | ||
|
|
1d89072891 | ||
|
|
35fa63c63a | ||
|
|
76da6d5382 | ||
|
|
c3674747f4 | ||
|
|
e537911bc3 | ||
|
|
c21360e3bd | ||
|
|
7ba6f246f3 | ||
|
|
33fc7acca9 | ||
|
|
6d5393cfeb | ||
|
|
0860a98a1e | ||
|
|
f040ca027c | ||
|
|
876368b12d | ||
|
|
8b0cd97ab9 | ||
|
|
39b274db1b | ||
|
|
184d6a5b6d | ||
|
|
2628e7874d | ||
|
|
5b83c629d9 | ||
|
|
18ff09c54a | ||
|
|
3e0e2c6b99 | ||
|
|
c55139ed0c | ||
|
|
623523c6fc | ||
|
|
7d306e5884 | ||
|
|
eabbba2463 | ||
|
|
2c567ae30f | ||
|
|
135ba04d91 | ||
|
|
2f1de41467 | ||
|
|
172fe61ae5 | ||
|
|
18a8fdbf6d | ||
|
|
f41897df9d | ||
|
|
64887b6369 | ||
|
|
fa9d884b60 | ||
|
|
055e8b0b66 |
@@ -400,8 +400,10 @@
|
||||
clojure.test.check.clojure-test/defspec clojure.test/deftest
|
||||
clojure.test.check.properties/for-all clojure.core/let
|
||||
clojurewerkz.quartzite.jobs/defjob clojure.core/defn
|
||||
instaparse.core/defparser clojure.core/def
|
||||
metabase-enterprise.serialization.test-util/with-dbs clojure.core/fn
|
||||
metabase-enterprise.serialization.test-util/with-random-dump-dir clojure.core/let
|
||||
metabase-enterprise.content-translation.routes-test/with-new-secret-key! clojure.core/fn
|
||||
metabase.actions.test-util/with-actions clojure.core/let
|
||||
metabase.api.common/let-404 clojure.core/let
|
||||
metabase.app-db.custom-migrations.util/with-temp-scheduler! clojure.core/fn
|
||||
|
||||
@@ -350,6 +350,14 @@
|
||||
:api #{metabase.connection-pool}
|
||||
:uses #{}}
|
||||
|
||||
content-translation
|
||||
{:team "Admin Webapp"
|
||||
:api #{metabase.content-translation.api
|
||||
metabase.content-translation.models}
|
||||
:uses #{api
|
||||
premium-features
|
||||
util}}
|
||||
|
||||
content-verification
|
||||
{:team "Admin Webapp"
|
||||
:api #{metabase.content-verification.core
|
||||
@@ -368,6 +376,7 @@
|
||||
:api #{metabase.dashboards.api
|
||||
metabase.dashboards.autoplace
|
||||
metabase.dashboards.constants
|
||||
metabase.dashboards.init
|
||||
metabase.dashboards.models.dashboard
|
||||
metabase.dashboards.models.dashboard-card
|
||||
metabase.dashboards.models.dashboard-tab}
|
||||
@@ -394,6 +403,7 @@
|
||||
request
|
||||
revisions
|
||||
search
|
||||
settings
|
||||
util
|
||||
warehouse-schema
|
||||
xrays}}
|
||||
@@ -475,6 +485,7 @@
|
||||
{:team "Embedding"
|
||||
:api #{metabase.embedding.api
|
||||
metabase.embedding.init
|
||||
metabase.embedding.jwt
|
||||
metabase.embedding.settings
|
||||
metabase.embedding.validation}
|
||||
:uses #{analytics
|
||||
@@ -885,7 +896,6 @@
|
||||
premium-features
|
||||
public-sharing
|
||||
pulse
|
||||
query-analysis
|
||||
query-permissions
|
||||
query-processor
|
||||
request
|
||||
@@ -895,19 +905,6 @@
|
||||
view-log
|
||||
warehouse-schema}}
|
||||
|
||||
query-analysis
|
||||
{:team "Querying"
|
||||
:api #{metabase.query-analysis.core
|
||||
metabase.query-analysis.init}
|
||||
:uses #{config
|
||||
driver
|
||||
legacy-mbql
|
||||
lib
|
||||
query-processor
|
||||
settings
|
||||
task
|
||||
util}}
|
||||
|
||||
query-permissions
|
||||
{:team "Admin Webapp"
|
||||
:api #{metabase.query-permissions.core}
|
||||
@@ -1483,11 +1480,9 @@
|
||||
:api #{metabase-enterprise.ai-sql-fixer.api}
|
||||
:uses #{api
|
||||
driver
|
||||
query-analysis
|
||||
query-processor
|
||||
util
|
||||
enterprise/metabot-v3
|
||||
}}
|
||||
enterprise/metabot-v3}}
|
||||
|
||||
enterprise/ai-sql-generation
|
||||
{:team "Metabot"
|
||||
@@ -1556,6 +1551,17 @@
|
||||
task
|
||||
util}}
|
||||
|
||||
enterprise/content-translation
|
||||
{:team "Admin Webapp"
|
||||
:api #{metabase-enterprise.content-translation.dictionary
|
||||
metabase-enterprise.content-translation.routes}
|
||||
:uses #{api
|
||||
content-translation
|
||||
embedding
|
||||
premium-features
|
||||
util
|
||||
enterprise/api}}
|
||||
|
||||
enterprise/content-verification
|
||||
{:team "Admin Webapp"
|
||||
:api #{metabase-enterprise.content-verification.api.routes}
|
||||
@@ -1678,15 +1684,6 @@
|
||||
:uses #{premium-features
|
||||
util}}
|
||||
|
||||
enterprise/query-reference-validation
|
||||
{:team "Querying"
|
||||
:api #{metabase-enterprise.query-reference-validation.api}
|
||||
:uses #{api
|
||||
collections
|
||||
query-analysis
|
||||
request
|
||||
util}}
|
||||
|
||||
enterprise/sandbox
|
||||
{:team "Admin Webapp"
|
||||
:api #{metabase-enterprise.sandbox.api.routes
|
||||
|
||||
3
.github/team.json
vendored
@@ -63,7 +63,6 @@
|
||||
"npfitz",
|
||||
"johnswanson",
|
||||
"rafpaf",
|
||||
"sloansparger",
|
||||
"iethree",
|
||||
"nvoxland",
|
||||
"fraserdrops",
|
||||
@@ -94,6 +93,8 @@
|
||||
"name": "Metabot",
|
||||
"label": ".Team/Metabot",
|
||||
"members": [
|
||||
"retro",
|
||||
"sloansparger",
|
||||
"somtom"
|
||||
]
|
||||
},
|
||||
|
||||
25
.github/workflows/docs_bump_detected.yml
vendored
@@ -1,13 +1,23 @@
|
||||
name: Docs Bump Detected
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
pull_request_target:
|
||||
types:
|
||||
- opened
|
||||
- synchronize
|
||||
- reopened
|
||||
branches:
|
||||
- 'master'
|
||||
- 'release-x.[0-9]+.x'
|
||||
paths:
|
||||
- 'docs/**'
|
||||
|
||||
jobs:
|
||||
push_workflow_to_docs_metabase_github_io_job:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
SOURCE_BRANCH: ${{ github.head_ref || github.ref }}
|
||||
TARGET_BRANCH: ${{ github.event.pull_request.base.ref }}
|
||||
steps:
|
||||
- name: Report changed docs files exist
|
||||
run: |
|
||||
@@ -15,20 +25,13 @@ jobs:
|
||||
|
||||
- name: Trigger repo dispatch
|
||||
uses: actions/github-script@v7
|
||||
env:
|
||||
BRANCH_NAME: ${{ github.head_ref || github.ref }}
|
||||
with:
|
||||
github-token: ${{ secrets.METABASE_AUTOMATION_USER_TOKEN }}
|
||||
script: | #js
|
||||
if (process.env.BRANCH_NAME === "master" ||
|
||||
/^release-x\.\d+\.x$/.test(process.env.BRANCH_NAME)) {
|
||||
github.rest.repos.createDispatchEvent({
|
||||
owner: "${{ github.repository_owner }}",
|
||||
repo: "docs.metabase.github.io",
|
||||
event_type: "docs_update",
|
||||
client_payload: { branch_name: process.env.BRANCH_NAME
|
||||
}
|
||||
});
|
||||
} else {
|
||||
console.log("Branch name is not to be published: ", process.env.BRANCH_NAME);
|
||||
}
|
||||
client_payload: {
|
||||
source_branch: process.env.SOURCE_BRANCH,
|
||||
target_branch: process.env.TARGET_BRANCH}});
|
||||
|
||||
29
.github/workflows/docs_merge_detected.yml
vendored
@@ -1,35 +1,36 @@
|
||||
name: Docs Merge Detected
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
types:
|
||||
- closed
|
||||
branches:
|
||||
- master
|
||||
- 'master'
|
||||
- 'release-x.[0-9]+.x'
|
||||
paths:
|
||||
- 'docs/**'
|
||||
|
||||
jobs:
|
||||
push_workflow_to_docs_metabase_github_io_job_merge:
|
||||
push_and_merge_workflow_to_docs_metabase_github_io_job:
|
||||
if: github.event.pull_request.merged == true
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
SOURCE_BRANCH: ${{ github.head_ref || github.ref }}
|
||||
TARGET_BRANCH: ${{ github.event.pull_request.base.ref }}
|
||||
steps:
|
||||
- name: Report changed docs files exist
|
||||
run: |
|
||||
echo "A change in the docs directory was detected on merge."
|
||||
echo "A PR with changes to the docs directory was merged."
|
||||
|
||||
- name: Trigger repo dispatch
|
||||
uses: actions/github-script@v7
|
||||
env:
|
||||
BRANCH_NAME: ${{ github.head_ref || github.ref }}
|
||||
with:
|
||||
github-token: ${{ secrets.METABASE_AUTOMATION_USER_TOKEN }}
|
||||
script: | #js
|
||||
if (process.env.BRANCH_NAME === "master" ||
|
||||
/^release-x\.\d+\.x$/.test(process.env.BRANCH_NAME)) {
|
||||
github.rest.repos.createDispatchEvent({
|
||||
github.rest.repos.createDispatchEvent({
|
||||
owner: "${{ github.repository_owner }}",
|
||||
repo: "docs.metabase.github.io",
|
||||
event_type: "docs_merge",
|
||||
client_payload: { branch_name: process.env.BRANCH_NAME }
|
||||
});
|
||||
} else {
|
||||
console.log("Branch name is not to be published: ", process.env.BRANCH_NAME);
|
||||
}
|
||||
client_payload: {
|
||||
source_branch: process.env.SOURCE_BRANCH,
|
||||
target_branch: process.env.TARGET_BRANCH}});
|
||||
|
||||
@@ -196,6 +196,7 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
test_suite: ${{ fromJSON(needs.get-sample-apps-data.outputs.matrix) }}
|
||||
environment: ["production", "development"]
|
||||
if: |
|
||||
!cancelled() && needs.build.result == 'success'
|
||||
runs-on: ubuntu-22.04
|
||||
@@ -212,6 +213,7 @@ jobs:
|
||||
TZ: US/Pacific # to make node match the instance tz
|
||||
CYPRESS_CI: true
|
||||
SAMPLE_APP_BRANCH_NAME: ${{ needs.get-sample-apps-data.outputs.branch_name }}
|
||||
SAMPLE_APP_ENVIRONMENT: ${{ matrix.environment }}
|
||||
permissions:
|
||||
id-token: write
|
||||
|
||||
|
||||
4
.github/workflows/release-embedding-sdk.yml
vendored
@@ -395,8 +395,8 @@ jobs:
|
||||
# Please keep the value in sync with `inputs.branch`'s release branch
|
||||
npm publish --tag ${{fromJson('{"master": "nightly", "release-x.51.x": "51-stable", "release-x.52.x": "52-stable", "release-x.53.x": "53-stable", "release-x.54.x": "54-stable", "release-x.55.x": "55-stable", "esbuild-main": "56-esbuild"}')[inputs.branch]}}
|
||||
|
||||
- name: Add `latest` tag to the latest release branch (`release-x.54.x`) deployment
|
||||
if: ${{ inputs.branch == 'release-x.54.x' }}
|
||||
- name: Add `latest` tag to the latest release branch (`release-x.55.x`) deployment
|
||||
if: ${{ inputs.branch == 'release-x.55.x' }}
|
||||
working-directory: sdk
|
||||
run: |
|
||||
npm dist-tag add @metabase/embedding-sdk-react@${{ env.sdk_version }} latest
|
||||
|
||||
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 133 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 114 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 167 KiB After Width: | Height: | Size: 167 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.1 KiB |
@@ -2,3 +2,4 @@ frontend/src/cljs
|
||||
docs/configuring-metabase/environment-variables.md
|
||||
docs/api/*
|
||||
docs/api-documentation.md
|
||||
.storybook-sdk/msw-public/mockServiceWorker.js
|
||||
|
||||
@@ -28,7 +28,7 @@ const config: StorybookConfig = {
|
||||
reactDocgen: "react-docgen-typescript",
|
||||
},
|
||||
|
||||
webpackFinal: config => {
|
||||
webpackFinal: (config) => {
|
||||
return {
|
||||
...config,
|
||||
resolve: {
|
||||
@@ -55,10 +55,10 @@ const config: StorybookConfig = {
|
||||
...config.module,
|
||||
rules: [
|
||||
...(config.module?.rules ?? []).filter(
|
||||
rule => !isCSSRule(rule) && !isSvgRule(rule),
|
||||
(rule) => !isCSSRule(rule) && !isSvgRule(rule),
|
||||
),
|
||||
...appConfig.module.rules.filter(
|
||||
rule => isCSSRule(rule) || isSvgRule(rule),
|
||||
(rule) => isCSSRule(rule) || isSvgRule(rule),
|
||||
),
|
||||
],
|
||||
},
|
||||
@@ -67,5 +67,5 @@ const config: StorybookConfig = {
|
||||
};
|
||||
export default config;
|
||||
|
||||
const isCSSRule = rule => rule.test?.toString() === "/\\.css$/";
|
||||
const isSvgRule = rule => rule.test?.test(".svg");
|
||||
const isCSSRule = (rule) => rule.test?.toString() === "/\\.css$/";
|
||||
const isSvgRule = (rule) => rule.test?.test(".svg");
|
||||
|
||||
51
bb.edn
@@ -3,7 +3,8 @@
|
||||
;; so the namespaces are mage.cli, mage.format, etc.
|
||||
:paths ["mage" "test" "bin/lint-migrations-file/src"]
|
||||
:deps {metosin/malli {:mvn/version "0.17.0"}
|
||||
table/table {:mvn/version "0.5.0"}}
|
||||
table/table {:mvn/version "0.5.0"}
|
||||
mvxcvi/puget {:mvn/version "1.3.4"}}
|
||||
:tasks
|
||||
{:requires [[mage.cli :as cli]
|
||||
[mage.color :as c]]
|
||||
@@ -14,6 +15,16 @@
|
||||
(vector 'parsed (list 'cli/parse! (list 'current-task)))
|
||||
(cons 'do body))))
|
||||
|
||||
alias
|
||||
{:doc "Installs 'mage' alias and autocomplete"
|
||||
:examples [["./bin/mage alias" "Prints instructions to install the 'mage' alias and autocomplete"]
|
||||
["./bin/mage alias zsh" "Prints shell script to put into .zshrc for zsh users"]]
|
||||
:requires [[mage.alias :as alias]]
|
||||
:arg-schema [:or
|
||||
[:tuple]
|
||||
[:tuple [:enum "bash" "zsh" "fish"]]]
|
||||
:task (task! (alias/instructions parsed))}
|
||||
|
||||
cljfmt-staged
|
||||
{:doc "Runs cljfmt on staged files"
|
||||
:requires [[mage.format :as format]]
|
||||
@@ -121,6 +132,7 @@
|
||||
["JARS=~/my-stuff ./bin/mage jar-download 1.45.2" "Download metabase_1.45.2.jar to ~/my-stuff"]]
|
||||
:requires [[mage.jar-download :as jar-download]]
|
||||
:options [["-r" "--run" "run the new jar after downloading it"]
|
||||
["-e" "--env-file FILE" "you can optionally provide a lein-env file to specify the environment to use when running the jar."]
|
||||
["-d" "--delete" "delete the old jar if found, by default does not re-download it"]
|
||||
["-p" "--port PORT" "you can optionally provide a port to run the jar on, if not, we use a sane port."]]
|
||||
:arg-schema [:or
|
||||
@@ -141,15 +153,6 @@
|
||||
:requires [[mage.stats-repl :as stats-repl]]
|
||||
:task (stats-repl/connect (cli/parse! (current-task)))}
|
||||
|
||||
setup-autocomplete
|
||||
{:doc "Prints instructions to setup autocomplete"
|
||||
:examples [["./bin/mage setup-autocomplete" "Shows a link to instructions to make autocomplete work."]]
|
||||
:requires [[mage.autotab :as autotab]]
|
||||
:arg-schema [:or
|
||||
[:tuple]
|
||||
[:tuple [:enum "bash" "zsh" "fish"]]]
|
||||
:task (task! (autotab/instructions parsed))}
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Private Tasks:
|
||||
;; - hidden from `./bin/mage` listing and `bb tasks`
|
||||
@@ -193,33 +196,35 @@
|
||||
(apply readability/check arguments))}
|
||||
|
||||
-example-calculator
|
||||
{;; `:doc` is a short docstring for the task, will be listed in `./bin/mage -h` and other help info
|
||||
:doc "The sample task docstring"
|
||||
{;; `:doc` is a short docstring for the task, will be listed in `./bin/mage -h` and other help info.
|
||||
;; Keep these short, they need to fit on one line in the output from `./bin/mage -h`.
|
||||
:doc "The example calculator's task docstring"
|
||||
;; examples get printed out when you pass -h or --help.
|
||||
:examples [["./bin/mage -example-calculator 1 + 99" "evaluates to 100"]
|
||||
["./bin/mage -example-calculator 100 - 99" "evaluates to 1"]]
|
||||
;; The task is the actual code that runs when you run the task.
|
||||
:task (task!
|
||||
(println "Parsed input:") (prn parsed)
|
||||
(let [{:keys [arguments data]} (cli/parse! (current-task))
|
||||
(println "Parsed input:") (u/pp parsed)
|
||||
(let [{:keys [arguments data]} parsed
|
||||
[a op b] arguments]
|
||||
(println a (name op) b "=" (c/blue (({:+ + :- -} op) a b)))))
|
||||
;; (optional) `:require` lazily libraries for just your task:
|
||||
:requires [[mage.color :as c]]
|
||||
:requires [[mage.color :as c]
|
||||
[mage.util :as u]]
|
||||
;; (optional) `:options` are passed to [[clojure.tools.cli/parse-opts]].
|
||||
;; See: https://clojure.github.io/tools.cli/index.html#clojure.tools.cli/parse-opts
|
||||
:options [["-a" "--a-cli-flag" "Check staged files (not actually used)"]
|
||||
["-p" "--port PORT" "Some port we care about in -example (not actually used)"]]
|
||||
:options [["-n" "--negate" "Negate the result of the calculation"]
|
||||
["-a" "--also-add N" "Add N to the result of the calculation"]]
|
||||
;; (optional) `:arg-schema` is a malli schema for the arguments passed to the task, after the options
|
||||
:arg-schema [:tuple :int [:enum :+ :-] :int]
|
||||
;; (optional) `:usage-fn` is a function called with the current-task map
|
||||
;; and returns a string containing extra-detailed usage information.
|
||||
:usage-fn (fn [{:keys [doc]}]
|
||||
(println "Optional extra usage information, if you want.")
|
||||
(println "Reversed docstring:" (apply str (reverse doc))))
|
||||
;; (optional) `:usage-fn` is a function called with the current-task map.
|
||||
;; Returns a string containing extra-detailed usage information.
|
||||
:usage-fn (fn [{:keys [doc] :as _task}]
|
||||
(str "Optional extra usage information, for explicit callouts.\n"
|
||||
"Reversed docstring: '" (c/green (apply str (reverse doc))) "'"))
|
||||
;; (optional) Any other keys are completely allowed. Put things to lookup or that you want to be easy to change
|
||||
;; here. These will be returned from `(current-task)`. See: start-db for an example of using `:ports` to define a
|
||||
;; map of ports.
|
||||
;; top-level map of ports. If something should be easily accessible in the task, put it here.
|
||||
:data {:a [:b :c] :b [:d]}}
|
||||
|
||||
-test {:doc "run all mage tests"
|
||||
|
||||
40
before-push.sh
Executable file
@@ -0,0 +1,40 @@
|
||||
#! /bin/bash
|
||||
|
||||
trap "echo 'Interrupted! Exiting.'; exit 1" SIGINT
|
||||
|
||||
# This script is used to run the all dev checks with a single command.
|
||||
|
||||
echo "Building CLJS..."
|
||||
yarn build:cljs
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: Building CLJS failed." >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "Building CLJS done"
|
||||
|
||||
echo "Linting ESLint..."
|
||||
yarn lint-eslint-pure
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: Linting ESLint failed." >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "Linting ESLint done"
|
||||
|
||||
echo "Linting Prettier..."
|
||||
yarn lint-prettier-pure
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: Linting Prettier failed." >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "Linting Prettier done"
|
||||
|
||||
echo "Type checking..."
|
||||
yarn type-check-pure
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: Type checking failed." >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "Type checking done"
|
||||
|
||||
# log success
|
||||
echo "All checks passed!"
|
||||
13
bin/mage.bb
@@ -44,13 +44,12 @@
|
||||
(zen))))
|
||||
|
||||
(defn- print-help []
|
||||
(do
|
||||
(lolcat "./mage/resource.txt")
|
||||
(flush)
|
||||
(println (c/bold " ✨ Metabase Automation Genius Engine ✨"))
|
||||
(println "")
|
||||
(println (u/sh "bb tasks"))
|
||||
(println (tip-o-day))))
|
||||
(lolcat "./mage/resources/splash.txt")
|
||||
(flush)
|
||||
(println (c/bold " ✨ Metabase Automation Genius Engine ✨"))
|
||||
(println "")
|
||||
(println (u/sh "./bin/bb tasks"))
|
||||
(println (tip-o-day)))
|
||||
|
||||
(defn -main [& _]
|
||||
(cond
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
---
|
||||
title: Actions overview
|
||||
redirect_from:
|
||||
- /docs/latest/actions
|
||||
---
|
||||
|
||||
# Actions overview
|
||||
|
||||
@@ -197,7 +197,6 @@ config:
|
||||
persisted-model-refresh-cron-schedule: 0 0 0/6 * * ? *
|
||||
persisted-models-enabled: false
|
||||
premium-embedding-token: null
|
||||
query-analysis-enabled: false
|
||||
query-caching-max-kb: 2000
|
||||
query-caching-max-ttl: 3024000.0
|
||||
redirect-all-requests-to-https: false
|
||||
@@ -247,7 +246,6 @@ config:
|
||||
slack-bug-report-channel: metabase-bugs
|
||||
source-address-header: X-Forwarded-For
|
||||
sql-jdbc-fetch-size: 500
|
||||
sql-parsing-enabled: true
|
||||
ssh-heartbeat-interval-sec: 180
|
||||
start-of-week: sunday
|
||||
subscription-allowed-domains: null
|
||||
|
||||
@@ -1137,14 +1137,6 @@ Allow persisting models into the source database.
|
||||
|
||||
Token for premium features. Go to the MetaStore to get yours!
|
||||
|
||||
### `MB_QUERY_ANALYSIS_ENABLED`
|
||||
|
||||
- Type: boolean
|
||||
- Default: `false`
|
||||
- [Configuration file name](./config-file.md): `query-analysis-enabled`
|
||||
|
||||
Whether or not we analyze any queries at all.
|
||||
|
||||
### `MB_QUERY_CACHING_MAX_KB`
|
||||
|
||||
- Type: integer
|
||||
|
||||
@@ -7,7 +7,7 @@ summary: Configure how much information Metabase displays in its logs.
|
||||
|
||||
# Metabase logs
|
||||
|
||||
Metabase logs quite a bit of information by default. Metabase uses [Log4j 2][https://logging.apache.org/log4j/2.x/] under the hood, so you can configure how much information Metabase logs.
|
||||
Metabase logs quite a bit of information by default. Metabase uses [Log4j 2](https://logging.apache.org/log4j/2.x/) under the hood, so you can configure how much information Metabase logs.
|
||||
|
||||
## View and download Metabase logs
|
||||
|
||||
@@ -17,7 +17,7 @@ If you're running self-hosted Metabase, you'll also be able see the logs in the
|
||||
|
||||
## How to read Metabase logs
|
||||
|
||||
See [How to read logs][../troubleshooting-guide/server-logs.md].
|
||||
See [How to read logs](../troubleshooting-guide/server-logs.md).
|
||||
|
||||
## Configuring logging Level
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
---
|
||||
title: "Configuration overview"
|
||||
redirect_from:
|
||||
- /docs/latest/configuring-metabase
|
||||
---
|
||||
|
||||
# Configuration overview
|
||||
|
||||
@@ -179,7 +179,7 @@ Duplication only includes the dashboard, its card layout, filters, and (optional
|
||||
|
||||
To edit dashboard cards and move them around, click the **pencil** icon in the top right of a dashboard to enter the dashboard's editing interface.
|
||||
|
||||
### Editing cards
|
||||
### Moving cards around
|
||||
|
||||
Once you're in edit mode, you'll see a grid appear. You can move and resize the cards in the dashboard to your liking and they'll snap to the grid.
|
||||
|
||||
@@ -194,6 +194,8 @@ Once you're in edit mode, you'll see a grid appear. You can move and resize the
|
||||
|
||||
Metabase will automatically update a question's display to make sure your data looks great at any size you choose.
|
||||
|
||||
To edit the cards themselves, see [Editing dashboard cards](#editing-dashboard-cards).
|
||||
|
||||
### Dashboard sections
|
||||
|
||||
To speed up card arrangement, you can add **sections** to your dashboards.
|
||||
@@ -227,6 +229,13 @@ You can change the width of a dashboard by going into the three dots menu in the
|
||||
- **Fixed width** (default). Metabase will restrict the layout to a fixed width in the center of the screen. This fixed width can keep dashboard layouts consistent between smaller laptop screens and larger desktop screens.
|
||||
- **Full width**. The layout and cards will expand to take up the full width of the screen.
|
||||
|
||||
## Editing dashboard cards
|
||||
|
||||
To edit a card's:
|
||||
|
||||
- **Underlying query**: click on the card's title while _not_ in dashboard editing mode. If the card displays multiple questions, pick the question you want to edit from the dropdown.
|
||||
- **Visualization settings**, see [changing a card's visualization settings](#changing-a-cards-visualization-settings).
|
||||
|
||||
## Changing a card's visualization settings
|
||||
|
||||
You can change a card's visualization settings (to add a goal line, for example). Changing a card's visualization settings will only affect how the question appears on that dashboard card; these changes won't affect the original question's visualization settings.
|
||||
|
||||
@@ -18,7 +18,7 @@ Filters can only be linked when they're connected to columns that have an explic
|
||||
|
||||
- In the same table.
|
||||
- In two different tables that have a foreign key relationship specified in the [table metadata](../data-modeling/metadata-editing.md).
|
||||
- In two different tables that have a foreign key relationships to one or more intermediate tables, as specified in the [table metadata](../data-modeling/metadata-editing.md)
|
||||
- In two different tables that have a foreign key relationships to one or more intermediate tables, as specified in the [table metadata](../data-modeling/metadata-editing.md).
|
||||
|
||||

|
||||
|
||||
@@ -46,7 +46,7 @@ The filter(s) you select in the **linked filters** tab will be the parent filter
|
||||
Linked filters are only "aware" of relationships defined in the table metadata. This constraint lets people connect filters to the same column on multiple dashboard cards (across multiple tabs), but the constraint also means that:
|
||||
|
||||
- Linked filters can't see relationships defined by joins in models or questions.
|
||||
- Linked filters can't use any filter or join logic from any underlying card or model
|
||||
- Linked filters can't use any filter or join logic from any underlying card or model.
|
||||
|
||||
For example, say you have a table with State and City columns, and you build a model that filters out rows with `City = San Francisco`. You ask a question based on that model, and add it to a dashboard. You add State and City filters to the dashboard, and link them. If you select were to select `State = CA`, the city filter may still show `San Francisco` as option, even though there are no records with `San Francisco` in the question and the underlying model, because the filter only "knows" about the underlying table metadata (which includes sample values for the column).
|
||||
|
||||
@@ -54,7 +54,7 @@ For example, say you have a table with State and City columns, and you build a m
|
||||
|
||||
Metabase uses database column metadata to populate values for linked filters, which means that linked filters have to be connected to database columns. In particular:
|
||||
|
||||
- You can't create linked filters on custom columns
|
||||
- You can't create linked filters on custom columns.
|
||||
|
||||
- Native/SQL questions must have a [field filter](../questions/native-editor/sql-parameters.md#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.
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
---
|
||||
title: Dashboards overview
|
||||
redirect_from:
|
||||
- /docs/latest/dashboards
|
||||
---
|
||||
|
||||
# Dashboards overview
|
||||
|
||||
@@ -39,11 +39,7 @@ You can use custom expressions to combine multiple metrics, or perform calculati
|
||||
|
||||
To create a metric, bring up the command palette with cmd/ctrl + k. That’s cmd + k for Macs, or ctrl + k for Windows PCs. Search for New metric.
|
||||
|
||||
You can also create a metric by first creating a question, then converting it to a metric:
|
||||
|
||||
1. Click on **+ New** and select **Question**
|
||||
2. Build your query using the query builder
|
||||
3. Once you've created your question, you can convert it to a metric by clicking the three dot menu (**...**) and selecting **Turn into a metric**
|
||||
You can also create a new metric by going to **Browse > Metrics** in the navigation side bar and clicking on **+**.
|
||||
|
||||
Select your starting data. You can start from a model, metric, table, or saved question.
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
---
|
||||
title: "Data modeling overview"
|
||||
redirect_from:
|
||||
- /docs/latest/data-modeling
|
||||
---
|
||||
|
||||
# Data modeling overview
|
||||
|
||||
@@ -5,6 +5,7 @@ redirect_from:
|
||||
- /docs/latest/databases/connections/sql-server
|
||||
- /docs/latest/administration-guide/databases/h2
|
||||
- /docs/latest/databases/connections/h2
|
||||
- /docs/latest/databases/connections
|
||||
---
|
||||
|
||||
# Adding and managing databases
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
---
|
||||
title: Databases overview
|
||||
redirect_from:
|
||||
- /docs/latest/databases
|
||||
---
|
||||
|
||||
# Databases overview
|
||||
|
||||
@@ -31,6 +31,7 @@ title: Driver interface changelog
|
||||
`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.
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
---
|
||||
title: Embedded analytics SDK
|
||||
redirect_from:
|
||||
- /docs/latest/embedding/sdk
|
||||
---
|
||||
|
||||
# Embedded analytics SDK
|
||||
@@ -98,9 +100,9 @@ You can find the [Embedded analytics SDK source code in the Metabase repo](https
|
||||
|
||||
View the SDK's changelog:
|
||||
|
||||
* [54-nightly](https://github.com/metabase/metabase/blob/master/enterprise/frontend/src/embedding-sdk/CHANGELOG.md)
|
||||
* [53-stable](https://github.com/metabase/metabase/blob/release-x.53.x/enterprise/frontend/src/embedding-sdk/CHANGELOG.md)
|
||||
* [52-stable](https://github.com/metabase/metabase/blob/release-x.52.x/enterprise/frontend/src/embedding-sdk/CHANGELOG.md)
|
||||
- [54-nightly](https://github.com/metabase/metabase/blob/master/enterprise/frontend/src/embedding-sdk/CHANGELOG.md)
|
||||
- [53-stable](https://github.com/metabase/metabase/blob/release-x.53.x/enterprise/frontend/src/embedding-sdk/CHANGELOG.md)
|
||||
- [52-stable](https://github.com/metabase/metabase/blob/release-x.52.x/enterprise/frontend/src/embedding-sdk/CHANGELOG.md)
|
||||
|
||||
## Embedded analytics SDK on NPM
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
---
|
||||
title: Embedding overview
|
||||
redirect_from:
|
||||
- /docs/latest/embedding
|
||||
---
|
||||
|
||||
# Embedding overview
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
---
|
||||
title: "Organization overview"
|
||||
redirect_from:
|
||||
- /docs/latest/exploration-and-organization
|
||||
---
|
||||
|
||||
# Organization overview
|
||||
|
||||
@@ -14,7 +14,7 @@ On Pro and Enterprise plans, you can purchase a development instance or developm
|
||||
- **Self-hosted**: you can purchase a dev token that you can use for one or more self-hosted development instances (meaning: you can reuse the same token for multiple dev instances at no additional cost). The development token will have access to the same set of paid features as your production token.
|
||||
- **Cloud**: you can purchase a development instance hosted on [Metabase Cloud](https://www.metabase.com/cloud/). The development instance will have access to the same set of paid features as your production token.
|
||||
|
||||
Dev instances are only available to Pro and Enterprise plans, but they're not included in the base plans; dev instances must be purchased as an add-on to your plan.
|
||||
Dev instances are only available to Pro and Enterprise plans; they're not included in the base plans. Dev instances must be purchased as an add-on to your plan, after you've completed your trial and made your first payment.
|
||||
|
||||
## Pay a flat fee, not per test user
|
||||
|
||||
@@ -46,3 +46,7 @@ You can choose a Cloud instance or get a token for a self-hosted development ins
|
||||
If you're on a Pro Cloud plan and downgrade to a Starter plan, we'll delete any development instances you've created. All of your production instances will remain intact (minus the Pro features).
|
||||
|
||||
If you downgrade and you're on a self-hosted plan, the token will no longer be valid, and you'll lose access to the paid features.
|
||||
|
||||
## Getting data from development to production
|
||||
|
||||
You can export changes made in your development instance and import them into your production instance. Check out [serialization](../installation-and-operation/serialization.md).
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: "Serialization"
|
||||
summary: How to export and import Metabase content between instances using serialization. Useful for version control, staging environments, and duplicating assets.
|
||||
redirect_from:
|
||||
- /docs/latest/enterprise-guide/serialization
|
||||
---
|
||||
@@ -34,8 +35,6 @@ Check out our guides for:
|
||||
- [Running multiple environments](https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/multi-env)
|
||||
- [Setting up git-based workflow](https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/git-based-workflow)
|
||||
|
||||
> Serialization isn't intended for use cases like duplicating assets or swapping data sources _within_ the same Metabase instance. If you're using serialization for duplicating assets within the same instance, check out [How export works](#how-export-works), [How import works](#how-import-works), and the directions for your use case in [Other uses of serialization](#other-uses-of-serialization)
|
||||
|
||||
## How export works
|
||||
|
||||
- [What gets exported](#what-gets-exported)
|
||||
@@ -60,7 +59,7 @@ Metabase will only export the following entities:
|
||||
- Public sharing settings for questions and dashboards
|
||||
- [General Metabase settings](#general-metabase-settings-that-are-exported)
|
||||
- Events and timelines
|
||||
- Database connection strings (only if specified through [export options](#customize-what-gets-exported)).
|
||||
- Database connection strings (only if specified through [export options](#customize-what-gets-exported))
|
||||
|
||||
All other entities—including users, groups, permissions, alerts, subscriptions—won't get exported.
|
||||
|
||||
@@ -146,7 +145,7 @@ See [export parameters in CLI commands](#export-options) or [export parameters i
|
||||
|
||||
Questions can be found in the `cards` directory of a collection directory. Here's an example card YAML file for a question written with SQL that uses a field filter and has an area chart visualization.
|
||||
|
||||
> To preserve a native query's multi-line format, remove trailing whitespace from native queries. If your native query has trailing whitespace, YAML will convert your query to a single string literal (which only affects presentation, not functionality).
|
||||
To preserve a native query's multi-line format, remove trailing whitespace from native queries. If your native query has trailing whitespace, YAML will convert your query to a single string literal (which only affects presentation, not functionality).
|
||||
|
||||
```yml
|
||||
name: Products by week
|
||||
@@ -687,7 +686,9 @@ We're providing some directions on how to approach these unsupported use cases,
|
||||
|
||||
### Using serialization for duplicating content within the same Metabase
|
||||
|
||||
Using serialization to duplicate content is not trivial, because you'll need to wrangle [Entity IDs](#metabase-uses-entity-ids-to-identify-and-reference-metabase-items) for all the items you want to duplicate — and the IDs for all the items that are related to those items — to avoid overwriting existing data.
|
||||
> Duplicating assets via serialization, while technically possible, isn't officially supported, so do so at your own risk. The risk here being that you may have to manage long chains of dependencies, which can make it more likely you'll forget to edit an entity ID, or overwrite an entity ID that already exists. So make sure you're doing backups and checking your changes into version control.
|
||||
|
||||
Using serialization to duplicate content is not trivial, because you'll need to wrangle [Entity IDs](#metabase-uses-entity-ids-to-identify-and-reference-metabase-items) for all the items you want to duplicate — _and_ the IDs for all the items that are related to those items — to avoid overwriting existing data.
|
||||
|
||||
Before starting this perilous journey, review [how export works](#how-export-works) and [how import works](#how-import-works), and contact [help@metabase.com](mailto:help@metabase.com) if you have any questions.
|
||||
|
||||
@@ -725,9 +726,13 @@ If your collections contains dashboards, models, and other items that can add de
|
||||
|
||||
### Using serialization to swap the data source for questions within one instance
|
||||
|
||||
If you want to change the data source for some of the questions in your Metabase — for example, just for questions in a single collection - you can serialize the questions manually, then edit the exported YAML files.
|
||||
> We've since built an official solution for situations where you want to build one dashboard and change the database it queries based on who's viewing it. Check out [Database routing](../permissions/database-routing.md).
|
||||
|
||||
> If you want to switch _every_ question built on database A to use database B instead, and database B has exactly the same schema as database A, you don't need to use serialization: you can just swap the connection string in **Admin > Databases**
|
||||
Read the blockquote above before proceeding, as that's probably what you're looking for. We're leaving the docs below as a backup in case [database routing](../permissions/database-routing.md) doesn't solve your problem.
|
||||
|
||||
If you want to switch _every_ question built on database A to use database B instead, and database B has exactly the same schema as database A, you don't need to use serialization: you can just swap the connection string in **Admin > Databases**.
|
||||
|
||||
If you want to change the data source for some of the questions in your Metabase — for example, just for questions in a single collection - you can serialize the questions manually, then edit the exported YAML files.
|
||||
|
||||
Your databases must have the same engine, and ideally they should have the same schema.
|
||||
|
||||
@@ -762,7 +767,7 @@ A few other changes to call out:
|
||||
|
||||
- The exported YAML files have a slightly different structure:
|
||||
- Metabase will prefix each file with a 24-character Entity ID (like `IA96oUzmUbYfNFl0GzhRj_accounts_model.yaml`).
|
||||
You can run a Metabase command to [drop Entity IDs](./commands.md#drop-entity-ids) before exporting.
|
||||
You can run a Metabase command to [drop Entity IDs](./commands.md#drop-entity-ids).
|
||||
- The file tree is slightly different.
|
||||
- To serialize personal collections, you just need to include the personal collection IDs in the list of comma-separated IDs following the `-c` option (short for `--collection`).
|
||||
|
||||
@@ -774,7 +779,8 @@ If you've written scripts to automate serialization, you'll need to:
|
||||
|
||||
## Further reading
|
||||
|
||||
- [Serialization tutorial](https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/serialization).
|
||||
- [Serialization tutorial](https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/serialization)
|
||||
- [Database routing](../permissions/database-routing.md)
|
||||
- [Multiple environments](https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/multi-env)
|
||||
- [Setting up a git-based workflow](https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/git-based-workflow).
|
||||
- Need help? Contact [support@metabase.com](mailto:support@metabase.com).
|
||||
- [Setting up a git-based workflow](https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/git-based-workflow)
|
||||
- Need help? Contact [support@metabase.com](mailto:support@metabase.com)
|
||||
|
||||
@@ -107,13 +107,15 @@ With X being the latest version available for each release.
|
||||
|
||||
Check out a list of [Metabase releases](https://github.com/metabase/metabase/releases).
|
||||
|
||||
When upgrading between major versions (e.g. v53.x to v54.x), use the latest minor version available for that major version. E.g., if you want to upgrade from v50 to v51, use the latest point version available for 51.
|
||||
|
||||
## Upgrading Metabase on other platforms
|
||||
|
||||
- [Upgrading Azure Web Apps deployments](running-metabase-on-azure.md#additional-configurations)
|
||||
|
||||
## What happens during an upgrade or downgrade?
|
||||
|
||||
During a **major version** upgrade (e.g., 53.1 5o 54.1), Metabase will:
|
||||
During a **major version** upgrade (e.g., 53.1 or 54.1), Metabase will:
|
||||
|
||||
- Perform all the migrations needed to upgrade to the new version, such as any schema changes to the application database between the two versions.
|
||||
- Keep all the metadata it needs to work on the application database.
|
||||
@@ -168,3 +170,5 @@ If you're running Metabase in a cluster:
|
||||
1. Reduce the number of nodes to a single node. You can't upgrade all nodes at the same time because the ugprade process works by acquiring a migration lock on the application database from a single client, which performs the migration. If you keep more than one node active when you do a major version upgrade, the application won't behave correctly, as schema changes to the application database could cause problems for nodes that are still running the older version of Metabase.
|
||||
2. Perform the upgrade as normal (as outlined above).
|
||||
3. Raise the number of nodes to the same number you had before.
|
||||
|
||||
Make sure you container orchestrator or cluster manager doesn't kill the Metabase process while it's performing the migrations, otherwise you'll may end up with a corrupted application database and you'll need to restore from a backup.
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
title: "People overview"
|
||||
redirect_from:
|
||||
- /docs/latest/administration-guide/sso
|
||||
- /docs/latest/people-and-groups
|
||||
---
|
||||
|
||||
# People overview
|
||||
@@ -70,4 +71,3 @@ Metabase supports user provisioning via the SCIM protocol.
|
||||
[saml-google]: ./saml-google.md
|
||||
[saml-keycloak]: ./saml-keycloak.md
|
||||
[sso-def]: https://www.metabase.com/glossary/sso
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Notification permissions
|
||||
summary: Learn who can create and edit alerts and dashboard subscriptions, and what data recipients can see in their notifications.
|
||||
---
|
||||
|
||||
# Notification permissions
|
||||
@@ -19,7 +20,7 @@ What you can do with alerts and dashboard subscriptions depends on whether you'r
|
||||
Everyone's in the All Users group. Which means that everyone can:
|
||||
|
||||
- Create [alerts](../questions/alerts.md) and [dashboard subscriptions](../dashboards/subscriptions.md#setting-up-a-dashboard-subscription).
|
||||
- Add new recipients to dashboard subscriptions that they created. Non-admins can only add themselves to alerts.
|
||||
- Add new recipients to dashboard subscriptions and alerts that they created.
|
||||
- Unsubscribe from any alert or subscription in their [Account settings](../people-and-groups/account-settings.md).
|
||||
|
||||
When a notification creator adds new recipients to an alert or subscription, Metabase will display data to the recipients using the **creator's** [data permissions](../permissions/data.md) and [collection permissions](../permissions/collections.md).
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
---
|
||||
title: Permissions overview
|
||||
redirect_from:
|
||||
- /docs/latest/permissions
|
||||
---
|
||||
|
||||
# Permissions overview
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Alerts
|
||||
summary: Set up alerts to get notified via email, Slack, or webhooks when your questions return interesting results.
|
||||
redirect_from:
|
||||
- /docs/latest/users-guide/15-alerts
|
||||
- /docs/latest/questions/sharing/alerts
|
||||
@@ -31,8 +32,18 @@ To create an alert:
|
||||
4. Select what you want to be alerted about. The alert options will depend on the question's visualization. See [types of alerts](#types-of-alerts).
|
||||
5. Select when you want Metabase to check the results. Metabase can check for results by the minute, hourly, daily, weekly, monthly, or on a custom schedule that you set using the Quartz [cron syntax](https://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html).
|
||||
6. Select the alert's destination: [email](../configuring-metabase/email.md), [Slack](../configuring-metabase/slack.md), or to a [webhook](../configuring-metabase/webhooks.md).
|
||||
7. Configure any other options (like [only sending the alert once](#send-a-one-time-alert)).
|
||||
8. Click **Done**.
|
||||
|
||||
You'll also have the option to only send the alert once. To test the alert, you can hit the **Send now** button. But just make sure that the question returns results. If the question doesn't return any results, Metabase won't send the alert.
|
||||
## Send a one-time alert
|
||||
|
||||
When setting up an alert, if you select the option to **Only send the alert once**, Metabase will send that alert once, then delete itself, never to alert anyone ever again. These "disposable" alerts are handy for things like letting you know when you reach a one-time milestone.
|
||||
|
||||
## Testing alerts
|
||||
|
||||
To test the alert, first make sure that the question returns results (if the question doesn't return any results, Metabase won't send the alert).
|
||||
|
||||
Then hit the **Send now** button to trigger the alert.
|
||||
|
||||
## Types of alerts
|
||||
|
||||
|
||||
BIN
docs/questions/images/heatmap-query.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
docs/questions/images/pivot-conditional-formatting.png
Normal file
|
After Width: | Height: | Size: 259 KiB |
BIN
docs/questions/images/pivot-table-as-heatmap.png
Normal file
|
After Width: | Height: | Size: 486 KiB |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 202 KiB After Width: | Height: | Size: 230 KiB |