Malli schema for temporal bucketing units and expressions. | (ns metabase.lib.schema.temporal-bucketing (:require [clojure.set :as set] [metabase.lib.schema.common :as common] [metabase.util.malli.registry :as mr])) |
Units that you can EXTRACT from a date or datetime. These return integers in temporal bucketing expressions. The front end shows the options in this order. | (def ordered-date-extraction-units [:day-of-week :day-of-month :day-of-year :week-of-year :month-of-year :quarter-of-year :year :year-of-era]) |
Units that you can EXTRACT from a date or datetime. These return integers in temporal bucketing expressions. | (def date-extraction-units (set ordered-date-extraction-units)) |
(mr/def ::unit.date.extract (into [:enum {:error/message "Valid date extraction unit" :decode/normalize common/normalize-keyword}] date-extraction-units)) | |
Units that you can TRUNCATE a date or datetime to. In temporal bucketing expressions these return a | (def ordered-date-truncation-units [:day :week :month :quarter :year]) |
Units that you can TRUNCATE a date or datetime to. In temporal bucketing expressions these return a | (def date-truncation-units (set ordered-date-truncation-units)) |
(mr/def ::unit.date.truncate (into [:enum {:error/message "Valid date truncation unit" :decode/normalize common/normalize-keyword}] date-truncation-units)) | |
Valid date or datetime bucketing units for either truncation or extraction operations. The front end shows the options in this order. | (def ordered-date-bucketing-units (into [] (distinct) (concat ordered-date-truncation-units ordered-date-extraction-units))) |
Valid date or datetime bucketing units for either truncation or extraction operations. | (def date-bucketing-units (set ordered-date-bucketing-units)) |
(mr/def ::unit.date (into [:enum {:error/message "Valid date bucketing unit" :decode/normalize common/normalize-keyword}] date-bucketing-units)) | |
Units that you can EXTRACT from a time or datetime. These return integers in temporal bucketing expressions. The front end shows the options in this order. | (def ordered-time-extraction-units [:second-of-minute :minute-of-hour :hour-of-day]) |
Units that you can EXTRACT from a time or datetime. These return integers in temporal bucketing expressions. | (def time-extraction-units (set ordered-time-extraction-units)) |
(mr/def ::unit.time.extract (into [:enum {:error/message "Valid time extraction unit"}] time-extraction-units)) | |
Units you can TRUNCATE a time or datetime to. These return the same type as the expression being bucketed in temporal bucketing expressions. The front end shows the options in this order. | (def ordered-time-truncation-units [:millisecond :second :minute :hour]) |
Units you can TRUNCATE a time or datetime to. These return the same type as the expression being bucketed in temporal bucketing expressions. | (def time-truncation-units (set ordered-time-truncation-units)) |
(mr/def ::unit.time.truncate (into [:enum {:error/message "Valid time truncation unit" :decode/normalize common/normalize-keyword}] time-truncation-units)) | |
Valid time bucketing units for either truncation or extraction operations. The front end shows the options in this order. | (def ordered-time-bucketing-units (into [] (distinct) (concat ordered-time-truncation-units ordered-time-extraction-units))) |
Valid time bucketing units for either truncation or extraction operations. | (def time-bucketing-units (set ordered-time-bucketing-units)) |
(mr/def ::unit.time (into [:enum {:error/message "Valid time bucketing unit" :decode/normalize common/normalize-keyword}] time-bucketing-units)) | |
Valid datetime bucketing units for truncation operations. The front end shows the options in this order. | (def ordered-datetime-truncation-units (into [] (distinct) (concat ordered-time-truncation-units ordered-date-truncation-units))) |
Valid datetime bucketing units for either truncation or extraction operations. The front end shows the options in this order. | (def ordered-datetime-bucketing-units (into [] (distinct) (concat ordered-time-truncation-units ordered-date-truncation-units ordered-time-extraction-units ordered-date-extraction-units))) |
Valid datetime bucketing units for either truncation or extraction operations. | (def datetime-bucketing-units (set ordered-datetime-bucketing-units)) |
(mr/def ::unit.date-time (into [:enum {:error/message "Valid datetime bucketing unit" :decode/normalize common/normalize-keyword}] ordered-datetime-bucketing-units)) | |
This is the same as [[datetime-bucketing-units]], but also includes | (def temporal-bucketing-units (conj datetime-bucketing-units :default)) |
(mr/def ::unit (into [:enum {:error/message "Valid temporal bucketing unit" :decode/normalize common/normalize-keyword}] temporal-bucketing-units)) | |
Valid TRUNCATION units for a datetime. | (def datetime-truncation-units (set/union date-truncation-units time-truncation-units)) |
(mr/def ::unit.date-time.truncate (into [:enum {:error/message "Valid datetime truncation unit" :decode/normalize common/normalize-keyword}] datetime-truncation-units)) | |
Valid EXTRACTION units for a datetime. Extraction units return integers! | (def datetime-extraction-units (set/union date-extraction-units time-extraction-units)) |
(mr/def ::unit.date-time.extract (into [:enum {:error/message "Valid datetime extraction unit" :decode/normalize common/normalize-keyword}] datetime-extraction-units)) | |
Date units that are valid in intervals or clauses like | (def date-interval-units ;; it's the same but also includes `:year`, not normally allowed as a date truncation unit; `:year` is interpreted ;; as extraction instead. (conj date-truncation-units :year)) |
(mr/def ::unit.date.interval (into [:enum {:error/message "Valid date interval unit" :decode/normalize common/normalize-keyword}] date-interval-units)) | |
Time units that are valid in intervals or clauses like | (def time-interval-units time-truncation-units) |
(mr/def ::unit.time.interval (into [:enum {:error/message "Valid time interval unit" :decode/normalize common/normalize-keyword}] time-interval-units)) | |
Units valid in intervals or clauses like | (def datetime-interval-units (set/union date-interval-units time-interval-units)) |
(mr/def ::unit.date-time.interval (into [:enum {:error/message "Valid datetime interval unit" :decode/normalize common/normalize-keyword}] datetime-interval-units)) | |
(mr/def ::option [:map [:lib/type [:= :option/temporal-bucketing]] [:unit ::unit] [:default {:optional true} :boolean]]) | |