@duckcodeailabs/dql-cli 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/dist/args.js +1 -1
  2. package/dist/args.js.map +1 -1
  3. package/dist/args.test.js +3 -3
  4. package/dist/args.test.js.map +1 -1
  5. package/dist/assets/dql-notebook/assets/index-BZV40eAE.css +1 -0
  6. package/dist/assets/dql-notebook/assets/index-BsWoK_RX.js +532 -0
  7. package/dist/assets/dql-notebook/index.html +2 -1
  8. package/dist/commands/compile.d.ts.map +1 -1
  9. package/dist/commands/compile.js +4 -2
  10. package/dist/commands/compile.js.map +1 -1
  11. package/dist/commands/init.d.ts.map +1 -1
  12. package/dist/commands/init.js +104 -90
  13. package/dist/commands/init.js.map +1 -1
  14. package/dist/commands/init.test.js +8 -10
  15. package/dist/commands/init.test.js.map +1 -1
  16. package/dist/commands/lineage.js +16 -0
  17. package/dist/commands/lineage.js.map +1 -1
  18. package/dist/commands/new.test.js +8 -8
  19. package/dist/commands/new.test.js.map +1 -1
  20. package/dist/index.js +1 -2
  21. package/dist/index.js.map +1 -1
  22. package/dist/package.json +7 -7
  23. package/package.json +15 -14
  24. package/LICENSE +0 -123
  25. package/dist/assets/dql-notebook/assets/index-B_X7pyPz.js +0 -510
  26. package/dist/assets/templates/dashboard/README.md +0 -30
  27. package/dist/assets/templates/dashboard/blocks/.gitkeep +0 -1
  28. package/dist/assets/templates/dashboard/dashboards/pipeline_overview.dql +0 -23
  29. package/dist/assets/templates/dashboard/data/pipeline.csv +0 -7
  30. package/dist/assets/templates/dashboard/dql.config.json +0 -18
  31. package/dist/assets/templates/dashboard/semantic-layer/.gitkeep +0 -1
  32. package/dist/assets/templates/dql.config.reference.json +0 -154
  33. package/dist/assets/templates/duckdb-local/README.md +0 -30
  34. package/dist/assets/templates/duckdb-local/blocks/orders_by_region.dql +0 -24
  35. package/dist/assets/templates/duckdb-local/data/orders.csv +0 -7
  36. package/dist/assets/templates/duckdb-local/dql.config.json +0 -18
  37. package/dist/assets/templates/duckdb-local/semantic-layer/.gitkeep +0 -1
  38. package/dist/assets/templates/ecommerce/README.md +0 -33
  39. package/dist/assets/templates/ecommerce/blocks/repeat_rate.dql +0 -26
  40. package/dist/assets/templates/ecommerce/blocks/revenue_by_segment.dql +0 -24
  41. package/dist/assets/templates/ecommerce/dashboards/revenue_command_center.dql +0 -25
  42. package/dist/assets/templates/ecommerce/data/customers.csv +0 -11
  43. package/dist/assets/templates/ecommerce/data/funnel.csv +0 -6
  44. package/dist/assets/templates/ecommerce/data/orders.csv +0 -16
  45. package/dist/assets/templates/ecommerce/dql.config.json +0 -18
  46. package/dist/assets/templates/ecommerce/semantic-layer/cubes/customers_cube.yaml +0 -49
  47. package/dist/assets/templates/ecommerce/semantic-layer/cubes/orders_cube.yaml +0 -70
  48. package/dist/assets/templates/ecommerce/semantic-layer/dimensions/channel.yaml +0 -8
  49. package/dist/assets/templates/ecommerce/semantic-layer/dimensions/order_date.yaml +0 -9
  50. package/dist/assets/templates/ecommerce/semantic-layer/dimensions/region.yaml +0 -9
  51. package/dist/assets/templates/ecommerce/semantic-layer/dimensions/segment.yaml +0 -8
  52. package/dist/assets/templates/ecommerce/semantic-layer/hierarchies/customer_geo.yaml +0 -18
  53. package/dist/assets/templates/ecommerce/semantic-layer/metrics/avg_order_value.yaml +0 -10
  54. package/dist/assets/templates/ecommerce/semantic-layer/metrics/gmv.yaml +0 -10
  55. package/dist/assets/templates/ecommerce/semantic-layer/metrics/gross_margin.yaml +0 -10
  56. package/dist/assets/templates/ecommerce/semantic-layer/metrics/order_count.yaml +0 -10
  57. package/dist/assets/templates/ecommerce/workbooks/.gitkeep +0 -1
  58. package/dist/assets/templates/finance-kpi/README.md +0 -31
  59. package/dist/assets/templates/finance-kpi/blocks/arr_kpi.dql +0 -21
  60. package/dist/assets/templates/finance-kpi/data/revenue.csv +0 -7
  61. package/dist/assets/templates/finance-kpi/dql.config.json +0 -18
  62. package/dist/assets/templates/finance-kpi/semantic-layer/.gitkeep +0 -1
  63. package/dist/assets/templates/saas/README.md +0 -32
  64. package/dist/assets/templates/saas/blocks/churn_pressure.dql +0 -25
  65. package/dist/assets/templates/saas/blocks/revenue_by_segment.dql +0 -25
  66. package/dist/assets/templates/saas/dashboards/growth_scorecard.dql +0 -25
  67. package/dist/assets/templates/saas/data/cohorts.csv +0 -7
  68. package/dist/assets/templates/saas/data/subscriptions.csv +0 -13
  69. package/dist/assets/templates/saas/dql.config.json +0 -18
  70. package/dist/assets/templates/saas/semantic-layer/dimensions/owner_segment.yaml +0 -8
  71. package/dist/assets/templates/saas/semantic-layer/dimensions/plan_tier.yaml +0 -8
  72. package/dist/assets/templates/saas/semantic-layer/dimensions/risk_bucket.yaml +0 -9
  73. package/dist/assets/templates/saas/semantic-layer/dimensions/status.yaml +0 -8
  74. package/dist/assets/templates/saas/semantic-layer/hierarchies/account_segments.yaml +0 -18
  75. package/dist/assets/templates/saas/semantic-layer/metrics/account_count.yaml +0 -10
  76. package/dist/assets/templates/saas/semantic-layer/metrics/expansion_mrr.yaml +0 -11
  77. package/dist/assets/templates/saas/semantic-layer/metrics/mrr.yaml +0 -10
  78. package/dist/assets/templates/saas/workbooks/.gitkeep +0 -1
  79. package/dist/assets/templates/starter/README.md +0 -48
  80. package/dist/assets/templates/starter/blocks/revenue_by_segment.dql +0 -29
  81. package/dist/assets/templates/starter/blocks/revenue_trend_query_only.dql +0 -20
  82. package/dist/assets/templates/starter/dashboards/.gitkeep +0 -1
  83. package/dist/assets/templates/starter/data/revenue.csv +0 -13
  84. package/dist/assets/templates/starter/dql.config.json +0 -18
  85. package/dist/assets/templates/starter/notebooks/semantic_layer_tutorial.dqlnb +0 -60
  86. package/dist/assets/templates/starter/semantic-layer/blocks/revenue_by_segment.yaml +0 -11
  87. package/dist/assets/templates/starter/semantic-layer/cubes/revenue_cube.yaml +0 -77
  88. package/dist/assets/templates/starter/semantic-layer/dimensions/segment_tier.yaml +0 -6
  89. package/dist/assets/templates/starter/semantic-layer/hierarchies/revenue_time.yaml +0 -12
  90. package/dist/assets/templates/starter/semantic-layer/metrics/revenue.yaml +0 -7
  91. package/dist/assets/templates/starter/workbooks/.gitkeep +0 -1
  92. package/dist/assets/templates/taxi/README.md +0 -31
  93. package/dist/assets/templates/taxi/blocks/airport_mix.dql +0 -25
  94. package/dist/assets/templates/taxi/blocks/revenue_by_segment.dql +0 -24
  95. package/dist/assets/templates/taxi/dashboards/city_operations.dql +0 -25
  96. package/dist/assets/templates/taxi/data/trips.csv +0 -13
  97. package/dist/assets/templates/taxi/dql.config.json +0 -18
  98. package/dist/assets/templates/taxi/semantic-layer/.gitkeep +0 -1
  99. package/dist/assets/templates/taxi/semantic-layer/dimensions/airport_flag.yaml +0 -8
  100. package/dist/assets/templates/taxi/semantic-layer/dimensions/dropoff_borough.yaml +0 -9
  101. package/dist/assets/templates/taxi/semantic-layer/dimensions/payment_type.yaml +0 -8
  102. package/dist/assets/templates/taxi/semantic-layer/dimensions/pickup_borough.yaml +0 -9
  103. package/dist/assets/templates/taxi/semantic-layer/dimensions/pickup_date.yaml +0 -9
  104. package/dist/assets/templates/taxi/semantic-layer/hierarchies/trip_route.yaml +0 -14
  105. package/dist/assets/templates/taxi/semantic-layer/metrics/avg_trip_miles.yaml +0 -10
  106. package/dist/assets/templates/taxi/semantic-layer/metrics/total_fare.yaml +0 -10
  107. package/dist/assets/templates/taxi/semantic-layer/metrics/total_tips.yaml +0 -10
  108. package/dist/assets/templates/taxi/semantic-layer/metrics/trip_count.yaml +0 -10
  109. package/dist/assets/templates/taxi/workbooks/.gitkeep +0 -1
  110. package/dist/assets/templates/workbook/README.md +0 -30
  111. package/dist/assets/templates/workbook/blocks/.gitkeep +0 -1
  112. package/dist/assets/templates/workbook/data/finance.csv +0 -7
  113. package/dist/assets/templates/workbook/dql.config.json +0 -18
  114. package/dist/assets/templates/workbook/semantic-layer/.gitkeep +0 -1
  115. package/dist/assets/templates/workbook/workbooks/quarterly_business_review.dql +0 -32
