1 -- Composed view: Order
2 -- Description: Detailed order info — payment, delivery, customer, dates.
3 -- Fact: Order [order_object]
4 -- Dimension: Point Of Contact [point_of_contact]
5 -- Dimension: Order Rank [order_rank]
6
7 import obj_order from "../objects/order.tql"
8 import obj_point_of_contact from "../objects/point_of_contact.tql"
9 import obj_order_rank from "../objects/order_rank.tql"
10
11 params {
12 metrics: Set<obj_order.metric_keys> = []
13 dimensions: Set<obj_order.dimension_keys ++ obj_point_of_contact.dimension_keys ++ obj_order_rank.dimension_keys> = []
14 filters: List<FilterInput> = []
15 }
16
17 let
18 order_object = sql"order_object"
19 point_of_contact = sql"point_of_contact"
20 order_rank = sql"order_rank"
21
22 metric_frags = obj_order.metrics order_object metrics
23 dim_entries = filter (\d -> contains dimensions d.key) (
24 dedupeByKey (
25 obj_order.dimensions order_object ++
26 obj_point_of_contact.dimensions point_of_contact ++
27 obj_order_rank.dimensions order_rank
28 )
29 )
30 filter_keys = map (\f -> f.key) filters
31
32 needs_order_rank = obj_order_rank.needs dimensions filter_keys
33 needs_point_of_contact = obj_point_of_contact.needs dimensions filter_keys
34 join_order_rank = obj_order_rank.join_if needs_order_rank order_rank order_object sql"order_id" sql"rank_order_id"
35 join_point_of_contact = obj_point_of_contact.join_if needs_point_of_contact point_of_contact order_object sql"order_poc_id" sql"poc_id"
36
37 select_dims = concatSep ", " (map (\d -> d.expr) dim_entries)
38 select_metrics = concatSep ", " metric_frags
39 select_expr = if isEmpty select_dims && isEmpty select_metrics then sql"*"
40 else if isEmpty select_dims then select_metrics
41 else if isEmpty select_metrics then select_dims
42 else sql"${select_dims}, ${select_metrics}"
43 group_clause = wrap "GROUP BY " "" select_dims
44 where_clause = wrap "WHERE " "" (filterWhere filterables filters)
45 in sql''
46 SELECT ${select_expr}
47 FROM ${obj_order.source order_object}
48 ${join_point_of_contact}
49 ${join_order_rank}
50 ${where_clause}
51 ${group_clause}
52 ''
1 -- Composed view: Order
2 -- Description: Detailed order info — payment, delivery, customer, dates.
3 -- Fact: Order [order_object]
4 -- Dimension: Point Of Contact [point_of_contact]
5 -- Dimension: Order Rank [order_rank]
6
7 import obj_order from "../objects/order.tql"
8 import obj_point_of_contact from "../objects/point_of_contact.tql"
9 import obj_order_rank from "../objects/order_rank.tql"
10
11 params {
12 metrics: Set<obj_order.metric_keys> = []
13 dimensions: Set<obj_order.dimension_keys ++ obj_point_of_contact.dimension_keys ++ obj_order_rank.dimension_keys> = []
14 filters: List<FilterInput> = []
15 }
16
17 let
18 order_object = sql"order_object"
19 point_of_contact = sql"point_of_contact"
20 order_rank = sql"order_rank"
21
22 metric_frags = obj_order.metrics order_object metrics
23 dim_entries = filter (\d -> contains dimensions d.key) (
24 dedupeByKey (
25 obj_order.dimensions order_object ++
26 obj_point_of_contact.dimensions point_of_contact ++
27 obj_order_rank.dimensions order_rank
28 )
29 )
30 filter_keys = map (\f -> f.key) filters
31
32 needs_order_rank = obj_order_rank.needs dimensions filter_keys
33 needs_point_of_contact = obj_point_of_contact.needs dimensions filter_keys
34 join_order_rank = obj_order_rank.join_if needs_order_rank order_rank order_object sql"order_id" sql"rank_order_id"
35 join_point_of_contact = obj_point_of_contact.join_if needs_point_of_contact point_of_contact order_object sql"order_poc_id" sql"poc_id"
36
37 select_dims = concatSep ", " (map (\d -> d.expr) dim_entries)
38 select_metrics = concatSep ", " metric_frags
39 select_expr = if isEmpty select_dims && isEmpty select_metrics then sql"*"
40 else if isEmpty select_dims then select_metrics
41 else if isEmpty select_metrics then select_dims
42 else sql"${select_dims}, ${select_metrics}"
43 group_clause = wrap "GROUP BY " "" select_dims
44 where_clause = wrap "WHERE " "" (filterWhere filterables filters)
45 in sql''
46 SELECT ${select_expr}
47 FROM ${obj_order.source order_object}
48 ${join_point_of_contact}
49 ${join_order_rank}
50 ${where_clause}
51 ${group_clause}
52 ''