Compare commits

...

232 Commits

Author SHA1 Message Date
metabase-bot[bot]
46c668b1e5 🤖 backported "Remove Models from Browse data" (#40115)
# Conflicts:
#	frontend/src/metabase/browse/analytics.ts
#	frontend/src/metabase/browse/components/BrowseApp.tsx
#	frontend/src/metabase/browse/components/ModelExplanationBanner.tsx
#	frontend/src/metabase/routes.jsx

Co-authored-by: Raphael Krut-Landau <raphael.kl@gmail.com>
2024-03-14 14:12:16 +02:00
metabase-bot[bot]
1fb7f2ed23 TableDefinition can define a composite PK (#40006) (#40119)
Co-authored-by: Cal Herries <39073188+calherries@users.noreply.github.com>
Co-authored-by: Chris Truter <crisptrutski@users.noreply.github.com>
2024-03-14 09:07:43 +00:00
metabase-bot[bot]
de85991f46 Fix @cypress/grep types by upgrading the library to its latest version (#40079) (#40088) 2024-03-14 09:32:00 +01:00
metabase-bot[bot]
6b1e6c2834 Don't store analytics checksum if audit loading failed (#40097) (#40110)
Co-authored-by: Noah Moss <32746338+noahmoss@users.noreply.github.com>
2024-03-13 21:38:11 +00:00
metabase-bot[bot]
98ad72fd21 cloud doesn't support vpn (#40090) (#40102)
Co-authored-by: Alex Yarosh <alexandra@metabase.com>
2024-03-13 19:28:22 +00:00
metabase-bot[bot]
8de04e5955 Update Translations for v49 (#40089) (#40098)
* updated pot file for v49

* update translations for 49

Co-authored-by: Ryan Laurie <30528226+iethree@users.noreply.github.com>
2024-03-13 19:01:56 +00:00
metabase-bot[bot]
d58427a16b [docs] Explicit callouts about data download in embedding (#40049) (#40100)
* explicit callout for data download

* rephrase "data download" -> "download results"

* review suggestions

* wrong link

Co-authored-by: Alex Yarosh <alexandra@metabase.com>
2024-03-13 18:52:04 +00:00
metabase-bot[bot]
98f515340c Fix scrolling with filter field values (#40075) (#40085)
Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
2024-03-13 16:42:56 +00:00
metabase-bot[bot]
9ddc2f85d2 docs - csv append (#38974) (#40083)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-03-13 15:07:58 +00:00
metabase-bot[bot]
0a1e15d2a5 backport "[QP] When querying a bare model with parameters, wrap an extra stage (#39963)" (#40047)
Fixes #39940.

Co-authored-by: Braden Shepherdson <braden@metabase.com>
2024-03-13 11:36:43 -03:00
metabase-bot[bot]
01d8e7da2c 49 backport: Faster sync-fks (#38970) (#40062)
* Faster sync-fks (#38970)

* Change driver changelog and remove describe-table-fks in 52 instead of 53

---------

Co-authored-by: Cal Herries <39073188+calherries@users.noreply.github.com>
Co-authored-by: Callum Herries <calherries@gmail.com>
2024-03-13 11:36:11 -03:00
metabase-bot[bot]
68715370db Correctly show a selected table (in the data selector) which comes from a multi-schema database (#39930) (#40076)
* Show selected table in the data selector

Fixes #39807.

* Build schema information when table is selected

* Remove now unused method

* Update only the selected schema id information

* Obtain schema id from the state

* Introduce multiple schemas to the writable database

* Add E2E reproduction for #39807

* Fix unit test

* Fetch schema if needed according to the new condition

Co-authored-by: Nemanja Glumac <31325167+nemanjaglumac@users.noreply.github.com>
2024-03-13 14:35:40 +00:00
metabase-bot[bot]
800bc7ed59 [docs] Clarifications about dashboard subscriptions (#40045) (#40078)
* some clarifications around subscriptions

* Apply suggestions from code review



---------

Co-authored-by: Alex Yarosh <alexandra@metabase.com>
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-03-13 14:15:48 +00:00
metabase-bot[bot]
697c1ebe7e Elevate selected filter field values (#40055) (#40070)
Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
2024-03-13 13:43:57 +00:00
metabase-bot[bot]
20990f2d51 Revert "docs - update basic exploration (#39559)" (#40067) (#40074)
This reverts commit 9413706bd2.

Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-03-13 13:43:12 +00:00
metabase-bot[bot]
04332a321e fix redshift flake by not clean up tables on some tests (#40060) (#40065)
Co-authored-by: Ngoc Khuat <qn.khuat@gmail.com>
2024-03-13 12:31:07 +00:00
metabase-bot[bot]
ac24b794d2 Make static field values select searchable (#40054) (#40057)
Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
2024-03-13 09:22:44 +00:00
metabase-bot[bot]
9a6ed5dc0c Repro #29943 - Wrong field highlighted when editing model metadata if custom column added to left of column (#39996) (#40053)
* Repro #29943 - Wrong field highlighted when editing model metadata if custom column added to left of column

* Refactor assertions

* Reuse getHeaderCell

Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
2024-03-13 07:40:23 +00:00
metabase-bot[bot]
d9d8144763 Postgres: Fix sync does not recognize schema with backslashes (#38946) (#40048)
Co-authored-by: Ngoc Khuat <qn.khuat@gmail.com>
2024-03-13 01:42:55 +00:00
metabase-bot[bot]
192ab03265 TableDefinition can define a custom PK (#39038) (#39990)
Co-authored-by: Ngoc Khuat <qn.khuat@gmail.com>
2024-03-13 00:48:19 +00:00
metabase-bot[bot]
e7ecc32c40 Add LDAP logging (#40036) (#40042)
Co-authored-by: Noah Moss <32746338+noahmoss@users.noreply.github.com>
2024-03-12 22:18:52 +00:00
metabase-bot[bot]
66b0ea0ffe backport "[MLv2] Include implicit joins for breakout/order on models (#39801)" (#40027)
Fixes #39657.

Co-authored-by: Braden Shepherdson <braden@metabase.com>
2024-03-12 19:42:50 +00:00
metabase-bot[bot]
51faf90a5f focus the top card in newly created section (#39961) (#40019)
Co-authored-by: Jesse Devaney <22608765+JesseSDevaney@users.noreply.github.com>
2024-03-12 18:02:48 +00:00
metabase-bot[bot]
fa4f7eefed Detect the use of unsupported features in the expression editor (#39778) (#39989)
* Detect the use of unsupported features in the expression editor

* Use an object to pass parameters to resolve

* Handle clauses that do not require feature

* Use postgres-12 for testing datetime functions

Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
2024-03-12 17:36:50 +01:00
metabase-bot[bot]
84b1a50111 load analytics content (#40001) (#40003)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-03-12 15:58:22 +00:00
metabase-bot[bot]
37c230994f docs - add refresh parameter (#39452) (#40000)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-03-12 15:31:06 +00:00
metabase-bot[bot]
74848ea392 Merge (#39935)
Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
2024-03-12 16:13:19 +02:00
metabase-bot[bot]
10f8f28502 add link (#39962) (#39995)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-03-12 13:03:41 +00:00
metabase-bot[bot]
89a70d2635 🤖 backported "[FIX: #39152] Public links refer to null when question is new" (#39488)
Co-authored-by: Oisin Coveney <oisin@metabase.com>
2024-03-12 11:58:52 +00:00
metabase-bot[bot]
4479481c15 Split up "Doing science..." message (#39619) (#39976)
* Convert QueryVisualization to a functional component

* Add a custom message after loading for a while

* Add test for slow database message

* Loop through different custom messages

* Use cy.clock to test timeouts

* Make getLoadingMessage a function

Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
2024-03-12 08:17:19 +00:00
metabase-bot[bot]
738830a8d1 Fix unable to start on windows with h2 (#39739) (#39972)
Co-authored-by: Ngoc Khuat <qn.khuat@gmail.com>
2024-03-12 04:33:24 +00:00
metabase-bot[bot]
e9a2c76160 Bump clojure to 11.1.2 (#39857) (#39859)
Co-authored-by: Noah Moss <32746338+noahmoss@users.noreply.github.com>
2024-03-11 16:41:10 +00:00
metabase-bot[bot]
74fe6f1476 docs - add filter customization (#39719) (#39945)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-03-11 16:17:02 +00:00
metabase-bot[bot]
ec26ab86e1 add embedding step (#39790) (#39943)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-03-11 15:47:37 +00:00
metabase-bot[bot]
27bc214a7f Only copy active fields and tables with data/with-temp-copy-of-db (#39862) (#39925)
Co-authored-by: Cal Herries <39073188+calherries@users.noreply.github.com>
2024-03-11 11:07:26 +00:00
metabase-bot[bot]
fbef7476a7 Repro #35711 - Models broken with custom fields (#39763) (#39922)
* Add repro for metabase#35711

* Format code

Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
2024-03-11 07:24:54 +00:00
metabase-bot[bot]
afea09c51c Fix - Description for calculated columns in model metadata editing page is incorrectly populated with description from other columns (#39851) (#39921)
* Fix metabase#34349

* Remove outdated comment

* Add repro for metabase#34349

* Add tag for issue 25884 and extract a constant

Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
2024-03-11 07:23:16 +00:00
metabase-bot[bot]
34bf1502c3 Using CSS transition and component for QB header (#39794) (#39915)
* Using CSS transition and  component for QB header

* Reduce delay on hovercard in tests

* Increase timeout on hovercard

* Wait for longer in hovercard test

* mouseover

---------

Co-authored-by: Nick Fitzpatrick <nick@metabase.com>
Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
2024-03-09 03:58:49 +00:00
metabase-bot[bot]
e9804c8494 adjust progress bar height when card is min height (#39819) (#39865)
Co-authored-by: Jesse Devaney <22608765+JesseSDevaney@users.noreply.github.com>
2024-03-08 19:04:37 +00:00
metabase-bot[bot]
949919a324 adjust padding for small cards (#39811) (#39864)
Co-authored-by: Jesse Devaney <22608765+JesseSDevaney@users.noreply.github.com>
2024-03-08 19:04:04 +00:00
metabase-bot[bot]
b688f13542 Specify GH project board per team (#39631) (#39866)
* specify GH project board per team

* update teams projectUrls

* remove QC team project url

Co-authored-by: Aleksandr Lesnenko <alxnddr@users.noreply.github.com>
2024-03-08 18:37:48 +00:00
metabase-bot[bot]
4534c4b8b9 ChartSettingsTableFormatting dnd-kit (#39840)
Co-authored-by: Nick Fitzpatrick <nickfitz.582@gmail.com>
2024-03-08 14:26:35 -04:00
metabase-bot[bot]
0d0754a942 removes react motion from undo component (#39787) (#39856)
Co-authored-by: Sloan Sparger <sloansparger@users.noreply.github.com>
2024-03-08 16:11:34 +00:00
metabase-bot[bot]
b86e448262 Disclosure triangle and Fullpage modal transitions (#39780) (#39839)
* css animation on disclosure triangle

* Full page modal using mantine transition

* removing comment

Co-authored-by: Nick Fitzpatrick <nick@metabase.com>
2024-03-08 15:08:00 +00:00
metabase-bot[bot]
fff6f7581a Upgrade redux-auth-wrapper package (#39841)
Co-authored-by: Nick Fitzpatrick <nickfitz.582@gmail.com>
2024-03-08 10:56:50 -04:00
metabase-bot[bot]
21b33fb105 🤖 backported "using CSS animations for notebook previews" (#39781)
* using CSS animations for notebook previews (#39717)

* using CSS animations for notebook previews

* useMemo

* optimizations on question creation

* backporting use-modal-open hook

---------

Co-authored-by: Nick Fitzpatrick <nick@metabase.com>
Co-authored-by: Nick Fitzpatrick <nickfitz.582@gmail.com>
2024-03-08 14:31:44 +00:00
metabase-bot[bot]
2f496dcacb [chain filters] should not be using inactive fields for joins (#39635) (#39847)
Co-authored-by: Alexander Solovyov <alexander@solovyov.net>
2024-03-08 14:02:16 +00:00
metabase-bot[bot]
33ea19c067 Remove react-motion - Bulk Actions (#39729) (#39777)
* removes react motion usage from bulk action related components and replaces with mantine transition component

* removes unused eslint disable comment

* fixes e2e tests

Co-authored-by: Sloan Sparger <sloansparger@users.noreply.github.com>
2024-03-08 09:54:03 -04:00
metabase-bot[bot]
f365bfa161 Update existing foreign keys during metadata sync (#39679) (#39846)
Co-authored-by: Cal Herries <39073188+calherries@users.noreply.github.com>
2024-03-08 12:24:23 +00:00
metabase-bot[bot]
1a57a2eda5 Fix table columns remapped fields (#39798) (#39844)
Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
2024-03-08 10:29:00 +00:00
metabase-bot[bot]
9c86e08b40 Only return help text for supported features (#39766) (#39842)
Avoid showing the help test dialog for unsupported features

Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
2024-03-08 09:54:02 +00:00
metabase-bot[bot]
4e7c5aa8ca Fix janky db refreshing (#39796) (#39815)
Co-authored-by: Raphael Krut-Landau <raphael.kl@gmail.com>
2024-03-07 22:15:56 +00:00
metabase-bot[bot]
1310c156ab Fix the dismissed-custom-dashboard-toast setting (#39785) (#39803)
This setting key is defined using kebab-case.
Not sure how it worked (if it worked) using the snake_case?

Co-authored-by: Nemanja Glumac <31325167+nemanjaglumac@users.noreply.github.com>
2024-03-07 20:41:52 +00:00
metabase-bot[bot]
26d2282ba5 Properly highlight models as the data source (#39792) (#39799)
* [HDS] Prep/cleanup steps for Highlighting the data source (#39681)

* Rename `DATA_BUCKET` key to `MODELS`

* Rename misleading method

`isSavedQuestionSelected` is too narrow because we can also have
other saved entities, such as models (and soon metrics) as the selected source.

* Fix type for `selectedTableId`

* Extract `sourceId`

* Rename saved question instances to saved entity

* Rename related components

* Show models correctly in the data source picker (#39686)

* Show models correctly in the data source picker

* Address review comments

* Destructure props

* Add E2E reproduction for #39699

* Prevent accessing potentially stale value

Closes #39699

Co-authored-by: Nemanja Glumac <31325167+nemanjaglumac@users.noreply.github.com>
2024-03-07 21:36:08 +01:00
Jeff Bruemmer
8c61c05927 formatting (#39806) 2024-03-07 15:28:33 -05:00
metabase-bot[bot]
1a70d69542 Dashboard width revision message should handle nil (#39710) (#39800)
* Revision Diff Should handle `nil` Dashboard Width

Even though there shouldn't be `nil` values in dashboard.width, because the migration populates w/ the default value
of `full`, it is still true that because of the version before the migration, revisions  can have `nil` for the width
value. The diff string impl didn't consider this, causing an NPE with `(name nil)`.

* Use :guard to prevent nil values from matching

* Add test checking that dashboard width change is described correctly

Co-authored-by: adam-james <21064735+adam-james-v@users.noreply.github.com>
2024-03-07 19:49:08 +00:00
metabase-bot[bot]
0a1f97fa00 Make tabs e2e test stable again (#39762) (#39784)
Co-authored-by: Uladzimir Havenchyk <125459446+uladzimirdev@users.noreply.github.com>
2024-03-07 17:17:28 +00:00
metabase-bot[bot]
f64d78bb8d Fix unresponsive dashboard header button (#39757) (#39765)
Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
2024-03-07 16:03:06 +00:00
metabase-bot[bot]
1fd647f723 Fix invisible chart legend dots when printing (#39752) (#39774)
Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
2024-03-07 15:44:50 +00:00
metabase-bot[bot]
3b4cc24d89 Show "Bookmark" before "Archive" in entity menus (#39755) (#39759)
Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
2024-03-07 14:58:27 +00:00
metabase-bot[bot]
c19758d90a Disable animation on NewItemMenu (#39712) (#39761)
Co-authored-by: Raphael Krut-Landau <raphael.kl@gmail.com>
2024-03-07 14:55:08 +00:00
metabase-bot[bot]
df9cd726d3 Cache fromLegacyQuery calls (#39682) (#39753)
Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
2024-03-07 12:56:50 +00:00
metabase-bot[bot]
5e616b8b84 Do not create questions for dashcards with permission errors (#39688) (#39748)
Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
2024-03-07 11:39:40 +00:00
metabase-bot[bot]
5dd99ff2d5 Cache can-run (#39695) (#39747)
Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
2024-03-07 11:36:07 +00:00
metabase-bot[bot]
8506b7be8c Add a repro for metabase#39508 (#39692) (#39745)
Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
2024-03-07 07:14:09 +00:00
metabase-bot[bot]
a3ced40f20 docs - update basic exploration (#39559) (#39736)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-03-06 22:06:25 +00:00
metabase-bot[bot]
fe364046fe Render CSV append errors as markdown (#39651) (#39726)
Co-authored-by: Chris Truter <crisptrutski@users.noreply.github.com>
2024-03-06 21:56:50 +00:00
metabase-bot[bot]
161857a357 Fix field-vales query to specify :full type (#39652) (#39694)
Co-authored-by: Chris Truter <crisptrutski@users.noreply.github.com>
2024-03-06 21:12:25 +00:00
metabase-bot[bot]
52b96c514e Fix text cutoff for error view and no results view on dash-cards (#39656) (#39725)
* fix dashcard text gets cut off

* fix magic number

Co-authored-by: Jesse Devaney <22608765+JesseSDevaney@users.noreply.github.com>
2024-03-06 21:07:38 +00:00
metabase-bot[bot]
19d11bfe78 fix action button label cut off (#39661) (#39720)
Co-authored-by: Jesse Devaney <22608765+JesseSDevaney@users.noreply.github.com>
2024-03-06 20:36:16 +00:00
metabase-bot[bot]
a3d75d0b98 Fix click behavior not working for pivot table header cells and tables pivoted (pivoted column cells) (#39569) (#39663)
* update pivot table header cells clicked format to match the expected format

* fix clicked table pivoted click behavior for the chosen pivot column

* fix failing tests

* add tests

Co-authored-by: Jesse Devaney <22608765+JesseSDevaney@users.noreply.github.com>
2024-03-06 20:28:44 +00:00
metabase-bot[bot]
105b479127 38092 metadata table columns dnd (#39637) (#39713)
* Metadata Table columns use Sortable List

* cleanup

* e2e test adjustments

Co-authored-by: Nick Fitzpatrick <nick@metabase.com>
2024-03-06 20:00:43 +00:00
metabase-bot[bot]
f34f3d9300 ChartSettingOrderedItems using SortableList (#39561) (#39698)
* ChartSettingOrderedItems using SortableList

* e2e test adjustments

* unit tests

Co-authored-by: Nick Fitzpatrick <nick@metabase.com>
2024-03-06 16:24:49 +00:00
metabase-bot[bot]
dc7a1cbc23 🤖 backported "Join performance issues" (#39676) 2024-03-06 15:12:11 +00:00
metabase-bot[bot]
7142d3cf15 🤖 backported "Don't provision SSO users before the instance has been setup" (#39644)
Co-authored-by: Noah Moss <32746338+noahmoss@users.noreply.github.com>
2024-03-06 10:11:00 -05:00
metabase-bot[bot]
1ac3a8a5d2 Repro #11994 - Clicking RawData-toggle on pivoted table makes the question dirty and shows Save-button (#39629) (#39689)
* Convert commands/api/question to TS

* Add missing embedding_params and collection_position attributes to Card

* Type question function

* Move types to the top of file

* Inline throwIfNotPresent

* Add types for logAction

* Define StructuredQuestionDetails & NativeQuestionDetails

* Add typing to commands

* Return for consistency

* Remove queryType argument from question

* Define typing for archiveQuestion command

* Format code

* Define typing for createQuestion and createNativeQuestion commands

* Make options optional

* Remove TODO

* Use arrow functions, update JSDoc

* Use type for consistency

* Add missing attributes in mocks

* Make embedding_params non-optional

* Add boilerplate for 11994 repro

* Add temporary code

* Improve typing

* Implement test for combo chart

* Simplify code

* Convert updatePermissions to TS and add typing for updatePermissionsGraph

* Add typing for updatePermissionsSchemas

* Add typing for API responses, make updatePermissionsSchemas parameters optional

* Add JSDocs

* Explicitly specify types in commands

* Use CardId

* Fix the test
- add missing visuzalization_settings to the pivot question
- use "readonly" user and drop permissions manipulations

* Remove TODO

* Add an explanatory comment

Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
2024-03-06 14:53:12 +00:00
metabase-bot[bot]
447245dbf1 Use new Popover in notebook components (#39690) 2024-03-06 14:32:57 +00:00
metabase-bot[bot]
5c7356d81d Fail number parsing if it is only a substring (#39576) (#39693)
Co-authored-by: Chris Truter <crisptrutski@users.noreply.github.com>
2024-03-06 14:29:19 +00:00
metabase-bot[bot]
5ce81a0e4f Scroll dashboard tabs to the end when adding a tab (#39648) (#39684)
* Scroll dashboard tabs to the end when adding a tab

* Fix useEffect deps

* Handle typescript error

Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
2024-03-06 12:40:54 +00:00
metabase-bot[bot]
d3e97949d1 Fix mistake in API changelog: type can be "question" not "query" (#39673) (#39674)
Co-authored-by: Cal Herries <39073188+calherries@users.noreply.github.com>
2024-03-06 05:47:47 +00:00
metabase-bot[bot]
745c09c557 Use timestamp in attachment filenames (#39666) (#39672)
* Use timestamp in attachment filenames

Fixes: #39120

This modifies the subscriptin attachment filenames to match the same format used when doing a direct download from a
dashboard or question.

That is:
 - card names are slugified (spaces and dashes turned to underscores, etc.)
 - a timestamp is appended to the slugified card name

* Fix tests

* Change docstring to use example local to the namespace

Co-authored-by: adam-james <21064735+adam-james-v@users.noreply.github.com>
2024-03-06 05:17:51 +00:00
metabase-bot[bot]
aa9785a6fb Fix errors happening after canceling a new dashboard tab creation (#39473) (#39643)
* Add repro test

Reproduces #38055
Reproduces #38278

* Add `cancelEditingDashboard` action

* Clean `selectedTabId` when canceling editing

Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
2024-03-05 19:20:50 +00:00
metabase-bot[bot]
c4f82f8e09 Update text for visualisation loading state (#39625) (#39641)
Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
2024-03-05 18:05:45 +00:00
Kamil Mielnik
6bd6173c8f Backport #39623 - Introduce describeWithSnowplowEE (#39626)
* Introduce describeWithSnowplowEE and use it in e2e/test/scenarios/onboarding/home/browse.cy.spec.js

* Use separate block for EE tests
2024-03-05 14:15:40 +00:00
metabase-bot[bot]
139b976702 Update dashboard sections menu (#39533) (#39617)
Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
2024-03-05 10:51:55 +00:00
metabase-bot[bot]
941fa35235 Fix cursor in notebook editor (#39566) (#39609)
Co-authored-by: Uladzimir Havenchyk <125459446+uladzimirdev@users.noreply.github.com>
2024-03-05 01:30:51 +00:00
metabase-bot[bot]
446a6ccf14 Saml2 slo (#39034) (#39588)
* wip

* SLO works with auth slo handler route

* move slo handling endpoint to /auth/sso/handle_slo

* fix slo redirect url

* SLO works, and the sso-handle-slo for saml is where it belongs

- a ton of cleanup

* fix api/session namespace + add docstrings

* cleaning up logout action

* add slo logout test along with slo response xml

* whitespace + linter

* add docstring

* update exclusions in deps.edn

* un-require metabase-enterprise ns from oss ns

* add docs for how to setup SLO to metabase docs

* docs: clarify that setting up SLO is optional

* move slo logout endpoint into ee code

- removes sso-info defenterprise since it is no longer needed

* use current version of saml20-clj

---------

Co-authored-by: bryan <bryan.maass@gmail.com>
Co-authored-by: Nick Fitzpatrick <nickfitz.582@gmail.com>
2024-03-05 00:53:35 +00:00
metabase-bot[bot]
c924d704f4 fix query string parsing (#39537) (#39570)
Co-authored-by: Jesse Devaney <22608765+JesseSDevaney@users.noreply.github.com>
2024-03-04 22:37:47 +00:00
metabase-bot[bot]
610798bc09 48.8 (#39573) (#39575)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-03-04 21:52:34 +00:00
metabase-bot[bot]
d768070a80 Add Creator Sentiment Email task (#38787) (#39551)
* Add new email function and send email to creator

* remove debug stuff

* add tests, address comments

* actually add tests

* Update src/metabase/email/messages.clj



* address comments

---------

Co-authored-by: Jerry Huang <34140255+qwef@users.noreply.github.com>
Co-authored-by: Noah Moss <32746338+noahmoss@users.noreply.github.com>
2024-03-04 20:57:19 +00:00
metabase-bot[bot]
38e9a6a798 [QP] Use the alias for unfolded JSON columns from previous stages (#39446) (#39536)
In the legacy QP the `:fields` of the outer query has the ID,
`[:field 100 {}]` so the JSON unfolding is written out again.

With this change, the `source-alias` is used for columns coming from
previous stages.

Fixes #34930. Fixes #35636.

Co-authored-by: Braden Shepherdson <braden@metabase.com>
2024-03-04 20:34:53 +00:00
metabase-bot[bot]
800418ba73 [QP] Fix confusion of expressions with the same name as columns (#39255) (#39526)
When determining column aliases in `add-alias-info`, reuse an existing
desired column alias if one is present.

Fixes #39059. Might fix #25931.

Co-authored-by: Braden Shepherdson <braden@metabase.com>
2024-03-04 23:21:48 +03:00
metabase-bot[bot]
5c4802401a [MLv2] joinable-columns on a Join sets source and alias (#39529) (#39543)
`(joinable-columns query stage a-join)` previously returned
`:lib/source :source/table-defaults` and set
`:metabase.lib.join/join-alias` but not `:source-alias`.

This corrects both issues so that `joinable-columns` on a join returns
columns with the same shape as from `visible-columns`.

Also refactors a series of `mapv` transforms into a transducer pipeline.

Fixes #39514.

Co-authored-by: Braden Shepherdson <braden@metabase.com>
2024-03-04 18:45:04 +00:00
metabase-bot[bot]
3b223e4571 Additional X-Ray Documentation (#39466) (#39540)
This just expands the documentation in the primary x-ray namespace (`metabase.automagic-dashboards.core`). At this point, someone new to the namespace should be able to get into the x-ray code without difficulty.

Co-authored-by: Mark Bastian <markbastian@gmail.com>
2024-03-04 18:27:09 +00:00
metabase-bot[bot]
96c009a491 🤖 backported "Clear undo stack when first opening native editor" (#39051)
* Clear undo stack when first opening native editor (#39003)

* Add regression test for #35344

* Clear undo's when first opening editor

* Make sure normal undo's still work

* Fix test not to use focusNativeEditor

---------

Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
2024-03-04 17:31:34 +00:00
metabase-bot[bot]
4a4047db19 Prevent custom expressions from being removed from the query (#39518) (#39534)
Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
2024-03-04 16:35:25 +00:00
metabase-bot[bot]
7fff43c5e8 🤖 backported "[serdes-v1] can now dump/load entity_id" (#39524)
Co-authored-by: Alexander Solovyov <alexander@solovyov.net>
2024-03-04 11:19:38 -05:00
metabase-bot[bot]
eb9a9a9034 🤖 backported "Optimize data step in the notebook editor" (#39513) 2024-03-04 18:03:01 +02:00
metabase-bot[bot]
31c4c29955 Fix mongo password handling (#38959) (#39527)
* Fix mongo password handling

* Update test, add credential check

* Address the review remarks

Co-authored-by: lbrdnk <lbrdnk@users.noreply.github.com>
2024-03-04 16:00:54 +00:00
metabase-bot[bot]
18613f250f Mitigate BE flakes caused by redshift-lbv-sync-error-test and redshift-types-test (#39045) (#39525)
Co-authored-by: Cal Herries <39073188+calherries@users.noreply.github.com>
2024-03-04 15:41:00 +00:00
metabase-bot[bot]
bf40eb56fb Repro #23851 - Drill-through on a timestamp column binned as XofY fails unless sematic type is defined (#39510) (#39521)
* Add repro for #23851

* Use arrow function

* Improve assertions

* Improve assertion

Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
2024-03-04 15:32:48 +00:00
metabase-bot[bot]
4e82659eec Repro #30312 - Cannot filter directly from table column header when Question is Summarized (#39500) (#39515)
* Add repro for #30312

* Use arrow function

* Improve assertions

Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
2024-03-04 14:01:51 +00:00
metabase-bot[bot]
8c0803d049 Replace dashboard.isEditing state with dashboard.editingDashboard (#39472) (#39507)
* Use `null` instead of `false` for `setEditingDashboard`

* Replace `isEditing` with `editingDashboard`

* Extract `EditableActionButtonAttrs`

Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
2024-03-04 12:12:53 +00:00
metabase-bot[bot]
261e58f67e Convert dashboard/actions/core to TypeScript (#39464) (#39501)
Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
2024-03-04 10:54:20 +00:00
metabase-bot[bot]
a7da942461 Repro #34688 and #34690 - Time series footer (#39442) (#39496)
* Add repro for #34690

* Add a repro for #34688

* Rename file

* Format code

* Update test name

Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
2024-03-04 07:01:07 +00:00
metabase-bot[bot]
fe7d1b0b29 Fix snowflake ssh tunnel (#39283) (#39465)
* Fix snowflake ssh tunnel

* Put test where it will run in CI

* Override incorporate-ssh-tunnel

* Revert snowflake in util.ssh-test

* Move tunnel connection tests to sql_jdbc

* Add mock-server fixture

* Exclude drivers from tunnel test

* Fix up reconnection tests

* Exclude more drivers

* Address PR feedback

Co-authored-by: Case Nelson <case@metabase.com>
2024-03-04 06:51:12 +00:00
metabase-bot[bot]
850909a1e1 🤖 backported "Dashboard Header FC, using entity, select, and dispatch hooks" (#39426)
* Dashboard Header FC, using entity, select, and dispatch hooks (#39267)

* Dashboard Header FC, using entity, select, and dispatch hooks

* resolving types

* updating other use of getDashboardActions

* PR feedback

* shimming in bookmark list hook

---------

Co-authored-by: Nick Fitzpatrick <nick@metabase.com>
Co-authored-by: Nick Fitzpatrick <nickfitz.582@gmail.com>
2024-03-01 22:33:51 +00:00
metabase-bot[bot]
6ebf7b6379 Generate unique user name in table-privileges-test (#39457) (#39475)
* Generate unique user name in table-privileges-test

Co-authored-by: metamben <103100869+metamben@users.noreply.github.com>
2024-03-01 21:28:56 +00:00
metabase-bot[bot]
2777fd3e18 Fix click behavior when routing to a different tab on the same dashboard (#39319) (#39474)
* fix click behavior for routing to a new tab on the same dashboard

* update changes

* add test to validate behavior

Co-authored-by: Jesse Devaney <22608765+JesseSDevaney@users.noreply.github.com>
2024-03-01 20:07:09 +00:00
metabase-bot[bot]
c95e830651 Fix dashboard tabs drop animation (#39444) (#39463)
* Fix dashboard tabs drop animation

* Remove animation delay from an e2e test

Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
2024-03-01 17:57:47 +00:00
metabase-bot[bot]
46851324c0 Fix visual glitch when dragging a dashboard tab (#39445) (#39460)
Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
2024-03-01 17:38:06 +00:00
metabase-bot[bot]
bef7bde7eb docs - updates to installation (#39228) (#39459)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-03-01 16:54:56 +00:00
metabase-bot[bot]
75ba0eec66 Forcefully reload table/card metadata when there are no fields (yet) (#39311) (#39453)
Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
2024-03-01 16:39:05 +00:00
Kamil Mielnik
eb85db36a5 Revert "Fix missing result metadata (#39243)" (#39293)
* Revert "Fix missing result metadata (#39201) (#39243)"

This reverts commit ca5d0e2844.

* Bring back e2e test
2024-03-01 08:16:52 +00:00
metabase-bot[bot]
93af623cbc Reset new dashboard subscription form state (#39258) (#39298)
Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
Co-authored-by: Uladzimir Havenchyk <125459446+uladzimirdev@users.noreply.github.com>
2024-03-01 07:48:34 +00:00
metabase-bot[bot]
68d7e82a9c switch back to ring-jetty-adapter - addresses security issue (#39321) (#39427)
Co-authored-by: Alexander Solovyov <alexander@solovyov.net>
2024-03-01 00:07:57 +01:00
metabase-bot[bot]
ba23132d4b update deps with security issues (#39286) (#39306)
Co-authored-by: Alexander Solovyov <alexander@solovyov.net>
2024-02-29 22:29:41 +01:00
metabase-bot[bot]
313d3e786f Hack test case to unblock Oracle tests (#39317) (#39412)
* Hack test case to unblock Oracle tests

In metabase.query-processor-test.implicit-joins-test/implicit-joins-with-expressions-test
we calculate an interval by going back from today a number of years to arrive at 2019. On
February 29, this calculation fails with Oracle because there was no February 29 in 2019.
This hack changes 2019 to 2020 and makes Oracle happy.
breakout-on-temporally-bucketed-implicitly-joined-column-inside-source-query-test
had to be adjusted too.

Co-authored-by: metamben <103100869+metamben@users.noreply.github.com>
2024-02-29 20:36:52 +00:00
metabase-bot[bot]
690a906109 Migrating ParametersList to dnd-kit (#38059) (#39415)
Co-authored-by: Nick Fitzpatrick <nick@metabase.com>
2024-02-29 20:35:14 +00:00
metabase-bot[bot]
7cf8317125 🤖 backported "Don't delete "off" persisted_info records" (#39318)
* Don't delete "off" persisted_info records

If they are off, they are "eligible" models for persistence that we do
not want to persist. And to remember that use choice to not persist them
we need to keep the record around. This was handled previously, but
https://github.com/metabase/metabase/pull/39219 was a bit too blunt. We
had a bunch of records in a "creating" state that we weren't removing,
so i deleted them regardless of state. But we want to make sure that the
"off" ones are not deleted.

On stats, a bunch of ones that were set to off are now slated to be
persisted after the prune job deleted the persisted_info records.

* unused local. whoops

Co-authored-by: dpsutton <dan@dpsutton.com>
2024-02-29 15:31:09 -05:00
metabase-bot[bot]
ce6f4a1768 Translate object action select strings (#38889) (#39304)
* translate object action select strings

* import order fix

Co-authored-by: Ryan Laurie <30528226+iethree@users.noreply.github.com>
2024-02-29 18:20:24 +00:00
metabase-bot[bot]
924802c105 Trend Charts: Improve Error Messages (#39212) (#39316)
* improve error messages

* update error message

Co-authored-by: Jesse Devaney <22608765+JesseSDevaney@users.noreply.github.com>
2024-02-29 17:54:56 +00:00
metabase-bot[bot]
c19b3f8a03 Delete all pruned persisted info records (#39219) (#39236)
We prune persisted info records if they meet any of the following
criteria:

```clojure
(or (contains? (persisted-info/prunable-states) current-state)
    (:archived card-info)
    (not (:dataset card-info)))
```

But we only deleted the record when:

```clojure
(when (= "deletable" current-state)
  (t2/delete! PersistedInfo :id (:id persisted-info)))
```

So any records that were in a "creating" state (persist a model, but
before it first gets persisted, make it not a model, or archive the
underlying model), we constantly pruned them but never removed the
persisted info record.

Leading to task results like:

```javascript
{"success": 21, "error": 0, "skipped": 0}
```

Because 21 things were queued up for pruning, were attempted to be
pruned, but the persisted info record never removed.

Co-authored-by: dpsutton <dan@dpsutton.com>
2024-02-29 11:42:03 -06:00
metabase-bot[bot]
84d364788c update e2e_specs to include ts files (#39314) (#39315)
Co-authored-by: Nicolò Pretto <info@npretto.com>
2024-02-29 17:12:09 +00:00
metabase-bot[bot]
8e7b01d6a8 Fix api key empty state (#39302) (#39309)
Co-authored-by: Ryan Laurie <30528226+iethree@users.noreply.github.com>
2024-02-29 16:51:10 +00:00
metabase-bot[bot]
aafa9ae333 docs - 49 updates (#39135) (#39312)
* filter notes

* usage insights notes

Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-02-29 16:43:16 +00:00
metabase-bot[bot]
9a3ae84455 Make tabs e2e test more reliable and do not fail on 29th of February (#39301) (#39307)
Co-authored-by: Uladzimir Havenchyk <125459446+uladzimirdev@users.noreply.github.com>
2024-02-29 16:12:50 +00:00
metabase-bot[bot]
8b4d6083b6 docs - clean up docs on referencing question and models in SQL questions (#39265) (#39274)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-02-28 21:55:35 +00:00
metabase-bot[bot]
c621c58400 Admin logs layout fix & perf improvements (#39031) (#39271)
Co-authored-by: Sloan Sparger <sloansparger@users.noreply.github.com>
2024-02-28 21:34:45 +00:00
metabase-bot[bot]
ca5d0e2844 Fix missing result metadata (#39201) (#39243)
* Keep result-metadata of native queries if possible

Part of #37009.

* Fix typo

* Add a fallback for when resultMetadata is not available

* Revert "Add a fallback for when resultMetadata is not available"

This reverts commit 5ad3a8b408.

* Move resultsMetadata logic into getSubmittableQuestion

* Add a fallback for when resultMetadata is not available

* Add explanatory comment

* Guard against missing resultsMetadata

* Add repro for #35039

* Simplify the test

* Add an explanatory comment

* Fix test

* Rename promise to runQuestionPromise

---------

Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
Co-authored-by: Tamás Benkő <tamas@metabase.com>
2024-02-28 14:53:39 +00:00
metabase-bot[bot]
6ab66e940a Update saml-okta.md (#38597) (#39247)
Removing a trailing `/`

Co-authored-by: Tony-metabase <110378427+Tony-metabase@users.noreply.github.com>
2024-02-28 13:55:26 +00:00
metabase-bot[bot]
c6a236b5d2 Fix wrong icon colors (#39238) (#39242)
* Remove unused props to avoid confusion

* Fix incorrect official collection icon in collection view

* Fix hardcoded SVG icon color

* Remove unused prop

Co-authored-by: Mahatthana (Kelvin) Nomsawadi <me@bboykelvin.dev>
2024-02-28 11:36:58 +00:00
metabase-bot[bot]
07262ba0ee Fixes filters against datetime binned expressions (#38874) (#38975)
* Fixes filters against datetime binned expressions

Fixes #33528

Turns out that `mbql/normalize` and `lib/normalize` behaved slightly
different and `[:expression "abc" {...}]` refs would drop their opts in
the former path. In order to properly query against binned datetimes
it's important that expression ref does not lose its type or else the
optimizer will not see that `time-interval` needs to convert to a
`between` rather than an `=`.

* Fix test

* Only keep specific keys on expression opts for these expression filters

* Don't run checkin dataset on snowflake or athena

Co-authored-by: Case Nelson <case@metabase.com>
2024-02-27 20:34:25 +00:00
metabase-bot[bot]
2fdce0cb3a Text cards not skipped in pulses (#39216) (#39222)
This PR updates the logic of skipping what cards are displayed in a pulse email by ensuring the type of the card being processed is a `:card` in addition to having no results.

Co-authored-by: Mark Bastian <markbastian@gmail.com>
2024-02-27 19:59:34 +00:00
metabase-bot[bot]
b1fcf5bf45 QB: reduce number of MLv2 calls (#39208) (#39217)
Co-authored-by: Uladzimir Havenchyk <125459446+uladzimirdev@users.noreply.github.com>
2024-02-27 18:57:07 +00:00
metabase-bot[bot]
7d3476ced0 Fixing bad pulses when bad params exist (#39136) (#39213)
* Fixing bad pulses when bad params exist

Previously, when a dashboard parameter was removed that was depended upon by a subscription, the subscription went into a broken state that was unfixable (the removed param was still attached to the notification but not visible in the UI for editing). Rather than remove that parameter, which could potentially lead to data leaks, we just archive the pulse.

Now, when a dashboard is saved that would break a pulse/subscription, we archive the pulse and send an email the the dashboard and pulse creators to notify them that the pulse has been removed. The email also contains which params were removed as well as a list of who will no longer be receiving the messages.

One code consideration when writing the query logic to determine the blast radius of the bad pulse was whether to write a large join query then reorganize the results or do N+1 queries starting from the pulse id (The logic requires hitting all of pulse, pulse channel, pulse channel recipients, and user tables). I started with a full join query along the lines of what is shown below, but opted for the N+1 query as broken pulses should be a very rare occurrence so readability was preferred over performance.

```clojure
  (let [parameter-ids ["a3d043d5"]]
    (when (seq parameter-ids)
      (t2/query
        (sql/format
          {:with   [[:params {:select [[:id]
                                       [[:raw "json_array_elements(parameters::json) ->> 'id'"]
                                        :parameter_id]]
                              :from   :pulse}]
                    [:pulse_ids {:select-distinct [[:id :pulse_id]]
                                 :where           [:in :parameter_id parameter-ids]
                                 :from            :params}]]
           :select [[:p.id :pulse_id]
                    [:pc.id :pulse_channel_id]
                    [:pcr.id :pulse_channel_recipient_id]
                    [:creator.first_name :creator_first_name]
                    [:creator.last_name :creator_last_name]
                    [:creator.email :creator_email]
                    [:recipient.first_name :recipient_first_name]
                    [:recipient.last_name :recipient_last_name]
                    [:recipient.email :recipient_email]]
           :from   [[:pulse :p]]
           :join   [:pulse_ids [:= :p.id :pulse_ids.pulse_id]
                    [:pulse_channel :pc] [:= :pc.pulse_id :p.id]
                    [:pulse_channel_recipient :pcr] [:= :pcr.pulse_channel_id :pc.id]
                    ;; Get the pulse creator
                    [:core_user :creator] [:= :creator.id :p.creator_id]
                    ;; Get the pulse recipient
                    [:core_user :recipient] [:= :recipient.id :pcr.user_id]]}))))
```

* Fixing inconsistent test results by adding a timeout and expecting 2 messages.

* Fixing NPEs in tests, but not sure why we are not getting results sometimes.

* Trying to fix 500 in dashboard PUT

* Tests run ok locally against mongodb

* Fixing unit tests

* fixing template up

* fixing unit tests

* Adding refined tests to try to detect what is going on with failing tests

* Formatting

* Tracking down test failures and updating email template

* Removing db-specific query

* Simplifying broken pulse logic to not get all pulses twice.

* A couple small simplifications to the logic.

* Adding slack messaging

* Making pulse checks conditional on parameter updates

Co-authored-by: Mark Bastian <markbastian@gmail.com>
2024-02-27 18:32:28 +00:00
metabase-bot[bot]
1e0c3beb97 🤖 backported "Keep result-metadata of native queries if possible" (#39207)
* Keep result-metadata of native queries if possible (#39184)

Part of #37009.

* qp/query->expected-cols -> qp.preprocess/query->expected-cols

---------

Co-authored-by: metamben <103100869+metamben@users.noreply.github.com>
Co-authored-by: Tamás Benkő <tamas@metabase.com>
2024-02-27 17:44:02 +00:00
metabase-bot[bot]
d104d1091e QB: evaluate notebook preview lazy (#39194) (#39202)
* QB: evaluate notebook preview lazily

* fixup! QB: evaluate notebook preview lazily

* fixup! fixup! QB: evaluate notebook preview lazily

* fixup! fixup! fixup! QB: evaluate notebook preview lazily

Co-authored-by: Uladzimir Havenchyk <125459446+uladzimirdev@users.noreply.github.com>
2024-02-27 14:28:08 +00:00
metabase-bot[bot]
3ef28bfee8 docs - mention support for multiple domains (#39165) (#39204)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-02-27 14:01:07 +00:00
metabase-bot[bot]
40bf237c65 🤖 backported "Required filters: track when a filter is made required" (#39195)
* Add dashboard_filter_required (#39159)

* Fix

---------

Co-authored-by: Oleg Gromov <mail@oleggromov.com>
2024-02-27 11:33:12 +00:00
metabase-bot[bot]
db89d6a48c Use People table from sample DB in e2e (#39191) (#39192)
Co-authored-by: Uladzimir Havenchyk <125459446+uladzimirdev@users.noreply.github.com>
2024-02-27 07:49:30 +00:00
metabase-bot[bot]
29d32a643b fix incorrect tooltip value in pie chart (#39180) (#39186)
Co-authored-by: Emmad Usmani <emmadusmani@berkeley.edu>
2024-02-27 00:46:13 +00:00
metabase-bot[bot]
def9a9afac update redirect (#39177) (#39181)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-02-26 21:46:19 +00:00
metabase-bot[bot]
3dc7f8e190 Fix applying default values for a pinned sql question (#39156) (#39173)
* Fix applying default values for a pinned question

* fix typecheck

* Add a comment

Co-authored-by: Uladzimir Havenchyk <125459446+uladzimirdev@users.noreply.github.com>
2024-02-26 20:19:34 +00:00
metabase-bot[bot]
35ad110c7c Add analytics events for browse data (#39028) (#39172)
* Add two Snowplow click tracking events to the Browse Data page, for clicks on models and tables

# Conflicts:
#	frontend/src/metabase/browse/components/BrowseModels.tsx
#	frontend/src/metabase/browse/components/TableBrowser/TableBrowser.jsx

* add backend event

* fix event tracking

* test snowplow even

* update schema type field

* more prettier

---------

Co-authored-by: Ryan Laurie <30528226+iethree@users.noreply.github.com>
Co-authored-by: Raphael Krut-Landau <raphael.kl@gmail.com>
2024-02-26 20:01:42 +00:00
metabase-bot[bot]
6ec581a48e redirect faq to docs README (#39171) (#39174)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-02-26 19:54:30 +00:00
metabase-bot[bot]
e7ee72a913 Converted queries shouldn't change stage-metadata (#39127) (#39166)
Converted queries need to fill in types of references converted from v1
to properly pass schemas. However legacy refs still exist in
`:lib/stage-metadata` and these refs should not be touched. Checking
that `map?` is in the second position of a ref is an easy way to
determine which version ref we're looking at.

Co-authored-by: Case Nelson <case@metabase.com>
2024-02-26 17:42:50 +00:00
metabase-bot[bot]
82977364d1 Fix invisible text in custom homepage toast (#39158) (#39161)
Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
2024-02-26 17:29:04 +00:00
metabase-bot[bot]
5f8e80f6c2 Migrate graph.metrics sync to use QP metadata (#39094) (#39148)
* Migrate graph.metrics to use QP metadata

* Migrate graph.metrics to use QP metadata

* Handle native columns

* Handle missing query results

* Optimize

Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
2024-02-26 11:02:45 +00:00
metabase-bot[bot]
d5a366c145 Allow binning field refs from expressions (#39089) (#39141)
Fixes #26202

Previously we only looked for binned field-ids in order to update
binning strategies in qp. With this change we also look for field-name
refs. This allows expressions to be binned in models.

Co-authored-by: Case Nelson <case@metabase.com>
2024-02-24 00:20:47 +00:00
metabase-bot[bot]
a0f31c8078 Fix duplicate log line (#39133) (#39139)
Co-authored-by: John Swanson <john.swanson@metabase.com>
2024-02-24 00:00:10 +00:00
metabase-bot[bot]
d8fa3a15eb Add env var to hide built-in geojson (#39132) (#39137)
Co-authored-by: Noah Moss <32746338+noahmoss@users.noreply.github.com>
2024-02-23 21:31:33 +00:00
metabase-bot[bot]
b9a8d8060a Fix dashboard filters color transition when leaving fullscreen (#39126) (#39131)
Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
2024-02-23 19:39:12 +00:00
metabase-bot[bot]
9fb4a2d04b Show filters without values in fullscreen mode (#39076) (#39125)
* Show filters without values in fullscreen mode

* Remove `parametersWidget` from `DashboardHeader`

* Use regular filters panel in fullscreen mode

* Minor refactor

* Minor refactor

* Fix nightmode

* Fix transition

Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
2024-02-23 18:23:56 +00:00
metabase-bot[bot]
7f10f8d101 Remove special describe-table-fks for redshift (#39011) (#39116)
Co-authored-by: Cal Herries <39073188+calherries@users.noreply.github.com>
2024-02-23 16:07:03 +00:00
metabase-bot[bot]
2141db363d Fix previews for multi-stage queries (#39108) (#39113)
Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
2024-02-23 15:30:56 +00:00
metabase-bot[bot]
73c9eb657a Include filters when exporting dashboard to PDF (#38231) (#39104)
* Include filters when exporting dashboard to PDF

* Fix missing dashcard borders

* Fix title padding

* Fix filters panel background color

* Fix parameters panel spacing

* Extract `DASHBOARD_PDF_EXPORT_ROOT_ID` const

---------

Co-authored-by: Vamsi Peri <vamsi@metabase.com>
Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
2024-02-23 14:41:28 +00:00
metabase-bot[bot]
710c28af37 Update required parameter reset icon (#39068) (#39105)
Co-authored-by: Oleg Gromov <mail@oleggromov.com>
2024-02-23 14:32:21 +00:00
Alexander Polyankin
b7d4567df3 Backport viz table column changes with getColumnKey (#39093) 2024-02-23 15:00:03 +02:00
metabase-bot[bot]
88257264e4 Hide dashboard actions on public/static embed dashboards (#39048) (#39100)
* Hide dashboard actions on public/static embed dashboards

This is not what we want. See
https://metaboat.slack.com/archives/C057T1QTB3L/p1696532502602629?thread_ts=1696519212.704419&cid=C057T1QTB3L

* Add E2E tests

* Review: Use TS type guard

* Fix the logic in the previous commit

Co-authored-by: Mahatthana (Kelvin) Nomsawadi <me@bboykelvin.dev>
2024-02-23 11:03:21 +00:00
Kamil Mielnik
c18c3f0d21 Backport - RFC 70 - Automate sorting imports (#39096)
* Include e2e directory in prettier scripts

* Align ESLint & prettier paths in "lint-stage" & "scripts" in package.json

* Handle ts files in e2e tests

* Format "lint-prettier-pure" script the same way as "prettier"

* Ignore database files in ESLint as they reference a file that is git-ignored but does exist locally

* Remove duplicated eslint call

* Manually fix ESLint-reported issues

* Upgrade eslint-plugin-import

* Configure import/order rule for consistent, predictable imports

* Change "eslint-disable-next-line no-restricted-imports" into "eslint-disable-line"

* Ensure imports are in a single block

* Move or remove informative comments between import statements

* Remove imports-grouping comments

* Configure groups
- the difference between the default setting is the presence of "internal" group

* Manually fix imports order and disable "import/order" rule in files with possible circular dependencies

* Move comment to the same line as import

* Run "yarn eslint-fix" 5 times

* Manually fix imports order in remaining files

* Run "yarn prettier"

* Fix import

* Fix circular dependency

* Fix circular dependency

* ESLint
2024-02-23 16:45:45 +07:00
metabase-bot[bot]
74d823a52f Allow official collections inside personal collections (#38823) (#39061)
* initial stuff

* remove check for sub collections in personal collections

* remove test

* cleanup and adjusting tests

* import spacint

---------

Co-authored-by: Nick Fitzpatrick <nick@metabase.com>
Co-authored-by: Jerry Huang <jhuang37050@gmail.com>
2024-02-22 22:26:29 -05:00
metabase-bot[bot]
f9abe816ee Flow :semantic-type through QP for aggregations (#38829) (#39088)
* WIP flow :semantic-type through QP for aggregations

Fixes: #38022

WIP need to add and fix some tests and confirm if this is the most correct place to fix the problem. Seems like it's a
good spot to put things though.

* Add test asserting that :semantic_type does flow through QP

Also fix a couple tests that now have a :semantic_type key.

* Add different aggregation types to semantic-type test

Working on adding tests and fixing various aggregation semantic types

* Test :semantic-type for all aggregations and adjust some metadata-methods

* Better use of existing methods via derive

* Properly set hierarchy between ::count-aggregation and ::quantity-aggregation

Co-authored-by: adam-james <21064735+adam-james-v@users.noreply.github.com>
2024-02-22 23:58:37 +00:00
metabase-bot[bot]
2032c4e5eb update list of releases (#39084) (#39085)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-02-22 22:25:28 +00:00
metabase-bot[bot]
1f3b5ff4ad Update Metabase analytics content for 49 (#39058) (#39073)
* update content for 49

* add date filter to question overview

Co-authored-by: Luiz Arakaki <luiz.arakaki@metabase.com>
2024-02-22 20:11:52 +00:00
metabase-bot[bot]
61fb9fa56e Filter picker search free input (#38907) (#39069)
Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
2024-02-22 18:37:23 +00:00
Anton Kulyk
5cbe86b590 Manual backport: Trend chart tweaks (#38976) (#39055)
* Auto open the comparison picker

* Preselect a single column for "anotherColumn" comparisons

* Flip value and label inputs in `StaticNumberForm`

* Respect static value's label case

* Merge `getInitialColumn` and `getInitialLabel`
2024-02-22 15:30:47 +00:00
metabase-bot[bot]
213d77ff9b 🍒 Backport Browse models improvements (#38661) (#38730) (#38704)
* Browse models: Add one filter (#38661)
* Browse models: refactoring (#38730)
* Browse models: expandable/collapsible collections (#38704)
2024-02-22 08:00:35 -07:00
metabase-bot[bot]
740815f62f Fix can't select dashboard tabs in interactive embedding with parameter header=false (#39007) (#39039)
* Remove full-app to a newer term

* Fix dashboard not loading in interactive embedding with header=false
header=false

* Fix can't choose dashboard tabs in interactive embedding w/ header=false

Co-authored-by: Mahatthana (Kelvin) Nomsawadi <me@bboykelvin.dev>
2024-02-22 12:45:27 +00:00
metabase-bot[bot]
72e72c213e Add api change log for replacing report_card.dataset with report_card.type (#39044) (#39052)
* add an api change log about replacing report_card.dataset with report_card.type

* Update docs/developers-guide/api-changelog.md

Co-authored-by: Ngoc Khuat <qn.khuat@gmail.com>
2024-02-22 11:57:12 +00:00
metabase-bot[bot]
4c58e51cc5 [MLv2] Prescribe the order for metabase.lib.column-group/group-columns (#38587) (#39036)
The desired order is: own columns, explicitly joined, implicitly joined.
Explicit joins are ordered among themselves by join alias. Implicit
joins are ordered by the join alias of the FK (own columns first), then
by the name of the FK column.

Previously this order has usually been at least close to the desired
order by accident, since it's close to the iteration order of
`visible-columns`. However, `group-columns` uses `group-by`, which
returns a map. If there are enough groups (more than 8 I think) the map
implementation will switch from a `[key1 value1 key2 value2 ...]` array
to a real map, and the iteration order is undefined.

This change enforces the desired order, including a test that `shuffle`s
the columns. (And fixing the expectations for a few other tests.)

Co-authored-by: Braden Shepherdson <braden@metabase.com>
2024-02-21 23:50:08 +00:00
metabase-bot[bot]
7977ac73e0 standardize params formatting (#38202) (#39029)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-02-21 21:58:44 +00:00
metabase-bot[bot]
6a9eb3ba2f 🤖 backported "Do not create param_values on Dashboard Load, only fetch if they exist" (#39004)
* Do not create param_values on Dashboard Load, only fetch if they exist (#38980)

* Do not fetch param_values on Dashboard Load

Fixes: #38826

This change removes the *-or-create* behaviour of `field-ids->param-field-values`. This means that on Dashboard Load,
if the param values already exist, they'll be grabbed. But, if they don't, we won't try to fetch or create them.

This is WIP because it seems to contradict changes related to fixing #30218

* Comment out the other test added for #30218

* Remove the tests from 30218

These tests are asserting that param_values are created on dashboard load when the Field Values don't exist. This is
the behaviour we want to revert, so the tests are asserting something we don't want anymore.

* Improved test string wording

* Update src/metabase/models/params.clj

Co-authored-by: Ngoc Khuat <qn.khuat@gmail.com>

---------

Co-authored-by: Ngoc Khuat <qn.khuat@gmail.com>

* Add the refactored fns that were used to solve 38826

---------

Co-authored-by: adam-james <21064735+adam-james-v@users.noreply.github.com>
Co-authored-by: Ngoc Khuat <qn.khuat@gmail.com>
Co-authored-by: Adam James <adam.vermeer2@gmail.com>
2024-02-21 18:47:55 +00:00
metabase-bot[bot]
db5f8a31db Add server side generated relative datetime capabilities to Snowflake (#38779) (#39017)
* Remove duplicate definition

* Extend server side relative datetime generation to Snowflake

* Cleanup

Co-authored-by: lbrdnk <lbrdnk@users.noreply.github.com>
2024-02-21 18:15:04 +00:00
metabase-bot[bot]
a6f0c77050 Use server side generated timestamp for relative datetime computation on Redshift v2 (#38604) (#39009)
* Restore commit 16988f50d6, server side generated timestamps for Redshift (#35995)

* Remove redundant test -- caching is best effort

* Make comments more descriptive

* Remove 0 arity from testcase generator function

* Move units into `use-server-side-relative-datetime?` definition

Co-authored-by: lbrdnk <lbrdnk@users.noreply.github.com>
2024-02-21 16:33:12 +00:00
metabase-bot[bot]
85d542b87b Use batched hydration of fields for tables (#38972) (#39006)
Co-authored-by: Noah Moss <32746338+noahmoss@users.noreply.github.com>
2024-02-21 15:04:10 +00:00
metabase-bot[bot]
1176841f1c Fix - Flaky QueryBuilder tests (#38860) (#38945)
* Use fetchMock.flush() to prevent tests from interfering with each other

* Revert "Use fetchMock.flush() to prevent tests from interfering with each other"

This reverts commit 03f1277cf2.

* Add typing for requests in the redux store

* Fix QueryBuilder flakes by introducing waitForLoadingRequests

* Simplify interface

* Add mocks for requests in redux store, update types

* Simplify code

* Increase timeout

Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
2024-02-21 20:07:05 +07:00
metabase-bot[bot]
6e9d76366d Fix dashboard snowplow schema files (#38977) (#38998)
Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
2024-02-21 12:34:45 +00:00
metabase-bot[bot]
7e375f8996 Update ModelIndex type (#38901) (#38996)
Co-authored-by: Nemanja Glumac <31325167+nemanjaglumac@users.noreply.github.com>
2024-02-21 12:09:06 +00:00
metabase-bot[bot]
85bf128a4d docs - requiring a filter (#38813) (#38983)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-02-20 21:45:07 +00:00
metabase-bot[bot]
7e6ddd29ba Wrap literals around expression refs (#38886) (#38979)
* Wrap literals around expression refs

Fixes #27185

Expression refs need to be handled like field refs as far as type hints
in opts are concerned. Otherwise we don't pass the correct parameter
types to the drivers.

* Address pr feedback

Co-authored-by: Case Nelson <case@metabase.com>
2024-02-20 21:08:44 +00:00
metabase-bot[bot]
d3f4ce1e91 use all hidden parameters to determine visibility (#38882) (#38978)
- queryParams: hide_parameters
- hiddenParameterSlugs

Co-authored-by: Jesse Devaney <22608765+JesseSDevaney@users.noreply.github.com>
2024-02-20 20:26:09 +00:00
metabase-bot[bot]
b27f2e54e5 Use macro that does pre and post cleanup (#38929) (#38947)
Swaps with-temporary-setting-values for with-report-timezone-id.

Co-authored-by: lbrdnk <lbrdnk@users.noreply.github.com>
2024-02-20 09:33:25 +00:00
metabase-bot[bot]
8e401553ce docs - user attribute examples (#38579) (#38936)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-02-19 20:48:44 +00:00
metabase-bot[bot]
f850a0bd67 Sidebar loading state regression fix (#38875) (#38934)
Co-authored-by: Sloan Sparger <sloansparger@users.noreply.github.com>
2024-02-19 20:42:10 +00:00
metabase-bot[bot]
01ec5e0dc2 docs - trend viz updates (#38717) (#38933)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-02-19 20:08:15 +00:00
metabase-bot[bot]
9cff87e751 🤖 backported "Admin UI for disabling user auto provisioning" (#38928)
* Admin UI for disabling user auto provisioning (#38716)

* impl feature

* makes use of existing form components and deletes custom widget

* e2e tests

* fix lints

* fixes lint around Metabase name usage

* removed the select keys line to allow for whatever setting to be updated

* fix defaulting logic for ldap and jwt, fixes unit test

* snip snap snip snap

* fix unit and maybe lint tests

* fix ldap code

* fixes trimming null

* fixes e2e ldap tests

* e2e progress

* breaking local e2e in hopes of fixing ci...

---------

Co-authored-by: Jerry Huang <jhuang37050@gmail.com>

* fix lint

---------

Co-authored-by: Sloan Sparger <sloansparger@users.noreply.github.com>
Co-authored-by: Jerry Huang <jhuang37050@gmail.com>
Co-authored-by: Sloan Sparger <sloansparger@gmail.com>
2024-02-19 20:04:11 +00:00
metabase-bot[bot]
1b60fb8b8d Appends follow-up UI fixes (#38837) (#38931)
Co-authored-by: Ryan Laurie <30528226+iethree@users.noreply.github.com>
2024-02-19 19:26:21 +00:00
metabase-bot[bot]
0360b33ec4 docs - redshift impersonation access (#38734) (#38923)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-02-19 17:17:50 +00:00
metabase-bot[bot]
2e0e408d87 docs - link visibility (#38723) (#38920)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-02-19 16:46:22 +00:00
metabase-bot[bot]
1ba01cd6a4 Replace MetabaseSettings.isEnterprise() with isEEBuild() (#38818) (#38909)
* add getIsEECode selector

* isEEBuild function

* Revert "add getIsEECode selector"

This reverts commit 3fc3fa79a2.

* remove isEnterprise

* rename plugin to be more explicit

Co-authored-by: Nicolò Pretto <info@npretto.com>
2024-02-19 14:27:38 +00:00
metabase-bot[bot]
f24898287b Add new dashboard analytics events (#38872) (#38904)
* Implement `dashboard_width_toggled` event

* Implement `dashboard_section_added ` event

* Add a new snowplow schema file (1-1-4)

* Use 1-1-4 schema file

Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
2024-02-19 12:02:36 +00:00
metabase-bot[bot]
29303fbdbd fix dashboard header fixed width adjustment bug (#38880) (#38885)
Co-authored-by: Jesse Devaney <22608765+JesseSDevaney@users.noreply.github.com>
2024-02-17 04:18:20 +00:00
metabase-bot[bot]
5f363b2895 Admin Layout Regression Fixes (#38688) (#38890)
Co-authored-by: Sloan Sparger <sloansparger@users.noreply.github.com>
2024-02-17 00:58:05 +00:00
metabase-bot[bot]
aea2cb22dc Add per viz-type card template sizes in x-rays (#38836) (#38884)
* Add per viz-type card template sizes in x-rays

Previously, any card without a size (width or height) set in their yaml definition was set to a default of `default-card-width` or `default-card-width`, respectively. This PR adds a map of default and min dimensions per viz type (the `:display`) key and fills that in for each template. The template is merged into this result, keeping anything that already existed in the yaml file.

Before merging this we should consider if we want to use the min values and where this data should be stored. It is currently in `metabase.automagic-dashboards.dashboard-templates`, but was lifted from [sizes.ts](https://github.com/metabase/metabase/blob/master/frontend/src/metabase/visualizations/shared/utils/sizes.ts).

* Moving card sizing constants to cljc

The default card sizes were found in `sizes.ts` and were duplicated into `metabase.automagic-dashboards.dashboard-templates`. This PR consolidates those changes into `metabase.shared.automagic-dashboards.constants`.

Note that @kulyk and @JesseSDevaney might want to consider further consolidation of dashboard related constants into this namespace.

* Incorporating Feedback

Changes
- Explicitly defined two constants in the shared file that are clj and js friendly
- Set case to CARD_SIZE_DEFAULTS_JSON
- Updated `metabase.automagic-dashboards.dashboard-templates/set-default-card-dimensions` to use a helper

* Update src/metabase/shared/automagic_dashboards/constants.cljc



* Updating ns name per Jesse

---------

Co-authored-by: Mark Bastian <markbastian@gmail.com>
Co-authored-by: Jesse Devaney <22608765+JesseSDevaney@users.noreply.github.com>
2024-02-16 22:21:23 +00:00
metabase-bot[bot]
c37c5d72c0 Make the filter bar sticky for public dashboards (#38766) (#38876)
* Make filters sticky

* Fix hidden parameters still taking vertical space

* Bump z-index

* Conditional sticky filters on small screens

* Don't render `ParametersWidgetContainer` without parameters

* Add border to filters panel when scrolling

* Fix e2e tests

* Fix filter panel background color

* Disable sticky filters for "transparent" embed theme

Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
2024-02-16 19:57:12 +00:00
metabase-bot[bot]
787e7103cd Extract setDashboardWidth action (#38871) (#38877)
* Convert `dashboard/actions/ui` to TypeScript

* Extract `setDashboardWidth` action

Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
2024-02-16 19:41:14 +00:00
metabase-bot[bot]
21280aa98e serialization: log actual model when couldn't generate entity id (#38814) (#38846)
Co-authored-by: Alexander Solovyov <alexander@solovyov.net>
2024-02-16 09:58:34 +00:00
metabase-bot[bot]
6049f2cd17 Update group-by-week-test to use database timezone id (#38805) (#38847)
* Update test

* Remove driver exclusions

Co-authored-by: lbrdnk <lbrdnk@users.noreply.github.com>
2024-02-16 09:54:18 +00:00
metabase-bot[bot]
085ace19e5 Setting x-ray dashboard width to 24 (#38790) (#38834)
This just updates the `grid-width` parameter in `metabase.automagic-dashboards.populate` to be consistent with new FE work.

Co-authored-by: Mark Bastian <markbastian@gmail.com>
2024-02-15 21:53:12 +00:00
metabase-bot[bot]
3ec33cb174 Extend param substitution to handle datetimes (#38695) (#38822)
* Extend param substitution to handle datetimes

Prior to this only dates were supported as values for native timestamp field parameters.

* Check for exclusion filter when determining alignment unit

Co-authored-by: Case Nelson <case@metabase.com>
2024-02-15 18:00:05 +00:00
metabase-bot[bot]
8ad093146f Fix search result display for items with large strings without word breaks (#38727) (#38815)
Co-authored-by: Sloan Sparger <sloansparger@users.noreply.github.com>
2024-02-15 16:21:41 +00:00
metabase-bot[bot]
0e741ed12c add missing tests from meet embedders testing plan (#38772) (#38801)
* test: adds tests for localStorage flag

* Apply suggestions from code review



---------

Co-authored-by: Nicolò Pretto <info@npretto.com>
Co-authored-by: Mahatthana (Kelvin) Nomsawadi <me@bboykelvin.dev>
2024-02-15 09:08:25 +00:00
metabase-bot[bot]
ee1964aa60 Removing flaky flag on issue 19889 e2e test (#38791) (#38794)
The `19889-native-query-export-column-order.cy.spec.js` test hasn't flaked in over 30 days per [replay.io](https://app.replay.io/team/dzoyNTM4ZjRmOC05YmFlLTRiYjYtYjljYi1jOGYzOWUyMjRhZWY=/tests/dHJ0OjEyMDIwNjkzMWYyMDExMmUzZmMxNDE0MmMxMWFiY2I3NjlmZTliNDE=?param=dzoyNTM4ZjRmOC05YmFlLTRiYjYtYjljYi1jOGYzOWUyMjRhZWY%3D&param=tests&param=dHJ0OjEyMDIwNjkzMWYyMDExMmUzZmMxNDE0MmMxMWFiY2I3NjlmZTliNDE%3D) and I can't make it fail locally after several repeated attempts.

At this point I'm just removing the flaky flag and closing until we can get it to flake again.

Fixes #36682

Co-authored-by: Mark Bastian <markbastian@gmail.com>
2024-02-14 21:40:44 +00:00
metabase-bot[bot]
9d430dc61b docs - dash upgrades (#38689) (#38795)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-02-14 21:18:40 +00:00
metabase-bot[bot]
81d80ec725 Disable redshift support for uploads (again) (#38776) (#38784)
Co-authored-by: Cal Herries <39073188+calherries@users.noreply.github.com>
2024-02-14 19:48:00 +00:00
metabase-bot[bot]
3871912514 Redshift support for CSV uploads (take 3) (#38567) (#38769)
Co-authored-by: Cal Herries <39073188+calherries@users.noreply.github.com>
2024-02-14 18:14:25 +00:00
metabase-bot[bot]
0fa6e099f3 [Parameters] Cleanup types usage (#38752) (#38771)
* [Parameters] Cleanup wrong tests

* fixup! [Parameters] Cleanup wrong tests

Co-authored-by: Uladzimir Havenchyk <125459446+uladzimirdev@users.noreply.github.com>
2024-02-14 16:20:30 +00:00
metabase-bot[bot]
a5b25d9763 add CODENOTIFY to email directory (#38313) (#38768)
Co-authored-by: Kyle Doherty <5248953+kdoh@users.noreply.github.com>
2024-02-14 15:34:30 +00:00
metabase-bot[bot]
a0b17a6ea9 refactor: rename PreferencesStep to DataUsageStep (#38708) (#38762)
Co-authored-by: Nicolò Pretto <info@npretto.com>
2024-02-14 14:28:56 +00:00
metabase-bot[bot]
6d84263d30 Migrate DashcardCardParameterMapper to TS (#38596) (#38761)
* Do not show Unknown field in parameter mappings if there is mapping

* Rework to MLv2

* handle virtual cards separately

* WIP

* fixup

* Rework the approach

* cleanup

* Fix unit test

* fixup! Fix unit test

* keep only one -1

* Add a test

* Split tests into groups

* Migrate DashcardCardParameterMapper to TS

* Add more types

* Add additional check

* Improve tests

* Move code to utils

* Make types more flexible

* Better types

* Test

* Test

* Normalize target

* Add more tests

* Attempt to fix types

* Cleanup

* Address review

* revert unneeded change

* Correct types

* fixup! Correct types

* rely on types :crossfingers:

Co-authored-by: Uladzimir Havenchyk <125459446+uladzimirdev@users.noreply.github.com>
2024-02-14 14:13:14 +00:00
metabase-bot[bot]
821272a2d6 refactor e2e of onboarding/setup (#38669) (#38757)
* refactor: extract language step helper

* refactor: convert test and util to typescript

* fillUserAndContinue and skipWelcomePage

* test events sent via snowplow

* adds last step "completed" + add step_number in the assertions

* adds comment clarifying why we expect 1 event even though we block snoplow

* findByTextEnsureVisible().click() can just be findByText.click() as we can't click invisibile things

* remove default parameters to fillUserAndContinue

* refactor: use findByRole for "Next" button

Co-authored-by: Nicolò Pretto <info@npretto.com>
2024-02-14 13:49:20 +00:00
metabase-bot[bot]
221b2706fb Distinguish different arities of aggregation-clause (#38726) (#38744)
Fixes #37782.

Co-authored-by: metamben <103100869+metamben@users.noreply.github.com>
2024-02-13 23:40:01 +00:00
metabase-bot[bot]
99fb507ddc Use font fallbacks in the static-viz js (#38737) (#38745)
The trend chart email was rendering incorrectly in gmail on iOS for some reason.

I think it happened because the Lato font was unavailable in the gmail+iOS context and this new
:javascript_visualization (introduced with trend charts for the static-viz rendering pipeline) specified a font family
of Lato with no fallbacks. It seems that CSS doesn't inherit font fallbacks from parent elements at all, so even
though fallbacks were specified further up the tree, they weren't used.

This PR just adds the same fallbacks used elsewhere in static-viz render code.

Co-authored-by: adam-james <21064735+adam-james-v@users.noreply.github.com>
2024-02-13 23:30:35 +00:00
jeff bruemmer
1982c9261a update api docs 2024-02-13 15:11:49 -05:00
metabase-bot[bot]
61fa5ebe80 Milestone 4: Make Dashboard Header Fixed Width (#38634) (#38728)
* Add fixed width behavior to dashboard header

* refactor fixed width styled component

* adjust margin to match full-app margin

* make styles consistent across public/embed and full-app dashboards

* Make public/embed dashboard headers fixed width

* add fixed width header behavior to x-ray dashboards

* fix dashboard headers button alignment

* add tests

* add parameter to dashboard to test fixed width behavior

* fix tab alignment in public dashboards

* refactor tests

* only render container when dashboardTabs is not null

* improve styled component naming

* make dashboard tabs styling consistent between public/embed and full-app dashboards

* make dashboard info sidebar width consistent with other dashboard sidebars

* align dashboard header and dashboard body position when dashboard sidebar is open

* refactor tests

Co-authored-by: Jesse Devaney <22608765+JesseSDevaney@users.noreply.github.com>
2024-02-13 18:42:51 +00:00
metabase-bot[bot]
549c611191 Make Mantine tooltips consistent with legacy tooltips (#38678) (#38721)
Co-authored-by: Anton Kulyk <kuliks.anton@gmail.com>
2024-02-13 16:20:58 +00:00
metabase-bot[bot]
2515d579b4 update list of releases (#38718) (#38719)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-02-13 15:36:28 +00:00
metabase-bot[bot]
0304aed4b3 Fix isNavigationAllowed (#38703) (#38712)
* Removed unused route

* Remove invalid test

* Remove invalid routes from isNavigationAllowed, update tests

* Remove invalid route

* Handle /model/:id/notebook route

* Migrate Question.prototype.isDataset to Question.prototype.type

* Consolidate code

* Add missing attribute

* Type cards and questions for extra safety

* Fix running edited models

* Improve diff

Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
2024-02-13 14:49:54 +00:00
metabase-bot[bot]
b369f51757 Type routing in State (#38645) (#38711)
* Add routing to State

* Introduce getLocation selector

* Shorten code

* Do not export local selector

* Update frontend/src/metabase/selectors/routing.ts



---------

Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
Co-authored-by: Uladzimir Havenchyk <125459446+uladzimirdev@users.noreply.github.com>
2024-02-13 14:49:02 +00:00
metabase-bot[bot]
c86c4d8152 docs - serialization endpoints (#38292) (#38715)
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2024-02-13 14:36:22 +00:00
metabase-bot[bot]
cd8d3fa8cd Rework parameter mapping comparing to MLv2 (#38545) (#38710)
* Do not show Unknown field in parameter mappings if there is mapping

* Rework to MLv2

* handle virtual cards separately

* WIP

* fixup

* Rework the approach

* cleanup

* Fix unit test

* fixup! Fix unit test

* keep only one -1

* Add a test

* Split tests into groups

* Improve tests

* Move code to utils

* Make types more flexible

* Test

* Test

* Normalize target

* Add more tests

Co-authored-by: Uladzimir Havenchyk <125459446+uladzimirdev@users.noreply.github.com>
2024-02-13 14:28:57 +00:00
metabase-bot[bot]
79a17dd809 Parallelize tests with thread-safe version of with-redefs (#38620) (#38705)
Gotta go fast and gotta stay safe.

We have 413 calls to with-redefs, so I'm not going to try get 'em all yet.

Co-authored-by: Chris Truter <crisptrutski@users.noreply.github.com>
2024-02-13 13:11:33 +00:00
metabase-bot[bot]
ad274def9e Disable password reset button after click in admin (#38619) (#38696)
* disables password reset button in admin after the user has clicked the button once

* add email throttle

* fix test

---------

Co-authored-by: Sloan Sparger <sloansparger@users.noreply.github.com>
Co-authored-by: Jerry Huang <jhuang37050@gmail.com>
2024-02-13 00:41:43 +00:00
metabase-bot[bot]
88122c8501 Use "filled" bookmark icon when the item is bookmarked (#38239) (#38690)
* Use "filled" bookmark icon when the item is bookmarked

* Update E2E tests

* Update the affected unit test

* Make dashboard header icons smaller and darker

* Make dashboard bookmark icon look like its neighbors

* Unify question and dashboard icon's background on hover

Question icons have been using `text-medium` unlike dashboard icons
that had `text-light`.

Co-authored-by: Nemanja Glumac <31325167+nemanjaglumac@users.noreply.github.com>
2024-02-12 22:04:22 +00:00
metabase-bot[bot]
f499d0e15c Fix sidebar and home loading indefinitely when database data fails to load (#38582) (#38677)
Co-authored-by: Sloan Sparger <sloansparger@users.noreply.github.com>
2024-02-12 17:50:07 +00:00
metabase-bot[bot]
8a571ac310 Compare datetimes w/o timezone fields with literals as strings (#38642) (#38671)
* Compare datetimes w/o timezone fields with literals as strings

Co-authored-by: metamben <103100869+metamben@users.noreply.github.com>
2024-02-12 16:29:28 +00:00
metabase-bot[bot]
1730e3d022 source-field populated in aggregates with foreign refs (#38624) (#38667)
* source-field populated in aggregates with foreign refs

When aggregates are populated that reference other tables, either a `:source-field` must be provided in the field metadata or a `:join-alias` needs to be provided. The former is preferred.

Prior to this PR, the first situation in the below simplified case could happen:

```clojure
;;Simplified case
;; busted
(qp/process-query
  {:database 1,
   ;; 59 is "PRODUCTS" -> "PRICE" which is not in the "REVIEWS" table
   :query    {:aggregation  [["sum" ["field" 59 {:base-type "type/Float"}]]]
              ;; "REVIEWS"
              :source-table 8},
   :type     "query"})

; Works
(qp/process-query
  {:database 1,
   ;; The `:source-field` metadata fixes the above query
   :query    {:aggregation  [["sum" ["field" 59 {:base-type    "type/Float"
                                                 ;; "REVIEWS" -> "PRODUCT_ID"
                                                 :source-field 71}]]]
              :source-table 8},
   :type     "query"})
```

This PR updates `metabase.automagic-dashboards.interestin/ground-metric` to use the `->reference` function for fields when building the `decoder` for transforming field names to references, which properly adds sources for external fields.

Fixes #38618

* Updating `grounded-metrics-test` to reflect updated field referencing.

Co-authored-by: Mark Bastian <markbastian@gmail.com>
2024-02-12 15:17:49 +00:00
metabase-bot[bot]
3d86160fdf 🤖 backported "Models In Browse Data Follow Up" (#38662)
* Track

* Browse models: Add banner (#38261)

* Fix banner width

* Browse models: Sort official collections to the top (#38578)

* Browse models: only show 'Learn about our data' on the databases tab

* Browse models: Add banner (#38261)

* Fix banner width

* Browse models: Sort official collections to the top (#38578)

* Browse models: only show 'Learn about our data' on the databases tab

* Use BrowseRedirect to set default tab properly, and test

* Use setup function in BrowseRedirect tests

* Clarify BrowseRedirect tests

* Fix e2e test

* Fix unit tests

* Try to fix e2e test

* Remove TODO

* Rename tests

* Follow Ryan's good advice

* Use localStorage rather than a setting

* Be more explicit

* Update tests of BrowseRedirect to use localStorage

* Remove unit tests of bromo default tab (these were failing in CI and the functionality is covered in e2e tests )

* Revert "Remove unit tests of bromo default tab (these were failing in CI and the functionality is covered in e2e tests )"

This reverts commit 5f4c3c1e2c1e9f67c2c43c5423ab87d66d0c78ca.

* No need to mock local storage in this way; it's done automatically

* Fix import

* Remove uberjar tracker

* Restore uberjar tracking

* remove build

* clean up header

* fix database browsing

* fix + simplify tab persistence

* encapsulate banner logic

* simplify authority level sort

* fix rebase

---------

Co-authored-by: Raphael Krut-Landau <raphael.kl@gmail.com>
Co-authored-by: Ryan Laurie <iethree@gmail.com>
2024-02-12 14:23:18 +00:00
metabase-bot[bot]
a062514a11 Add api-changelog.md (#38658) (#38659)
Co-authored-by: Cal Herries <39073188+calherries@users.noreply.github.com>
2024-02-12 13:20:15 +00:00
Cal Herries
52b5e42d3d backport: should make test pass in release when we have a specific version in the url (#38656) 2024-02-12 13:05:38 +00:00
metabase-bot[bot]
943d1e1734 Fix custom destination to public dashboard not working on static embedding (#38647) (#38651)
* Fix linking to public or embed resource on dashboards not working

* Update embedding test name to use a snazzier term

* Add tests

Co-authored-by: Mahatthana (Kelvin) Nomsawadi <me@bboykelvin.dev>
2024-02-12 12:01:32 +00:00
4513 changed files with 166978 additions and 105660 deletions

View File

@@ -43,6 +43,9 @@
methodical.core/remove-aux-method-with-unique-key!
next.jdbc/execute!
;; Definitely thread safe
metabase.test.util.dynamic-redefs/patch-vars!
;; TODO: most of these symbols shouldn't be here, we should go through them and
;; find the functions/macros that use them and make sure their names end with !
;; best way to do this is try remove each of these and rely on kondo output to find places where it's used

View File

@@ -92,6 +92,7 @@
metabot-prompt-generator-token-limit
multi-setting-read-only
notification-link-base-url
no-surveys
num-metabot-choices
openai-api-key
openai-available-models

View File

@@ -1,2 +1,4 @@
frontend/src/cljs
frontend/src/cljs_release
e2e/support/cypress_sample_database.js
e2e/support/cypress_sample_instance_data.js

View File

@@ -36,41 +36,14 @@
"import/order": [
"error",
{
"pathGroups": [
{
"pattern": "react",
"group": "builtin",
"position": "before"
},
{
"pattern": "metabase/**",
"group": "internal"
},
{
"pattern": "metabase/**/components",
"group": "internal",
"position": "before"
},
{
"pattern": "__**",
"group": "internal",
"position": "before"
},
{
"pattern": "metabase-lib/**",
"group": "internal",
"position": "after"
}
],
"groups": [
"builtin",
"external",
"internal",
"parent",
"sibling",
"index",
"object"
]
"newlines-between": "always",
"alphabetize": {
"order": "asc",
"orderImportKind": "asc",
"caseInsensitive": false
},
"groups": ["builtin", "external", "internal", "parent", "sibling", "index"],
"warnOnUnassignedImports": false
}
],
"no-console": [2, { "allow": ["warn", "error"] }],

View File

@@ -93,6 +93,7 @@ e2e_ci: &e2e_ci
e2e_specs: &e2e_specs
- "**/*.cy.*.js"
- "**/*.cy.*.ts"
- "e2e/runner/**"
- "e2e/support/**"
- "e2e/snapshot*/**"

17
.github/team.json vendored
View File

@@ -15,16 +15,12 @@
{
"name": "Embedding",
"label": ".Team/Embedding",
"members": [
"WiNloSt",
"deniskaber",
"oisincoveney",
"npretto"
]
"members": ["WiNloSt", "deniskaber", "oisincoveney", "npretto"]
},
{
"name": "BEC",
"label": ".Team/BackendComponents",
"projectUrl": "https://github.com/orgs/metabase/projects/50/views/1",
"members": [
"tsmacdonald",
"qnkhuat",
@@ -36,13 +32,8 @@
{
"name": "Query Processor",
"label": ".Team/QueryProcessor",
"members": [
"camsaul",
"snoe",
"bshepherdson",
"metamben",
"lbrdnk"
]
"projectUrl": "https://github.com/orgs/metabase/projects/50/views/1",
"members": ["camsaul", "snoe", "bshepherdson", "metamben", "lbrdnk"]
},
{
"name": "Admin Webapp",

View File

@@ -30,7 +30,7 @@ jobs:
const prNumber = context.payload.pull_request.number;
if (prAuthor.endsWith('[bot]')) {
return false;
return null;
}
// Assign PR author
@@ -44,7 +44,7 @@ jobs:
const team = teamConfig.teams.find(t => t.members.includes(prAuthor));
if (!team) {
console.log('You are not assigned to any team. If you need one, update .github/team.json');
return false;
return null;
}
try {
@@ -55,7 +55,7 @@ jobs:
});
} catch (e) {
console.log(`The label ${team.label} does not exist, create it first`);
return false;
return null;
}
// Add team label
@@ -66,9 +66,9 @@ jobs:
labels: [team.label]
});
return true;
return team.projectUrl || null;
- uses: actions/add-to-project@v0.5.0
if: ${{ fromJSON(steps.auto-assign.outputs.result) }}
if: ${{ steps.auto-assign.outputs.result != 'null' }}
with:
project-url: https://github.com/orgs/metabase/projects/50/views/1
project-url: ${{ steps.auto-assign.outputs.result }}
github-token: ${{ steps.generate-token.outputs.token }}

View File

@@ -2,7 +2,7 @@
:show-docs-arity-on-same-line? true
:project-specs [{:project-path "deps.edn"
:classpath-cmd ["clojure"
"-A:dev:ee:ee-dev:drivers:drivers-dev:build:build/release:build/all"
"-A:dev:ee:ee-dev:drivers:drivers-dev:build:build/all"
"-Spath"]}]
:clean {:ns-inner-blocks-indentation :keep}
:linters {:clojure-lsp/unused-public-var {:level :warning

View File

@@ -71,7 +71,6 @@
environ/environ {:mvn/version "1.2.0"} ; env vars/Java properties abstraction
hiccup/hiccup {:mvn/version "1.0.5"} ; HTML templating
inflections/inflections {:mvn/version "0.14.1"} ; Clojure/Script library used for prularizing words
info.sunng/ring-jetty9-adapter {:mvn/version "0.22.3"} ; Drop-in replacement for official Ring Jetty adapter. Supports Jetty 11 webserver.
instaparse/instaparse {:mvn/version "1.4.12"} ; Make your own parser
clj-commons/clj-yaml {:mvn/version "1.0.27"} ; Clojure wrapper for YAML library SnakeYAML
io.github.camsaul/toucan2 {:mvn/version "1.0.537"}
@@ -89,8 +88,9 @@
lambdaisland/uri {:mvn/version "1.19.155"} ; Used by openai-clojure
medley/medley {:mvn/version "1.4.0"} ; lightweight lib of useful functions
metabase/connection-pool {:mvn/version "1.2.0"} ; simple wrapper around C3P0. JDBC connection pools
metabase/saml20-clj {:mvn/version "2.2.4" ; EE SAML integration.
:exclusions [org.bouncycastle/bcpkix-jdk15on
metabase/saml20-clj {:mvn/version "2.2.7.170"
:exclusions [ ; EE SAML integration TODO: bump version when we release the library
org.bouncycastle/bcpkix-jdk15on
org.bouncycastle/bcprov-jdk15on
org.bouncycastle/bcpkix-jdk18on
org.bouncycastle/bcprov-jdk18on]}
@@ -108,7 +108,7 @@
:exclusions [org.slf4j/slf4j-api
junit/junit]}
net.thisptr/jackson-jq {:mvn/version "1.0.0-preview.20230409"} ; Java implementation of the JQ json query language
org.apache.commons/commons-compress {:mvn/version "1.25.0"} ; compression utils
org.apache.commons/commons-compress {:mvn/version "1.26.0"} ; compression utils
org.apache.commons/commons-lang3 {:mvn/version "3.14.0"} ; helper methods for working with java.lang stuff
org.apache.logging.log4j/log4j-1.2-api {:mvn/version "2.22.0"} ; apache logging framework
org.apache.logging.log4j/log4j-api {:mvn/version "2.22.0"} ; add compatibility with log4j 1.2
@@ -132,7 +132,7 @@
org.clj-commons/hickory {:mvn/version "0.7.3" ; Parse HTML into Clojure data structures
:exclusions [org.jsoup/jsoup]}
org.clojars.pntblnk/clj-ldap {:mvn/version "0.0.17"} ; LDAP client
org.clojure/clojure {:mvn/version "1.11.1"}
org.clojure/clojure {:mvn/version "1.11.2"}
org.clojure/core.async {:mvn/version "1.6.681"
:exclusions [org.clojure/tools.reader]}
org.clojure/core.logic {:mvn/version "1.0.1"} ; optimized pattern matching library for Clojure
@@ -151,7 +151,8 @@
org.clojure/tools.namespace {:mvn/version "1.4.4"}
org.clojure/tools.reader {:mvn/version "1.3.7"}
org.clojure/tools.trace {:mvn/version "0.7.11"} ; function tracing
org.eclipse.jetty/jetty-server {:mvn/version "11.0.17"} ; web server
org.eclipse.jetty/jetty-server {:mvn/version "11.0.20"} ; web server
org.eclipse.jetty.websocket/websocket-jetty-server {:mvn/version "11.0.20"} ; ring-jetty-adapter needs that
org.flatland/ordered {:mvn/version "1.15.11"} ; ordered maps & sets
org.graalvm.js/js {:mvn/version "22.3.5"} ; JavaScript engine
org.jsoup/jsoup {:mvn/version "1.17.2"} ; required by hickory
@@ -160,7 +161,7 @@
;; The 3.X line of development for mariadb-java-client only supports the jdbc:mariadb protocol, so use 2.X for now.
org.mariadb.jdbc/mariadb-java-client {:mvn/version "2.7.10"} ; MySQL/MariaDB driver
org.mindrot/jbcrypt {:mvn/version "0.4"} ; Crypto library
org.postgresql/postgresql {:mvn/version "42.7.1"} ; Postgres driver
org.postgresql/postgresql {:mvn/version "42.7.2"} ; Postgres driver
org.quartz-scheduler/quartz {:mvn/version "2.3.2"} ; Quartz job scheduler, provided by quartzite but this is a newer version.
org.slf4j/slf4j-api {:mvn/version "2.0.9"} ; abstraction for logging frameworks -- allows end user to plug in desired logging framework at deployment time
org.tcrawley/dynapath {:mvn/version "1.1.0"} ; Dynamically add Jars (e.g. Oracle or Vertica) to classpath
@@ -171,7 +172,10 @@
prismatic/schema {:mvn/version "1.4.1"} ; Data schema declaration and validation library
redux/redux {:mvn/version "0.1.4"} ; Utility functions for building and composing transducers
riddley/riddley {:mvn/version "0.2.0"} ; code walking lib -- used interally by Potemkin, manifold, etc.
ring/ring-core {:mvn/version "1.10.0"} ; web server (Jetty wrapper)
ring/ring-core {:mvn/version "1.11.0"} ; HTTP abstraction
ring/ring-jetty-adapter {:mvn/version "1.11.0" ; Jetty adapter
:exclusions [org.eclipse.jetty/jetty-server
org.eclipse.jetty.websocket/websocket-jetty-server]}
ring/ring-json {:mvn/version "0.5.1"} ; Ring middleware for reading/writing JSON automatically
slingshot/slingshot {:mvn/version "0.12.2"} ; enhanced throw/catch, used by other deps
stencil/stencil {:mvn/version "0.5.0"} ; Mustache templates for Clojure
@@ -234,6 +238,7 @@
jonase/eastwood {:mvn/version "1.4.2" ; inspects namespaces and reports possible problems using tools.analyzer
:exclusions
[org.ow2.asm/asm-all]}
criterium/criterium {:mvn/version "0.4.6"} ; benchmarking library
lambdaisland/deep-diff2 {:mvn/version "2.10.211"} ; way better diffs
methodical/methodical {:mvn/version "0.15.1"} ; drop-in replacements for Clojure multimethods and adds several advanced features
org.clojure/algo.generic {:mvn/version "0.1.3"}

View File

@@ -5,6 +5,7 @@ redirect_from:
- /docs/latest/users-guide
- /docs/latest/administration-guide
- /docs/latest/operations-guide
- /docs/latest/faq
---
# Metabase documentation

View File

@@ -12,7 +12,7 @@ summary: |
### PARAMS:
* **`action-id`** value must be an integer greater than zero.
- **`action-id`** value must be an integer greater than zero.
## `DELETE /api/action/:id/public_link`
@@ -20,7 +20,7 @@ Delete the publicly-accessible link to this Dashboard.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/action/`
@@ -29,13 +29,13 @@ Returns actions that can be used for QueryActions. By default lists all viewable
### PARAMS:
* **`model-id`** nullable value must be an integer greater than zero.
- **`model-id`** nullable value must be an integer greater than zero.
## `GET /api/action/:action-id`
### PARAMS:
* **`action-id`** value must be an integer greater than zero.
- **`action-id`** value must be an integer greater than zero.
## `GET /api/action/:action-id/execute`
@@ -43,9 +43,9 @@ Fetches the values for filling in execution parameters. Pass PK parameters and v
### PARAMS:
* **`action-id`** value must be an integer greater than zero.
- **`action-id`** value must be an integer greater than zero.
* **`parameters`** value must be a valid JSON string.
- **`parameters`** value must be a valid JSON string.
## `GET /api/action/public`
@@ -57,33 +57,33 @@ Create a new action.
### PARAMS:
* **`visualization_settings`** nullable map
- **`visualization_settings`** nullable map.
* **`parameters`** nullable sequence of map
- **`parameters`** nullable sequence of map.
* **`description`** nullable string
- **`description`** nullable string.
* **`error_handle`** nullable string, and must be a valid json-query, something like '.item.title'
- **`error_handle`** nullable string, and must be a valid json-query, something like '.item.title'.
* **`database_id`** nullable value must be an integer greater than zero.
- **`database_id`** nullable value must be an integer greater than zero.
* **`name`** string
- **`name`** string.
* **`response_handle`** nullable string, and must be a valid json-query, something like '.item.title'
- **`response_handle`** nullable string, and must be a valid json-query, something like '.item.title'.
* **`template`** nullable map where {:method -> <enum of GET, POST, PUT, DELETE, PATCH>, :url -> <string with length >= 1>, :body (optional) -> <nullable string>, :headers (optional) -> <nullable string>, :parameters (optional) -> <nullable sequence of map>, :parameter_mappings (optional) -> <nullable map>} with no other keys
- **`template`** nullable map where {:method -> <enum of GET, POST, PUT, DELETE, PATCH>, :url -> <string with length >= 1>, :body (optional) -> <nullable string>, :headers (optional) -> <nullable string>, :parameters (optional) -> <nullable sequence of map>, :parameter_mappings (optional) -> <nullable map>} with no other keys.
* **`type`** nullable Unsupported action type
- **`type`** nullable Unsupported action type.
* **`dataset_query`** nullable map
- **`dataset_query`** nullable map.
* **`model_id`** value must be an integer greater than zero.
- **`model_id`** value must be an integer greater than zero.
* **`kind`** nullable Unsupported implicit action kind
- **`kind`** nullable Unsupported implicit action kind.
* **`parameter_mappings`** nullable map
- **`parameter_mappings`** nullable map.
* **`action`**
- **`action`**
## `POST /api/action/:id/execute`
@@ -93,11 +93,11 @@ Execute the Action.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`parameters`** nullable map from <keyword> to <anything>
- **`parameters`** nullable map from <keyword> to <anything>.
* **`_body`**
- **`_body`**
## `POST /api/action/:id/public_link`
@@ -109,15 +109,15 @@ You must be a superuser to do this.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `PUT /api/action/:id`
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`action`** map where {:archived (optional) -> <nullable boolean>, :database_id (optional) -> <nullable value must be an integer greater than zero.>, :dataset_query (optional) -> <nullable map>, :description (optional) -> <nullable string>, :error_handle (optional) -> <nullable string, and must be a valid json-query, something like '.item.title'>, :kind (optional) -> <nullable Unsupported implicit action kind>, :model_id (optional) -> <nullable value must be an integer greater than zero.>, :name (optional) -> <nullable string>, :parameter_mappings (optional) -> <nullable map>, :parameters (optional) -> <nullable sequence of map>, :response_handle (optional) -> <nullable string, and must be a valid json-query, something like '.item.title'>, :template (optional) -> <nullable map where {:method -> <enum of GET, POST, PUT, DELETE, PATCH>, :url -> <string with length >= 1>, :body (optional) -> <nullable string>, :headers (optional) -> <nullable string>, :parameters (optional) -> <nullable sequence of map>, :parameter_mappings (optional) -> <nullable map>} with no other keys>, :type (optional) -> <nullable Unsupported action type>, :visualization_settings (optional) -> <nullable map>}
- **`action`** map where {:archived (optional) -> <nullable boolean>, :database_id (optional) -> <nullable value must be an integer greater than zero.>, :dataset_query (optional) -> <nullable map>, :description (optional) -> <nullable string>, :error_handle (optional) -> <nullable string, and must be a valid json-query, something like '.item.title'>, :kind (optional) -> <nullable Unsupported implicit action kind>, :model_id (optional) -> <nullable value must be an integer greater than zero.>, :name (optional) -> <nullable string>, :parameter_mappings (optional) -> <nullable map>, :parameters (optional) -> <nullable sequence of map>, :response_handle (optional) -> <nullable string, and must be a valid json-query, something like '.item.title'>, :template (optional) -> <nullable map where {:method -> <enum of GET, POST, PUT, DELETE, PATCH>, :url -> <string with length >= 1>, :body (optional) -> <nullable string>, :headers (optional) -> <nullable string>, :parameters (optional) -> <nullable sequence of map>, :parameter_mappings (optional) -> <nullable map>} with no other keys>, :type (optional) -> <nullable Unsupported action type>, :visualization_settings (optional) -> <nullable map>}.
---

View File

@@ -14,7 +14,7 @@ For users to unsubscribe themselves from the given alert.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/alert/`
@@ -23,9 +23,9 @@ Fetch alerts which the current user has created or will receive, or all alerts i
### PARAMS:
* **`archived`** nullable value must be a valid boolean string ('true' or 'false').
- **`archived`** nullable value must be a valid boolean string ('true' or 'false').
* **`user_id`** nullable value must be an integer greater than zero.
- **`user_id`** nullable value must be an integer greater than zero.
## `GET /api/alert/:id`
@@ -33,7 +33,7 @@ Fetch an alert by ID.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/alert/question/:id`
@@ -41,9 +41,9 @@ Fetch all alerts for the given question (`Card`) id.
### PARAMS:
* **`id`** nullable value must be an integer greater than zero.
- **`id`** nullable value must be an integer greater than zero.
* **`archived`** nullable value must be a valid boolean string ('true' or 'false').
- **`archived`** nullable value must be a valid boolean string ('true' or 'false').
## `POST /api/alert/`
@@ -51,17 +51,17 @@ Create a new Alert.
### PARAMS:
* **`alert_condition`** enum of rows, goal
- **`alert_condition`** enum of rows, goal.
* **`card`** value must be a map with the keys `id`, `include_csv`, `include_xls`, and `dashboard_card_id`.
- **`card`** value must be a map with the keys `id`, `include_csv`, `include_xls`, and `dashboard_card_id`.
* **`channels`** one or more map
- **`channels`** one or more map.
* **`alert_first_only`** boolean
- **`alert_first_only`** boolean.
* **`alert_above_goal`** nullable boolean
- **`alert_above_goal`** nullable boolean.
* **`new-alert-request-body`**
- **`new-alert-request-body`**
## `PUT /api/alert/:id`
@@ -69,21 +69,21 @@ Update a `Alert` with ID.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`alert_condition`** nullable enum of rows, goal
- **`alert_condition`** nullable enum of rows, goal.
* **`alert_first_only`** nullable boolean
- **`alert_first_only`** nullable boolean.
* **`alert_above_goal`** nullable boolean
- **`alert_above_goal`** nullable boolean.
* **`card`** nullable value must be a map with the keys `id`, `include_csv`, `include_xls`, and `dashboard_card_id`.
- **`card`** nullable value must be a map with the keys `id`, `include_csv`, `include_xls`, and `dashboard_card_id`.
* **`channels`** nullable one or more map
- **`channels`** nullable one or more map.
* **`archived`** nullable boolean
- **`archived`** nullable boolean.
* **`alert-updates`**
- **`alert-updates`**
---

View File

@@ -16,7 +16,7 @@ You must be a superuser to do this.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/api-key/`
@@ -32,7 +32,7 @@ You must be a superuser to do this.
### PARAMS:
* **`_body`**
- **`_body`**
## `POST /api/api-key/`
@@ -42,11 +42,11 @@ You must be a superuser to do this.
### PARAMS:
* **`group_id`** value must be an integer greater than zero.
- **`group_id`** value must be an integer greater than zero.
* **`name`** value must be a non-blank string.
- **`name`** value must be a non-blank string.
* **`_body`**
- **`_body`**
## `PUT /api/api-key/:id`
@@ -56,13 +56,13 @@ You must be a superuser to do this.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`group_id`** nullable value must be an integer greater than zero.
- **`group_id`** nullable value must be an integer greater than zero.
* **`name`** nullable value must be a non-blank string.
- **`name`** nullable value must be a non-blank string.
* **`_body`**
- **`_body`**
## `PUT /api/api-key/:id/regenerate`
@@ -72,7 +72,7 @@ You must be a superuser to do this.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
---

View File

@@ -14,11 +14,11 @@ Return an automagic dashboard for entity `entity` with id `id`.
### PARAMS:
* **`entity`** Invalid entity type
- **`entity`** Invalid entity type.
* **`entity-id-or-query`**
- **`entity-id-or-query`**
* **`show`** nullable must equal all, or natural integer
- **`show`** nullable must equal all, or natural integer.
## `GET /api/automagic-dashboards/:entity/:entity-id-or-query/cell/:cell-query`
@@ -28,13 +28,13 @@ Return an automagic dashboard analyzing cell in automagic dashboard for entity
### PARAMS:
* **`entity`** Invalid entity type
- **`entity`** Invalid entity type.
* **`entity-id-or-query`**
- **`entity-id-or-query`**
* **`cell-query`** value couldn't be parsed as base64 encoded JSON
- **`cell-query`** value couldn't be parsed as base64 encoded JSON.
* **`show`** invalid show value
- **`show`** invalid show value.
## `GET /api/automagic-dashboards/:entity/:entity-id-or-query/cell/:cell-query/compare/:comparison-entity/:comparison-entity-id-or-query`
@@ -44,17 +44,17 @@ Return an automagic comparison dashboard for cell in automagic dashboard for ent
### PARAMS:
* **`entity`** Invalid entity type
- **`entity`** Invalid entity type.
* **`entity-id-or-query`**
- **`entity-id-or-query`**
* **`cell-query`** value couldn't be parsed as base64 encoded JSON
- **`cell-query`** value couldn't be parsed as base64 encoded JSON.
* **`show`** invalid show value
- **`show`** invalid show value.
* **`comparison-entity`** Invalid comparison entity type. Can only be one of "table", "segment", or "adhoc"
- **`comparison-entity`** Invalid comparison entity type. Can only be one of "table", "segment", or "adhoc".
* **`comparison-entity-id-or-query`**
- **`comparison-entity-id-or-query`**
## `GET /api/automagic-dashboards/:entity/:entity-id-or-query/cell/:cell-query/rule/:prefix/:dashboard-template`
@@ -63,17 +63,17 @@ Return an automagic dashboard analyzing cell in question with id `id` defined b
### PARAMS:
* **`entity`** Invalid entity type
- **`entity`** Invalid entity type.
* **`entity-id-or-query`**
- **`entity-id-or-query`**
* **`cell-query`** value couldn't be parsed as base64 encoded JSON
- **`cell-query`** value couldn't be parsed as base64 encoded JSON.
* **`prefix`** invalid value for prefix
- **`prefix`** invalid value for prefix.
* **`dashboard-template`** invalid value for dashboard template name
- **`dashboard-template`** invalid value for dashboard template name.
* **`show`** invalid show value
- **`show`** invalid show value.
## `GET /api/automagic-dashboards/:entity/:entity-id-or-query/cell/:cell-query/rule/:prefix/:dashboard-template/compare/:comparison-entity/:comparison-entity-id-or-query`
@@ -83,21 +83,21 @@ Return an automagic comparison dashboard for cell in automagic dashboard for ent
### PARAMS:
* **`entity`** Invalid entity type
- **`entity`** Invalid entity type.
* **`entity-id-or-query`**
- **`entity-id-or-query`**
* **`cell-query`** value couldn't be parsed as base64 encoded JSON
- **`cell-query`** value couldn't be parsed as base64 encoded JSON.
* **`prefix`** invalid value for prefix
- **`prefix`** invalid value for prefix.
* **`dashboard-template`** invalid value for dashboard template name
- **`dashboard-template`** invalid value for dashboard template name.
* **`show`** invalid show value
- **`show`** invalid show value.
* **`comparison-entity`** Invalid comparison entity type. Can only be one of "table", "segment", or "adhoc"
- **`comparison-entity`** Invalid comparison entity type. Can only be one of "table", "segment", or "adhoc".
* **`comparison-entity-id-or-query`**
- **`comparison-entity-id-or-query`**
## `GET /api/automagic-dashboards/:entity/:entity-id-or-query/compare/:comparison-entity/:comparison-entity-id-or-query`
@@ -106,15 +106,15 @@ Return an automagic comparison dashboard for entity `entity` with id `id` compar
### PARAMS:
* **`entity`** Invalid entity type
- **`entity`** Invalid entity type.
* **`entity-id-or-query`**
- **`entity-id-or-query`**
* **`show`** invalid show value
- **`show`** invalid show value.
* **`comparison-entity`** Invalid comparison entity type. Can only be one of "table", "segment", or "adhoc"
- **`comparison-entity`** Invalid comparison entity type. Can only be one of "table", "segment", or "adhoc".
* **`comparison-entity-id-or-query`**
- **`comparison-entity-id-or-query`**
## `GET /api/automagic-dashboards/:entity/:entity-id-or-query/rule/:prefix/:dashboard-template`
@@ -122,15 +122,15 @@ Return an automagic dashboard for entity `entity` with id `id` using dashboard-t
### PARAMS:
* **`entity`** Invalid entity type
- **`entity`** Invalid entity type.
* **`entity-id-or-query`**
- **`entity-id-or-query`**
* **`prefix`** invalid value for prefix
- **`prefix`** invalid value for prefix.
* **`dashboard-template`** invalid value for dashboard template name
- **`dashboard-template`** invalid value for dashboard template name.
* **`show`** invalid show value
- **`show`** invalid show value.
## `GET /api/automagic-dashboards/:entity/:entity-id-or-query/rule/:prefix/:dashboard-template/compare/:comparison-entity/:comparison-entity-id-or-query`
@@ -139,19 +139,19 @@ Return an automagic comparison dashboard for entity `entity` with id `id` using
### PARAMS:
* **`entity`** Invalid entity type
- **`entity`** Invalid entity type.
* **`entity-id-or-query`**
- **`entity-id-or-query`**
* **`prefix`** invalid value for prefix
- **`prefix`** invalid value for prefix.
* **`dashboard-template`** invalid value for dashboard template name
- **`dashboard-template`** invalid value for dashboard template name.
* **`show`** invalid show value
- **`show`** invalid show value.
* **`comparison-entity`** Invalid comparison entity type. Can only be one of "table", "segment", or "adhoc"
- **`comparison-entity`** Invalid comparison entity type. Can only be one of "table", "segment", or "adhoc".
* **`comparison-entity-id-or-query`**
- **`comparison-entity-id-or-query`**
## `GET /api/automagic-dashboards/database/:id/candidates`
@@ -159,7 +159,7 @@ Return a list of candidates for automagic dashboards orderd by interestingness.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/automagic-dashboards/model_index/:model-index-id/primary_key/:pk-id`
@@ -168,9 +168,9 @@ Return an automagic dashboard for an entity detail specified by `entity`
### PARAMS:
* **`model-index-id`** integer
- **`model-index-id`** integer.
* **`pk-id`** integer
- **`pk-id`** integer.
---

View File

@@ -22,9 +22,9 @@ Delete a bookmark. Will delete a bookmark assigned to the user making the reques
### PARAMS:
* **`model`** enum of card, dashboard, collection
- **`model`** enum of card, dashboard, collection.
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/bookmark/`
@@ -36,9 +36,9 @@ Create a new bookmark for user.
### PARAMS:
* **`model`** enum of card, dashboard, collection
- **`model`** enum of card, dashboard, collection.
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `PUT /api/bookmark/ordering`
@@ -46,7 +46,7 @@ Sets the order of bookmarks for user.
### PARAMS:
* **`orderings`** sequence of map where {:type -> <enum of card, dashboard, collection>, :item_id -> <value must be an integer greater than zero.>}
- **`orderings`** sequence of map where {:type -> <enum of card, dashboard, collection>, :item_id -> <value must be an integer greater than zero.>}.
---

View File

@@ -14,7 +14,7 @@ Delete the publicly-accessible link to this Card.
### PARAMS:
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
## `DELETE /api/card/:id`
@@ -22,19 +22,20 @@ Delete a Card. (DEPRECATED -- don't delete a Card anymore -- archive it instead.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/card/`
Get all the Cards. Option filter param `f` can be used to change the set of Cards that are returned; default is
`all`, but other options include `mine`, `bookmarked`, `database`, `table`, `using_model` and `archived`. See
corresponding implementation functions above for the specific behavior of each filterp option. :card_index.
`all`, but other options include `mine`, `bookmarked`, `database`, `table`, `using_model`, `using_metric`,
`using_segment`, and `archived`. See corresponding implementation functions above for the specific behavior of each
filterp option. :card_index.
### PARAMS:
* **`f`** nullable enum of archived, table, using_model, bookmarked, all, mine, database
- **`f`** nullable enum of archived, table, using_model, bookmarked, using_segment, all, mine, using_metric, database.
* **`model_id`** nullable value must be an integer greater than zero.
- **`model_id`** nullable value must be an integer greater than zero.
## `GET /api/card/:card-id/params/:param-key/search/:query`
@@ -47,11 +48,11 @@ Fetch possible values of the parameter whose ID is `:param-key` that contain `:q
### PARAMS:
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
* **`param-key`** value must be a non-blank string.
- **`param-key`** value must be a non-blank string.
* **`query`** value must be a non-blank string.
- **`query`** value must be a non-blank string.
## `GET /api/card/:card-id/params/:param-key/values`
@@ -62,9 +63,9 @@ Fetch possible values of the parameter whose ID is `:param-key`.
### PARAMS:
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
* **`param-key`** value must be a non-blank string.
- **`param-key`** value must be a non-blank string.
## `GET /api/card/:id`
@@ -72,9 +73,9 @@ Get `Card` with ID.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`ignore_view`** nullable boolean
- **`ignore_view`** nullable boolean.
## `GET /api/card/:id/related`
@@ -82,7 +83,7 @@ Return related entities.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/card/:id/series`
@@ -94,13 +95,13 @@ Fetches a list of comptatible series with the card with id `card_id`.
### PARAMS:
* **`id`** integer
- **`id`** integer.
* **`last_cursor`** nullable value must be an integer greater than zero.
- **`last_cursor`** nullable value must be an integer greater than zero.
* **`query`** nullable value must be a non-blank string.
- **`query`** nullable value must be a non-blank string.
* **`exclude_ids`** nullable function
- **`exclude_ids`** nullable function.
## `GET /api/card/:id/timelines`
@@ -108,13 +109,13 @@ Get the timelines for card with ID. Looks up the collection the card is in and u
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`include`** nullable must equal events
- **`include`** nullable must equal events.
* **`start`** nullable value must be a valid date string
- **`start`** nullable value must be a valid date string.
* **`end`** nullable value must be a valid date string
- **`end`** nullable value must be a valid date string.
## `GET /api/card/embeddable`
@@ -131,29 +132,31 @@ Create a new `Card`.
### PARAMS:
* **`visualization_settings`** Value must be a map.
- **`visualization_settings`** Value must be a map.
* **`parameters`** nullable sequence of parameter must be a map with :id and :type keys
- **`parameters`** nullable sequence of parameter must be a map with :id and :type keys.
* **`dataset`** nullable boolean
- **`dataset`** nullable boolean.
* **`description`** nullable value must be a non-blank string.
- **`description`** nullable value must be a non-blank string.
* **`collection_position`** nullable value must be an integer greater than zero.
- **`collection_position`** nullable value must be an integer greater than zero.
* **`result_metadata`** nullable :metabase.sync.analyze.query-results/ResultsMetadata
- **`result_metadata`** nullable :metabase.sync.analyze.query-results/ResultsMetadata.
* **`collection_id`** nullable value must be an integer greater than zero.
- **`collection_id`** nullable value must be an integer greater than zero.
* **`name`** value must be a non-blank string.
- **`name`** value must be a non-blank string.
* **`cache_ttl`** nullable value must be an integer greater than zero.
- **`type`** nullable enum of model, question.
* **`dataset_query`** Value must be a map.
- **`cache_ttl`** nullable value must be an integer greater than zero.
* **`parameter_mappings`** nullable sequence of parameter_mapping must be a map with :parameter_id and :target keys
- **`dataset_query`** Value must be a map.
* **`display`** value must be a non-blank string.
- **`parameter_mappings`** nullable sequence of parameter_mapping must be a map with :parameter_id and :target keys.
- **`display`** value must be a non-blank string.
## `POST /api/card/:card-id/persist`
@@ -162,7 +165,7 @@ Mark the model (card) as persisted. Runs the query and saves it to the database
### PARAMS:
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
## `POST /api/card/:card-id/public_link`
@@ -172,7 +175,7 @@ Generate publicly-accessible links for this Card. Returns UUID to be used in pub
### PARAMS:
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
## `POST /api/card/:card-id/query`
@@ -180,15 +183,15 @@ Run the query associated with a Card.
### PARAMS:
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
* **`parameters`**
- **`parameters`**
* **`ignore_cache`** nullable boolean
- **`ignore_cache`** nullable boolean.
* **`dashboard_id`** nullable value must be an integer greater than zero.
- **`dashboard_id`** nullable value must be an integer greater than zero.
* **`collection_preview`** nullable boolean
- **`collection_preview`** nullable boolean.
## `POST /api/card/:card-id/query/:export-format`
@@ -199,11 +202,11 @@ Run the query associated with a Card, and return its results as a file in the sp
### PARAMS:
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
* **`export-format`** enum of csv, api, xlsx, json
- **`export-format`** enum of csv, api, xlsx, json.
* **`parameters`** nullable value must be a valid JSON string.
- **`parameters`** nullable value must be a valid JSON string.
## `POST /api/card/:card-id/refresh`
@@ -211,7 +214,7 @@ Refresh the persisted model caching `card-id`.
### PARAMS:
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
## `POST /api/card/:card-id/unpersist`
@@ -220,7 +223,7 @@ Unpersist this model. Deletes the persisted table backing the model and all quer
### PARAMS:
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
## `POST /api/card/:id/copy`
@@ -228,7 +231,7 @@ Copy a `Card`, with the new name 'Copy of _name_'.
### PARAMS:
* **`id`** nullable value must be an integer greater than zero.
- **`id`** nullable value must be an integer greater than zero.
## `POST /api/card/collections`
@@ -237,9 +240,9 @@ Bulk update endpoint for Card Collections. Move a set of `Cards` with `card_ids`
### PARAMS:
* **`card_ids`** sequence of value must be an integer greater than zero.
- **`card_ids`** sequence of value must be an integer greater than zero.
* **`collection_id`** nullable value must be an integer greater than zero.
- **`collection_id`** nullable value must be an integer greater than zero.
## `POST /api/card/from-csv`
@@ -247,7 +250,7 @@ Create a table and model populated with the values from the attached CSV. Return
### PARAMS:
* **`raw-params`**
- **`raw-params`**
## `POST /api/card/pivot/:card-id/query`
@@ -255,11 +258,11 @@ Run the query associated with a Card.
### PARAMS:
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
* **`parameters`**
- **`parameters`**
* **`ignore_cache`** nullable boolean
- **`ignore_cache`** nullable boolean.
## `POST /api/card/related`
@@ -267,7 +270,7 @@ Return related entities for an ad-hoc query.
### PARAMS:
* **`query`**
- **`query`**
## `PUT /api/card/:id`
@@ -275,39 +278,41 @@ Update a `Card`.
### PARAMS:
* **`collection_preview`** nullable boolean
- **`collection_preview`** nullable boolean.
* **`visualization_settings`** nullable Value must be a map.
- **`visualization_settings`** nullable Value must be a map.
* **`parameters`** nullable sequence of parameter must be a map with :id and :type keys
- **`parameters`** nullable sequence of parameter must be a map with :id and :type keys.
* **`dataset`** nullable boolean
- **`dataset`** nullable boolean.
* **`description`** nullable string
- **`description`** nullable string.
* **`archived`** nullable boolean
- **`archived`** nullable boolean.
* **`collection_position`** nullable value must be an integer greater than zero.
- **`collection_position`** nullable value must be an integer greater than zero.
* **`result_metadata`** nullable :metabase.sync.analyze.query-results/ResultsMetadata
- **`result_metadata`** nullable :metabase.sync.analyze.query-results/ResultsMetadata.
* **`enable_embedding`** nullable boolean
- **`enable_embedding`** nullable boolean.
* **`collection_id`** nullable value must be an integer greater than zero.
- **`collection_id`** nullable value must be an integer greater than zero.
* **`card-updates`**
- **`card-updates`**
* **`name`** nullable value must be a non-blank string.
- **`name`** nullable value must be a non-blank string.
* **`embedding_params`** nullable value must be a valid embedding params map.
- **`type`** nullable enum of model, question.
* **`cache_ttl`** nullable value must be an integer greater than zero.
- **`embedding_params`** nullable value must be a valid embedding params map.
* **`dataset_query`** nullable Value must be a map.
- **`cache_ttl`** nullable value must be an integer greater than zero.
* **`id`** value must be an integer greater than zero.
- **`dataset_query`** nullable Value must be a map.
* **`display`** nullable value must be a non-blank string.
- **`id`** value must be an integer greater than zero.
- **`display`** nullable value must be a non-blank string.
---

View File

@@ -29,13 +29,13 @@ Fetch a list of all Collections that the current user has read permissions for (
### PARAMS:
* **`archived`** nullable value must be a valid boolean string ('true' or 'false').
- **`archived`** nullable value must be a valid boolean string ('true' or 'false').
* **`exclude-other-user-collections`** nullable value must be a valid boolean string ('true' or 'false').
- **`exclude-other-user-collections`** nullable value must be a valid boolean string ('true' or 'false').
* **`namespace`** nullable value must be a non-blank string.
- **`namespace`** nullable value must be a non-blank string.
* **`personal-only`** nullable value must be a valid boolean string ('true' or 'false').
- **`personal-only`** nullable value must be a valid boolean string ('true' or 'false').
## `GET /api/collection/:id`
@@ -43,7 +43,7 @@ Fetch a specific Collection with standard details added.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/collection/:id/items`
@@ -57,17 +57,17 @@ Fetch a specific Collection's items with the following options:
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`models`** nullable sequence of enum of dashboard, dataset, no_models, timeline, snippet, collection, pulse, card, or enum of dashboard, dataset, no_models, timeline, snippet, collection, pulse, card
- **`models`** nullable sequence of enum of dashboard, dataset, no_models, timeline, snippet, collection, pulse, card, or enum of dashboard, dataset, no_models, timeline, snippet, collection, pulse, card.
* **`archived`** nullable value must be a valid boolean string ('true' or 'false').
- **`archived`** nullable value must be a valid boolean string ('true' or 'false').
* **`pinned_state`** nullable enum of is_not_pinned, is_pinned, all
- **`pinned_state`** nullable enum of is_not_pinned, is_pinned, all.
* **`sort_column`** nullable enum of model, name, last_edited_by, last_edited_at
- **`sort_column`** nullable enum of model, name, last_edited_by, last_edited_at.
* **`sort_direction`** nullable enum of desc, asc
- **`sort_direction`** nullable enum of desc, asc.
## `GET /api/collection/:id/timelines`
@@ -75,11 +75,11 @@ Fetch a specific Collection's timelines.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`include`** nullable must equal events
- **`include`** nullable must equal events.
* **`archived`** nullable boolean
- **`archived`** nullable boolean.
## `GET /api/collection/graph`
@@ -89,7 +89,7 @@ You must be a superuser to do this.
### PARAMS:
* **`namespace`** nullable value must be a non-blank string.
- **`namespace`** nullable value must be a non-blank string.
## `GET /api/collection/root`
@@ -97,7 +97,7 @@ Return the 'Root' Collection object with standard details added.
### PARAMS:
* **`namespace`** nullable value must be a non-blank string.
- **`namespace`** nullable value must be a non-blank string.
## `GET /api/collection/root/items`
@@ -117,17 +117,17 @@ Fetch objects that the current user should see at their root level. As mentioned
### PARAMS:
* **`models`** nullable sequence of enum of dashboard, dataset, no_models, timeline, snippet, collection, pulse, card, or enum of dashboard, dataset, no_models, timeline, snippet, collection, pulse, card
- **`models`** nullable sequence of enum of dashboard, dataset, no_models, timeline, snippet, collection, pulse, card, or enum of dashboard, dataset, no_models, timeline, snippet, collection, pulse, card.
* **`archived`** nullable value must be a valid boolean string ('true' or 'false').
- **`archived`** nullable value must be a valid boolean string ('true' or 'false').
* **`namespace`** nullable value must be a non-blank string.
- **`namespace`** nullable value must be a non-blank string.
* **`pinned_state`** nullable enum of is_not_pinned, is_pinned, all
- **`pinned_state`** nullable enum of is_not_pinned, is_pinned, all.
* **`sort_column`** nullable enum of model, name, last_edited_by, last_edited_at
- **`sort_column`** nullable enum of model, name, last_edited_by, last_edited_at.
* **`sort_direction`** nullable enum of desc, asc
- **`sort_direction`** nullable enum of desc, asc.
## `GET /api/collection/root/timelines`
@@ -135,9 +135,9 @@ Fetch the root Collection's timelines.
### PARAMS:
* **`include`** nullable must equal events
- **`include`** nullable must equal events.
* **`archived`** nullable boolean
- **`archived`** nullable boolean.
## `GET /api/collection/tree`
@@ -164,15 +164,15 @@ Similar to `GET /`, but returns Collections in a tree structure, e.g.
### PARAMS:
* **`exclude-archived`** nullable boolean
- **`exclude-archived`** nullable boolean.
* **`exclude-other-user-collections`** nullable boolean
- **`exclude-other-user-collections`** nullable boolean.
* **`namespace`** nullable value must be a non-blank string.
- **`namespace`** nullable value must be a non-blank string.
* **`shallow`** nullable boolean
- **`shallow`** nullable boolean.
* **`collection-id`** nullable value must be an integer greater than zero.
- **`collection-id`** nullable value must be an integer greater than zero.
## `POST /api/collection/`
@@ -180,15 +180,15 @@ Create a new Collection.
### PARAMS:
* **`name`** value must be a non-blank string.
- **`name`** value must be a non-blank string.
* **`description`** nullable value must be a non-blank string.
- **`description`** nullable value must be a non-blank string.
* **`parent_id`** nullable value must be an integer greater than zero.
- **`parent_id`** nullable value must be an integer greater than zero.
* **`namespace`** nullable value must be a non-blank string.
- **`namespace`** nullable value must be a non-blank string.
* **`authority_level`** nullable enum of official
- **`authority_level`** nullable enum of official.
## `PUT /api/collection/:id`
@@ -196,19 +196,19 @@ Modify an existing Collection, including archiving or unarchiving it, or moving
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`name`** nullable value must be a non-blank string.
- **`name`** nullable value must be a non-blank string.
* **`description`** nullable value must be a non-blank string.
- **`description`** nullable value must be a non-blank string.
* **`archived`** nullable value must be a valid boolean string ('true' or 'false').
- **`archived`** nullable value must be a valid boolean string ('true' or 'false').
* **`parent_id`** nullable value must be an integer greater than zero.
- **`parent_id`** nullable value must be an integer greater than zero.
* **`authority_level`** nullable enum of official
- **`authority_level`** nullable enum of official.
* **`collection-updates`**
- **`collection-updates`**
## `PUT /api/collection/graph`
@@ -219,9 +219,9 @@ You must be a superuser to do this.
### PARAMS:
* **`namespace`** nullable value must be a non-blank string.
- **`namespace`** nullable value must be a non-blank string.
* **`body`** map
- **`body`** map.
---

View File

@@ -14,7 +14,7 @@ Delete the publicly-accessible link to this Dashboard.
### PARAMS:
* **`dashboard-id`** value must be an integer greater than zero.
- **`dashboard-id`** value must be an integer greater than zero.
## `DELETE /api/dashboard/:id`
@@ -24,7 +24,7 @@ Delete a Dashboard.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/dashboard/`
@@ -38,7 +38,7 @@ This endpoint is currently unused by the Metabase frontend and may be out of dat
### PARAMS:
* **`f`** nullable enum of all, mine, archived
- **`f`** nullable enum of all, mine, archived.
## `GET /api/dashboard/:dashboard-id/dashcard/:dashcard-id/execute`
@@ -46,11 +46,11 @@ Fetches the values for filling in execution parameters. Pass PK parameters and v
### PARAMS:
* **`dashboard-id`** value must be an integer greater than zero.
- **`dashboard-id`** value must be an integer greater than zero.
* **`dashcard-id`** value must be an integer greater than zero.
- **`dashcard-id`** value must be an integer greater than zero.
* **`parameters`** value must be a valid JSON string.
- **`parameters`** value must be a valid JSON string.
## `GET /api/dashboard/:id`
@@ -58,7 +58,7 @@ Get Dashboard with ID.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/dashboard/:id/params/:param-key/search/:query`
@@ -73,13 +73,13 @@ Fetch possible values of the parameter whose ID is `:param-key` that contain `:q
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`param-key`**
- **`param-key`**
* **`query`** value must be a non-blank string.
- **`query`** value must be a non-blank string.
* **`constraint-param-key->value`**
- **`constraint-param-key->value`**
## `GET /api/dashboard/:id/params/:param-key/values`
@@ -91,11 +91,11 @@ Fetch possible values of the parameter whose ID is `:param-key`. If the values c
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`param-key`**
- **`param-key`**
* **`constraint-param-key->value`**
- **`constraint-param-key->value`**
## `GET /api/dashboard/:id/related`
@@ -103,7 +103,7 @@ Return related entities.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/dashboard/:id/revisions`
@@ -111,7 +111,7 @@ Fetch `Revisions` for Dashboard with ID.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/dashboard/embeddable`
@@ -143,9 +143,9 @@ Utility endpoint for powering Dashboard UI. Given some set of `filtered` Field I
### PARAMS:
* **`filtered`** value must be an integer greater than zero., or one or more value must be an integer greater than zero.
- **`filtered`** value must be an integer greater than zero., or one or more value must be an integer greater than zero.
* **`filtering`** nullable value must be an integer greater than zero., or one or more value must be an integer greater than zero.
- **`filtering`** nullable value must be an integer greater than zero., or one or more value must be an integer greater than zero.
## `GET /api/dashboard/public`
@@ -158,19 +158,19 @@ Create a new Dashboard.
### PARAMS:
* **`name`** value must be a non-blank string.
- **`name`** value must be a non-blank string.
* **`description`** nullable string
- **`description`** nullable string.
* **`parameters`** nullable sequence of parameter must be a map with :id and :type keys
- **`parameters`** nullable sequence of parameter must be a map with :id and :type keys.
* **`cache_ttl`** nullable value must be an integer greater than zero.
- **`cache_ttl`** nullable value must be an integer greater than zero.
* **`collection_id`** nullable value must be an integer greater than zero.
- **`collection_id`** nullable value must be an integer greater than zero.
* **`collection_position`** nullable value must be an integer greater than zero.
- **`collection_position`** nullable value must be an integer greater than zero.
* **`_dashboard`**
- **`_dashboard`**
## `POST /api/dashboard/:dashboard-id/dashcard/:dashcard-id/card/:card-id/query`
@@ -178,13 +178,13 @@ Run the query associated with a Saved Question (`Card`) in the context of a `Das
### PARAMS:
* **`dashboard-id`** value must be an integer greater than zero.
- **`dashboard-id`** value must be an integer greater than zero.
* **`dashcard-id`** value must be an integer greater than zero.
- **`dashcard-id`** value must be an integer greater than zero.
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
* **`parameters`** nullable sequence of value must be a parameter map with an id key
- **`parameters`** nullable sequence of value must be a parameter map with an id key.
## `POST /api/dashboard/:dashboard-id/dashcard/:dashcard-id/card/:card-id/query/:export-format`
@@ -196,17 +196,17 @@ Run the query associated with a Saved Question (`Card`) in the context of a `Das
### PARAMS:
* **`dashboard-id`** value must be an integer greater than zero.
- **`dashboard-id`** value must be an integer greater than zero.
* **`dashcard-id`** value must be an integer greater than zero.
- **`dashcard-id`** value must be an integer greater than zero.
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
* **`export-format`** enum of csv, api, xlsx, json
- **`export-format`** enum of csv, api, xlsx, json.
* **`parameters`** nullable value must be a valid JSON string.
- **`parameters`** nullable value must be a valid JSON string.
* **`request-parameters`**
- **`request-parameters`**
## `POST /api/dashboard/:dashboard-id/dashcard/:dashcard-id/execute`
@@ -217,13 +217,13 @@ Execute the associated Action in the context of a `Dashboard` and `DashboardCard
### PARAMS:
* **`dashboard-id`** value must be an integer greater than zero.
- **`dashboard-id`** value must be an integer greater than zero.
* **`dashcard-id`** value must be an integer greater than zero.
- **`dashcard-id`** value must be an integer greater than zero.
* **`parameters`** nullable map from <keyword> to <anything>
- **`parameters`** nullable map from <keyword> to <anything>.
* **`_body`**
- **`_body`**
## `POST /api/dashboard/:dashboard-id/public_link`
@@ -235,7 +235,7 @@ You must be a superuser to do this.
### PARAMS:
* **`dashboard-id`** value must be an integer greater than zero.
- **`dashboard-id`** value must be an integer greater than zero.
## `POST /api/dashboard/:from-dashboard-id/copy`
@@ -243,19 +243,19 @@ Copy a Dashboard.
### PARAMS:
* **`from-dashboard-id`** nullable value must be an integer greater than zero.
- **`from-dashboard-id`** nullable value must be an integer greater than zero.
* **`name`** nullable value must be a non-blank string.
- **`name`** nullable value must be a non-blank string.
* **`description`** nullable string
- **`description`** nullable string.
* **`collection_id`** nullable value must be an integer greater than zero.
- **`collection_id`** nullable value must be an integer greater than zero.
* **`collection_position`** nullable value must be an integer greater than zero.
- **`collection_position`** nullable value must be an integer greater than zero.
* **`is_deep_copy`** nullable boolean
- **`is_deep_copy`** nullable boolean.
* **`_dashboard`**
- **`_dashboard`**
## `POST /api/dashboard/:id/revert`
@@ -263,9 +263,9 @@ Revert a Dashboard to a prior `Revision`.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`revision_id`** value must be an integer greater than zero.
- **`revision_id`** value must be an integer greater than zero.
## `POST /api/dashboard/pivot/:dashboard-id/dashcard/:dashcard-id/card/:card-id/query`
@@ -273,13 +273,13 @@ Run a pivot table query for a specific DashCard.
### PARAMS:
* **`dashboard-id`** value must be an integer greater than zero.
- **`dashboard-id`** value must be an integer greater than zero.
* **`dashcard-id`** value must be an integer greater than zero.
- **`dashcard-id`** value must be an integer greater than zero.
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
* **`parameters`** nullable sequence of value must be a parameter map with an id key
- **`parameters`** nullable sequence of value must be a parameter map with an id key.
## `POST /api/dashboard/save`
@@ -287,7 +287,7 @@ Save a denormalized description of dashboard.
### PARAMS:
* **`dashboard`**
- **`dashboard`**
## `POST /api/dashboard/save/collection/:parent-collection-id`
@@ -295,9 +295,9 @@ Save a denormalized description of dashboard into collection with ID `:parent-co
### PARAMS:
* **`parent-collection-id`** value must be an integer greater than zero.
- **`parent-collection-id`** value must be an integer greater than zero.
* **`dashboard`**
- **`dashboard`**
## `PUT /api/dashboard/:id`
@@ -306,39 +306,41 @@ Update a Dashboard, and optionally the `dashcards` and `tabs` of a Dashboard. Th
### PARAMS:
* **`parameters`** nullable sequence of parameter must be a map with :id and :type keys
- **`parameters`** nullable sequence of parameter must be a map with :id and :type keys.
* **`points_of_interest`** nullable string
- **`points_of_interest`** nullable string.
* **`description`** nullable string
- **`description`** nullable string.
* **`archived`** nullable boolean
- **`archived`** nullable boolean.
* **`dashcards`** nullable value must be seq of maps in which ids are unique
- **`dashcards`** nullable value must be seq of maps in which ids are unique.
* **`collection_position`** nullable value must be an integer greater than zero.
- **`collection_position`** nullable value must be an integer greater than zero.
* **`tabs`** nullable value must be seq of maps in which ids are unique
- **`tabs`** nullable value must be seq of maps in which ids are unique.
* **`show_in_getting_started`** nullable boolean
- **`show_in_getting_started`** nullable boolean.
* **`enable_embedding`** nullable boolean
- **`enable_embedding`** nullable boolean.
* **`collection_id`** nullable value must be an integer greater than zero.
- **`collection_id`** nullable value must be an integer greater than zero.
* **`dash-updates`**
- **`dash-updates`**
* **`name`** nullable value must be a non-blank string.
- **`name`** nullable value must be a non-blank string.
* **`caveats`** nullable string
- **`width`** nullable enum of fixed, full.
* **`embedding_params`** nullable value must be a valid embedding params map.
- **`caveats`** nullable string.
* **`cache_ttl`** nullable value must be an integer greater than zero.
- **`embedding_params`** nullable value must be a valid embedding params map.
* **`id`** value must be an integer greater than zero.
- **`cache_ttl`** nullable value must be an integer greater than zero.
* **`position`** nullable value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
- **`position`** nullable value must be an integer greater than zero.
## `PUT /api/dashboard/:id/cards`
@@ -359,11 +361,11 @@ Update a Dashboard, and optionally the `dashcards` and `tabs` of a Dashboard. Th
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`cards`** value must be seq of maps in which ids are unique
- **`cards`** value must be seq of maps in which ids are unique.
* **`tabs`** nullable value must be seq of maps in which ids are unique
- **`tabs`** nullable value must be seq of maps in which ids are unique.
---

View File

@@ -16,7 +16,7 @@ You must be a superuser to do this.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/database/`
@@ -37,17 +37,17 @@ Fetch all `Databases`.
### PARAMS:
* **`include`** include must be either empty or the value tables
- **`include`** include must be either empty or the value tables.
* **`saved`** nullable boolean
- **`saved`** nullable boolean.
* **`include_editable_data_model`** nullable boolean
- **`include_editable_data_model`** nullable boolean.
* **`exclude_uneditable_details`** nullable boolean
- **`exclude_uneditable_details`** nullable boolean.
* **`include_only_uploadable`** nullable boolean
- **`include_only_uploadable`** nullable boolean.
* **`include_analytics`** nullable boolean
- **`include_analytics`** nullable boolean.
## `GET /api/database/:id`
@@ -63,13 +63,13 @@ Get a single Database with `id`. Optionally pass `?include=tables` or `?include=
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`include`** nullable enum of tables, tables.fields
- **`include`** nullable enum of tables, tables.fields.
* **`include_editable_data_model`**
- **`include_editable_data_model`**
* **`exclude_uneditable_details`**
- **`exclude_uneditable_details`**
## `GET /api/database/:id/autocomplete_suggestions`
@@ -85,11 +85,11 @@ Return a list of autocomplete suggestions for a given `prefix`, or `substring`.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`prefix`** nullable value must be a non-blank string.
- **`prefix`** nullable value must be a non-blank string.
* **`substring`** nullable value must be a non-blank string.
- **`substring`** nullable value must be a non-blank string.
## `GET /api/database/:id/card_autocomplete_suggestions`
@@ -99,9 +99,9 @@ Return a list of `Card` autocomplete suggestions for a given `query` in a given
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`query`** value must be a non-blank string.
- **`query`** value must be a non-blank string.
## `GET /api/database/:id/fields`
@@ -109,7 +109,7 @@ Get a list of all `Fields` in `Database`.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/database/:id/idfields`
@@ -117,9 +117,9 @@ Get a list of all primary key `Fields` for `Database`.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`include_editable_data_model`**
- **`include_editable_data_model`**
## `GET /api/database/:id/metadata`
@@ -133,13 +133,13 @@ Get metadata about a `Database`, including all of its `Tables` and `Fields`. Ret
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`include_hidden`** nullable value must be a valid boolean string ('true' or 'false').
- **`include_hidden`** nullable value must be a valid boolean string ('true' or 'false').
* **`include_editable_data_model`** nullable value must be a valid boolean string ('true' or 'false').
- **`include_editable_data_model`** nullable value must be a valid boolean string ('true' or 'false').
* **`remove_inactive`** nullable value must be a valid boolean string ('true' or 'false').
- **`remove_inactive`** nullable value must be a valid boolean string ('true' or 'false').
## `GET /api/database/:id/schema/`
@@ -147,11 +147,11 @@ Return a list of Tables for a Database whose `schema` is `nil` or an empty strin
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`include_hidden`** nullable value must be a valid boolean string ('true' or 'false').
- **`include_hidden`** nullable value must be a valid boolean string ('true' or 'false').
* **`include_editable_data_model`** nullable value must be a valid boolean string ('true' or 'false').
- **`include_editable_data_model`** nullable value must be a valid boolean string ('true' or 'false').
## `GET /api/database/:id/schema/:schema`
@@ -159,13 +159,13 @@ Returns a list of Tables for the given Database `id` and `schema`.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`include_hidden`** nullable value must be a valid boolean string ('true' or 'false').
- **`include_hidden`** nullable value must be a valid boolean string ('true' or 'false').
* **`include_editable_data_model`** nullable value must be a valid boolean string ('true' or 'false').
- **`include_editable_data_model`** nullable value must be a valid boolean string ('true' or 'false').
* **`schema`**
- **`schema`**
## `GET /api/database/:id/schemas`
@@ -173,11 +173,11 @@ Returns a list of all the schemas with tables found for the database `id`. Exclu
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`include_editable_data_model`** nullable value must be a valid boolean string ('true' or 'false').
- **`include_editable_data_model`** nullable value must be a valid boolean string ('true' or 'false').
* **`include_hidden`** nullable value must be a valid boolean string ('true' or 'false').
- **`include_hidden`** nullable value must be a valid boolean string ('true' or 'false').
## `GET /api/database/:id/syncable_schemas`
@@ -185,7 +185,7 @@ Returns a list of all syncable schemas found for the database `id`.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/database/:id/usage_info`
@@ -196,7 +196,7 @@ You must be a superuser to do this.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/database/:virtual-db/datasets`
@@ -208,7 +208,7 @@ Returns a list of Tables for the datasets virtual database.
### PARAMS:
* **`schema`**
- **`schema`**
## `GET /api/database/:virtual-db/metadata`
@@ -221,7 +221,7 @@ Returns a list of Tables for the saved questions virtual database.
### PARAMS:
* **`schema`**
- **`schema`**
## `GET /api/database/:virtual-db/schemas`
@@ -235,21 +235,21 @@ You must be a superuser to do this.
### PARAMS:
* **`name`** value must be a non-blank string.
- **`name`** value must be a non-blank string.
* **`engine`** value must be a valid database engine.
- **`engine`** value must be a valid database engine.
* **`details`** Value must be a map.
- **`details`** Value must be a map.
* **`is_full_sync`** nullable boolean
- **`is_full_sync`** nullable boolean.
* **`is_on_demand`** nullable boolean
- **`is_on_demand`** nullable boolean.
* **`schedules`** nullable :metabase.sync.schedules/ExpandedSchedulesMap
- **`schedules`** nullable :metabase.sync.schedules/ExpandedSchedulesMap.
* **`auto_run_queries`** nullable boolean
- **`auto_run_queries`** nullable boolean.
* **`cache_ttl`** nullable value must be an integer greater than zero.
- **`cache_ttl`** nullable value must be an integer greater than zero.
## `POST /api/database/:id/discard_values`
@@ -257,7 +257,7 @@ Discards all saved field values for this `Database`.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `POST /api/database/:id/dismiss_spinner`
@@ -266,7 +266,7 @@ Manually set the initial sync status of the `Database` and corresponding
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `POST /api/database/:id/persist`
@@ -274,7 +274,7 @@ Attempt to enable model persistence for a database. If already enabled returns a
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `POST /api/database/:id/rescan_values`
@@ -282,7 +282,7 @@ Trigger a manual scan of the field values for this `Database`.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `POST /api/database/:id/sync_schema`
@@ -290,7 +290,7 @@ Trigger a manual update of the schema metadata for this `Database`.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `POST /api/database/:id/unpersist`
@@ -298,7 +298,7 @@ Attempt to disable model persistence for a database. If already not enabled, jus
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `POST /api/database/sample_database`
@@ -314,9 +314,9 @@ You must be a superuser to do this.
### PARAMS:
* **`engine`** value must be a valid database engine.
- **`engine`** value must be a valid database engine.
* **`details`** map
- **`details`** map.
## `PUT /api/database/:id`
@@ -324,33 +324,33 @@ Update a `Database`.
### PARAMS:
* **`engine`** nullable value must be a valid database engine.
- **`engine`** nullable value must be a valid database engine.
* **`schedules`** nullable :metabase.sync.schedules/ExpandedSchedulesMap
- **`schedules`** nullable :metabase.sync.schedules/ExpandedSchedulesMap.
* **`refingerprint`** nullable boolean
- **`refingerprint`** nullable boolean.
* **`points_of_interest`** nullable string
- **`points_of_interest`** nullable string.
* **`description`** nullable string
- **`description`** nullable string.
* **`auto_run_queries`** nullable boolean
- **`auto_run_queries`** nullable boolean.
* **`name`** nullable value must be a non-blank string.
- **`name`** nullable value must be a non-blank string.
* **`settings`** nullable Value must be a map.
- **`settings`** nullable Value must be a map.
* **`caveats`** nullable string
- **`caveats`** nullable string.
* **`is_full_sync`**
- **`is_full_sync`**
* **`cache_ttl`** nullable value must be an integer greater than zero.
- **`cache_ttl`** nullable value must be an integer greater than zero.
* **`details`** nullable Value must be a map.
- **`details`** nullable Value must be a map.
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`is_on_demand`**
- **`is_on_demand`**
---

View File

@@ -14,9 +14,9 @@ Execute a query and retrieve the results in the usual format. The query will not
### PARAMS:
* **`database`** nullable integer
- **`database`** nullable integer.
* **`query`**
- **`query`**
## `POST /api/dataset/:export-format`
@@ -24,11 +24,11 @@ Execute a query and download the result data as a file in the specified format.
### PARAMS:
* **`export-format`** enum of csv, api, xlsx, json
- **`export-format`** enum of csv, api, xlsx, json.
* **`query`** value must be a valid JSON string.
- **`query`** value must be a valid JSON string.
* **`visualization_settings`** value must be a valid JSON string.
- **`visualization_settings`** value must be a valid JSON string.
## `POST /api/dataset/duration`
@@ -36,9 +36,9 @@ Get historical query execution duration.
### PARAMS:
* **`database`**
- **`database`**
* **`query`**
- **`query`**
## `POST /api/dataset/native`
@@ -46,11 +46,11 @@ Fetch a native version of an MBQL query.
### PARAMS:
* **`database`** value must be an integer greater than zero.
- **`database`** value must be an integer greater than zero.
* **`pretty`** nullable boolean
- **`pretty`** nullable boolean.
* **`query`**
- **`query`**
## `POST /api/dataset/parameter/search/:query`
@@ -58,11 +58,11 @@ Return parameter values for cards or dashboards that are being edited. Expects a
### PARAMS:
* **`query`** value must be a non-blank string.
- **`query`** value must be a non-blank string.
* **`parameter`** parameter must be a map with :id and :type keys
- **`parameter`** parameter must be a map with :id and :type keys.
* **`field_ids`** nullable sequence of value must be an integer greater than zero.
- **`field_ids`** nullable sequence of value must be an integer greater than zero.
## `POST /api/dataset/parameter/values`
@@ -70,9 +70,9 @@ Return parameter values for cards or dashboards that are being edited.
### PARAMS:
* **`parameter`** parameter must be a map with :id and :type keys
- **`parameter`** parameter must be a map with :id and :type keys.
* **`field_ids`** nullable sequence of value must be an integer greater than zero.
- **`field_ids`** nullable sequence of value must be an integer greater than zero.
## `POST /api/dataset/pivot`
@@ -80,9 +80,9 @@ Generate a pivoted dataset for an ad-hoc query.
### PARAMS:
* **`database`** nullable value must be an integer greater than zero.
- **`database`** nullable value must be an integer greater than zero.
* **`query`**
- **`query`**
---

View File

@@ -25,7 +25,7 @@ Fetch rows for the month specified by `:yyyy-mm` from the query_execution logs t
### PARAMS:
* **`yyyy-mm`** Must be a string like 2020-04 or 2222-11.
- **`yyyy-mm`** Must be a string like 2020-04 or 2222-11.
---

View File

@@ -16,7 +16,7 @@ You must be a superuser to do this.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/ee/advanced-permissions/impersonation/`
@@ -27,9 +27,9 @@ You must be a superuser to do this.
### PARAMS:
* **`group_id`** nullable value must be an integer greater than zero.
- **`group_id`** nullable value must be an integer greater than zero.
* **`db_id`** nullable value must be an integer greater than zero.
- **`db_id`** nullable value must be an integer greater than zero.
---

View File

@@ -15,7 +15,12 @@ Delete all Alert and DashboardSubscription subscriptions for a User (i.e., so th
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/ee/audit-app/user/audit-info`
Gets audit info for the current user if he has permissions to access the audit collection.
Otherwise return an empty map.
---

View File

@@ -16,13 +16,13 @@ You must be a superuser to do this.
### PARAMS:
* **`text`** nullable string
- **`text`** nullable string.
* **`moderated_item_id`** value must be an integer greater than zero.
- **`moderated_item_id`** value must be an integer greater than zero.
* **`moderated_item_type`** enum of card, :card
- **`moderated_item_type`** enum of card, :card.
* **`status`** nullable nullable enum of verified
- **`status`** nullable nullable enum of verified.
---

View File

@@ -14,7 +14,7 @@ Delete a GTAP entry.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/mt/gtap/`
@@ -22,9 +22,9 @@ Fetch a list of all GTAPs currently in use, or a single GTAP if both `group_id`
### PARAMS:
* **`group_id`** nullable value must be an integer greater than zero.
- **`group_id`** nullable value must be an integer greater than zero.
* **`table_id`** nullable value must be an integer greater than zero.
- **`table_id`** nullable value must be an integer greater than zero.
## `GET /api/mt/gtap/:id`
@@ -32,7 +32,7 @@ Fetch GTAP by `id`.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `POST /api/mt/gtap/`
@@ -40,13 +40,13 @@ Create a new GTAP.
### PARAMS:
* **`table_id`** value must be an integer greater than zero.
- **`table_id`** value must be an integer greater than zero.
* **`card_id`** nullable value must be an integer greater than zero.
- **`card_id`** nullable value must be an integer greater than zero.
* **`group_id`** value must be an integer greater than zero.
- **`group_id`** value must be an integer greater than zero.
* **`attribute_remappings`**
- **`attribute_remappings`**
## `POST /api/mt/gtap/validate`
@@ -55,9 +55,9 @@ Validate a sandbox which may not have yet been saved. This runs the same validat
### PARAMS:
* **`table_id`** value must be an integer greater than zero.
- **`table_id`** value must be an integer greater than zero.
* **`card_id`** nullable value must be an integer greater than zero.
- **`card_id`** nullable value must be an integer greater than zero.
## `PUT /api/mt/gtap/:id`
@@ -67,9 +67,9 @@ Update a GTAP entry. The only things you're allowed to update for a GTAP are the
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`card_id`** nullable value must be an integer greater than zero.
- **`card_id`** nullable value must be an integer greater than zero.
---

View File

@@ -18,13 +18,13 @@ This endpoint essentially acts as a wrapper for the OSS version of this route. W
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`include_sensitive_fields`** nullable value must be a valid boolean string ('true' or 'false').
- **`include_sensitive_fields`** nullable value must be a valid boolean string ('true' or 'false').
* **`include_hidden_fields`** nullable value must be a valid boolean string ('true' or 'false').
- **`include_hidden_fields`** nullable value must be a valid boolean string ('true' or 'false').
* **`include_editable_data_model`** nullable value must be a valid boolean string ('true' or 'false').
- **`include_editable_data_model`** nullable value must be a valid boolean string ('true' or 'false').
---

View File

@@ -19,9 +19,9 @@ Update the `login_attributes` for a User.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`login_attributes`** nullable value must be a valid user attributes map (name -> value)
- **`login_attributes`** nullable value must be a valid user attributes map (name -> value).
---

View File

@@ -28,19 +28,19 @@ You must be a superuser to do this.
### PARAMS:
* **`all_collections`** nullable value must be a valid boolean string ('true' or 'false').
- **`all_collections`** nullable value must be a valid boolean string ('true' or 'false').
* **`collection`** nullable vector of value must be an integer greater than zero.
- **`collection`** nullable vector of value must be an integer greater than zero.
* **`settings`** nullable value must be a valid boolean string ('true' or 'false').
- **`settings`** nullable value must be a valid boolean string ('true' or 'false').
* **`data_model`** nullable value must be a valid boolean string ('true' or 'false').
- **`data_model`** nullable value must be a valid boolean string ('true' or 'false').
* **`field_values`** nullable value must be a valid boolean string ('true' or 'false').
- **`field_values`** nullable value must be a valid boolean string ('true' or 'false').
* **`database_secrets`** nullable value must be a valid boolean string ('true' or 'false').
- **`database_secrets`** nullable value must be a valid boolean string ('true' or 'false').
* **`dirname`**
- **`dirname`**
## `POST /api/ee/serialization/import`
@@ -55,7 +55,7 @@ You must be a superuser to do this.
### PARAMS:
* **`raw-params`**
- **`raw-params`**
---

View File

@@ -20,7 +20,7 @@ SSO entry-point for an SSO user that has not logged in yet.
### PARAMS:
* **`req`**
- **`req`**
## `POST /auth/sso/`
@@ -28,7 +28,23 @@ Route the SSO backends call with successful login details.
### PARAMS:
* **`req`**
- **`req`**
## `POST /auth/sso/handle_slo`
Handles client confirmation of saml logout via slo.
### PARAMS:
- **`req`**
## `POST /auth/sso/logout`
Logout.
### PARAMS:
- **`metabase-session-id`**
---

View File

@@ -23,7 +23,7 @@ Update multiple email Settings. You must be a superuser or have `setting` permis
### PARAMS:
* **`settings`** map
- **`settings`** map.
---

View File

@@ -46,7 +46,7 @@ Fetch a Card via a JSON Web Token signed with the `embedding-secret-key`.
### PARAMS:
* **`token`**
- **`token`**
## `GET /api/embed/card/:token/field/:field-id/remapping/:remapped-id`
@@ -55,13 +55,13 @@ Fetch remapped Field values. This is the same as `GET /api/field/:id/remapping/:
### PARAMS:
* **`token`**
- **`token`**
* **`field-id`** value must be an integer greater than zero.
- **`field-id`** value must be an integer greater than zero.
* **`remapped-id`** value must be an integer greater than zero.
- **`remapped-id`** value must be an integer greater than zero.
* **`value`** value must be a non-blank string.
- **`value`** value must be a non-blank string.
## `GET /api/embed/card/:token/field/:field-id/search/:search-field-id`
@@ -69,15 +69,15 @@ Search for values of a Field that is referenced by an embedded Card.
### PARAMS:
* **`token`**
- **`token`**
* **`field-id`** value must be an integer greater than zero.
- **`field-id`** value must be an integer greater than zero.
* **`search-field-id`** value must be an integer greater than zero.
- **`search-field-id`** value must be an integer greater than zero.
* **`value`** value must be a non-blank string.
- **`value`** value must be a non-blank string.
* **`limit`** nullable value must be an integer greater than zero.
- **`limit`** nullable value must be an integer greater than zero.
## `GET /api/embed/card/:token/field/:field-id/values`
@@ -85,9 +85,9 @@ Fetch FieldValues for a Field that is referenced by an embedded Card.
### PARAMS:
* **`token`**
- **`token`**
* **`field-id`** value must be an integer greater than zero.
- **`field-id`** value must be an integer greater than zero.
## `GET /api/embed/card/:token/params/:param-key/search/:prefix`
@@ -95,11 +95,11 @@ Embedded version of chain filter search endpoint.
### PARAMS:
* **`token`**
- **`token`**
* **`param-key`**
- **`param-key`**
* **`prefix`**
- **`prefix`**
## `GET /api/embed/card/:token/params/:param-key/values`
@@ -107,9 +107,9 @@ Embedded version of api.card filter values endpoint.
### PARAMS:
* **`token`**
- **`token`**
* **`param-key`**
- **`param-key`**
## `GET /api/embed/card/:token/query`
@@ -122,11 +122,11 @@ Fetch the results of running a Card using a JSON Web Token signed with the `embe
### PARAMS:
* **`token`**
- **`token`**
* **`&`**
- **`&`**
* **`query-params`**
- **`query-params`**
## `GET /api/embed/card/:token/query/:export-format`
@@ -134,11 +134,11 @@ Like `GET /api/embed/card/query`, but returns the results as a file in the speci
### PARAMS:
* **`token`**
- **`token`**
* **`export-format`** enum of csv, api, xlsx, json
- **`export-format`** enum of csv, api, xlsx, json.
* **`query-params`**
- **`query-params`**
## `GET /api/embed/dashboard/:token`
@@ -150,7 +150,7 @@ Fetch a Dashboard via a JSON Web Token signed with the `embedding-secret-key`.
### PARAMS:
* **`token`**
- **`token`**
## `GET /api/embed/dashboard/:token/dashcard/:dashcard-id/card/:card-id`
@@ -159,15 +159,15 @@ Fetch the results of running a Card belonging to a Dashboard using a JSON Web To
### PARAMS:
* **`token`**
- **`token`**
* **`dashcard-id`** value must be an integer greater than zero.
- **`dashcard-id`** value must be an integer greater than zero.
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
* **`&`**
- **`&`**
* **`query-params`**
- **`query-params`**
## `GET /api/embed/dashboard/:token/dashcard/:dashcard-id/card/:card-id/:export-format`
@@ -176,15 +176,15 @@ Fetch the results of running a Card belonging to a Dashboard using a JSON Web To
### PARAMS:
* **`token`**
- **`token`**
* **`export-format`** enum of csv, api, xlsx, json
- **`export-format`** enum of csv, api, xlsx, json.
* **`dashcard-id`** value must be an integer greater than zero.
- **`dashcard-id`** value must be an integer greater than zero.
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
* **`query-params`**
- **`query-params`**
## `GET /api/embed/dashboard/:token/field/:field-id/remapping/:remapped-id`
@@ -193,13 +193,13 @@ Fetch remapped Field values. This is the same as `GET /api/field/:id/remapping/:
### PARAMS:
* **`token`**
- **`token`**
* **`field-id`** value must be an integer greater than zero.
- **`field-id`** value must be an integer greater than zero.
* **`remapped-id`** value must be an integer greater than zero.
- **`remapped-id`** value must be an integer greater than zero.
* **`value`** value must be a non-blank string.
- **`value`** value must be a non-blank string.
## `GET /api/embed/dashboard/:token/field/:field-id/search/:search-field-id`
@@ -207,15 +207,15 @@ Search for values of a Field that is referenced by a Card in an embedded Dashboa
### PARAMS:
* **`token`**
- **`token`**
* **`field-id`** value must be an integer greater than zero.
- **`field-id`** value must be an integer greater than zero.
* **`search-field-id`** value must be an integer greater than zero.
- **`search-field-id`** value must be an integer greater than zero.
* **`value`** value must be a non-blank string.
- **`value`** value must be a non-blank string.
* **`limit`** nullable value must be an integer greater than zero.
- **`limit`** nullable value must be an integer greater than zero.
## `GET /api/embed/dashboard/:token/field/:field-id/values`
@@ -223,9 +223,9 @@ Fetch FieldValues for a Field that is used as a param in an embedded Dashboard.
### PARAMS:
* **`token`**
- **`token`**
* **`field-id`** value must be an integer greater than zero.
- **`field-id`** value must be an integer greater than zero.
## `GET /api/embed/dashboard/:token/params/:param-key/search/:prefix`
@@ -233,13 +233,13 @@ Embedded version of chain filter search endpoint.
### PARAMS:
* **`token`**
- **`token`**
* **`param-key`**
- **`param-key`**
* **`prefix`**
- **`prefix`**
* **`query-params`**
- **`query-params`**
## `GET /api/embed/dashboard/:token/params/:param-key/values`
@@ -247,11 +247,11 @@ Embedded version of chain filter values endpoint.
### PARAMS:
* **`token`**
- **`token`**
* **`param-key`**
- **`param-key`**
* **`query-params`**
- **`query-params`**
## `GET /api/embed/pivot/card/:token/query`
@@ -264,11 +264,11 @@ Fetch the results of running a Card using a JSON Web Token signed with the `embe
### PARAMS:
* **`token`**
- **`token`**
* **`&`**
- **`&`**
* **`query-params`**
- **`query-params`**
## `GET /api/embed/pivot/dashboard/:token/dashcard/:dashcard-id/card/:card-id`
@@ -277,15 +277,15 @@ Fetch the results of running a Card belonging to a Dashboard using a JSON Web To
### PARAMS:
* **`token`**
- **`token`**
* **`dashcard-id`** value must be an integer greater than zero.
- **`dashcard-id`** value must be an integer greater than zero.
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
* **`&`**
- **`&`**
* **`query-params`**
- **`query-params`**
---

View File

@@ -14,7 +14,7 @@ Remove the dimension associated to field at ID.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/field/:id`
@@ -22,9 +22,9 @@ Get `Field` with ID.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`include_editable_data_model`** value must be a valid boolean string ('true' or 'false').
- **`include_editable_data_model`** value must be a valid boolean string ('true' or 'false').
## `GET /api/field/:id/related`
@@ -32,7 +32,7 @@ Return related entities.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/field/:id/remapping/:remapped-id`
@@ -40,11 +40,11 @@ Fetch remapped Field values.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`remapped-id`** value must be an integer greater than zero.
- **`remapped-id`** value must be an integer greater than zero.
* **`value`** value must be a non-blank string.
- **`value`** value must be a non-blank string.
## `GET /api/field/:id/search/:search-id`
@@ -53,11 +53,11 @@ Search for values of a Field with `search-id` that start with `value`. See docst
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`search-id`** value must be an integer greater than zero.
- **`search-id`** value must be an integer greater than zero.
* **`value`** value must be a non-blank string.
- **`value`** value must be a non-blank string.
## `GET /api/field/:id/summary`
@@ -65,7 +65,7 @@ Get the count and distinct count of `Field` with ID.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/field/:id/values`
@@ -75,7 +75,7 @@ If a Field's value of `has_field_values` is `:list`, return a list of all the di
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/field/field%2C:field-name%2C:options/values`
@@ -84,7 +84,7 @@ Implementation of the field values endpoint for fields in the Saved Questions 'v
### PARAMS:
* **`_`**
- **`_`**
## `POST /api/field/:id/dimension`
@@ -92,13 +92,13 @@ Sets the dimension for the given field at ID.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`dimension-type`** enum of internal, external
- **`dimension-type`** enum of internal, external.
* **`dimension-name`** value must be a non-blank string.
- **`dimension-name`** value must be a non-blank string.
* **`human_readable_field_id`** nullable value must be an integer greater than zero.
- **`human_readable_field_id`** nullable value must be an integer greater than zero.
## `POST /api/field/:id/discard_values`
@@ -107,7 +107,7 @@ Discard the FieldValues belonging to this Field. Only applies to fields that hav
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `POST /api/field/:id/rescan_values`
@@ -116,7 +116,7 @@ Manually trigger an update for the FieldValues for this Field. Only applies to F
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `POST /api/field/:id/values`
@@ -125,9 +125,9 @@ Update the fields values and human-readable values for a `Field` whose semantic
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`value-pairs`** sequence of vector with exactly 1 items of type: anything, or vector with exactly 2 items of type: anything, value must be a non-blank string.
- **`value-pairs`** sequence of vector with exactly 1 items of type: anything, or vector with exactly 2 items of type: anything, value must be a non-blank string.
## `PUT /api/field/:id`
@@ -135,31 +135,31 @@ Update `Field` with ID.
### PARAMS:
* **`visibility_type`** nullable enum of retired, sensitive, normal, hidden, details-only
- **`visibility_type`** nullable enum of retired, sensitive, normal, hidden, details-only.
* **`display_name`** nullable value must be a non-blank string.
- **`display_name`** nullable value must be a non-blank string.
* **`points_of_interest`** nullable value must be a non-blank string.
- **`points_of_interest`** nullable value must be a non-blank string.
* **`description`** nullable value must be a non-blank string.
- **`description`** nullable value must be a non-blank string.
* **`semantic_type`** nullable value must be a valid field semantic or relation type (keyword or string).
- **`semantic_type`** nullable value must be a valid field semantic or relation type (keyword or string).
* **`coercion_strategy`** nullable value must be a valid coercion strategy (keyword or string).
- **`coercion_strategy`** nullable value must be a valid coercion strategy (keyword or string).
* **`has_field_values`** nullable :metabase.lib.schema.metadata/column.has-field-values
- **`has_field_values`** nullable :metabase.lib.schema.metadata/column.has-field-values.
* **`settings`** nullable Value must be a map.
- **`settings`** nullable Value must be a map.
* **`caveats`** nullable value must be a non-blank string.
- **`caveats`** nullable value must be a non-blank string.
* **`fk_target_field_id`** nullable value must be an integer greater than zero.
- **`fk_target_field_id`** nullable value must be an integer greater than zero.
* **`nfc_path`** nullable sequence of value must be a non-blank string.
- **`nfc_path`** nullable sequence of value must be a non-blank string.
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`json_unfolding`** nullable boolean
- **`json_unfolding`** nullable boolean.
---

View File

@@ -15,11 +15,11 @@ Load a custom GeoJSON file based on a URL or file path provided as a query param
### PARAMS:
* **`url`** value must be a non-blank string.
- **`url`** value must be a non-blank string.
* **`respond`**
- **`respond`**
* **`raise`**
- **`raise`**
## `GET /api/geojson/:key`
@@ -28,11 +28,11 @@ Fetch a custom GeoJSON file as defined in the `custom-geojson` setting. (This ju
### PARAMS:
* **`key`** value must be a non-blank string.
- **`key`** value must be a non-blank string.
* **`respond`**
- **`respond`**
* **`raise`**
- **`raise`**
---

View File

@@ -16,11 +16,11 @@ You must be a superuser to do this.
### PARAMS:
* **`google-auth-client-id`** nullable string
- **`google-auth-client-id`** nullable string.
* **`google-auth-enabled`** nullable boolean
- **`google-auth-enabled`** nullable boolean.
* **`google-auth-auto-create-accounts-domain`** nullable string
- **`google-auth-auto-create-accounts-domain`** nullable string.
---

View File

@@ -16,7 +16,7 @@ You must be a superuser to do this.
### PARAMS:
* **`settings`** map
- **`settings`** map.
---

View File

@@ -14,9 +14,9 @@ Ask Metabot to generate a native question given a prompt about a given database.
### PARAMS:
* **`database-id`** value must be an integer greater than zero.
- **`database-id`** value must be an integer greater than zero.
* **`question`** value must be a non-blank string.
- **`question`** value must be a non-blank string.
## `POST /api/metabot/database/:database-id/query`
@@ -24,9 +24,9 @@ Ask Metabot to generate a SQL query given a prompt about a given database.
### PARAMS:
* **`database-id`** value must be an integer greater than zero.
- **`database-id`** value must be an integer greater than zero.
* **`question`** value must be a non-blank string.
- **`question`** value must be a non-blank string.
## `POST /api/metabot/feedback`
@@ -34,7 +34,7 @@ Record feedback on metabot results.
### PARAMS:
* **`feedback`**
- **`feedback`**
## `POST /api/metabot/model/:model-id`
@@ -42,9 +42,9 @@ Ask Metabot to generate a SQL query given a prompt about a given model.
### PARAMS:
* **`model-id`** value must be an integer greater than zero.
- **`model-id`** value must be an integer greater than zero.
* **`question`** value must be a non-blank string.
- **`question`** value must be a non-blank string.
---

View File

@@ -14,9 +14,9 @@ Archive a Metric. (DEPRECATED -- Just pass updated value of `:archived` to the `
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`revision_message`** value must be a non-blank string.
- **`revision_message`** value must be a non-blank string.
## `GET /api/metric/`
@@ -28,7 +28,7 @@ Fetch `Metric` with ID.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/metric/:id/related`
@@ -36,7 +36,7 @@ Return related entities.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/metric/:id/revisions`
@@ -44,7 +44,7 @@ Fetch `Revisions` for `Metric` with ID.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `POST /api/metric/`
@@ -52,13 +52,13 @@ Create a new `Metric`.
### PARAMS:
* **`name`** value must be a non-blank string.
- **`name`** value must be a non-blank string.
* **`description`** nullable string
- **`description`** nullable string.
* **`table_id`** value must be an integer greater than zero.
- **`table_id`** value must be an integer greater than zero.
* **`definition`** map
- **`definition`** map.
## `POST /api/metric/:id/revert`
@@ -66,9 +66,9 @@ Revert a `Metric` to a prior `Revision`.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`revision_id`** value must be an integer greater than zero.
- **`revision_id`** value must be an integer greater than zero.
## `PUT /api/metric/:id`
@@ -76,25 +76,25 @@ Update a `Metric` with ID.
### PARAMS:
* **`points_of_interest`** nullable string
- **`points_of_interest`** nullable string.
* **`description`** nullable string
- **`description`** nullable string.
* **`archived`** nullable boolean
- **`archived`** nullable boolean.
* **`definition`** nullable map
- **`definition`** nullable map.
* **`revision_message`** value must be a non-blank string.
- **`revision_message`** value must be a non-blank string.
* **`show_in_getting_started`** nullable boolean
- **`show_in_getting_started`** nullable boolean.
* **`name`** nullable value must be a non-blank string.
- **`name`** nullable value must be a non-blank string.
* **`caveats`** nullable string
- **`caveats`** nullable string.
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`how_is_this_calculated`** nullable string
- **`how_is_this_calculated`** nullable string.
## `PUT /api/metric/:id/important_fields`
@@ -105,9 +105,9 @@ You must be a superuser to do this.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`important_field_ids`** sequence of value must be an integer greater than zero.
- **`important_field_ids`** sequence of value must be an integer greater than zero.
---

View File

@@ -12,31 +12,31 @@ API endpoints for Model index.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/model-index/`
### PARAMS:
* **`model_id`** value must be an integer greater than zero.
- **`model_id`** value must be an integer greater than zero.
## `GET /api/model-index/:id`
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `POST /api/model-index/`
### PARAMS:
* **`model_id`** value must be an integer greater than zero.
- **`model_id`** value must be an integer greater than zero.
* **`pk_ref`** anything
- **`pk_ref`** anything.
* **`value_ref`** anything
- **`value_ref`** anything.
* **`_model-index`**
- **`_model-index`**
---

View File

@@ -14,7 +14,7 @@ Fetch all snippets.
### PARAMS:
* **`archived`** nullable value must be a valid boolean string ('true' or 'false').
- **`archived`** nullable value must be a valid boolean string ('true' or 'false').
## `GET /api/native-query-snippet/:id`
@@ -22,7 +22,7 @@ Fetch native query snippet with ID.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `POST /api/native-query-snippet/`
@@ -30,13 +30,13 @@ Create a new `NativeQuerySnippet`.
### PARAMS:
* **`content`** string
- **`content`** string.
* **`description`** nullable string
- **`description`** nullable string.
* **`name`** snippet names cannot include } or start with spaces
- **`name`** snippet names cannot include } or start with spaces.
* **`collection_id`** nullable value must be an integer greater than zero.
- **`collection_id`** nullable value must be an integer greater than zero.
## `PUT /api/native-query-snippet/:id`
@@ -44,17 +44,17 @@ Update an existing `NativeQuerySnippet`.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`archived`** nullable boolean
- **`archived`** nullable boolean.
* **`content`** nullable string
- **`content`** nullable string.
* **`description`** nullable string
- **`description`** nullable string.
* **`name`** nullable snippet names cannot include } or start with spaces
- **`name`** nullable snippet names cannot include } or start with spaces.
* **`collection_id`** nullable value must be an integer greater than zero.
- **`collection_id`** nullable value must be an integer greater than zero.
---

View File

@@ -19,15 +19,15 @@ Notification about a potential schema change to one of our `Databases`.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`table_id`** nullable value must be an integer greater than zero.
- **`table_id`** nullable value must be an integer greater than zero.
* **`table_name`** nullable value must be a non-blank string.
- **`table_name`** nullable value must be a non-blank string.
* **`scan`** nullable enum of full, schema
- **`scan`** nullable enum of full, schema.
* **`synchronous?`**
- **`synchronous?`**
## `POST /api/notify/db/:id/new-table`
@@ -36,11 +36,11 @@ Sync a new table without running a full database sync. Requires `schema_name` an
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`schema_name`** value must be a non-blank string.
- **`schema_name`** value must be a non-blank string.
* **`table_name`** value must be a non-blank string.
- **`table_name`** value must be a non-blank string.
---

View File

@@ -14,7 +14,7 @@ Delete a specific `PermissionsGroup`.
### PARAMS:
* **`group-id`** value must be an integer greater than zero.
- **`group-id`** value must be an integer greater than zero.
## `DELETE /api/permissions/membership/:id`
@@ -22,7 +22,7 @@ Remove a User from a PermissionsGroup (delete their membership).
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/permissions/execution/graph`
@@ -50,7 +50,7 @@ You must be a superuser to do this.
### PARAMS:
* **`db-id`** value must be an integer greater than zero.
- **`db-id`** value must be an integer greater than zero.
## `GET /api/permissions/graph/group/:group-id`
@@ -60,7 +60,7 @@ You must be a superuser to do this.
### PARAMS:
* **`group-id`** value must be an integer greater than zero.
- **`group-id`** value must be an integer greater than zero.
## `GET /api/permissions/group`
@@ -75,7 +75,7 @@ Fetch the details for a certain permissions group.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/permissions/membership`
@@ -94,7 +94,7 @@ You must be a superuser to do this.
### PARAMS:
* **`name`** value must be a non-blank string.
- **`name`** value must be a non-blank string.
## `POST /api/permissions/membership`
@@ -102,11 +102,11 @@ Add a `User` to a `PermissionsGroup`. Returns updated list of members belonging
### PARAMS:
* **`group_id`** value must be an integer greater than zero.
- **`group_id`** value must be an integer greater than zero.
* **`user_id`** value must be an integer greater than zero.
- **`user_id`** value must be an integer greater than zero.
* **`is_group_manager`** nullable boolean
- **`is_group_manager`** nullable boolean.
## `PUT /api/permissions/execution/graph`
@@ -121,7 +121,7 @@ You must be a superuser to do this.
### PARAMS:
* **`body`** map
- **`body`** map.
## `PUT /api/permissions/graph`
@@ -145,9 +145,9 @@ You must be a superuser to do this.
### PARAMS:
* **`skip-graph`** nullable boolean
- **`skip-graph`** nullable boolean.
* **`body`** map
- **`body`** map.
## `PUT /api/permissions/group/:group-id`
@@ -155,9 +155,9 @@ Update the name of a `PermissionsGroup`.
### PARAMS:
* **`group-id`** value must be an integer greater than zero.
- **`group-id`** value must be an integer greater than zero.
* **`name`** value must be a non-blank string.
- **`name`** value must be a non-blank string.
## `PUT /api/permissions/membership/:group-id/clear`
@@ -165,7 +165,7 @@ Remove all members from a `PermissionsGroup`. Returns a 400 (Bad Request) if the
### PARAMS:
* **`group-id`** value must be an integer greater than zero.
- **`group-id`** value must be an integer greater than zero.
## `PUT /api/permissions/membership/:id`
@@ -173,9 +173,9 @@ Update a Permission Group membership. Returns the updated record.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`is_group_manager`** boolean
- **`is_group_manager`** boolean.
---

View File

@@ -18,7 +18,7 @@ Fetch a particular [[PersistedInfo]] by id.
### PARAMS:
* **`persisted-info-id`** nullable value must be an integer greater than zero.
- **`persisted-info-id`** nullable value must be an integer greater than zero.
## `GET /api/persist/card/:card-id`
@@ -26,7 +26,7 @@ Fetch a particular [[PersistedInfo]] by card-id.
### PARAMS:
* **`card-id`** nullable value must be an integer greater than zero.
- **`card-id`** nullable value must be an integer greater than zero.
## `POST /api/persist/disable`
@@ -44,9 +44,9 @@ Set the cron schedule to refresh persisted models.
### PARAMS:
* **`cron`** Value must be a string representing a cron schedule of format <seconds> <minutes> <hours> <day of month> <month> <day of week> <year>
- **`cron`** Value must be a string representing a cron schedule of format <seconds> <minutes> <hours> <day of month> <month> <day of week> <year>.
* **`_body`**
- **`_body`**
---

View File

@@ -30,7 +30,7 @@ Fetch a Card you're considering embedding by passing a JWT `token`.
### PARAMS:
* **`token`** value must be a non-blank string.
- **`token`** value must be a non-blank string.
## `GET /api/preview-embed/card/:token/query`
@@ -38,11 +38,11 @@ Fetch the query results for a Card you're considering embedding by passing a JWT
### PARAMS:
* **`token`** value must be a non-blank string.
- **`token`** value must be a non-blank string.
* **`&`**
- **`&`**
* **`query-params`**
- **`query-params`**
## `GET /api/preview-embed/dashboard/:token`
@@ -50,7 +50,7 @@ Fetch a Dashboard you're considering embedding by passing a JWT `token`. .
### PARAMS:
* **`token`** value must be a non-blank string.
- **`token`** value must be a non-blank string.
## `GET /api/preview-embed/dashboard/:token/dashcard/:dashcard-id/card/:card-id`
@@ -58,15 +58,15 @@ Fetch the results of running a Card belonging to a Dashboard you're considering
### PARAMS:
* **`token`** value must be a non-blank string.
- **`token`** value must be a non-blank string.
* **`dashcard-id`** value must be an integer greater than zero.
- **`dashcard-id`** value must be an integer greater than zero.
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
* **`&`**
- **`&`**
* **`query-params`**
- **`query-params`**
## `GET /api/preview-embed/pivot/card/:token/query`
@@ -74,11 +74,11 @@ Fetch the query results for a Card you're considering embedding by passing a JWT
### PARAMS:
* **`token`** value must be a non-blank string.
- **`token`** value must be a non-blank string.
* **`&`**
- **`&`**
* **`query-params`**
- **`query-params`**
## `GET /api/preview-embed/pivot/dashboard/:token/dashcard/:dashcard-id/card/:card-id`
@@ -86,15 +86,15 @@ Fetch the results of running a Card belonging to a Dashboard you're considering
### PARAMS:
* **`token`** value must be a non-blank string.
- **`token`** value must be a non-blank string.
* **`dashcard-id`** value must be an integer greater than zero.
- **`dashcard-id`** value must be an integer greater than zero.
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
* **`&`**
- **`&`**
* **`query-params`**
- **`query-params`**
---

View File

@@ -14,7 +14,7 @@ Fetch a publicly-accessible Action. Does not require auth credentials. Public sh
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
## `GET /api/public/card/:uuid`
@@ -23,7 +23,7 @@ Fetch a publicly-accessible Card an return query results as well as `:card` info
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
## `GET /api/public/card/:uuid/field/:field-id/remapping/:remapped-id`
@@ -32,13 +32,13 @@ Fetch remapped Field values. This is the same as `GET /api/field/:id/remapping/:
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
* **`field-id`** value must be an integer greater than zero.
- **`field-id`** value must be an integer greater than zero.
* **`remapped-id`** value must be an integer greater than zero.
- **`remapped-id`** value must be an integer greater than zero.
* **`value`** value must be a non-blank string.
- **`value`** value must be a non-blank string.
## `GET /api/public/card/:uuid/field/:field-id/search/:search-field-id`
@@ -46,15 +46,15 @@ Search for values of a Field that is referenced by a public Card.
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
* **`field-id`** value must be an integer greater than zero.
- **`field-id`** value must be an integer greater than zero.
* **`search-field-id`** value must be an integer greater than zero.
- **`search-field-id`** value must be an integer greater than zero.
* **`value`** value must be a non-blank string.
- **`value`** value must be a non-blank string.
* **`limit`** nullable value must be an integer greater than zero.
- **`limit`** nullable value must be an integer greater than zero.
## `GET /api/public/card/:uuid/field/:field-id/values`
@@ -62,9 +62,9 @@ Fetch FieldValues for a Field that is referenced by a public Card.
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
* **`field-id`** value must be an integer greater than zero.
- **`field-id`** value must be an integer greater than zero.
## `GET /api/public/card/:uuid/params/:param-key/search/:query`
@@ -72,11 +72,11 @@ Fetch values for a parameter on a public card containing `query`.
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
* **`param-key`** value must be a non-blank string.
- **`param-key`** value must be a non-blank string.
* **`query`** value must be a non-blank string.
- **`query`** value must be a non-blank string.
## `GET /api/public/card/:uuid/params/:param-key/values`
@@ -84,9 +84,9 @@ Fetch values for a parameter on a public card.
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
* **`param-key`** value must be a non-blank string.
- **`param-key`** value must be a non-blank string.
## `GET /api/public/card/:uuid/query`
@@ -95,9 +95,9 @@ Fetch a publicly-accessible Card an return query results as well as `:card` info
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
* **`parameters`** nullable value must be a valid JSON string.
- **`parameters`** nullable value must be a valid JSON string.
## `GET /api/public/card/:uuid/query/:export-format`
@@ -106,11 +106,11 @@ Fetch a publicly-accessible Card and return query results in the specified forma
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
* **`export-format`** enum of csv, api, xlsx, json
- **`export-format`** enum of csv, api, xlsx, json.
* **`parameters`** nullable value must be a valid JSON string.
- **`parameters`** nullable value must be a valid JSON string.
## `GET /api/public/dashboard/:uuid`
@@ -118,7 +118,7 @@ Fetch a publicly-accessible Dashboard. Does not require auth credentials. Public
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
## `GET /api/public/dashboard/:uuid/dashcard/:dashcard-id/card/:card-id`
@@ -127,13 +127,13 @@ Fetch the results for a Card in a publicly-accessible Dashboard. Does not requir
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
* **`dashcard-id`** value must be an integer greater than zero.
- **`dashcard-id`** value must be an integer greater than zero.
* **`parameters`** nullable value must be a valid JSON string.
- **`parameters`** nullable value must be a valid JSON string.
## `GET /api/public/dashboard/:uuid/dashcard/:dashcard-id/execute`
@@ -141,11 +141,11 @@ Fetches the values for filling in execution parameters. Pass PK parameters and v
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
* **`dashcard-id`** value must be an integer greater than zero.
- **`dashcard-id`** value must be an integer greater than zero.
* **`parameters`** value must be a valid JSON string.
- **`parameters`** value must be a valid JSON string.
## `GET /api/public/dashboard/:uuid/field/:field-id/remapping/:remapped-id`
@@ -154,13 +154,13 @@ Fetch remapped Field values. This is the same as `GET /api/field/:id/remapping/:
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
* **`field-id`** value must be an integer greater than zero.
- **`field-id`** value must be an integer greater than zero.
* **`remapped-id`** value must be an integer greater than zero.
- **`remapped-id`** value must be an integer greater than zero.
* **`value`** value must be a non-blank string.
- **`value`** value must be a non-blank string.
## `GET /api/public/dashboard/:uuid/field/:field-id/search/:search-field-id`
@@ -168,15 +168,15 @@ Search for values of a Field that is referenced by a Card in a public Dashboard.
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
* **`field-id`** value must be an integer greater than zero.
- **`field-id`** value must be an integer greater than zero.
* **`search-field-id`** value must be an integer greater than zero.
- **`search-field-id`** value must be an integer greater than zero.
* **`value`** value must be a non-blank string.
- **`value`** value must be a non-blank string.
* **`limit`** nullable value must be an integer greater than zero.
- **`limit`** nullable value must be an integer greater than zero.
## `GET /api/public/dashboard/:uuid/field/:field-id/values`
@@ -184,9 +184,9 @@ Fetch FieldValues for a Field that is referenced by a Card in a public Dashboard
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
* **`field-id`** value must be an integer greater than zero.
- **`field-id`** value must be an integer greater than zero.
## `GET /api/public/dashboard/:uuid/params/:param-key/search/:query`
@@ -194,13 +194,13 @@ Fetch filter values for dashboard parameter `param-key`, containing specified `q
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
* **`param-key`** value must be a non-blank string.
- **`param-key`** value must be a non-blank string.
* **`query`** value must be a non-blank string.
- **`query`** value must be a non-blank string.
* **`constraint-param-key->value`**
- **`constraint-param-key->value`**
## `GET /api/public/dashboard/:uuid/params/:param-key/values`
@@ -208,11 +208,11 @@ Fetch filter values for dashboard parameter `param-key`.
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
* **`param-key`** value must be a non-blank string.
- **`param-key`** value must be a non-blank string.
* **`constraint-param-key->value`**
- **`constraint-param-key->value`**
## `GET /api/public/oembed`
@@ -220,13 +220,13 @@ oEmbed endpoint used to retreive embed code and metadata for a (public) Metabase
### PARAMS:
* **`url`** value must be a non-blank string.
- **`url`** value must be a non-blank string.
* **`format`** nullable enum of json
- **`format`** nullable enum of json.
* **`maxheight`** nullable value must be a valid integer.
- **`maxheight`** nullable value must be a valid integer.
* **`maxwidth`** nullable value must be a valid integer.
- **`maxwidth`** nullable value must be a valid integer.
## `GET /api/public/pivot/card/:uuid/query`
@@ -235,9 +235,9 @@ Fetch a publicly-accessible Card an return query results as well as `:card` info
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
* **`parameters`** nullable value must be a valid JSON string.
- **`parameters`** nullable value must be a valid JSON string.
## `GET /api/public/pivot/dashboard/:uuid/dashcard/:dashcard-id/card/:card-id`
@@ -246,13 +246,13 @@ Fetch the results for a Card in a publicly-accessible Dashboard. Does not requir
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
* **`card-id`** value must be an integer greater than zero.
- **`card-id`** value must be an integer greater than zero.
* **`dashcard-id`** value must be an integer greater than zero.
- **`dashcard-id`** value must be an integer greater than zero.
* **`parameters`** nullable value must be a valid JSON string.
- **`parameters`** nullable value must be a valid JSON string.
## `POST /api/public/action/:uuid/execute`
@@ -262,11 +262,11 @@ Execute the Action.
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
* **`parameters`** nullable map from <keyword> to <anything>
- **`parameters`** nullable map from <keyword> to <anything>.
* **`_body`**
- **`_body`**
## `POST /api/public/dashboard/:uuid/dashcard/:dashcard-id/execute`
@@ -276,13 +276,13 @@ Execute the associated Action in the context of a `Dashboard` and `DashboardCard
### PARAMS:
* **`uuid`** value must be a valid UUID.
- **`uuid`** value must be a valid UUID.
* **`dashcard-id`** value must be an integer greater than zero.
- **`dashcard-id`** value must be an integer greater than zero.
* **`parameters`** nullable map from <keyword> to <anything>
- **`parameters`** nullable map from <keyword> to <anything>.
* **`_body`**
- **`_body`**
---

View File

@@ -14,7 +14,7 @@ For users to unsubscribe themselves from a pulse subscription.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/pulse/`
@@ -31,11 +31,11 @@ Fetch all dashboard subscriptions. By default, returns only subscriptions for wh
### PARAMS:
* **`archived`** nullable value must be a valid boolean string ('true' or 'false').
- **`archived`** nullable value must be a valid boolean string ('true' or 'false').
* **`dashboard_id`** nullable value must be an integer greater than zero.
- **`dashboard_id`** nullable value must be an integer greater than zero.
* **`creator_or_recipient`** nullable value must be a valid boolean string ('true' or 'false').
- **`creator_or_recipient`** nullable value must be a valid boolean string ('true' or 'false').
## `GET /api/pulse/:id`
@@ -44,7 +44,7 @@ Fetch `Pulse` with ID. If the user is a recipient of the Pulse but does not have
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/pulse/form_input`
@@ -56,7 +56,7 @@ Get HTML rendering of a Card with `id`.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/pulse/preview_card_info/:id`
@@ -64,7 +64,7 @@ Get JSON object containing HTML rendering of a Card with `id` and other informat
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/pulse/preview_card_png/:id`
@@ -72,7 +72,7 @@ Get PNG rendering of a Card with `id`.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/pulse/preview_dashboard/:id`
@@ -84,7 +84,7 @@ Get HTML rendering of a Dashboard with `id`.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `POST /api/pulse/`
@@ -92,21 +92,21 @@ Create a new `Pulse`.
### PARAMS:
* **`name`** value must be a non-blank string.
- **`name`** value must be a non-blank string.
* **`cards`** one or more value must be a map with the following keys `(collection_id, description, display, id, include_csv, include_xls, name, dashboard_id, parameter_mappings)`, or value must be a map with the keys `id`, `include_csv`, `include_xls`, and `dashboard_card_id`.
- **`cards`** one or more value must be a map with the following keys `(collection_id, description, display, id, include_csv, include_xls, name, dashboard_id, parameter_mappings)`, or value must be a map with the keys `id`, `include_csv`, `include_xls`, and `dashboard_card_id`., or value must be a map with the keys `include_csv`, `include_xls`, and `dashboard_card_id`.
* **`channels`** one or more map
- **`channels`** one or more map.
* **`skip_if_empty`** nullable boolean
- **`skip_if_empty`** nullable boolean.
* **`collection_id`** nullable value must be an integer greater than zero.
- **`collection_id`** nullable value must be an integer greater than zero.
* **`collection_position`** nullable value must be an integer greater than zero.
- **`collection_position`** nullable value must be an integer greater than zero.
* **`dashboard_id`** nullable value must be an integer greater than zero.
- **`dashboard_id`** nullable value must be an integer greater than zero.
* **`parameters`** nullable sequence of map
- **`parameters`** nullable sequence of map.
## `POST /api/pulse/test`
@@ -114,19 +114,19 @@ Test send an unsaved pulse.
### PARAMS:
* **`name`** value must be a non-blank string.
- **`name`** value must be a non-blank string.
* **`cards`** one or more value must be a map with the following keys `(collection_id, description, display, id, include_csv, include_xls, name, dashboard_id, parameter_mappings)`, or value must be a map with the keys `id`, `include_csv`, `include_xls`, and `dashboard_card_id`.
- **`cards`** one or more value must be a map with the following keys `(collection_id, description, display, id, include_csv, include_xls, name, dashboard_id, parameter_mappings)`, or value must be a map with the keys `id`, `include_csv`, `include_xls`, and `dashboard_card_id`., or value must be a map with the keys `include_csv`, `include_xls`, and `dashboard_card_id`.
* **`channels`** one or more map
- **`channels`** one or more map.
* **`skip_if_empty`** nullable boolean
- **`skip_if_empty`** nullable boolean.
* **`collection_id`** nullable value must be an integer greater than zero.
- **`collection_id`** nullable value must be an integer greater than zero.
* **`collection_position`** nullable value must be an integer greater than zero.
- **`collection_position`** nullable value must be an integer greater than zero.
* **`dashboard_id`** nullable value must be an integer greater than zero.
- **`dashboard_id`** nullable value must be an integer greater than zero.
## `PUT /api/pulse/:id`
@@ -134,23 +134,23 @@ Update a Pulse with `id`.
### PARAMS:
* **`skip_if_empty`** nullable boolean
- **`skip_if_empty`** nullable boolean.
* **`parameters`** nullable sequence of Value must be a map.
- **`parameters`** nullable sequence of Value must be a map.
* **`archived`** nullable boolean
- **`archived`** nullable boolean.
* **`channels`** nullable one or more map
- **`channels`** nullable one or more map.
* **`collection_id`** nullable value must be an integer greater than zero.
- **`collection_id`** nullable value must be an integer greater than zero.
* **`name`** nullable value must be a non-blank string.
- **`name`** nullable value must be a non-blank string.
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`cards`** nullable one or more value must be a map with the following keys `(collection_id, description, display, id, include_csv, include_xls, name, dashboard_id, parameter_mappings)`, or value must be a map with the keys `id`, `include_csv`, `include_xls`, and `dashboard_card_id`.
- **`cards`** nullable one or more value must be a map with the following keys `(collection_id, description, display, id, include_csv, include_xls, name, dashboard_id, parameter_mappings)`, or value must be a map with the keys `id`, `include_csv`, `include_xls`, and `dashboard_card_id`., or value must be a map with the keys `include_csv`, `include_xls`, and `dashboard_card_id`.
* **`pulse-updates`**
- **`pulse-updates`**
---

View File

@@ -14,9 +14,9 @@ Get revisions of an object.
### PARAMS:
* **`entity`** enum of card, dashboard
- **`entity`** enum of card, dashboard.
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `POST /api/revision/revert`
@@ -24,11 +24,11 @@ Revert an object to a prior revision.
### PARAMS:
* **`entity`** enum of card, dashboard
- **`entity`** enum of card, dashboard.
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`revision_id`** value must be an integer greater than zero.
- **`revision_id`** value must be an integer greater than zero.
---

View File

@@ -33,29 +33,29 @@ Search for items in Metabase.
### PARAMS:
* **`filter_items_in_personal_collection`** nullable enum of only, exclude
- **`filter_items_in_personal_collection`** nullable enum of only, exclude.
* **`table_db_id`** nullable value must be an integer greater than zero.
- **`table_db_id`** nullable value must be an integer greater than zero.
* **`created_by`** nullable value must be an integer greater than zero., or sequence of value must be an integer greater than zero.
- **`created_by`** nullable value must be an integer greater than zero., or sequence of value must be an integer greater than zero.
* **`verified`** nullable true
- **`verified`** nullable true.
* **`created_at`** nullable value must be a non-blank string.
- **`created_at`** nullable value must be a non-blank string.
* **`archived`** nullable boolean
- **`archived`** nullable boolean.
* **`q`** nullable value must be a non-blank string.
- **`q`** nullable value must be a non-blank string.
* **`search_native_query`** nullable true
- **`search_native_query`** nullable true.
* **`models`** nullable enum of dashboard, table, dataset, segment, collection, database, action, indexed-entity, metric, card, or sequence of enum of dashboard, table, dataset, segment, collection, database, action, indexed-entity, metric, card
- **`models`** nullable enum of dashboard, table, dataset, segment, collection, database, action, indexed-entity, metric, card, or sequence of enum of dashboard, table, dataset, segment, collection, database, action, indexed-entity, metric, card.
* **`last_edited_by`** nullable value must be an integer greater than zero., or sequence of value must be an integer greater than zero.
- **`last_edited_by`** nullable value must be an integer greater than zero., or sequence of value must be an integer greater than zero.
* **`last_edited_at`** nullable value must be a non-blank string.
- **`last_edited_at`** nullable value must be a non-blank string.
* **`context`** nullable enum of search-bar, search-app
- **`context`** nullable enum of search-bar, search-app.
## `GET /api/search/models`
@@ -63,25 +63,25 @@ Get the set of models that a search query will return.
### PARAMS:
* **`filter_items_in_personal_collection`**
- **`filter_items_in_personal_collection`**
* **`created_by`** nullable value must be an integer greater than zero., or sequence of value must be an integer greater than zero.
- **`created_by`** nullable value must be an integer greater than zero., or sequence of value must be an integer greater than zero.
* **`verified`** nullable true
- **`verified`** nullable true.
* **`created_at`** nullable value must be a non-blank string.
- **`created_at`** nullable value must be a non-blank string.
* **`archived`** nullable value must be a valid boolean string ('true' or 'false').
- **`archived`** nullable value must be a valid boolean string ('true' or 'false').
* **`q`**
- **`q`**
* **`search_native_query`** nullable true
- **`search_native_query`** nullable true.
* **`last_edited_by`** nullable value must be an integer greater than zero., or sequence of value must be an integer greater than zero.
- **`last_edited_by`** nullable value must be an integer greater than zero., or sequence of value must be an integer greater than zero.
* **`last_edited_at`** nullable value must be an integer greater than zero.
- **`last_edited_at`** nullable value must be an integer greater than zero.
* **`table-db-id`** nullable value must be an integer greater than zero.
- **`table-db-id`** nullable value must be an integer greater than zero.
---

View File

@@ -14,9 +14,9 @@ Archive a Segment. (DEPRECATED -- Just pass updated value of `:archived` to the
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`revision_message`** value must be a non-blank string.
- **`revision_message`** value must be a non-blank string.
## `GET /api/segment/`
@@ -28,7 +28,7 @@ Fetch `Segment` with ID.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/segment/:id/related`
@@ -36,7 +36,7 @@ Return related entities.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/segment/:id/revisions`
@@ -44,7 +44,7 @@ Fetch `Revisions` for `Segment` with ID.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `POST /api/segment/`
@@ -52,13 +52,13 @@ Create a new `Segment`.
### PARAMS:
* **`name`** value must be a non-blank string.
- **`name`** value must be a non-blank string.
* **`description`** nullable string
- **`description`** nullable string.
* **`table_id`** value must be an integer greater than zero.
- **`table_id`** value must be an integer greater than zero.
* **`definition`** Value must be a map.
- **`definition`** Value must be a map.
## `POST /api/segment/:id/revert`
@@ -66,9 +66,9 @@ Revert a `Segement` to a prior `Revision`.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`revision_id`** value must be an integer greater than zero.
- **`revision_id`** value must be an integer greater than zero.
## `PUT /api/segment/:id`
@@ -76,23 +76,23 @@ Update a `Segment` with ID.
### PARAMS:
* **`points_of_interest`** nullable string
- **`points_of_interest`** nullable string.
* **`description`** nullable string
- **`description`** nullable string.
* **`archived`** nullable boolean
- **`archived`** nullable boolean.
* **`definition`** nullable map
- **`definition`** nullable map.
* **`revision_message`** value must be a non-blank string.
- **`revision_message`** value must be a non-blank string.
* **`show_in_getting_started`** nullable boolean
- **`show_in_getting_started`** nullable boolean.
* **`name`** nullable value must be a non-blank string.
- **`name`** nullable value must be a non-blank string.
* **`caveats`** nullable string
- **`caveats`** nullable string.
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
---

View File

@@ -14,15 +14,15 @@ Logout.
### PARAMS:
* **`metabase-session-id`**
- **`metabase-session-id`**
## `GET /api/session/password_reset_token_valid`
Check is a password reset token is valid and isn't expired.
Check if a password reset token is valid and isn't expired.
### PARAMS:
* **`token`** value must be a non-blank string.
- **`token`** value must be a non-blank string.
## `GET /api/session/properties`
@@ -35,11 +35,11 @@ Login.
### PARAMS:
* **`username`** value must be a non-blank string.
- **`username`** value must be a non-blank string.
* **`password`** value must be a non-blank string.
- **`password`** value must be a non-blank string.
* **`request`**
- **`request`**
## `POST /api/session/forgot_password`
@@ -47,9 +47,9 @@ Send a reset email when user has forgotten their password.
### PARAMS:
* **`email`** value must be a valid email address.
- **`email`** value must be a valid email address.
* **`request`**
- **`request`**
## `POST /api/session/google_auth`
@@ -57,9 +57,9 @@ Login with Google Auth.
### PARAMS:
* **`token`** value must be a non-blank string.
- **`token`** value must be a non-blank string.
* **`request`**
- **`request`**
## `POST /api/session/pulse/unsubscribe`
@@ -67,13 +67,13 @@ Allow non-users to unsubscribe from pulses/subscriptions, with the hash given th
### PARAMS:
* **`email`** string
- **`email`** string.
* **`hash`** string
- **`hash`** string.
* **`pulse-id`** value must be an integer greater than zero.
- **`pulse-id`** value must be an integer greater than zero.
* **`request`**
- **`request`**
## `POST /api/session/pulse/unsubscribe/undo`
@@ -81,13 +81,13 @@ Allow non-users to undo an unsubscribe from pulses/subscriptions, with the hash
### PARAMS:
* **`email`** string
- **`email`** string.
* **`hash`** string
- **`hash`** string.
* **`pulse-id`** value must be an integer greater than zero.
- **`pulse-id`** value must be an integer greater than zero.
* **`request`**
- **`request`**
## `POST /api/session/reset_password`
@@ -95,11 +95,11 @@ Reset password with a reset token.
### PARAMS:
* **`token`** value must be a non-blank string.
- **`token`** value must be a non-blank string.
* **`password`** password is too common.
- **`password`** password is too common.
* **`request`**
- **`request`**
---

View File

@@ -19,7 +19,7 @@ Fetch a single `Setting`.
### PARAMS:
* **`key`** keyword
- **`key`** keyword.
## `PUT /api/setting/`
@@ -27,7 +27,7 @@ Update multiple `Settings` values. If called by a non-superuser, only user-local
### PARAMS:
* **`settings`** map from <keyword> to <anything>
- **`settings`** map from <keyword> to <anything>.
## `PUT /api/setting/:key`
@@ -36,9 +36,9 @@ Create/update a `Setting`. If called by a non-admin, only user-local settings ca
### PARAMS:
* **`key`** keyword
- **`key`** keyword.
* **`value`**
- **`value`**
---

View File

@@ -19,7 +19,7 @@ Returns object containing default user details for initial setup, if configured,
### PARAMS:
* **`token`**
- **`token`**
## `POST /api/setup/`
@@ -29,41 +29,41 @@ Special endpoint for creating the first user during setup. This endpoint both cr
### PARAMS:
* **`engine`**
- **`engine`**
* **`schedules`** nullable :metabase.sync.schedules/ExpandedSchedulesMap
- **`schedules`** nullable :metabase.sync.schedules/ExpandedSchedulesMap.
* **`allow_tracking`** nullable boolean, or value must be a valid boolean string ('true' or 'false').
- **`allow_tracking`** nullable boolean, or value must be a valid boolean string ('true' or 'false').
* **`invited_last_name`** nullable value must be a non-blank string.
- **`invited_last_name`** nullable value must be a non-blank string.
* **`site_locale`** nullable String must be a valid two-letter ISO language or language-country code e.g. en or en_US.
- **`site_locale`** nullable String must be a valid two-letter ISO language or language-country code e.g. en or en_US.
* **`email`** value must be a valid email address.
- **`email`** value must be a valid email address.
* **`first_name`** nullable value must be a non-blank string.
- **`first_name`** nullable value must be a non-blank string.
* **`request`**
- **`request`**
* **`auto_run_queries`** nullable boolean
- **`auto_run_queries`** nullable boolean.
* **`password`** password is too common.
- **`password`** password is too common.
* **`name`**
- **`name`**
* **`invited_email`** nullable value must be a valid email address.
- **`invited_email`** nullable value must be a valid email address.
* **`invited_first_name`** nullable value must be a non-blank string.
- **`invited_first_name`** nullable value must be a non-blank string.
* **`site_name`** value must be a non-blank string.
- **`site_name`** value must be a non-blank string.
* **`token`** Token does not match the setup token.
- **`token`** Token does not match the setup token.
* **`details`**
- **`details`**
* **`database`**
- **`database`**
* **`last_name`** nullable value must be a non-blank string.
- **`last_name`** nullable value must be a non-blank string.
## `POST /api/setup/validate`
@@ -71,11 +71,11 @@ Validate that we can connect to a database given a set of details.
### PARAMS:
* **`engine`** value must be a valid database engine.
- **`engine`** value must be a valid database engine.
* **`details`**
- **`details`**
* **`token`** Token does not match the setup token.
- **`token`** Token does not match the setup token.
---

View File

@@ -22,9 +22,9 @@ Update Slack related settings. You must be a superuser to do this. Also updates
### PARAMS:
* **`slack-app-token`** nullable value must be a non-blank string.
- **`slack-app-token`** nullable value must be a non-blank string.
* **`slack-files-channel`** nullable value must be a non-blank string.
- **`slack-files-channel`** nullable value must be a non-blank string.
---

View File

@@ -16,7 +16,7 @@ You must be a superuser to do this.
### PARAMS:
* **`settings`** map
- **`settings`** map.
---

View File

@@ -18,9 +18,9 @@ Get `Table` with ID.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`include_editable_data_model`** nullable boolean
- **`include_editable_data_model`** nullable boolean.
## `GET /api/table/:id/fks`
@@ -28,7 +28,7 @@ Get all foreign keys whose destination is a `Field` that belongs to this `Table`
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/table/:id/query_metadata`
@@ -45,13 +45,13 @@ Get metadata about a `Table` useful for running queries.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`include_sensitive_fields`** nullable value must be a valid boolean string ('true' or 'false').
- **`include_sensitive_fields`** nullable value must be a valid boolean string ('true' or 'false').
* **`include_hidden_fields`** nullable value must be a valid boolean string ('true' or 'false').
- **`include_hidden_fields`** nullable value must be a valid boolean string ('true' or 'false').
* **`include_editable_data_model`** nullable value must be a valid boolean string ('true' or 'false').
- **`include_editable_data_model`** nullable value must be a valid boolean string ('true' or 'false').
## `GET /api/table/:id/related`
@@ -59,7 +59,7 @@ Return related entities.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/table/card__:id/fks`
@@ -68,7 +68,7 @@ Return FK info for the 'virtual' table for a Card. This is always empty, so this
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/table/card__:id/query_metadata`
@@ -76,7 +76,7 @@ Return metadata for the 'virtual' table for a Card.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `POST /api/table/:id/append-csv`
@@ -84,9 +84,9 @@ Inserts the rows of an uploaded CSV file into the table identified by `:id`. The
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`raw-params`**
- **`raw-params`**
## `POST /api/table/:id/discard_values`
@@ -95,7 +95,7 @@ Discard the FieldValues belonging to the Fields in this Table. Only applies to f
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `POST /api/table/:id/rescan_values`
@@ -104,7 +104,7 @@ Manually trigger an update for the FieldValues for the Fields belonging to this
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `PUT /api/table/`
@@ -112,21 +112,21 @@ Update all `Table` in `ids`.
### PARAMS:
* **`ids`** sequence of value must be an integer greater than zero.
- **`ids`** sequence of value must be an integer greater than zero.
* **`display_name`** nullable value must be a non-blank string.
- **`display_name`** nullable value must be a non-blank string.
* **`entity_type`** nullable value must be a valid entity type (keyword or string).
- **`entity_type`** nullable value must be a valid entity type (keyword or string).
* **`visibility_type`** nullable enum of technical, hidden, cruft
- **`visibility_type`** nullable enum of technical, hidden, cruft.
* **`description`** nullable string
- **`description`** nullable string.
* **`caveats`** nullable string
- **`caveats`** nullable string.
* **`points_of_interest`** nullable string
- **`points_of_interest`** nullable string.
* **`show_in_getting_started`** nullable boolean
- **`show_in_getting_started`** nullable boolean.
## `PUT /api/table/:id`
@@ -134,23 +134,23 @@ Update `Table` with ID.
### PARAMS:
* **`visibility_type`** nullable enum of technical, hidden, cruft
- **`visibility_type`** nullable enum of technical, hidden, cruft.
* **`field_order`** nullable enum of alphabetical, custom, database, smart
- **`field_order`** nullable enum of alphabetical, custom, database, smart.
* **`display_name`** nullable value must be a non-blank string.
- **`display_name`** nullable value must be a non-blank string.
* **`points_of_interest`** nullable string
- **`points_of_interest`** nullable string.
* **`entity_type`** nullable value must be a valid entity type (keyword or string).
- **`entity_type`** nullable value must be a valid entity type (keyword or string).
* **`description`** nullable string
- **`description`** nullable string.
* **`show_in_getting_started`** nullable boolean
- **`show_in_getting_started`** nullable boolean.
* **`caveats`** nullable string
- **`caveats`** nullable string.
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `PUT /api/table/:id/fields/order`
@@ -158,9 +158,9 @@ Reorder fields.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`field_order`** sequence of value must be an integer greater than zero.
- **`field_order`** sequence of value must be an integer greater than zero.
---

View File

@@ -18,7 +18,7 @@ Get `TaskHistory` entry with ID.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/task/info`

View File

@@ -17,17 +17,17 @@ This endpoints provides an image with the appropriate pins rendered given a MBQL
### PARAMS:
* **`zoom`** value must be an integer.
- **`zoom`** value must be an integer.
* **`x`** value must be an integer.
- **`x`** value must be an integer.
* **`y`** value must be an integer.
- **`y`** value must be an integer.
* **`lat-field`** string
- **`lat-field`** string.
* **`lon-field`** string
- **`lon-field`** string.
* **`query`** value must be a valid JSON string.
- **`query`** value must be a valid JSON string.
---

View File

@@ -14,7 +14,7 @@ Delete a [[TimelineEvent]].
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/timeline-event/:id`
@@ -22,7 +22,7 @@ Fetch the [[TimelineEvent]] with `id`.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `POST /api/timeline-event/`
@@ -30,25 +30,25 @@ Create a new [[TimelineEvent]].
### PARAMS:
* **`timestamp`** value must be a valid date string
- **`timestamp`** value must be a valid date string.
* **`question_id`** nullable value must be an integer greater than zero.
- **`question_id`** nullable value must be an integer greater than zero.
* **`description`** nullable string
- **`description`** nullable string.
* **`archived`** nullable boolean
- **`archived`** nullable boolean.
* **`timezone`** string
- **`timezone`** string.
* **`time_matters`** nullable boolean
- **`time_matters`** nullable boolean.
* **`name`** value must be a non-blank string.
- **`name`** value must be a non-blank string.
* **`timeline_id`** value must be an integer greater than zero.
- **`timeline_id`** value must be an integer greater than zero.
* **`source`** nullable enum of collections, question
- **`source`** nullable enum of collections, question.
* **`icon`** nullable enum of star, cake, mail, warning, bell, cloud
- **`icon`** nullable enum of star, cake, mail, warning, bell, cloud.
## `PUT /api/timeline-event/:id`
@@ -56,25 +56,25 @@ Update a [[TimelineEvent]].
### PARAMS:
* **`timestamp`** nullable value must be a valid date string
- **`timestamp`** nullable value must be a valid date string.
* **`description`** nullable string
- **`description`** nullable string.
* **`archived`** nullable boolean
- **`archived`** nullable boolean.
* **`timezone`** nullable string
- **`timezone`** nullable string.
* **`time_matters`** nullable boolean
- **`time_matters`** nullable boolean.
* **`name`** nullable value must be a non-blank string.
- **`name`** nullable value must be a non-blank string.
* **`timeline_id`** nullable value must be an integer greater than zero.
- **`timeline_id`** nullable value must be an integer greater than zero.
* **`icon`** nullable enum of star, cake, mail, warning, bell, cloud
- **`icon`** nullable enum of star, cake, mail, warning, bell, cloud.
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`timeline-event-updates`**
- **`timeline-event-updates`**
---

View File

@@ -14,7 +14,7 @@ Delete a [[Timeline]]. Will cascade delete its events as well.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/timeline/`
@@ -22,9 +22,9 @@ Fetch a list of [[Timelines]]. Can include `archived=true` to return archived ti
### PARAMS:
* **`include`** nullable enum of events
- **`include`** nullable enum of events.
* **`archived`** nullable value must be a valid boolean string ('true' or 'false').
- **`archived`** nullable value must be a valid boolean string ('true' or 'false').
## `GET /api/timeline/:id`
@@ -33,15 +33,15 @@ Fetch the [[Timeline]] with `id`. Include `include=events` to unarchived events
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`include`** nullable enum of events
- **`include`** nullable enum of events.
* **`archived`** nullable value must be a valid boolean string ('true' or 'false').
- **`archived`** nullable value must be a valid boolean string ('true' or 'false').
* **`start`** nullable value must be a valid date string
- **`start`** nullable value must be a valid date string.
* **`end`** nullable value must be a valid date string
- **`end`** nullable value must be a valid date string.
## `POST /api/timeline/`
@@ -49,17 +49,17 @@ Create a new [[Timeline]].
### PARAMS:
* **`name`** value must be a non-blank string.
- **`name`** value must be a non-blank string.
* **`default`** nullable boolean
- **`default`** nullable boolean.
* **`description`** nullable string
- **`description`** nullable string.
* **`icon`** nullable enum of star, cake, mail, warning, bell, cloud
- **`icon`** nullable enum of star, cake, mail, warning, bell, cloud.
* **`collection_id`** nullable value must be an integer greater than zero.
- **`collection_id`** nullable value must be an integer greater than zero.
* **`archived`** nullable boolean
- **`archived`** nullable boolean.
## `PUT /api/timeline/:id`
@@ -68,21 +68,21 @@ Update the [[Timeline]] with `id`. Returns the timeline without events. Archivin
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`name`** nullable value must be a non-blank string.
- **`name`** nullable value must be a non-blank string.
* **`default`** nullable boolean
- **`default`** nullable boolean.
* **`description`** nullable string
- **`description`** nullable string.
* **`icon`** nullable enum of star, cake, mail, warning, bell, cloud
- **`icon`** nullable enum of star, cake, mail, warning, bell, cloud.
* **`collection_id`** nullable value must be an integer greater than zero.
- **`collection_id`** nullable value must be an integer greater than zero.
* **`archived`** nullable boolean
- **`archived`** nullable boolean.
* **`timeline-updates`**
- **`timeline-updates`**
---

View File

@@ -14,11 +14,11 @@ Look up a database schema transform.
### PARAMS:
* **`db-id`** value must be an integer greater than zero.
- **`db-id`** value must be an integer greater than zero.
* **`schema`** value must be a non-blank string.
- **`schema`** value must be a non-blank string.
* **`transform-name`** value must be a non-blank string.
- **`transform-name`** value must be a non-blank string.
---

View File

@@ -16,7 +16,7 @@ You must be a superuser to do this.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/user/`
@@ -38,13 +38,13 @@ Fetch a list of `Users` for admins or group managers.
### PARAMS:
* **`status`** nullable string
- **`status`** nullable string.
* **`query`** nullable string
- **`query`** nullable string.
* **`group_id`** nullable value must be an integer greater than zero.
- **`group_id`** nullable value must be an integer greater than zero.
* **`include_deactivated`** nullable value must be a valid boolean string ('true' or 'false').
- **`include_deactivated`** nullable value must be a valid boolean string ('true' or 'false').
## `GET /api/user/:id`
@@ -52,7 +52,7 @@ Fetch a `User`. You must be fetching yourself *or* be a superuser *or* a Group M
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `GET /api/user/current`
@@ -74,15 +74,15 @@ You must be a superuser to do this.
### PARAMS:
* **`first_name`** nullable value must be a non-blank string.
- **`first_name`** nullable value must be a non-blank string.
* **`last_name`** nullable value must be a non-blank string.
- **`last_name`** nullable value must be a non-blank string.
* **`email`** value must be a valid email address.
- **`email`** value must be a valid email address.
* **`user_group_memberships`** nullable sequence of map where {:id -> <value must be an integer greater than zero.>, :is_group_manager (optional) -> <boolean>}
- **`user_group_memberships`** nullable sequence of map where {:id -> <value must be an integer greater than zero.>, :is_group_manager (optional) -> <boolean>}.
* **`login_attributes`** nullable login attribute keys must be a keyword or string
- **`login_attributes`** nullable login attribute keys must be a keyword or string.
## `POST /api/user/:id/send_invite`
@@ -92,7 +92,7 @@ You must be a superuser to do this.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
## `PUT /api/user/:id`
@@ -102,23 +102,23 @@ Update an existing, active `User`.
### PARAMS:
* **`email`** nullable value must be a valid email address.
- **`email`** nullable value must be a valid email address.
* **`first_name`** nullable value must be a non-blank string.
- **`first_name`** nullable value must be a non-blank string.
* **`is_group_manager`** nullable boolean
- **`is_group_manager`** nullable boolean.
* **`locale`** nullable String must be a valid two-letter ISO language or language-country code e.g. en or en_US.
- **`locale`** nullable String must be a valid two-letter ISO language or language-country code e.g. en or en_US.
* **`user_group_memberships`** nullable sequence of map where {:id -> <value must be an integer greater than zero.>, :is_group_manager (optional) -> <boolean>}
- **`user_group_memberships`** nullable sequence of map where {:id -> <value must be an integer greater than zero.>, :is_group_manager (optional) -> <boolean>}.
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`is_superuser`** nullable boolean
- **`is_superuser`** nullable boolean.
* **`login_attributes`** nullable login attribute keys must be a keyword or string
- **`login_attributes`** nullable login attribute keys must be a keyword or string.
* **`last_name`** nullable value must be a non-blank string.
- **`last_name`** nullable value must be a non-blank string.
## `PUT /api/user/:id/modal/:modal`
@@ -126,9 +126,9 @@ Indicate that a user has been informed about the vast intricacies of 'the' Query
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`modal`**
- **`modal`**
## `PUT /api/user/:id/password`
@@ -136,13 +136,13 @@ Update a user's password.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
* **`password`** password is too common.
- **`password`** password is too common.
* **`old_password`**
- **`old_password`**
* **`request`**
- **`request`**
## `PUT /api/user/:id/reactivate`
@@ -152,7 +152,7 @@ You must be a superuser to do this.
### PARAMS:
* **`id`** value must be an integer greater than zero.
- **`id`** value must be an integer greater than zero.
---

View File

@@ -38,7 +38,7 @@ Endpoint that checks if the supplied password meets the currently configured pas
### PARAMS:
* **`password`** password is too common.
- **`password`** password is too common.
---

View File

@@ -21,6 +21,19 @@ If you're looking for date, time, number, or currency formatting, see [Formattin
Click on the gear icon at the bottom of the navigation sidebar and select **Admin settings** > **Settings** > **Appearance**. Here’s what you can do:
## De-Metabasing your Metabase for embedding
When embedding Metabase in your app, in addition to changing colors and fonts, you can show or hide Metabase-branded UI elements and links (like in-app links to Metabase's documentation). If you're embedding Metabase in your app, here are some settings you might want to change:
- [Application name](#application-name)
- [Logo](#logo)
- [Favicon](#favicon)
- [Loading message](#loading-message)
- [Help link in the settings menu](#help-link-in-the-settings-menu)
- [Metabot](#metabot)
- [Lighthouse illustration](#lighthouse-illustration)
- [Documentation and reference](#documentation-and-references)
## Application name
You can change every place in the app that says “Metabase” to something like “Acme Analytics,” or whatever you want to call your Metabase app.
@@ -95,6 +108,12 @@ You can decide whether to display our little friend on the home page.
Show the Metabase lighthouse image on the home and login pages.
## Documentation and references
Control the visibility of links to official Metabase documentation and other references to Metabase in your instance.
This setting affects all links in the product experience that point to Metabase.com URLs (with the exception of links and references in the Admin settings).
## Further reading
- [Customer-facing analytics](https://www.metabase.com/learn/customer-facing-analytics).

View File

@@ -104,7 +104,7 @@ You can also set this property using the environment variable [`MB_SUBSCRIPTION_
## Suggest recipients on dashboard subscriptions and alerts
{% include plans-blockquote.html feature="Approved domains for notifications" %}
{% include plans-blockquote.html feature="Configuring suggested recipients" %}
Control which recipients people can see when they create a new [dashboard subscription](../dashboards/subscriptions.md) or [alert](../questions/sharing/alerts.md). For example, you may want to restrict people to viewing potential recipients that belong to the same [groups](../people-and-groups/managing.md#groups) they are a member of.

View File

@@ -199,7 +199,7 @@ Maximum number of async Jetty threads. If not set, then [MB_JETTY_MAXTHREADS](#m
Type: integer<br>
Default: `20`<br>
Limits the number of rows Metabase will include in tables sent as attachments with dashboard subscriptions and alerts. Range: 1-100.
Limits the number of rows Metabase will display in tables sent with dashboard subscriptions and alerts. Range: 1-100. To limit the total number of rows included in the file attachment for an email dashboard subscription, use [MB_UNAGGREGATED_QUERY_ROW_LIMIT](#mb_unaggregated_query_row_limit).
### `MB_AUDIT_MAX_RETENTION_DAYS`
@@ -898,6 +898,13 @@ Default: `"(&(objectClass=inetOrgPerson)(|(uid={login})(mail={login})))"`
User lookup filter. The placeholder `{login}` will be replaced by the user supplied login.
### `MB_LOAD_ANALYTICS_CONTENT`
Type: Boolean<br>
Default: True
If you want to exclude the [Metabase analytics](../usage-and-performance-tools/usage-analytics.md) collection, you can set `MB_LOAD_ANALYTICS_CONTENT=false`. Setting this environment variable to false can also come in handy when migrating environments, as it can simplify the migration process.
### `MB_LOADING_MESSAGE`
Only available on Metabase [Pro](https://www.metabase.com/product/pro) and [Enterprise](https://www.metabase.com/product/enterprise) plans.<br>

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

View File

@@ -5,6 +5,7 @@ redirect_from:
---
# Setting up Metabase
This guide will help you set up Metabase once you’ve gotten it installed. If you haven’t installed Metabase yet, you can [get Metabase here](https://metabase.com/start).
Start Metabase up for the first time and you’ll see this screen:
@@ -13,22 +14,37 @@ Start Metabase up for the first time and you’ll see this screen:
Go ahead and click **Let’s get started**.
## Setting up an admin account
The first thing you’ll need to do is set up an admin account. The account you create when you first install Metabase is an admin account by default — handy! If you’ve installed Metabase on a production server, you should be really careful to remember the password for this account since it will be used to add other users, connect to databases, set up email, and more. You can also create additional admin accounts later.
For now, let's just create an account for ourselves to explore Metabase. Type in your info, and when you’re ready to continue, click the **Next** button.
![Account Setup](images/AccountSetup.png)
## What will you use Metabase for?
Let us know your plans with Metabase so that we can best guide you.
![What will you use Metabase for?](./images/what-will-you-use-metabase-for.png)
- Self-service analytics for my own company
- Embedding analytics into my application
- A bit of both
- Not sure yet
Don't worry about picking the wrong option. If you say you're interested in embedding, Metabase will display a card with a link to the embedding settings when you (the admin) first log in to your instance. Just a little convenience thing, that's all.
## 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](https://www.metabase.com/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:
* The **hostname** of the server where your database lives
* The **port** the database server uses
* The **database name**
* The **username** you use for the database
* The **password** you use for the database
- The **hostname** of the server where your database lives
- The **port** the database server uses
- The **database name**
- The **username** you use for the database
- The **password** you use for the database
If you don't have this information handy, the person responsible for administering the database should have it.
@@ -43,26 +59,27 @@ For more on connecting to databases, see [Adding and managing databases](../data
## Usage data preferences
One last quick thing that you’ll have to decide is if it’s okay for us to collect some anonymous info about how you use the product — it helps us make Metabase better. Like the box says:
* Metabase never collects anything about your data or question results.
* All collection is completely anonymous.
* Collection can be turned off at any point in your admin settings.
- Metabase never collects anything about your data or question results.
- All collection is completely anonymous.
- Collection can be turned off at any point in your admin settings.
![Usage data preferences](images/UsageData.png)
If you’re ready to start using Metabase, go ahead and click **Next**.
## Staying in touch
At this point you are all set and ready to use Metabase. Since we like keeping in touch with our friends we made it easy to sign up for our newsletter (infrequent emails) with a single click!
At this point you are all set and ready to use Metabase. Since we like keeping in touch with our friends we made it easy to sign up for our newsletter (infrequent emails) with a single click!
![Metabase Newsletter](images/NewsletterSignup.png)
Once you're done here simply follow the link to **Take me to Metabase**. And if you decided to skip the newsletter sign-up, it's cool, we still like you :)
Once you're done here simply follow the link to **Take me to Metabase**. And if you decided to skip the newsletter sign-up, it's cool, we still like you :)
## Getting started with Metabase
For a tutorial on getting up and running with questions and dashboards, head over to [Learn Metabase](https://www.metabase.com/learn/getting-started/getting-started.html).
***
If you’d like more technical resources to set up your data stack with Metabase, connect with a [Metabase Expert](https://www.metabase.com/partners/){:target="_blank"}.
---
If you’d like more technical resources to set up your data stack with Metabase, connect with a [Metabase Expert](https://www.metabase.com/partners/){:target="\_blank"}.

View File

@@ -19,11 +19,13 @@ Instead of creating duplicate dashboards, you can add filter widgets to let peop
- 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-types).
- [Connect your filter](#connecting-a-filter-to-dashboard-cards) to one or more dashboard cards.
- [Connect your filter](#connecting-a-filter-to-dashboard-cards) to one or more dashboard cards on any or all tabs.
- [Configure your filter](#editing-a-filter).
- **Save** your changes.
### Filter types
Metabase will display the filter only if the filter is connected to a card on the current dashboard tab.
## Filter types
You can choose from a number of filter types:
@@ -33,9 +35,9 @@ You can choose from a number of filter types:
- [Number](#number-filter)
- [Text or categories](#text-or-category-filter)
The type of filter you choose will determine how the filter works, as well as which fields you’ll be able to filter your cards by:
The type of filter you choose will determine how the filter works, as well as which fields you’ll be able to filter your cards by.
#### Time filters
### Time filters
When picking a Time filter, Metabase will prompt you to pick a specific type of filter widget:
@@ -48,7 +50,7 @@ When picking a Time filter, Metabase will prompt you to pick a specific type of
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.
#### Location filters
### Location filters
There are four types of Location filters to choose from:
@@ -57,11 +59,11 @@ There are four types of Location filters to choose from:
- ZIP or Postal Code
- Country
#### ID filter
### ID filter
The ID filter provides a simple input box where you can type the ID of a user, order, etc.
#### Number filter
### Number filter
You can choose from:
@@ -71,7 +73,7 @@ You can choose from:
- Greater than or equal to
- Less than or equal to
#### Text or category filter
### 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 category field in your cards. Options include:
@@ -94,7 +96,7 @@ Here we've wired up a Text filter to the "Event types" card, telling Metabase th
## Auto-connecting filters to cards
If there are other cards that also have the field you select, Metabase will automatically connect the filter to those cards too (including 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.
If there are other cards that also have the field you select, Metabase will 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.
To undo this auto-connecting of cards, click on the toast that pops up when Metabase auto-connects the cards, or manually disconnect the cards by clicking on the "X" next to the connected field.
@@ -106,6 +108,15 @@ If you're trying to connect a filter to a card with a native/SQL questions, you'
You can even wire up filters to text cards, but only if [the text card includes a variable](./introduction.md#including-variables-in-text-cards).
## Requiring a filter
You can tell Metabase to require a filter so that people _must_ filter the dashboard by a certain column on a card. If you require a filter, you'll also need to supply a default value for that filter.
You might want to require a filter value if:
- Your unfiltered dashboard contains questions that pull lots of data, as enforcing filtered data can prevent people from inadvertently querying tons of data and running up your data warehouse costs.
- The questions on your dashboard don't make sense without a filter. For example, if you create a dashboard intended to view data relevant to a specific customer (as opposed to all customers), you can require a customer ID so that the dashboard only loads data for a particular customer.
## Editing a filter
To edit a filter's settings:

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 195 KiB

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 182 KiB

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@@ -122,7 +122,11 @@ In both cases, duplication only includes the dashboard, its card layout, filters
## Arranging dashboard cards
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. 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.
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
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.
![Editing dashboard](images/duplicate-card.png)
@@ -131,10 +135,43 @@ To edit dashboard cards and move them around, click the **pencil** icon in the t
- **Move a card within a tab**: click and drag the card. Other cards will move out of the way.
- **Resize a card**: click the handle at the bottom right corner of the card, and drag to resize. Nearby cards will move away to accommodate the new size.
- **Remove a card**: hover over the card and click the X icon in the top right corner.
- **Replace a card**: hover over the card and click the Replace icon in the top right corner. Search for a question to swap in for the existing question on that card.
- **Replace a card**: hover over the card and click the Replace icon in the top right corner. Search for a question to swap in for the existing question on that card. You can only replace a question with another question, not another type of card (like a text card).
Metabase will automatically update a question's display to make sure your data looks great at any size you choose.
### Dashboard sections
To speed up card arrangement, you can add **sections** to your dashboards.
![Add section](./images/add-section.png)
Sections are templates with headings and pre-arranged cards. Once you add a section to a dashboard, you can pick questions for each card, and make any other changes you like. You can only pick questions for cards, not another type of card (like a text card).
If you forget to set a question for a card, the dashboard will simply render a blank card.
Sections include:
**KPI Grid**
![KPI Grid](./images/kpi-grid.png)
**Large chart with KPIs to the right**
![Large chart with KPIS to the right**](./images/large-chart-with-kpis-to-the-right.png)
**KPIs with large chart below**
![KPIs with large chart below](./images/kpis-with-large-chart-below.png)
### Dashboard width
You change the width of a dashboard.
![Change dashboard width](./images/toggle-width.png)
- **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.
## 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.

View File

@@ -7,7 +7,7 @@ redirect_from:
# Dashboard subscriptions
Dashboard subscriptions allow you to send the results of questions on a dashboard to people via email or Slack - even to people who lack an account in your Metabase.
Dashboard subscriptions allow you to send the results of questions on a dashboard to people via email or Slack - even to people who lack an account in your Metabase.
If your Metabase has email or Slack set up, all you need to do is create a dashboard, add subscribers to it, and tell Metabase how often you'd like the send out an update. You can set up as many subscriptions to a dashboard as you like, and if you make any changes to the dashboard, Metabase will update the subscriptions the next time they're delivered.
@@ -29,11 +29,11 @@ Let's say we want to email a dashboard. We'll click on the **Email it** option i
For emails, we can:
- **Add subscribers**. Add email addresses to register subscribers.
- **Add subscribers**. Add email addresses to register subscribers. On Metabase [Pro](https://www.metabase.com/product/pro) and [Enterprise](https://www.metabase.com/product/enterprise), admins can limit email recipients to [approved domains for notifications](../configuring-metabase/email.md#approved-domains-for-notifications) and [configure which recipients Metabase suggests](../configuring-metabase/email.md#suggest-recipients-on-dashboard-subscriptions-and-alerts).
- **Determine frequency and timing**. Tell Metabase how often it should send the dashboard (daily, weekly, or monthly), and what time of day to send the dashboard.
- **Send email now** sends an email to all subscribers.
- **Skip updates without results**. If there are no results, we can tell Metabase to skip sending the email.
- **Attach results**. Tell Metabase if it should also attach results to the email (which will include up to 2000 rows of data). You can choose between CSV and XLSX file formats.
- **Attach results**. Tell Metabase if it should attach results to the email as a file, in addition to displaying the table in the email body. You can choose between CSV and XLSX file formats. The attached file will include up to 2000 rows by default. If you're self-hosting Metabase, you can adjust this row limit by setting the environment variable [MB_UNAGGREGATED_QUERY_ROW_LIMIT](../configuring-metabase/environment-variables.md#mb_unaggregated_query_row_limit).
If you've added filters to your dashboard and set default values for those filters, Metabase will apply those default values to your subscriptions, filtering the results of all questions that are connected to those filters when the subscriptions are sent. To learn more, check out [dashboard filters](./filters.md).
@@ -41,6 +41,8 @@ If you've added filters to your dashboard and set default values for those filte
For Slack subscriptions, you can set up a subscription for a channel (like #general), or for a single person via their Slack username.
> Note that Slack username can be different from Slack display name.
![slack subscription options](./images/slack-subscription-options.png)
> If you rename the subscribed channel in Slack, you'll need to update the subscription to point to the new Slack channel name.

View File

@@ -17,6 +17,8 @@ In general, there are two basic use cases for an SSH tunnel:
Sometimes when a data warehouse is inside an enterprise environment, direct connections are blocked by security devices such as firewalls and intrusion prevention systems. Bastion hosts offer the option to first connect to a computer on the edge of the protected network, then, from that bastion host computer, establish a second connection to the data warehouse within the internal network, essentially patching these two connections together. Using the SSH tunneling feature, Metabase can automate this process.
> [Metabase Cloud](https://www.metabase.com/cloud/) does not currently support VPN connections to databases. To connect to databases in private networks, you can instead use SSH tunneling.
## How to use SSH tunneling
When connecting though a bastion host:

View File

@@ -10,21 +10,21 @@ Once you've [enabled uploads](#enabling-uploads), you can [upload files](../expl
Uploading CSV data is best suited for ad hoc analysis of spreadsheet data. If you have a lot of data, or will need to update or add to that data regularly, we recommend setting up a way to load that data into a database directly, then connecting Metabase to that database.
## Databases that support uploads
- [PostgreSQL](../databases/connections/postgresql.md)
- [MySQL](../databases/connections/mysql.md)
## Enabling uploads
There are a few things admins need to do to support CSV uploads:
- [Connect to a database using a database user account with write access](#connect-to-a-database-using-a-database-user-account-with-write-access). This way Metabase will be able to store the uploaded data somewhere.
- [Select the database and schema you want to store the uploaded data in](#select-the-database-and-schema-that-you-want-to-store-the-data-in).
- [(Optional) Specify a prefix for Metabase to prepend to the uploaded tables](#specify-a-prefix-for-metabase-to-prepend-to-the-uploaded-tables).
- [Add people to a group with unrestricted data access to the upload schema database](#add-people-to-a-group-with-unrestricted-data-access-to-the-upload-schema).
- (Optional) [specify a prefix for Metabase to prepend to the uploaded tables](#specify-a-prefix-for-metabase-to-prepend-to-the-uploaded-tables).
### Databases that support uploads
- [PostgreSQL](../databases/connections/postgresql.md)
- [MySQL](../databases/connections/mysql.md)
### Connect to a database using a database user account with write access
## Connect to a database using a database user account with write access
To upload data to Metabase, an admin will need to connect your Metabase to a database that supports uploads using a database user account that has write access to that database.
@@ -35,7 +35,7 @@ For more, check out:
- [Adding and managing databases](./connecting.md)
- [Database users, roles, and privileges](./users-roles-privileges.md#privileges-to-enable-uploads)
### Select the database and schema that you want to store the data in
## Select the database and schema that you want to store the data in
If Metabase is connected to a database using a database user account with write access, Admins can enable uploads by:
@@ -47,19 +47,23 @@ When people upload a CSV to a collection, Metabase will:
- Create a table to store that data in the database and schema that the Admin selected to store uploads.
- Create a [model](../data-modeling/models.md) that wraps the uploaded table, and save that model to the collection the person uploaded the CSV data to.
## Specify a prefix for Metabase to prepend to the uploaded tables
Admins can optionally specify a string of text to add in front of the table that Metabase creates to store the uploaded data.
## Add people to a group with unrestricted data access to the upload schema
In order to upload CSVs, a person must be in a group with Unrestricted access to the schema you've selected to store your uploaded data. Native query editing isn't required for uploading. See [groups](../people-and-groups/managing.md) and [data permissions](../permissions/data.md).
## Primary key auto-generation
When you upload a CSV, Metabase will create an a unique primary key column, called `_mb_row_id`, as the first (left-most) column of the uploaded CSV table. This `_mb_row_id` column will contain automatically generated integers. Metabase will also ignore any columns in the upload that have a name that will be in the database with the same name as the auto-generated primary key column (e.g., `_MB row-ID` in the CSV will be `_mb_row_id` or `_MB_ROW_ID` in the database).
If you don't want this autogenerated ID column, you can always remove the column from the model Metabase created. Visit the model, click on the info **i** icon, then **Model details**. From the model details page, click the **Edit definition** button. In the Data section of the query builder, click on the down arrow next to the table, deselect the added ID column, and save your changes.
### Add people to a group with unrestricted data access to the upload schema
## Data type errors
In order to upload CSVs, a person must be in a group with Unrestricted access to the schema you've selected to store your uploaded data. Native query editing isn't required for uploading. See [groups](../people-and-groups/managing.md) and [data permissions](../permissions/data.md).
### Specify a prefix for Metabase to prepend to the uploaded tables
Admins can optionally specify a string of text to add in front of the table that Metabase creates to store the uploaded data.
Metabase will try to guess what the data type is for each column, but if some entries are not like the others, Metabase may not guess the type correctly. For example, if you have a column that starts with integers like 100, 130, 140, then later on a float 105.5, Metabase may reject the upload. To fix this, you'll need to use spreadsheet software to adjust the formatting so that all the integers are formatted as floats (e.g., 100.00, 130.00, 140.00 and so on) before uploading.
## File size limit
@@ -67,11 +71,7 @@ CSV files cannot exceed 50 MB in size.
> While Metabase limits uploads to 50 MB, the server you use to run your Metabase may impose a lower limit. For example, the default client upload limit for [NGINX is 1 MB](https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size). So you may need to change your server settings to allow uploads up to 50 MB. People on Metabase Cloud don't have to worry about this.
If you have a file larger than 50 MB, the workaround here is to:
1. Split the data into multiple files.
2. Upload those files one by one. Metabase will create a new model for each sheet.
3. Consolidate that data by creating a new question or model that joins the data from those constituent models created by each upload.
If you have a file larger than 50 MB, the workaround here is to split the data into multiple and [append those files to an existing model](../exploration-and-organization/collections.md#appending-to-a-model-created-by-an-upload).
## Date formats

View File

@@ -0,0 +1,10 @@
---
title: API changelog
---
# Breaking changes to the API interface
## Metabase 0.49.0
- `POST /api/card` and `PUT /api/card/:id`
The `dataset` key is deprecated and will be removed in a future version, most likely 50. In its place we have added a new key: `type` which is equivalent in that it distinguishes Models from Questions. `type="model"` is equivalent to `dataset=true` and `type="question"` is equivalent to `dataset=false`.

View File

@@ -6,6 +6,16 @@ title: Driver interface changelog
## Metabase 0.49.0
- The multimethod `metabase.driver/describe-table-fks` has been deprecated in favor of `metabase.driver/describe-fks`.
`metabase.driver/describe-table-fks` will be removed in 0.52.0.
- The multimethod `metabase.driver/describe-fks` has been added. The method needs to be implemented if the database
supports the `:foreign-keys` and `:describe-fks` features. It replaces the `metabase.driver/describe-table-fks`
method, which is now deprecated.
- The multimethod `metabase.driver.sql-jdbc.sync.describe-table/describe-fks-sql` has been added. The method needs
to be implemented if you want to use the default JDBC implementation of `metabase.driver/describe-fks`.
- The multimethod `metabase.driver.sql-jdbc.sync.interface/current-user-table-privileges` has been added.
JDBC-based drivers can implement this to improve the performance of the default SQL JDBC implementation of
`metabase.driver/describe-database`. It needs to be implemented if the database supports the `:table-privileges`

Binary file not shown.

Before

Width:  |  Height:  |  Size: 219 KiB

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 357 KiB

After

Width:  |  Height:  |  Size: 328 KiB

View File

@@ -24,7 +24,7 @@ Interactive embedding is the only kind of embedding that [integrates with SSO an
## Static embedding
Also known as signed embedding, static embedding is a secure way to embed charts and dashboards.
Also known as signed embedding, [static embedding](./static-embedding.md) is a secure way to embed charts and dashboards.
**When to use static embedding**: you don’t want to give people ad hoc query access to their data for whatever reason, or you want to present data that applies to all of your tenants at once. For example, say you want to showcase some benchmarking stats: if you just want to make those stats available exclusively to your customers, you could use a signed embed.
@@ -48,7 +48,7 @@ If you'd like to share your data with the good people of the internet, you can c
## Switching from static to interactive embedding
[Interactive embedding](./interactive-embedding.md) requires authentication via single sign-on (SSO), so you'll need to set that up both in your Metabase and in your application's server. Check out our [Interactive embedding quick start](https://www.metabase.com/learn/customer-facing-analytics/interactive-embedding-quick-start).
[Interactive embedding](./interactive-embedding.md) requires authentication via single sign-on (SSO), so you'll need to set that up both in your Metabase and in your application's server. Check out our [Interactive embedding quick start](https://www.metabase.com/learn/customer-facing-analytics/interactive-embedding-quick-start).
## Further reading

View File

@@ -15,6 +15,7 @@ Parameters are pieces of information that are passed between Metabase and your w
Parameters can be signed or unsigned.
**Signed parameters**, such as filter names and values, must be added to your server code.
- [Editable parameters](#adding-a-filter-widget-to-a-static-embed)
- [Locked parameters](#restricting-data-in-a-static-embed)
@@ -37,7 +38,9 @@ You can use **editable parameters** to add [filter widgets](https://www.metabase
Editable parameters are responsible for passing filter values from the embedded filter widget (displayed on the iframe) through to the filters on your original dashboard or SQL question (in your Metabase).
Note that [locked parameters](#restricting-data-in-a-static-embed) may limit the values that show up in an embedded filter widget.
### You can't disable parameters when the original question or dashboard requires a value
If the filter on a dashboard or question is set to [Always require a value](../dashboards/filters.md#requiring-a-filter), you won't be able to disable the parameter when embedding.
## Populating an embedded filter widget with a default value
@@ -115,6 +118,8 @@ You can use locked parameters to display filtered data based on attributes captu
Locked parameters will apply the selected filter values to your original dashboard or SQL question, but they won't be displayed as filter widgets on your embed. Locked parameters may also limit the values that are shown in your [editable filter widgets](#adding-a-filter-widget-to-a-static-embed).
If you just want to require a value for the parameter, you could set the filter as editable and configure the underlying question or dashboard to [always require a value](../dashboards/filters.md#requiring-a-filter).
## Updating a locked parameter
Things to keep in mind if you need to make changes to your locked parameters.
@@ -135,7 +140,7 @@ The values for the locked parameter in your server code should match your filter
If your [locked parameter](#restricting-data-in-a-static-embed) is linked to a dashboard filter that's in turn linked to a SQL question, you'll only be able to choose a _single_ value for your locked parameter.
For example, let's say you have a dashboard filter called "Breakfast" with the values "Scrambled eggs", "Bacon", and "Waffles". If the "Breakfast" filter is linked to _any_ SQL questions on the dashboard, you'll only be able to choose _one_ of "Scrambled eggs", "Bacon", or "Waffles" for a locked parameter linked to the "Breakfast" filter.
For example, let's say you have a dashboard filter called "Breakfast" with the values "Hash browns", "Muffin", and "Waffles". If the "Breakfast" filter is linked to _any_ SQL questions on the dashboard, you'll only be able to choose _one_ of the options for a locked parameter linked to the "Breakfast" filter.
## Customizing the appearance of a static embed
@@ -149,17 +154,27 @@ your_embedding_url#theme=night&bordered=false&titled=true
You can preview appearance settings from your question or dashboard's [embedded appearance settings](./static-embedding.md#customizing-the-appearance-of-static-embeds).
| Parameter name | Possible values |
| ---------------------- | --------------------------------------------- |
| bordered | true, false |
| titled | true, false |
| theme | null, transparent, night |
| font¹ | [font name](../configuring-metabase/fonts.md) |
| hide_download_button² | true, false |
| Parameter name | Possible values |
| ----------------------------------------- | --------------------------------------------- |
| `bordered` | true, false |
| `titled` | true, false |
| `theme` | null, transparent, night |
| `refresh` (dashboard only) | integer (seconds, e.g., `refresh=60`) |
| `font`\* | [font name](../configuring-metabase/fonts.md) |
| `hide_download_button`\* (questions only) | true, false |
¹ Available on [paid plans](https://www.metabase.com/pricing).
\* Available on [Pro](https://www.metabase.com/product/pro) and [Enterprise](https://www.metabase.com/product/enterprise) plans.
### Allow people to download the results of an embedded question
{% include plans-blockquote.html feature="Downloading results" %}
By default, Metabase will include a **Download** button on embedded questions. You can remove the download button by setting `hide_download_button=true` in the embedding URL in the iframe's `src` attribute, see [customizing the appearance of static embeds](./static-embedding.md#customizing-the-appearance-of-static-embeds).
If the download button is missing when you expected it to be available, check that the URL in the `src` attribute for your iframe has the parameter `hide_download_button=false`.
> Downloading results is available only for questions, not dashboards.
² Available on [paid plans](https://www.metabase.com/pricing) and works on questions only (not dashboards).
## Maximum request size

View File

@@ -10,9 +10,9 @@ Also known as: standalone embedding, or signed embedding.
In general, embedding works by displaying a Metabase URL inside an iframe in your website. A **static embed** (or signed embed) is an iframe that's loading a Metabase URL secured with a signed JSON Web Token (JWT). Metabase will only load the URL if the request supplies a JWT signed with the secret shared between your app and your Metabase. The JWT also includes a reference to the resource to load, e.g., the dashboard ID, and any values for locked parameters.
You can can't use static embeds with [data sandboxes](../permissions/data-sandboxes.md), [drill-through](https://www.metabase.com/learn/questions/drill-through) or [auditing tools](../usage-and-performance-tools/audit.md) because signed JWTs don't create user sessions (server-side sessions). For those features, check out [interactive embedding](./interactive-embedding.md).
You can can't use static embeds with [data sandboxes](../permissions/data-sandboxes.md), [drill-through](https://www.metabase.com/learn/questions/drill-through), and user-specific data isn't captured in [usage analytics](../usage-and-performance-tools/usage-analytics.md) because signed JWTs don't create user sessions (server-side sessions). For those features, check out [interactive embedding](./interactive-embedding.md).
To restrict data in static embeds for specific people or groups, set up [locked parameters](./static-embedding-parameters.md#restricting-data-in-a-static-embed) instead.
You can, however, restrict data in static embeds for specific people or groups by [locking parameters](./static-embedding-parameters.md#restricting-data-in-a-static-embed).
## How static embedding works
@@ -30,23 +30,26 @@ To prevent people from editing the embedding URL to get access to other parts of
your_metabase_embedding_url/your_signed_jwt?filter=true
```
The signed JWT is generated using your [Metabase secret key](#regenerating-the-secret-key). The secret key tells Metabase that the request for filtered data can be trusted, so it's safe to display the results at the new embedding URL. Note that this secret key is shared for all static embeds, so whoever has access to that key will have access to all embedded artifacts.
The signed JWT is generated using your [Metabase secret key](#regenerating-the-static-embedding-secret-key). The secret key tells Metabase that the request for filtered data can be trusted, so it's safe to display the results at the new embedding URL. Note that this secret key is shared for all static embeds, so whoever has access to that key will have access to all embedded artifacts.
If you want to embed charts with additional interactive features, like [drill-down](https://www.metabase.com/learn/questions/drill-through) and [self-service querying](../questions/query-builder/introduction.md), see [Interactive embedding](./interactive-embedding.md).
## Enabling the embedding feature in Metabase
## Turning on the embedding feature in Metabase
1. Go to **Settings** > **Admin settings** > **Embedding**.
2. Click **Enable**.
2. Toggle the **Enable embedding**.
## Making a question or dashboard embeddable
To create a static embed:
1. Go to the question or dashboard that you want to embed in your website.
2. Click on the **sharing icon** (square with an arrow pointing to the top right).
3. Select **Embed this item in an application**.
4. Optional: [Preview the appearance of the embed](#customizing-the-appearance-of-static-embeds).
5. Optional: [Add parameters to the embed](./static-embedding-parameters.md).
6. Click **Publish**.
2. Click on the **sharing icon**. On dashboards, the icon is in the top right. On questions, it's in the bottom right.
3. Select **Embed**.
4. On the **Static embed** card, click the button: **Set this up**.
5. Optional: [Preview the appearance of the embed](#customizing-the-appearance-of-static-embeds).
6. Optional: [Add parameters to the embed](./static-embedding-parameters.md).
7. Click **Publish**.
![Preview](./images/04-preview.png)
@@ -60,32 +63,37 @@ metabase_site_url/embed/question/your_jwt_token?parameter_name=value
Once you've made a question or dashboard [embeddable](#making-a-question-or-dashboard-embeddable), you'll need to put the embedding URL for that question or dashboard on your website:
1. Go to the question or dashboard > **sharing icon** > **Embed this item in an application**.
2. Click **Code**.
3. Optional: [Preview the server code](#previewing-the-frontend-code-for-an-embed).
4. Add the server code to the file that builds your website.
5. Optional: [Preview the frontend code](#previewing-the-frontend-code-for-an-embed).
6. Add the frontend code to the HTML file where you want your static embed to appear.
1. Go to the question or dashboard > **sharing icon** > **Embed**.
2. Make any changes and copy the code.
3. [Preview the code](#previewing-the-code-for-an-embed)
4. Add the code to the server code that builds your website.
6. Add the frontend code to the code that generates the page where you want the embedded item to appear.
For more examples, see our [reference apps repo](https://github.com/metabase/embedding-reference-apps).
## Previewing the server code for an embed
## Previewing the code for an embed
1. Go to the question or dashboard > **sharing icon** > **Embed this item in an application**.
2. Click **Code**.
3. In the top code block, you'll find the sample code for your web server.
4. Optional: Select your web framework from the dropdown menu.
3. In the top code block, you'll find the sample code for your web server. You'll also find the iframe snippet to plug into your HTML template or single page app.
When you make changes to the style, appearance, or parameter preview settings, the server code sample will update as well. Make sure to copy these changes to your actual server code.
When you make changes to the style, appearance, or parameter preview settings, Metabase will update the code and highlight the changes. Make sure to copy these changes to your actual server code.
![Code samples for embedding](./images/05-code.png)
## Previewing the frontend code for an embed
Metabase generates server code for:
1. Go to the question or dashboard > **sharing icon** > **Embed this item in an application**.
2. Click **Code**.
3. In the bottom code block, get the sample code for your frontend.
4. Optional: Select your template language from the dropdown menu.
- Clojure
- Node.js
- Python
- Ruby
For iframe snippets:
- ERB
- JSX
- Mustache
- Pug/Jade
## Editing an embedded question or dashboard
@@ -105,39 +113,54 @@ You can find a list of all embedded questions and dashboards from **Admin settin
## Customizing the appearance of static embeds
You can change the way an embedded question or dashboard looks in an iframe (which won't change how it looks in your Metabase instance). Settings include:
You can change the way an embedded question or dashboard looks in an iframe (which won't change how it looks in your Metabase instance).
When setting up a static embed, click on the **Appearance** tab, and play around with the different appearance settings.
Settings include:
- Border
- Title
- Theme (light, dark, transparent)
- Font¹
- Download data²
- Font\*
- Download data (questions only)\*
¹ Available on [paid plans](https://www.metabase.com/pricing).
\* Available on [Pro](https://www.metabase.com/product/pro) and [Enterprise](https://www.metabase.com/product/enterprise) plans.
² Available on [paid plans](https://www.metabase.com/pricing) and hides the download button on questions only (not dashboards).
To update the appearance of a static embed:
1. Optional: Preview the appearance changes from your question or dashboard's embedding settings (**sharing icon** > **Embed this item in an application**).
2. Optional: Click **Code** to find the updated server code snippet in the top code block.
3. Change the [parameters](./static-embedding-parameters.md#customizing-the-appearance-of-a-static-embed) in your actual server code.
When you make changes to the embed's appearance, Metabase will highlight the changes it made to the code.
For global appearance settings, such as the colors and fonts used across your entire Metabase instance, see [Customizing Metabase's appearance](../configuring-metabase/appearance.md).
## Auto-refreshing the results of an embedded dashboard
> Auto-refreshing is only available for dashboards, not questions.
To refresh the results of a dashboard at a specific cadence, you can parameterize the embedded URL with `refresh`. For example, to set an embedded dashboard to refresh every 60 seconds, you would append `refresh=60` to the URL.
For example, the following code for generating an iframe URL for a dashboard would display the dashboard's title and refresh its results every 60 seconds.
```js
var iframeUrl = METABASE_SITE_URL + "/embed/dashboard/" + token +
"#titled=true&refresh=60";
```
For the full list options you can parameterize, see [customizing the appearance of a static embed](./static-embedding-parameters.md#customizing-the-appearance-of-a-static-embed).
## Removing the "Powered by Metabase" banner
![Powered by Metabase](./images/powered-by-metabase.png)
The banner appears on signed embeds created with Metabase's open-source version. You'll need to upgrade to a [Pro or Enterprise plan](https://www.metabase.com/pricing) to remove the banner.
The banner appears on static embeds created with Metabase's open-source version. To remove the banner, you'll need to upgrade to a [Pro](https://www.metabase.com/product/pro) or [Enterprise](https://www.metabase.com/product/enterprise) plan.
## Regenerating the secret key
## Regenerating the static embedding secret key
Your embedding secret key is used to sign JWTs for all of your [embedding URLs](#adding-the-embedding-url-to-your-website). You can find it under **Settings** > **Admin settings** > **Embedding**.
Your embedding secret key is used to sign JWTs for all of your [embedding URLs](#adding-the-embedding-url-to-your-website).
To reiterate: this key is shared across all static embeds. Whoever has access to this key could get access to all embedded artifacts, so keep this key secure.
1. Go to **Settings** > **Admin settings** > **Embedding**.
2. On the **Static embedding** card, click on **Manage**.
3. Under **Regenerate secret key**, click **Regenerate key**.
**Regenerate key** will create a new secret key, and break any embedding URLs that used the old key.
This key is shared across all static embeds. Whoever has access to this key could get access to all embedded artifacts, so keep this key secure. If you regenerate this key, you'll need to update your server code with the new key.
## Resizing dashboards to fit their content

View File

@@ -82,6 +82,18 @@ Metabase will create a [model](../data-modeling/models.md) that contains that CS
Uploads will only be available if your admin has enabled uploads for your Metabase, and you're in a group with Unrestricted access to the schema used to store those uploads. See [Uploading data](../databases/uploads.md).
## Appending to a model created by an upload
You can upload additional CSV data to an existing model created by a previous CSV upload.
![Append data to existing upload model](./images/append-data.png)
The uploaded CSV must have the same column name, order, and type as the columns in the model. Metabase will look for a header row to check that the column names are the same. So if you split a large CSV into multiple CSVs, make sure to include header rows for all of the files.
When appending, Metabase will simply insert the rows into the underlying table, which will update the model that sits on top of that table. If you have duplicate rows from one upload to the next, Metabase will preserve those duplicate rows.
The upload icon will only be visible on models created by uploads.
## Further reading
- [Keeping your analytics organized](https://www.metabase.com/learn/administration/same-page)

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View File

@@ -24,23 +24,29 @@ Metabase can run anywhere Java is available.
If you prefer to use a Docker container, we've got you covered.
### [Running on Podman](running-metabase-on-podman.md)
## Professional services from the Metabase team
Our Docker image is also compatible with Podman.
If you want help with:
### [Building Metabase from source](../developers-guide/start.md)
- Set up
- Training
- Data stack
- Embedding
- Data modeling
To run a development branch of Metabase, check out our [developer's guide](../developers-guide/start.md).
### Other installation options
- [Running on Azure Web Apps](running-metabase-on-azure.md)
- [Running on Debian as a service](running-metabase-on-debian.md)
Check out our [professional services](https://www.metabase.com/product/professional-services).
## Upgrading Metabase
See [Upgrading Metabase](upgrading-metabase.md).
See [Upgrading Metabase](upgrading-metabase.md)
## Other installation options
- [Running on Podman](running-metabase-on-podman.md)
- [Building Metabase from source](../developers-guide/start.md)
- [Running on Azure Web Apps](running-metabase-on-azure.md)
- [Running on Debian as a service](running-metabase-on-debian.md)
## Connect with a Metabase Expert
If you’d like more technical resources to set up your data stack with Metabase, connect with a [Metabase Expert](https://www.metabase.com/partners/).
If you’d like more technical resources to set up your data stack with Metabase, connect with a [Metabase Expert](https://www.metabase.com/partners/).

View File

@@ -7,9 +7,13 @@ redirect_from:
# Migrating to a production application database
This page covers how to convert a Metabase that's been using the built-in application database, H2, to a production-ready instance with either PostgreSQL or MySQL/MariaDB. For more on why you should do this, check out [How to run Metabase in production](https://www.metabase.com/learn/administration/metabase-in-production).
If you'd rather move to Metabase Cloud, check out [Migrate to Metabase Cloud](https://www.metabase.com/docs/latest/cloud/migrate/guide).
## Metabase's application database
The main difference between a local installation and a production installation of Metabase is the application database. The application database keeps track of all of your Metabase data: your questions, dashboards, collections, and so on.
The main difference between a local installation and a production installation of Metabase is the application database. This application database keeps track of all of your Metabase data: your questions, dashboards, collections, and so on.
Metabase ships with an embedded H2 application database that you should avoid using in production. The reason Metabase ships with the H2 database is because we want people to spin up Metabase on their local machine and start playing around with asking questions.

View File

@@ -17,7 +17,7 @@ If you have a token for the [Pro or Enterprise editions](https://www.metabase.co
If you have Java installed:
1. [Download the JAR file for Metabase OSS](https://metabase.com/start/oss/jar).
1. [Download the JAR file for Metabase OSS](https://metabase.com/start/oss/jar). If you're on a [Pro](https://www.metabase.com/product/pro) or [Enterprise](https://www.metabase.com/product/enterprise) plan, download the [JAR for the Enterprise Edition](https://downloads.metabase.com/enterprise/latest/metabase.jar).
2. Create a new directory and move the Metabase JAR into it.
3. Change into your new Metabase directory and run the JAR.
@@ -27,6 +27,8 @@ java -jar metabase.jar
Metabase will log its progress in the terminal as it starts up. Wait until you see "Metabase Initialization Complete" and visit `http://localhost:3000/setup`.
If you are using a paid version, be sure to [activate your license](../paid-features/activating-the-enterprise-edition.md).
## Local installation
If you just want to try Metabase out, play around with Metabase, or just use Metabase on your local machine, Metabase ships with a default application database that you can use. **This setup is not meant for production**. If you intend to run Metabase for real at your organization, see [Production installation](#production-installation).
@@ -45,7 +47,10 @@ If Java isn't installed, you'll need to install Java before you can run Metabase
### 2. Download Metabase
[Download the JAR file for Metabase OSS](https://www.metabase.com/start/oss/jar).
Download the JAR file:
- [Metabase OSS](https://www.metabase.com/start/oss/jar)
- [Metabase Enterprise/Pro edition](https://downloads.metabase.com/enterprise/latest/metabase.jar)
If you want to install the [Pro or Enterprise editions](https://www.metabase.com/pricing) of Metabase, see [Activating your Metabase commercial license](../paid-features/activating-the-enterprise-edition.md).
@@ -98,7 +103,7 @@ At this point you're ready to go! You can access your new Metabase server on por
You can use another port than 3000 by setting the `MB_JETTY_PORT` [environment variable](../configuring-metabase/environment-variables.md) before running the jar.
Note that in the default configuration Metabase will use a local H2 database for storing all its own application data. This default is meant for simple evaluation or personal use. If you want to run Metabase in production we recommend you [migrate away from H2](./migrating-from-h2.md).
If you are using a paid version of Metabase, be sure to [activate your license](../paid-features/activating-the-enterprise-edition.md).
## Production installation
@@ -144,7 +149,7 @@ If you need to run the JAR in production, you should run Metabase as a service.
The exact instructions for how to run Metabase as a service will differ depending on your operating system. For an example of how to set up Metabase as a service, check out [Running Metabase on Debian](./running-metabase-on-debian.md).
## Migrating to a production installation
### Migrating to a production installation
If you've been running Metabase with the default H2 application database and your team has already created questions, dashboards, collections and so on, you'll want to migrate that data to a production application database. And the sooner you do, the better. See [Migrating from the H2 database](migrating-from-h2.md).
@@ -156,6 +161,6 @@ If you run into any problems during installation, check out our [troubleshooting
See [Upgrading Metabase](upgrading-metabase.md).
## Continue to setup
## Setting up Metabase
Now that you’ve installed Metabase, it’s time to [set it up and connect it to your database](../configuring-metabase/setting-up-metabase.md).

View File

@@ -283,8 +283,194 @@ If you've written scripts to automate serialization, you'll need to:
Before exporting, you can also run a Metabase command to [drop entity IDs](./commands.md#drop-entity-ids).
## Serializing Metabase via the API
> Just like the CLI serialization commands, these endpoints are only available for [Pro](https://www.metabase.com/product/pro) and [Enterprise](https://www.metabase.com/product/enterprise) plans.
You can initiate imports and exports of serialized Metabase data via the API.
There are two endpoints:
- `/api/ee/serialization/export`
- `/api/ee/serialization/import`
For now, these endpoints are synchronous. If the serialization process takes too long, the request can time out. In this case, we suggest using the CLI commands.
### Use parameters to customize what Metabase exports
You can append optional parameters to tell Metabase what to include or exclude from the export. You can also combine parameters (excluding, of course, `all_collections` and selective collections).
So, assuming you're testing on `localhost`, and you want to exclude all collections from the export, you'd format the URL like so:
```html
http://localhost:3000/api/ee/serialization/export?all_collections=false
```
You can include multiple parameters, separated by `&`. For example, to exclude both the settings and the data model from the export:
```html
http://localhost:3000/api/ee/serialization/export?data_model=false&settings=false
```
## Example export params
### `collection`
Type: Array of integers.
Default value: Metabase will export all collections, unless `all_collections` is set to `false`.
To select which collections to export, include the collection IDs. For example, to include collections `1` and `2`:
```html
collection=1&collection=2
```
### `all_collections`
Type: Boolean
Default: `true` (unless you specify a subset of collections with `collection`).
To exclude all collections:
```html
all_collections=false
```
### `settings`
Type: Boolean.
Default: `true`.
To exclude settings:
```html
settings=false
```
### `data_model`
Type: Boolean.
Default: `true`.
To exclude the data model:
```
data_model=false
```
### `field_values`
Type: Boolean.
Default: `false`.
To include field values:
```
field_values=true
```
### `database_secrets`
Type: Boolean.
Default: `false`.
To include secrets:
```html
database_secrets=true
```
### `dirname`
Type: String.
Default: `<instance-name>-<YYYY-MM-dd_HH_mm>`
To specify a different directory:
```
dirname=name_of_your_directory
```
## You must compress your files when serializing via API calls
To keep file sizes over the network under control, both the `export` and `import` endpoints expect GZIP-compressed Tar files (`.tgz`).
### Compress a directory
To compress a directory (e.g., a directory named `metabase_data`).
```sh
tar -czf metabase_data
```
### Extract a directory
To extract/unzip a directory:
```sh
tar -xvf metabase_data.tgz
```
## Metabase adds logs to exports and imports
Exports: Metabase adds logs to the compressed directory as `export.log`.
Imports: You can add the `-o -` flag to export logs directly into the terminal, or `-o import.log` to save to a file.
### Example export request with `curl`
To export the contents of your Metabase, first set up an [API key](../people-and-groups/api-keys.md) and assign the key to the Admin group.
Then run:
```sh
curl \
-H 'x-api-key: YOUR_API_KEY' \
-X POST 'http://localhost:3000/api/ee/serialization/export' \
-o metabase_data.tgz
```
Substituting `YOUR_API_KEY` with your API key. This command will download the files as a GZIP-compressed Tar file named `metabase_data.tgz`.
You'll then need to unzip the compressed file:
```sh
tar -xvf metabase_data.tgz
```
The extracted directory will be called something like `metabase-yyyy-MM-dd_HH-mm`, with the date and time of the export.
### Example import request with `curl`
To import contents into your Metabase, first set up an [API key](../people-and-groups/api-keys.md) and assign the key to the Admin group.
Let's say you have your YAML files with Metabase application data in a directory called `metabase_data`. Before importing those files to your target Metabase, you'll need to compress those files.
```sh
tar -czf metabase_data.tgz metabase_data
```
Then post to the `/api/ee/serialization/import`. From the directory where you've stored your GZIP-compressed file, run:
```sh
curl -X POST \
-H 'x-api-key: YOUR_API_KEY' \
-F file=@metabase_data.tgz \
'http://localhost:3000/api/ee/serialization/import' \
-o -
```
Substituting `YOUR_API_KEY` with your API key. The `-o -` option will output logs in the terminal.
## Further reading
- [Serialization tutorial](https://www.metabase.com/learn/administration/serialization).
- [Setting up a git-based workflow](https://www.metabase.com/learn/administration/git-based-workflow)
- [Setting up a git-based workflow](https://www.metabase.com/learn/administration/git-based-workflow).
- Need help? Contact [support@metabase.com](mailto:support@metabase.com).

View File

@@ -10,28 +10,13 @@ The birth, care, and feeding of your Metabase.
Start here.
### [Running the Jar File](running-the-metabase-jar-file.md)
## [Migrating to a production database](./migrating-from-h2.md)
The simplest and most basic way of running Metabase.
If you started using Metabase with the default, H2 application database, here's how to migrate your data to a production-ready database.
### [Running on Docker](running-metabase-on-docker.md)
## [Configuring the Metabase application database](./configuring-application-database.md)
If you prefer to use a Docker container, we've got you covered.
### [Metabase Cloud](https://www.metabase.com/pricing)
Our official hosted version, [Metabase Cloud](https://www.metabase.com/pricing). All you need to do is sign up for a free trial, and you're off to the races.
### Other installation options
We recommend that you deploy Metabase using a service and cloud provider that you're familiar with. Below are some example setups:
- [Running on Azure Web Apps](running-metabase-on-azure.md)
- [Running on Debian as a service](running-metabase-on-debian.md)
## [Building Metabase from source](../developers-guide/start.md)
To run a development branch of Metabase, check out our [developer's guide](../developers-guide/start.md).
Use environment variables to set up your application database.
## [Backing up Metabase application data](./backing-up-metabase-application-data.md)
@@ -41,15 +26,11 @@ How to back up your Metabase data: questions, dashboards, and other application
How to safely upgrade your Metabase.
## [Migrating from H2](./migrating-from-h2.md)
## [Serialization](./serialization.md)
If you started using Metabase with the default, H2 application database, here's how to migrate your data to a production-ready database.
Export your questions, dashboards, and more as YAML files that you can check into version control.
## [Creating an RDS database on AWS](./creating-RDS-database-on-AWS.md)
How to use an RDS instance as your application database.
## [Monitoring your metabase](./monitoring-metabase.md)
## [Monitoring your Metabase](./monitoring-metabase.md)
Monitor your Metabase with JMX.
@@ -61,6 +42,10 @@ Export Metabase metrics for viewing with Prometheus.
Rest in peace, Internet Explorer.
## [Command line commands](./commands.md)
Metabase's CLI.
***
If you’d like more technical resources to set up your data stack with Metabase, connect with a [Metabase Expert](https://www.metabase.com/partners/).

View File

@@ -22,6 +22,7 @@ Paid plans include more ways to authenticate people and manage groups.
- [Setting up SAML with Keycloak](../people-and-groups/saml-keycloak.md)
- [Setting up SAML with Okta](../people-and-groups/saml-okta.md)
- [Authenticating with JWT](../people-and-groups/authenticating-with-jwt.md)
- [Multiple domains with Google Sign-in](../people-and-groups/google-and-ldap.md#multiple-domains-for-google-sign-in)
## Permissions

View File

@@ -8,36 +8,50 @@ redirect_from:
Enabling [Google Sign-In](https://developers.google.com/identity/sign-in/web/sign-in) or [LDAP](https://www.metabase.com/glossary/ldap) for single sign-on (SSO) lets your team log in with a click instead of using email and password. SSO can also be used to let people create Metabase accounts without asking an admin to add each person manually. You can find SSO options under **Settings** > **Admin settings** > **Authentication**.
If you'd like to have people authenticate with [SAML][saml-docs] or [JWT][jwt-docs], Metabase's [paid plans](https://www.metabase.com/pricing) let you do just that.
As time goes on we may add other auth providers. If you have a service you’d like to see work with Metabase, please let us know by [filing an issue](http://github.com/metabase/metabase/issues/new).
If you'd like to have people authenticate with [SAML][saml-docs] or [JWT][jwt-docs], Metabase's [paid plans](https://www.metabase.com/pricing) let you do just that. As time goes on we may add other auth providers. If you have a service you’d like to see work with Metabase, please let us know by [filing an issue](http://github.com/metabase/metabase/issues/new).
## Enabling Google Sign-In
Google Sign-In is a good option for SSO if:
Google Sign-In is a good option for SSO if:
- Your team is already using Google Workspace, or
- You'd like to use Google's 2-step or multi-factor authentication (2FA or MFA) to secure your Metabase.
### Working in the Google developer console
## Get your Client ID from the Google developer console
To let your team start signing in with Google you’ll first need to create an application through Google’s [developer console](https://console.developers.google.com/projectselector2/apis/library).
To let your team start signing in with Google, you’ll first need to create an application through Google’s [developer console](https://console.developers.google.com/projectselector2/apis/library).
Next, you'll have to create authorization credentials for your application by following [the instructions from Google here](https://developers.google.com/identity/gsi/web/guides/get-google-api-clientid). Specify the URI of your Metabase instance in the “Authorized JavaScript origins” section. You should leave the “Authorized Redirect URIs” section blank.
Next, you'll have to create authorization credentials and [get a Google API Client ID](https://developers.google.com/identity/gsi/web/guides/get-google-api-clientid):
Once you have your `Client ID` (ending in `.apps.googleusercontent.com`), click `Configure` on the "Sign in with Google" section of the Authentication page in the Metabase Admin Panel. Paste your `client_id` into the first box.
- In the `Authorized JavaScript origins` section, specify the URI of your Metabase instance.
- Leave the `Authorized Redirect URIs` section blank.
- Copy your Client ID, which you'll paste into Metabase when setting up Google Sign-in.
Now existing Metabase users signed into a Google account that matches their Metabase account email can sign in with just a click.
## Setting up Google Sign-in in Metabase
Once you have your Google API `Client ID` (ending in `.apps.googleusercontent.com`), visit your Metabase and:
1. Click on the settings **Gear** icon in the upper right.
2. Select **Admin settings**.
3. In the **Settings** tab, click on **Authentication**.
4. On the **Sign in with Google** card, click **Set up**.
5. In the **Client ID** field, paste your Google API Client ID.
### Creating Metabase accounts with Google Sign-in
> On [paid plans](https://www.metabase.com/pricing), you're [charged for each additional account](https://www.metabase.com/docs/latest/cloud/how-billing-works#what-counts-as-a-user-account).
> On [paid plans](https://www.metabase.com/pricing), you're [charged for each active account](https://www.metabase.com/docs/latest/cloud/how-billing-works#what-counts-as-a-user-account).
You can optionally tell Metabase to automatically create an account on someone's first SSO login.
If people's Google account email addresses are from a specific domain, and you want to allow them to sign up on their own, you can enter that domain in the **Domain** field.
Once you've added your Google Client ID to your Metabase settings, go to the Google Sign-In configuration page, and specify the email domain you want to allow. For example, if you work at WidgetCo you could enter "widgetco.com" in the field to let anyone with a company email sign up on their own.
Once set up, existing Metabase users signed in to a Google account that matches the email they used to set up their Metabase account will be able to sign in with just a click.
Note that Metabase accounts created with Google Sign-In do not have passwords and must use Google to sign in to Metabase.
Note that Metabase accounts _created_ with Google Sign-In will not have passwords; they must use Google to sign in to Metabase.
### Multiple domains for Google Sign-in
{% include plans-blockquote.html feature="Multiple domains for Google Sign-in" %}
If you're on a [pro](https://www.metabase.com/product/pro) or [Enterprise](https://www.metabase.com/product/enterprise) plan, you can specify multiple domains in the **Domain** field, separated by a comma. For example, `mycompany.com,example.com.br,otherdomain.co.uk`.
## Required LDAP attributes

View File

@@ -43,6 +43,8 @@ You can also sync user attributes from your identity provider [via SSO](./start.
User attributes are required for [data sandbox](../permissions/data-sandboxes.md) permissions.
You can also employ user attributes to specify what database role Metabase should use when that person queries a database. Check out [impersonation access](../permissions/data.md#impersonation-access).
## Deactivating an account
To deactivate someone's account, click on the three dots icon on the right of a person’s row and select **Deactivate** from the dropdown. Deactivating an account will mark it as inactive and prevent the user from logging in - but it _won’t_ delete that person's saved questions or dashboards.

View File

@@ -35,7 +35,10 @@ For more information, check out our guide for [authenticating with SAML](./authe
7. Configure the service provider (Metabase) from **Configure** > **Realm Settings**.
- From **Endpoints**, select “SAML 2.0 Identity Provider Metadata”.
- An XML file will open in a new tab.
8. From the XML file, note the following:
8. Configure the Single Logout service (if you intend to use Single Logout)
1. in **Clients** > **Valid post logout redirect URIs** put your server's uri (this usually matches **Valid redirect URIs**)
2. in **Clients** > **Advanced** > **Logout Service POST Binding URL** put your server URI appended with `/auth/sso/handle_slo`
9. From the XML file, note the following:
1. The URL that appears right after the following string:
```
md:SingleSignOnServiceBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location=

View File

@@ -10,7 +10,7 @@ title: SAML with Okta
| Metabase SAML | Okta SAML |
| ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| URL the IdP should redirect back to | Single sign-on URL. This is your Metabase [Site URL][site-url] -- it should start with `https://` and end with `/auth/sso/`. |
| URL the IdP should redirect back to | Single sign-on URL. This is your Metabase [Site URL][site-url] -- it should start with `https://` and end with `/auth/sso`. |
| SAML Application Name | Audience URI (SP Entity ID) |
### Setting attribute statements

Some files were not shown because too many files have changed in this diff Show More