@@ -1,10 +0,0 @@
1
- name: avg_order_value
2
- label: Average Order Value
3
- description: Average revenue per order.
4
- domain: commerce
5
- sql: AVG(order_total)
6
- type: avg
7
- table: orders
8
- tags:
9
- - revenue
10
- - commerce
@@ -1,10 +0,0 @@
1
- name: gmv
2
- label: Gross Merchandise Value
3
- description: Total order value across the commerce sample dataset.
4
- domain: commerce
5
- sql: SUM(order_total)
6
- type: sum
7
- table: orders
8
- tags:
9
- - revenue
10
- - commerce
@@ -1,10 +0,0 @@
1
- name: gross_margin
2
- label: Gross Margin
3
- description: Average gross margin percentage across orders.
4
- domain: commerce
5
- sql: AVG(gross_margin)
6
- type: avg
7
- table: orders
8
- tags:
9
- - profitability
10
- - commerce
@@ -1,10 +0,0 @@
1
- name: order_count
2
- label: Order Count
3
- description: Total number of orders.
4
- domain: commerce
5
- sql: COUNT(order_id)
6
- type: count
7
- table: orders
8
- tags:
9
- - orders
10
- - commerce
@@ -1,31 +0,0 @@
1
- # Finance KPI
2
-
3
- Smallest runnable DQL project — a single KPI block over local CSV data.
4
-
5
- ## Scaffold
6
-
7
- ```bash
8
- dql init my-project --template finance-kpi
9
- cd my-project
10
- ```
11
-
12
- ## What it demonstrates
13
-
14
- - Reusable `custom` block syntax
15
- - Local CSV-backed query execution
16
- - KPI visualization
17
- - Preview, build, and serve flow
18
-
19
- ## Run it
20
-
21
- ```bash
22
- dql doctor
23
- dql preview blocks/arr_kpi.dql --open
24
- ```
25
-
26
- ## Build it
27
-
28
- ```bash
29
- dql build blocks/arr_kpi.dql
30
- dql serve dist/arr_kpi --open
31
- ```
@@ -1,21 +0,0 @@
1
- block "ARR KPI" {
2
- domain = "finance"
3
- type = "custom"
4
- description = "Simple ARR KPI block backed by local CSV sample data"
5
- owner = "dql-example"
6
- tags = ["finance", "kpi", "local-data"]
7
-
8
- query = """
9
- SELECT SUM(amount) AS arr_total
10
- FROM read_csv_auto('./data/revenue.csv')
11
- """
12
-
13
- visualization {
14
- chart = "kpi"
15
- y = arr_total
16
- }
17
-
18
- tests {
19
- assert row_count > 0
20
- }
21
- }
@@ -1,7 +0,0 @@
1
- month,segment,amount
2
- 2026-01,Enterprise,120000
3
- 2026-01,SMB,48000
4
- 2026-02,Enterprise,132000
5
- 2026-02,SMB,51000
6
- 2026-03,Enterprise,141000
7
- 2026-03,SMB,56000
@@ -1,18 +0,0 @@
1
- {
2
- "project": "__PROJECT_NAME__",
3
- "defaultConnection": {
4
- "driver": "file",
5
- "filepath": ":memory:"
6
- },
7
- "dataDir": "./data",
8
-
9
- "semanticLayer": {
10
- "provider": "dql"
11
- },
12
-
13
- "preview": {
14
- "port": 3474,
15
- "open": true,
16
- "theme": "dark"
17
- }
18
- }
@@ -1,32 +0,0 @@
1
- # __PROJECT_NAME__
2
-
3
- This template packages a SaaS KPI sandbox focused on MRR, retention, and expansion. It covers recurring revenue tracking, churn pressure analysis, cohort retention, and semantic metrics for subscription businesses.
4
-
5
- ## Included assets
6
-
7
- - `blocks/revenue_by_segment.dql` — MRR by plan tier
8
- - `blocks/churn_pressure.dql` — at-risk and churned revenue view
9
- - `dashboards/growth_scorecard.dql` — executive SaaS KPI dashboard
10
- - `data/subscriptions.csv` — recurring revenue and expansion sample data
11
- - `data/cohorts.csv` — cohort retention snapshot
12
- - `notebooks/welcome.dqlnb` — browser notebook walkthrough
13
-
14
- ## Quick start
15
-
16
- ```bash
17
- dql doctor
18
- dql notebook
19
- dql preview blocks/revenue_by_segment.dql --open
20
- ```
21
-
22
- ## What to explore
23
-
24
- - Track MRR growth and expansion by plan tier
25
- - Identify at-risk accounts by churn pressure signals
26
- - Analyze cohort retention curves over rolling periods
27
-
28
- ## Next Steps
29
-
30
- - [Authoring Blocks](https://github.com/duckcodeailabs/dql/blob/main/docs/authoring-blocks.md) — promote your notebook queries into certified, reusable `.dql` blocks
31
- - [Semantic Layer Guide](https://github.com/duckcodeailabs/dql/blob/main/docs/semantic-layer-guide.md) — extend the included semantic layer with MRR and churn metrics
32
- - [Getting Started](https://github.com/duckcodeailabs/dql/blob/main/docs/getting-started.md) — connect to a cloud database or add DQL to an existing repo
@@ -1,25 +0,0 @@
1
- block "Churn Pressure by Segment" {
2
- domain = "saas"
3
- type = "custom"
4
- description = "MRR currently flagged as at risk or churned"
5
- tags = ["saas", "churn"]
6
- owner = "template"
7
-
8
- query = """
9
- SELECT risk_bucket, ROUND(SUM(mrr), 2) AS at_risk_mrr
10
- FROM read_csv_auto('./data/subscriptions.csv')
11
- WHERE status != 'active' OR risk_bucket IN ('high', 'critical')
12
- GROUP BY risk_bucket
13
- ORDER BY at_risk_mrr DESC
14
- """
15
-
16
- visualization {
17
- chart = "bar"
18
- x = risk_bucket
19
- y = at_risk_mrr
20
- }
21
-
22
- tests {
23
- assert row_count > 0
24
- }
25
- }
@@ -1,25 +0,0 @@
1
- block "MRR by Plan Tier" {
2
- domain = "saas"
3
- type = "custom"
4
- description = "Monthly recurring revenue by plan tier"
5
- tags = ["saas", "mrr"]
6
- owner = "template"
7
-
8
- query = """
9
- SELECT plan_tier, ROUND(SUM(mrr), 2) AS revenue
10
- FROM read_csv_auto('./data/subscriptions.csv')
11
- WHERE status = 'active'
12
- GROUP BY plan_tier
13
- ORDER BY revenue DESC
14
- """
15
-
16
- visualization {
17
- chart = "bar"
18
- x = plan_tier
19
- y = revenue
20
- }
21
-
22
- tests {
23
- assert row_count > 0
24
- }
25
- }
@@ -1,25 +0,0 @@
1
- dashboard "Growth Scorecard" {
2
- chart.kpi(
3
- SELECT ROUND(SUM(mrr), 2) AS active_mrr
4
- FROM read_csv_auto('./data/subscriptions.csv')
5
- WHERE status = 'active',
6
- metrics = ["active_mrr"],
7
- title = "Active MRR"
8
- )
9
-
10
- chart.line(
11
- SELECT cohort_month, retained_accounts
12
- FROM read_csv_auto('./data/cohorts.csv')
13
- ORDER BY cohort_month,
14
- x = cohort_month,
15
- y = retained_accounts,
16
- title = "Retained Accounts by Cohort"
17
- )
18
-
19
- chart.table(
20
- SELECT account_name, owner_segment, plan_tier, status, mrr, expansion_mrr, risk_bucket
21
- FROM read_csv_auto('./data/subscriptions.csv')
22
- ORDER BY mrr DESC,
23
- title = "Account Revenue Snapshot"
24
- )
25
- }
@@ -1,7 +0,0 @@
1
- cohort_month,starting_accounts,retained_accounts,retention_rate
2
- 2024-07,24,22,0.92
3
- 2024-08,31,27,0.87
4
- 2024-09,28,24,0.86
5
- 2024-10,34,28,0.82
6
- 2024-11,29,23,0.79
7
- 2024-12,37,28,0.76
@@ -1,13 +0,0 @@
1
- account_id,account_name,owner_segment,plan_tier,status,mrr,expansion_mrr,risk_bucket,renewal_month
2
- A-100,Acme Cloud,Enterprise,Enterprise,active,48000,6200,low,2025-06
3
- A-101,North Ridge,Mid-Market,Growth,active,18400,2400,medium,2025-05
4
- A-102,Blue Orbit,SMB,Starter,active,3400,200,low,2025-04
5
- A-103,Helio Systems,Enterprise,Enterprise,at_risk,52100,0,high,2025-03
6
- A-104,Vector Health,Mid-Market,Growth,active,19600,1800,medium,2025-08
7
- A-105,Studio Works,SMB,Starter,churned,2200,0,critical,2025-02
8
- A-106,SignalWare,Enterprise,Enterprise,active,43500,4100,low,2025-07
9
- A-107,Maple Commerce,Mid-Market,Growth,active,17100,1200,medium,2025-04
10
- A-108,Linea Labs,SMB,Starter,active,2800,0,medium,2025-06
11
- A-109,Quartz Energy,Enterprise,Enterprise,active,50300,7300,low,2025-09
12
- A-110,Summit Bio,Mid-Market,Growth,at_risk,15800,0,high,2025-03
13
- A-111,Glider Ops,SMB,Starter,active,2600,150,low,2025-05
@@ -1,18 +0,0 @@
1
- {
2
- "project": "__PROJECT_NAME__",
3
- "defaultConnection": {
4
- "driver": "file",
5
- "filepath": ":memory:"
6
- },
7
- "dataDir": "./data",
8
-
9
- "semanticLayer": {
10
- "provider": "dql"
11
- },
12
-
13
- "preview": {
14
- "port": 3474,
15
- "open": true,
16
- "theme": "dark"
17
- }
18
- }
@@ -1,8 +0,0 @@
1
- name: owner_segment
2
- label: Owner Segment
3
- description: Account owner segment (Enterprise, Mid-Market, SMB).
4
- sql: owner_segment
5
- type: string
6
- table: subscriptions
7
- tags:
8
- - saas
@@ -1,8 +0,0 @@
1
- name: plan_tier
2
- label: Plan Tier
3
- description: Subscription plan tier (Starter, Growth, Enterprise).
4
- sql: plan_tier
5
- type: string
6
- table: subscriptions
7
- tags:
8
- - saas
@@ -1,9 +0,0 @@
1
- name: risk_bucket
2
- label: Risk Bucket
3
- description: Account risk level (low, medium, high).
4
- sql: risk_bucket
5
- type: string
6
- table: subscriptions
7
- tags:
8
- - saas
9
- - risk
@@ -1,8 +0,0 @@
1
- name: status
2
- label: Account Status
3
- description: Subscription status (active, at_risk, churned).
4
- sql: status
5
- type: string
6
- table: subscriptions
7
- tags:
8
- - saas
@@ -1,18 +0,0 @@
1
- name: account_segments
2
- label: Account Segments
3
- description: Drill from owner segment to plan tier to risk bucket.
4
- domain: saas
5
- levels:
6
- - name: owner_segment
7
- label: Owner Segment
8
- dimension: owner_segment
9
- order: 1
10
- - name: plan_tier
11
- label: Plan Tier
12
- dimension: plan_tier
13
- order: 2
14
- - name: risk_bucket
15
- label: Risk Bucket
16
- dimension: risk_bucket
17
- order: 3
18
- defaultRollup: sum
@@ -1,10 +0,0 @@
1
- name: account_count
2
- label: Account Count
3
- description: Total number of accounts.
4
- domain: saas
5
- sql: COUNT(DISTINCT account_id)
6
- type: count_distinct
7
- table: subscriptions
8
- tags:
9
- - accounts
10
- - saas
@@ -1,11 +0,0 @@
1
- name: expansion_mrr
2
- label: Expansion MRR
3
- description: Additional MRR from upsells and expansions.
4
- domain: saas
5
- sql: SUM(expansion_mrr)
6
- type: sum
7
- table: subscriptions
8
- tags:
9
- - revenue
10
- - saas
11
- - growth
@@ -1,10 +0,0 @@
1
- name: mrr
2
- label: Monthly Recurring Revenue
3
- description: Monthly recurring revenue across active subscriptions.
4
- domain: saas
5
- sql: SUM(mrr)
6
- type: sum
7
- table: subscriptions
8
- tags:
9
- - revenue
10
- - saas
@@ -1,48 +0,0 @@
1
- # __PROJECT_NAME__
2
-
3
- This starter gives you a local-first DQL project that is ready for parsing,
4
- previewing, notebook exploration, and experimentation.
5
-
6
- ```text
7
- blocks/
8
- data/
9
- dql.config.json
10
- notebooks/
11
- semantic-layer/
12
- metrics/
13
- dimensions/
14
- hierarchies/
15
- ```
16
-
17
- ## Quick Start
18
-
19
- ```bash
20
- dql doctor
21
- dql notebook
22
- dql new block "Pipeline Health"
23
- dql parse blocks/pipeline_health.dql
24
- dql preview blocks/pipeline_health.dql --open
25
- dql build blocks/pipeline_health.dql
26
- dql serve dist/pipeline_health
27
- ```
28
-
29
- ## What's Included
30
-
31
- - `blocks/` — example charted and query-only DQL blocks
32
- - `data/` — sample revenue CSV for local DuckDB/file preview flows
33
- - `dql.config.json` — starter project configuration
34
- - `notebooks/welcome.dqlnb` — guided notebook walkthrough for the browser notebook
35
- - `semantic-layer/` — example metrics, dimensions, hierarchies, and companion metadata
36
-
37
- ## Adopt the Starter Safely
38
-
39
- - start in local file mode first
40
- - keep sample datasets under `data/`
41
- - run `dql doctor` before previewing if setup feels off
42
- - add tests to every reusable block
43
-
44
- ## Next Steps
45
-
46
- - [Getting Started](https://github.com/duckcodeailabs/dql/blob/main/docs/getting-started.md) — full install options, tutorials, and your first block
47
- - [Authoring Blocks](https://github.com/duckcodeailabs/dql/blob/main/docs/authoring-blocks.md) — create, validate, certify, and commit custom and semantic blocks
48
- - [Semantic Layer Guide](https://github.com/duckcodeailabs/dql/blob/main/docs/semantic-layer-guide.md) — define metrics, dimensions, and cubes in YAML
@@ -1,29 +0,0 @@
1
- block "Revenue by Segment" {
2
- domain = "revenue"
3
- type = "custom"
4
- description = "Starter block for segment revenue analysis using local CSV sample data"
5
- tags = ["starter", "revenue"]
6
- owner = "template"
7
-
8
- params {
9
- period = "current_quarter"
10
- }
11
-
12
- query = """
13
- SELECT segment_tier AS segment, SUM(amount) AS revenue
14
- FROM read_csv_auto('./data/revenue.csv')
15
- WHERE fiscal_period = ${period}
16
- GROUP BY segment_tier
17
- ORDER BY revenue DESC
18
- """
19
-
20
- visualization {
21
- chart = "bar"
22
- x = segment
23
- y = revenue
24
- }
25
-
26
- tests {
27
- assert row_count > 0
28
- }
29
- }
@@ -1,20 +0,0 @@
1
- block "Revenue Trend Query" {
2
- domain = "revenue"
3
- type = "custom"
4
- description = "Starter query-only block for monthly revenue trends using local CSV sample data"
5
- tags = ["starter", "revenue", "query-only"]
6
- owner = "template"
7
-
8
- query = """
9
- SELECT
10
- DATE_TRUNC('month', CAST(recognized_at AS DATE)) AS revenue_month,
11
- SUM(amount) AS total_revenue
12
- FROM read_csv_auto('./data/revenue.csv')
13
- GROUP BY 1
14
- ORDER BY 1
15
- """
16
-
17
- tests {
18
- assert row_count > 0
19
- }
20
- }
@@ -1,13 +0,0 @@
1
- recognized_at,segment_tier,amount,fiscal_period,fiscal_year,fiscal_quarter
2
- 2025-01-03,Enterprise,185000,current_quarter,2025,Q1
3
- 2025-01-14,Mid-Market,92000,current_quarter,2025,Q1
4
- 2025-01-25,SMB,28000,current_quarter,2025,Q1
5
- 2025-02-05,Enterprise,210000,current_quarter,2025,Q1
6
- 2025-02-09,Mid-Market,101000,current_quarter,2025,Q1
7
- 2025-02-18,SMB,31000,current_quarter,2025,Q1
8
- 2025-03-02,Enterprise,223000,current_quarter,2025,Q1
9
- 2025-03-11,Mid-Market,108000,current_quarter,2025,Q1
10
- 2025-03-19,SMB,34000,current_quarter,2025,Q1
11
- 2025-04-07,Enterprise,205000,next_quarter,2025,Q2
12
- 2025-04-16,Mid-Market,99000,next_quarter,2025,Q2
13
- 2025-04-23,SMB,29000,next_quarter,2025,Q2
@@ -1,18 +0,0 @@
1
- {
2
- "project": "__PROJECT_NAME__",
3
- "defaultConnection": {
4
- "driver": "file",
5
- "filepath": ":memory:"
6
- },
7
- "dataDir": "./data",
8
-
9
- "semanticLayer": {
10
- "provider": "dql"
11
- },
12
-
13
- "preview": {
14
- "port": 3474,
15
- "open": true,
16
- "theme": "dark"
17
- }
18
- }
@@ -1,60 +0,0 @@
1
- {
2
- "version": 1,
3
- "title": "Semantic Layer Tutorial",
4
- "cells": [
5
- {
6
- "id": "intro_1",
7
- "type": "markdown",
8
- "content": "# Semantic Layer Tutorial\n\nThis notebook walks you through setting up and using the DQL semantic layer.\n\nThe semantic layer lets you define **reusable metrics, dimensions, and hierarchies** in YAML files. Once defined, they appear in the sidebar panel and can be queried via the API.\n\n---\n\n## Prerequisites\n\nMake sure your `dql.config.json` has:\n\n```json\n\"semanticLayer\": {\n \"provider\": \"dql\"\n}\n```\n\nAnd you have YAML files in `semantic-layer/metrics/`, `semantic-layer/dimensions/`, etc."
9
- },
10
- {
11
- "id": "check_1",
12
- "type": "markdown",
13
- "content": "## Step 1: Verify your data\n\nFirst, let's make sure you have data to work with. The starter template includes `data/revenue.csv`."
14
- },
15
- {
16
- "id": "query_1",
17
- "type": "sql",
18
- "name": "preview_data",
19
- "content": "SELECT * FROM read_csv_auto('./data/revenue.csv') LIMIT 10"
20
- },
21
- {
22
- "id": "step2_md",
23
- "type": "markdown",
24
- "content": "## Step 2: Understand the YAML definitions\n\nYour `semantic-layer/` directory should contain:\n\n```\nsemantic-layer/\n├── metrics/\n│ └── revenue.yaml # SUM(amount) as total_revenue\n├── dimensions/\n│ └── segment_tier.yaml # segment_tier column\n├── hierarchies/\n│ └── revenue_time.yaml # fiscal_year → fiscal_quarter drill path\n└── cubes/\n └── revenue_cube.yaml # groups everything into one model\n```\n\n### Metric YAML format\n```yaml\nname: total_revenue\nlabel: Total Revenue\ndescription: Sum of recognized revenue\nsql: SUM(amount) # the SQL aggregate expression\ntype: sum # sum|count|count_distinct|avg|min|max\ntable: fct_revenue # which table this metric belongs to\ntags: [revenue, kpi]\n```\n\n### Dimension YAML format\n```yaml\nname: segment_tier\nlabel: Segment Tier\nsql: segment_tier # the column expression\ntype: string # string|number|date|boolean\ntable: fct_revenue\n```"
25
- },
26
- {
27
- "id": "step3_md",
28
- "type": "markdown",
29
- "content": "## Step 3: Query using semantic layer concepts\n\nYou can write SQL queries that use the same columns and aggregates defined in your semantic layer. The metric `total_revenue` is defined as `SUM(amount)` and the dimension `segment_tier` maps to the `segment_tier` column."
30
- },
31
- {
32
- "id": "query_2",
33
- "type": "sql",
34
- "name": "revenue_by_segment",
35
- "content": "-- This query mirrors the semantic layer definitions:\n-- metric: total_revenue = SUM(amount)\n-- dimension: segment_tier\nSELECT\n segment_tier,\n SUM(amount) AS total_revenue,\n COUNT(*) AS deal_count,\n AVG(amount) AS avg_deal_size\nFROM read_csv_auto('./data/revenue.csv')\nGROUP BY segment_tier\nORDER BY total_revenue DESC"
36
- },
37
- {
38
- "id": "step4_md",
39
- "type": "markdown",
40
- "content": "## Step 4: Use hierarchies for drill-down\n\nThe `revenue_time` hierarchy defines a drill path: **fiscal_year → fiscal_quarter**.\n\nStart at the top level (year), then drill into quarters."
41
- },
42
- {
43
- "id": "query_3",
44
- "type": "sql",
45
- "name": "revenue_by_year",
46
- "content": "-- Hierarchy level 1: fiscal_year\nSELECT\n fiscal_year,\n SUM(amount) AS total_revenue\nFROM read_csv_auto('./data/revenue.csv')\nGROUP BY fiscal_year\nORDER BY fiscal_year"
47
- },
48
- {
49
- "id": "query_4",
50
- "type": "sql",
51
- "name": "revenue_by_quarter",
52
- "content": "-- Hierarchy level 2: drill into fiscal_quarter\nSELECT\n fiscal_year,\n fiscal_quarter,\n SUM(amount) AS total_revenue\nFROM read_csv_auto('./data/revenue.csv')\nGROUP BY fiscal_year, fiscal_quarter\nORDER BY fiscal_year, fiscal_quarter"
53
- },
54
- {
55
- "id": "step5_md",
56
- "type": "markdown",
57
- "content": "## Step 5: Explore in the sidebar\n\nClick the **Semantic Layer icon** (3rd icon in the left activity bar) to see:\n\n- **Metrics** — your defined aggregations with type badges (sum, count, avg...)\n- **Dimensions** — grouping columns with type indicators\n- **Hierarchies** — expandable drill paths\n\nYou can search and click any item to see its details.\n\n---\n\n## What's next?\n\n### Connect to dbt\nIf you have a dbt project with `semantic_models`, update `dql.config.json`:\n```json\n\"semanticLayer\": {\n \"provider\": \"dbt\",\n \"projectPath\": \"/path/to/your/dbt-project\"\n}\n```\n\n### Connect to Cube.js\n```json\n\"semanticLayer\": {\n \"provider\": \"cubejs\",\n \"projectPath\": \"/path/to/your/cube-project\"\n}\n```\n\n### Use cubes for multi-table models\nCreate `semantic-layer/cubes/my_cube.yaml` to define measures, dimensions, time dimensions, and joins all in one file. See the Reference panel (Help icon) for the full YAML format.\n\n### Full reference\nClick the **Help icon** (bottom of sidebar) → **Semantic Layer** and **Semantic Layer Providers** sections for complete YAML formats and config examples."
58
- }
59
- ]
60
- }
@@ -1,11 +0,0 @@
1
- name: revenue_by_segment
2
- block: revenue_by_segment
3
- domain: revenue
4
- description: Optional companion metadata for the starter block
5
- tags:
6
- - revenue
7
- - starter
8
- semanticMappings:
9
- segment: segment_tier
10
- revenue: total_revenue
11
- reviewStatus: draft