{"id":13800470,"url":"https://github.com/lambdaisland/metabase-datomic","last_synced_at":"2025-05-13T09:31:39.168Z","repository":{"id":66561971,"uuid":"177175873","full_name":"lambdaisland/metabase-datomic","owner":"lambdaisland","description":"Datomic driver for Metabase","archived":true,"fork":false,"pushed_at":"2020-10-01T14:09:58.000Z","size":190,"stargazers_count":67,"open_issues_count":5,"forks_count":11,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-05-07T15:39:50.162Z","etag":null,"topics":["business-intelligence","data-visualization","metabase"],"latest_commit_sha":null,"homepage":"","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lambdaisland.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2019-03-22T16:36:58.000Z","updated_at":"2025-05-01T13:54:43.000Z","dependencies_parsed_at":"2024-01-13T11:14:51.815Z","dependency_job_id":"936d0331-cd45-4bef-822f-839924d65d0a","html_url":"https://github.com/lambdaisland/metabase-datomic","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lambdaisland%2Fmetabase-datomic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lambdaisland%2Fmetabase-datomic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lambdaisland%2Fmetabase-datomic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lambdaisland%2Fmetabase-datomic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lambdaisland","download_url":"https://codeload.github.com/lambdaisland/metabase-datomic/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253657865,"owners_count":21943383,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["business-intelligence","data-visualization","metabase"],"created_at":"2024-08-04T00:01:12.887Z","updated_at":"2025-05-13T09:31:39.147Z","avatar_url":"https://github.com/lambdaisland.png","language":"Clojure","readme":"# metabase-datomic\n\n\u003c!-- badges --\u003e\n\u003c!-- [![CircleCI](https://circleci.com/gh/plexus/metabase-datomic.svg?style=svg)](https://circleci.com/gh/plexus/metabase-datomic) [![cljdoc badge](https://cljdoc.org/badge/plexus/metabase-datomic)](https://cljdoc.org/d/plexus/metabase-datomic) [![Clojars Project](https://img.shields.io/clojars/v/plexus/metabase-datomic.svg)](https://clojars.org/plexus/metabase-datomic) --\u003e\n\u003c!-- /badges --\u003e\n\nA Metabase driver for Datomic.\n\nCommercial support is provided by [Gaiwan](http://gaiwan.co).\n\n## Try it!\n\n```\ndocker run -p 3000:3000 lambdaisland/metabase-datomic\n```\n\n## Design decisions\n\nSee the [Architecture Decision Log](doc/architecture_decision_log.org)\n\n## Developing\n\nTo get a REPL based workflow, do a git clone of both `metabase` and\n`metabase-datomic`, such that they are in sibling directories\n\n``` shell\n$ git clone git@github.com:metabase/metabase.git\n$ git clone git@github.com:plexus/metabase-datomic.git\n\n$ tree -L 1\n.\n│\n├── metabase\n└── metabase-datomic\n```\n\nBefore you can use Metabase you need to build the frontend. This step you only\nneed to do once.\n\n``` shell\ncd metabase\nyarn build\n```\n\nAnd install metabase locally\n\n``` shell\nlein install\n```\n\nNow `cd` into the `metabase-datomic` directory, and run `bin/start_metabase` to\nlauch the process including nREPL running on port 4444.\n\n``` shell\ncd metabase-datomic\nbin/start_metabase\n```\n\nNow you can connect from Emacs/CIDER to port 4444, or use the\n`bin/cider_connect` script to automatically connect, and to associate the REPL\nsession with both projects, so you can easily evaluate code in either, and\nnavigate back and forth.\n\nOnce you have a REPL you can start the web app. This also opens a browser at\n`localhost:3000`\n\n``` clojure\nuser=\u003e (go)\n```\n\nThe first time it will ask you to create a user and do some other initial setup.\nTo skip this step, invoke `setup!`. This will create a user with username\n`arne@example.com` and password `dev`. It will also create a Datomic database\nwith URL `datomic:free://localhost:4334/mbrainz`. You are encouraged to run a\ndatomic-free transactor, and\n[import the MusicBrainz](https://github.com/Datomic/mbrainz-sample)\ndatabase for testing.\n\n``` clojure\nuser=\u003e (setup!)\n```\n\n## Installing\n\nThe general process is to build an uberjar, and copy the result into\nyour Metabase `plugins/` directory. You can build a jar based on\ndatomic-free, or datomic-pro (assuming you have a license). Metabase\nmust be available as a local JAR.\n\n``` shell\ncd metabase\nlein install\nmkdir plugins\ncd ../metabase-datomic\nlein with-profiles +datomic-free uberjar\n# lein with-profiles +datomic-pro uberjar\ncp target/uberjar/datomic.metabase-driver.jar ../metabase/plugins\n```\n\nNow you can start Metabase, and start adding Datomic databases\n\n``` shell\ncd ../metabase\nlein run -m metabase.core\n```\n\n## Configuration EDN\n\nWhen you configure a Datomic Database in Metabase you will notice a config field\ncalled \"Configuration EDN\". Here you can paste a snippet of EDN which will\ninfluence some of the Driver's behavior.\n\nThe EDN needs to represent a Clojure map. These keys are currently understood\n\n- `:inclusion-clauses`\n- `:tx-filter`\n- `:relationships`\n\nOther keys are ignored.\n\n### `:inclusion-clauses`\n\nDatomic does not have tables, but nevertheless the driver will map your data to\nMetabase tables based on the attribute names in your schema. To limit results to\nthe right entities it needs to do a check to see if a certain entity logically\nbelongs to such a table.\n\nBy default these look like this\n\n``` clojure\n[(or [?eid :user/name]\n     [?eid :user/password]\n     [?eid :user/roles])]\n```\n\nIn other words we look for entities that have any attribute starting with the\ngiven prefix. This can be both suboptimal (there might be a single attribute\nwith an index that is faster to check), and it may be wrong, depending on your\nsetup.\n\nSo we allow configuring this clause per table. The configured value should be a\nvector of datomic clauses. You have the full power of datalog available. Use the\nspecial symbol `?eid` for the entity that is being filtered.\n\n``` clojure\n{:inclusion-clauses {\"user\" [[?eid :user/handle]]}}\n```\n\n### `:tx-filter`\n\nThe `datomic.api/filter` function allows you to get a filtered view of the\ndatabase. A common use case is to select datoms based on metadata added to\ntransaction entities.\n\nYou can set `:tx-filter` to any form that evaluates to a Clojure function. Make\nsure any namespaces like `datomic.api` are fully qualified.\n\n``` clojure\n{:tx-filter\n (fn [db ^datomic.Datom datom]\n   (let [tx-user (get-in (datomic.api/entity db (.tx datom)) [:tx/user :db/id])]\n     (or (nil? tx-tenant) (= 17592186046521 tx-user))))}\n```\n\n### `:rules`\n\nThis allows you to configure Datomic rules. These then become available in the\nnative query editor, as well in `:inclusion-clauses` and `:relationships`.\n\n``` clojure\n{:rules\n [[(sub-accounts ?p ?c)\n   [?p :account/children ?c]]\n  [(sub-accounts ?p ?d)\n   [?p :account/children ?c]\n   (sub-accounts ?c ?d)]]}\n```\n\n### `:relationships`\n\nThis features allows you to add \"synthetic foreign keys\" to tables. These are\nfields that Metabase will consider to be foreign keys, but in reality they are\nbacked by an arbitrary lookup path in Datomic. This can include reverse\nreference (`:foo/_bar`) and rules.\n\nTo set up an extra relationship you start from the table where you want to add\nthe relationship, then give it a name, give the path of attributes and rules\nneeded to get to the other entity, and specifiy which table the resulting entity\nbelongs to.\n\n``` clojure\n{:relationships\n {;; foreign keys added to the account table\n  :account\n  {:journal-entry-lines\n   {:path [:journal-entry-line/_account]\n    :target :journal-entry-line}\n\n   :subaccounts\n   {:path [sub-accounts]\n    :target :account}\n\n   :parent-accounts\n   {:path [_sub-accounts] ;; apply a rule in reverse\n    :target :account}}\n\n  ;; foreign keys added to the journal-entry-line table\n  :journal-entry-line\n  {:fiscal-year\n   {:path [:journal-entry/_journal-entry-lines\n           :ledger/_journal-entries\n           :fiscal-year/_ledgers]\n    :target :fiscal-year}}}}\n```\n\n## Status\n\n\u003c!-- feature-table --\u003e\n\u003ctable\u003e\u003ctr\u003e\u003cth align='left'\u003eFeature\u003c/th\u003e\u003cth align='center'\u003eSupported?\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth align='left'\u003eBasics\u003c/th\u003e\u003cth align='center'\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;{:source-table integer-literal}\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;{:fields [\u0026amp; field]}\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:field-id field-id]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:datetime-field local-field | fk unit]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;{:breakout [\u0026amp; concrete-field]}\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:field-id field-id]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:aggregation 0]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:datetime-field local-field | fk unit]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;{:filter filter-clause}\u003c/td\u003e\u003ctd align='center'\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:and \u0026amp; filter-clause]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:or \u0026amp; filter-clause]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:not filter-clause]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:= concrete-field value \u0026amp; value]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:!= concrete-field value \u0026amp; value]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:\u0026lt; concrete-field orderable-value]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:\u0026gt; concrete-field orderable-value]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:\u0026lt;= concrete-field orderable-value]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:\u0026gt;= concrete-field orderable-value]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:is-null concrete-field]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:not-null concrete-field]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:between concrete-field min orderable-value max orderable-value]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:inside lat concrete-field lon concrete-field lat-max numeric-literal lon-min numeric-literal lat-min numeric-literal lon-max numeric-literal]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:starts-with concrete-field string-literal]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:contains concrete-field string-literal]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:does-not-contain concrete-field string-literal]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:ends-with concrete-field string-literal]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:time-interval field concrete-field n :current|:last|:next|integer-literal unit relative-datetime-unit]\u003c/td\u003e\u003ctd align='center'\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;{:limit integer-literal}\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;{:order-by [\u0026amp; order-by-clause]}\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth align='left'\u003e:basic-aggregations\u003c/th\u003e\u003cth align='center'\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;{:aggregation aggregation-clause}\u003c/td\u003e\u003ctd align='center'\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:count]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:count concrete-field]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:cum-count concrete-field]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:cum-sum concrete-field]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:distinct concrete-field]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:sum concrete-field]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:min concrete-field]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:max concrete-field]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:share filter-clause]\u003c/td\u003e\u003ctd align='center'\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth align='left'\u003e:standard-deviation-aggregations\u003c/th\u003e\u003cth align='center'\u003eYes\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;{:aggregation aggregation-clause}\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:stddev concrete-field]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth align='left'\u003e:foreign-keys\u003c/th\u003e\u003cth align='center'\u003eYes\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;{:fields [\u0026amp; field]}\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:fk-\u0026gt; fk-field-id dest-field-id]\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth align='left'\u003e:nested-fields\u003c/th\u003e\u003cth align='center'\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth align='left'\u003e:set-timezone\u003c/th\u003e\u003cth align='center'\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth align='left'\u003e:expressions\u003c/th\u003e\u003cth align='center'\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;{:fields [\u0026amp; field]}\u003c/td\u003e\u003ctd align='center'\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:expression]\u003c/td\u003e\u003ctd align='center'\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;{:breakout [\u0026amp; concrete-field]}\u003c/td\u003e\u003ctd align='center'\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[:expression]\u003c/td\u003e\u003ctd align='center'\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;{:expressions {expression-name expression}}\u003c/td\u003e\u003ctd align='center'\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth align='left'\u003e:native-parameters\u003c/th\u003e\u003cth align='center'\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth align='left'\u003e:expression-aggregations\u003c/th\u003e\u003cth align='center'\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth align='left'\u003e:nested-queries\u003c/th\u003e\u003cth align='center'\u003eYes\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align='left'\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;{:source-query query}\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth align='left'\u003e:binning\u003c/th\u003e\u003cth align='center'\u003e\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003cth align='left'\u003e:case-sensitivity-string-filter-options\u003c/th\u003e\u003cth align='center'\u003eYes\u003c/th\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c!-- /feature-table --\u003e\n\n## License\n\nCopyright \u0026copy; 2019 Arne Brasseur\n\nLicensed under the term of the Mozilla Public License 2.0, see LICENSE.\n","funding_links":[],"categories":["Uncategorized"],"sub_categories":["Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flambdaisland%2Fmetabase-datomic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flambdaisland%2Fmetabase-datomic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flambdaisland%2Fmetabase-datomic/lists"}