@bonnard/cli 0.1.13 → 0.2.1
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.
- package/dist/bin/bon.mjs +305 -620
- package/dist/bin/validate-DEh1XQnH.mjs +365 -0
- package/dist/docs/_index.md +1 -1
- package/dist/docs/topics/cubes.data-source.md +2 -2
- package/dist/docs/topics/cubes.dimensions.format.md +2 -2
- package/dist/docs/topics/cubes.dimensions.md +2 -2
- package/dist/docs/topics/cubes.dimensions.primary-key.md +2 -2
- package/dist/docs/topics/cubes.dimensions.sub-query.md +2 -2
- package/dist/docs/topics/cubes.dimensions.time.md +2 -2
- package/dist/docs/topics/cubes.dimensions.types.md +2 -2
- package/dist/docs/topics/cubes.extends.md +2 -2
- package/dist/docs/topics/cubes.hierarchies.md +2 -2
- package/dist/docs/topics/cubes.joins.md +2 -2
- package/dist/docs/topics/cubes.md +2 -2
- package/dist/docs/topics/cubes.measures.calculated.md +2 -2
- package/dist/docs/topics/cubes.measures.drill-members.md +2 -2
- package/dist/docs/topics/cubes.measures.filters.md +2 -2
- package/dist/docs/topics/cubes.measures.format.md +21 -2
- package/dist/docs/topics/cubes.measures.md +2 -2
- package/dist/docs/topics/cubes.measures.rolling.md +2 -2
- package/dist/docs/topics/cubes.measures.types.md +2 -2
- package/dist/docs/topics/cubes.public.md +2 -2
- package/dist/docs/topics/cubes.refresh-key.md +2 -2
- package/dist/docs/topics/cubes.segments.md +2 -2
- package/dist/docs/topics/cubes.sql.md +2 -2
- package/dist/docs/topics/features.catalog.md +31 -0
- package/dist/docs/topics/features.cli.md +59 -0
- package/dist/docs/topics/features.context-graph.md +18 -0
- package/dist/docs/topics/features.governance.md +84 -0
- package/dist/docs/topics/features.mcp.md +48 -0
- package/dist/docs/topics/features.md +15 -0
- package/dist/docs/topics/features.sdk.md +53 -0
- package/dist/docs/topics/features.semantic-layer.md +50 -0
- package/dist/docs/topics/features.slack-teams.md +18 -0
- package/dist/docs/topics/getting-started.md +2 -143
- package/dist/docs/topics/pre-aggregations.md +2 -2
- package/dist/docs/topics/pre-aggregations.rollup.md +2 -2
- package/dist/docs/topics/syntax.context-variables.md +2 -2
- package/dist/docs/topics/syntax.md +2 -2
- package/dist/docs/topics/syntax.references.md +2 -2
- package/dist/docs/topics/views.cubes.md +2 -2
- package/dist/docs/topics/views.folders.md +2 -2
- package/dist/docs/topics/views.includes.md +2 -2
- package/dist/docs/topics/views.md +2 -2
- package/dist/docs/topics/workflow.deploy.md +79 -14
- package/dist/docs/topics/workflow.mcp.md +19 -13
- package/dist/docs/topics/workflow.md +25 -8
- package/dist/docs/topics/workflow.query.md +2 -2
- package/dist/docs/topics/workflow.validate.md +4 -31
- package/dist/templates/claude/skills/bonnard-get-started/SKILL.md +16 -26
- package/dist/templates/cursor/rules/bonnard-get-started.mdc +16 -26
- package/dist/templates/shared/bonnard.md +31 -6
- package/package.json +4 -8
- package/dist/bin/validate-DiN3DaTl.mjs +0 -110
- /package/dist/bin/{cubes-De1_2_YJ.mjs → cubes-Bf0IPYd7.mjs} +0 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# CLI
|
|
2
|
+
|
|
3
|
+
> Built for agent-first development by data engineers.
|
|
4
|
+
|
|
5
|
+
The Bonnard CLI (`bon`) takes you from zero to a deployed semantic layer in minutes. Initialize a project, connect your warehouse, define metrics in YAML, validate locally, and deploy — all from your terminal or your AI coding agent.
|
|
6
|
+
|
|
7
|
+
## Agent-ready from the start
|
|
8
|
+
|
|
9
|
+
`bon init` generates context files for your AI coding tools automatically:
|
|
10
|
+
|
|
11
|
+
- **Claude Code** — `.claude/rules/` + get-started skill
|
|
12
|
+
- **Cursor** — `.cursor/rules/` with auto-apply frontmatter
|
|
13
|
+
- **Codex** — `AGENTS.md` + skills folder
|
|
14
|
+
|
|
15
|
+
Your agent understands Bonnard's modeling language from the first prompt.
|
|
16
|
+
|
|
17
|
+
## Key commands
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
bon init # Scaffold project + agent context
|
|
21
|
+
bon datasource add --demo # Add a demo warehouse instantly
|
|
22
|
+
bon datasource add --from-dbt # Import connections from dbt
|
|
23
|
+
bon validate # Check YAML syntax
|
|
24
|
+
bon deploy -m "description" # Ship to production (message required)
|
|
25
|
+
bon query '{"measures":["orders.count"]}' # Test your semantic layer
|
|
26
|
+
bon deployments # List deployment history
|
|
27
|
+
bon diff <id> # View changes in a deployment
|
|
28
|
+
bon annotate <id> --data '{...}' # Add context to deployment changes
|
|
29
|
+
bon mcp # Get MCP setup instructions
|
|
30
|
+
bon docs cubes.measures # Read modeling docs in terminal
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## CI/CD ready
|
|
34
|
+
|
|
35
|
+
Deploy from GitHub Actions, GitLab CI, or any pipeline:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
bon deploy --ci --push-datasources -m "CI deploy"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Non-interactive mode with automatic datasource sync. Fails fast if anything is misconfigured.
|
|
42
|
+
|
|
43
|
+
## Deployment versioning
|
|
44
|
+
|
|
45
|
+
Every deploy creates a versioned deployment with automatic change detection — added, modified, removed, and breaking changes are flagged. Review history with `bon deployments`, inspect changes with `bon diff`, and add context with `bon annotate`.
|
|
46
|
+
|
|
47
|
+
## Built-in documentation
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
bon docs cubes.measures # Read modeling docs in your terminal
|
|
51
|
+
bon docs --search "joins" # Search across all topics
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
No context-switching. Learn and build in the same workflow.
|
|
55
|
+
|
|
56
|
+
## See Also
|
|
57
|
+
|
|
58
|
+
- [workflow.deploy](workflow.deploy) — Deployment details
|
|
59
|
+
- [workflow.validate](workflow.validate) — Validation reference
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Context Graph (Coming Soon)
|
|
2
|
+
|
|
3
|
+
> Visualize how your metrics connect. Coming soon.
|
|
4
|
+
|
|
5
|
+
The Business Context Graph will provide an interactive visual map of your entire semantic layer — cubes, views, joins, and field dependencies — so you can understand impact before making changes.
|
|
6
|
+
|
|
7
|
+
## Planned capabilities
|
|
8
|
+
|
|
9
|
+
- **Relationship visualization** — See how cubes connect through joins and shared dimensions
|
|
10
|
+
- **Impact analysis** — Understand which views and measures are affected when you change a cube
|
|
11
|
+
- **Field lineage** — Trace any metric back through its dependencies to the source table
|
|
12
|
+
- **Search and filter** — Navigate large models by searching for specific fields or cubes
|
|
13
|
+
|
|
14
|
+
## Why it matters
|
|
15
|
+
|
|
16
|
+
As your semantic layer grows, understanding the relationships between dozens of cubes and hundreds of fields becomes critical. The Context Graph gives your team a shared mental model of how metrics are defined and connected — reducing errors and speeding up development.
|
|
17
|
+
|
|
18
|
+
Interested in early access? Reach out at [hello@bonnard.dev](mailto:hello@bonnard.dev).
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Governance
|
|
2
|
+
|
|
3
|
+
> User and group-level permissions for your semantic layer.
|
|
4
|
+
|
|
5
|
+
Bonnard supports declarative data access policies — define who can see which rows, columns, and views directly in your YAML models. No application code, no database-level workarounds.
|
|
6
|
+
|
|
7
|
+
## Row-level security
|
|
8
|
+
|
|
9
|
+
Filter data based on user attributes. A sales manager only sees their region's data:
|
|
10
|
+
|
|
11
|
+
```yaml
|
|
12
|
+
cubes:
|
|
13
|
+
- name: orders
|
|
14
|
+
access_policy:
|
|
15
|
+
- role: sales_manager
|
|
16
|
+
row_level:
|
|
17
|
+
filters:
|
|
18
|
+
- member: region
|
|
19
|
+
operator: equals
|
|
20
|
+
values: ["{ securityContext.region }"]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Every query from that user automatically includes the filter — no way to bypass it.
|
|
24
|
+
|
|
25
|
+
## Member-level security
|
|
26
|
+
|
|
27
|
+
Control which measures and dimensions each role can access. Hide sensitive fields from non-privileged users:
|
|
28
|
+
|
|
29
|
+
```yaml
|
|
30
|
+
cubes:
|
|
31
|
+
- name: orders
|
|
32
|
+
access_policy:
|
|
33
|
+
- role: analyst
|
|
34
|
+
member_level:
|
|
35
|
+
includes:
|
|
36
|
+
- count
|
|
37
|
+
- total_revenue
|
|
38
|
+
- status
|
|
39
|
+
- created_at
|
|
40
|
+
|
|
41
|
+
- role: admin
|
|
42
|
+
member_level:
|
|
43
|
+
includes: "*"
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Roles without a matching policy see nothing.
|
|
47
|
+
|
|
48
|
+
## View-based governance
|
|
49
|
+
|
|
50
|
+
Keep cubes private. Expose only curated views to consumers:
|
|
51
|
+
|
|
52
|
+
```yaml
|
|
53
|
+
cubes:
|
|
54
|
+
- name: raw_orders
|
|
55
|
+
public: false
|
|
56
|
+
|
|
57
|
+
views:
|
|
58
|
+
- name: sales_overview
|
|
59
|
+
public: true
|
|
60
|
+
cubes:
|
|
61
|
+
- join_path: raw_orders
|
|
62
|
+
includes:
|
|
63
|
+
- revenue
|
|
64
|
+
- order_count
|
|
65
|
+
- status
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Business users, AI agents, and SDK consumers only see the views you choose to expose — with clean names and descriptions.
|
|
69
|
+
|
|
70
|
+
## Dynamic visibility
|
|
71
|
+
|
|
72
|
+
Use context variables to show or hide entire cubes based on the user's role:
|
|
73
|
+
|
|
74
|
+
```yaml
|
|
75
|
+
cubes:
|
|
76
|
+
- name: executive_metrics
|
|
77
|
+
public: "{{ 'true' if COMPILE_CONTEXT.role == 'executive' else 'false' }}"
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## See Also
|
|
81
|
+
|
|
82
|
+
- [cubes.public](cubes.public) — Visibility controls reference
|
|
83
|
+
- [views](views) — Creating curated data views
|
|
84
|
+
- [syntax.context-variables](syntax.context-variables) — Context variable reference
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# MCP
|
|
2
|
+
|
|
3
|
+
> Connect your preferred AI agent to your semantic layer.
|
|
4
|
+
|
|
5
|
+
Bonnard exposes your semantic layer as a remote MCP server. Add one URL to your agent platform and it can explore your data model, run queries, and render charts — all through the Model Context Protocol.
|
|
6
|
+
|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
## Connect your agent
|
|
10
|
+
|
|
11
|
+
Bonnard works with any MCP-compatible client:
|
|
12
|
+
|
|
13
|
+
- **Claude Desktop** — Add as a custom connector
|
|
14
|
+
- **ChatGPT** — Add via Settings > Apps (Pro/Plus)
|
|
15
|
+
- **Cursor** — Add via Settings > MCP or `.cursor/mcp.json`
|
|
16
|
+
- **Microsoft Copilot Studio** — Add as an MCP tool with OAuth 2.0 authentication
|
|
17
|
+
- **VS Code / GitHub Copilot** — Add via Command Palette or `.vscode/mcp.json`
|
|
18
|
+
- **Claude Code** — Add via `claude mcp add` or `.mcp.json`
|
|
19
|
+
- **Windsurf** — Add via MCP config
|
|
20
|
+
- **Gemini CLI** — Add via `.gemini/settings.json`
|
|
21
|
+
|
|
22
|
+
One URL for all of them:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
https://mcp.bonnard.dev/mcp
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
On first use, your browser opens to sign in — the agent receives a 30-day token automatically. No API keys, no config files, no secrets to rotate.
|
|
29
|
+
|
|
30
|
+
## Tools your agent gets
|
|
31
|
+
|
|
32
|
+
| Tool | What it does |
|
|
33
|
+
|------|-------------|
|
|
34
|
+
| `explore_schema` | Browse cubes, views, and fields — or search by keyword |
|
|
35
|
+
| `query` | Run structured queries with measures, dimensions, filters, and time grouping |
|
|
36
|
+
| `sql_query` | Execute raw SQL for complex analysis (CTEs, UNIONs, custom calculations) |
|
|
37
|
+
| `describe_field` | Inspect any field's SQL definition, type, format, and dependencies |
|
|
38
|
+
| `visualize` | Render line, bar, pie, and KPI charts directly inside the conversation |
|
|
39
|
+
|
|
40
|
+
## Charts in chat
|
|
41
|
+
|
|
42
|
+
The `visualize` tool renders interactive charts inline — auto-detected from your query shape. Charts support dark mode, currency and percentage formatting, and multi-series data.
|
|
43
|
+
|
|
44
|
+
Ask "show me revenue by region this quarter" and get a formatted chart in your conversation, not a data dump.
|
|
45
|
+
|
|
46
|
+
## See Also
|
|
47
|
+
|
|
48
|
+
- [workflow.mcp](workflow.mcp) — Step-by-step setup for each platform
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Features
|
|
2
|
+
|
|
3
|
+
> Everything you need to define, deploy, and query your semantic layer.
|
|
4
|
+
|
|
5
|
+
Bonnard is a semantic layer platform built for AI-first analytics. Define your metrics once in YAML, deploy in seconds, and query from anywhere — your IDE, your AI agent, or your own apps.
|
|
6
|
+
|
|
7
|
+
- **[MCP](features.mcp)** — Connect your preferred AI agent to your semantic layer
|
|
8
|
+
- **[CLI](features.cli)** — Agent-first development workflow for data engineers
|
|
9
|
+
- **[Semantic Layer](features.semantic-layer)** — Hosted, queryable metrics layer across all your warehouses
|
|
10
|
+
- **[Catalog](features.catalog)** — Browse and understand your data model from the browser
|
|
11
|
+
- **[SDK](features.sdk)** — Build custom data apps on top of Bonnard
|
|
12
|
+
- **[Governance](features.governance)** — User and group-level permissions for your data
|
|
13
|
+
- **[Context Graph](features.context-graph)** — Visual map of how your metrics connect (coming soon)
|
|
14
|
+
- **[Slack & Teams](features.slack-teams)** — AI agents in your team chat (coming soon)
|
|
15
|
+
- **[Deployment Versioning](workflow.deploy)** — Change detection, diff, and annotations for every deploy
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# SDK
|
|
2
|
+
|
|
3
|
+
> Build custom data apps on top of your semantic layer.
|
|
4
|
+
|
|
5
|
+
The Bonnard SDK (`@bonnard/sdk`) is a lightweight TypeScript client for querying your deployed semantic layer programmatically. Build dashboards, embedded analytics, internal tools, or data pipelines — all backed by your governed metrics.
|
|
6
|
+
|
|
7
|
+
## Quick start
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @bonnard/sdk
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { createClient } from '@bonnard/sdk';
|
|
15
|
+
|
|
16
|
+
const bonnard = createClient({
|
|
17
|
+
apiKey: 'your-api-key',
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
const result = await bonnard.query({
|
|
21
|
+
cube: 'orders',
|
|
22
|
+
measures: ['revenue', 'count'],
|
|
23
|
+
dimensions: ['status'],
|
|
24
|
+
timeDimension: {
|
|
25
|
+
dimension: 'created_at',
|
|
26
|
+
granularity: 'month',
|
|
27
|
+
dateRange: ['2025-01-01', '2025-12-31'],
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Type-safe queries
|
|
33
|
+
|
|
34
|
+
Full TypeScript support with inference. Measures, dimensions, filters, time dimensions, and sort orders are all typed. Query results include field annotations with titles and types.
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
const result = await bonnard.sql<OrderRow>(
|
|
38
|
+
`SELECT status, MEASURE(revenue) FROM orders GROUP BY 1`
|
|
39
|
+
);
|
|
40
|
+
// result.data is OrderRow[]
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## What you can build
|
|
44
|
+
|
|
45
|
+
- **Custom dashboards** — Query your semantic layer from Next.js, React, or any frontend
|
|
46
|
+
- **Embedded analytics** — Add governed metrics to your product
|
|
47
|
+
- **Data pipelines** — Consume semantic layer data in ETL workflows
|
|
48
|
+
- **Internal tools** — Build admin panels backed by consistent metrics
|
|
49
|
+
|
|
50
|
+
## See Also
|
|
51
|
+
|
|
52
|
+
- [features.semantic-layer](features.semantic-layer) — Platform overview
|
|
53
|
+
- [workflow.query](workflow.query) — Query format reference
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Semantic Layer
|
|
2
|
+
|
|
3
|
+
> Define metrics once. Query from anywhere.
|
|
4
|
+
|
|
5
|
+
Bonnard hosts your semantic layer so you don't have to. Define cubes and views in YAML, deploy with `bon deploy`, and query via JSON API, SQL, or MCP — no infrastructure to manage.
|
|
6
|
+
|
|
7
|
+
## Multi-warehouse
|
|
8
|
+
|
|
9
|
+
Connect any combination of warehouses through a single semantic layer:
|
|
10
|
+
|
|
11
|
+
- **PostgreSQL** — Direct TCP connection
|
|
12
|
+
- **Snowflake** — Account-based authentication
|
|
13
|
+
- **BigQuery** — GCP service account
|
|
14
|
+
- **Databricks** — Token-based workspace connection
|
|
15
|
+
|
|
16
|
+
Metrics from different warehouses are queried through the same API. Your consumers never need to know where the data lives.
|
|
17
|
+
|
|
18
|
+
## Two query formats
|
|
19
|
+
|
|
20
|
+
**JSON API** — Structured queries with type-safe parameters:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
bon query '{
|
|
24
|
+
"measures": ["orders.revenue"],
|
|
25
|
+
"dimensions": ["orders.status"],
|
|
26
|
+
"timeDimensions": [{
|
|
27
|
+
"dimension": "orders.created_at",
|
|
28
|
+
"granularity": "month",
|
|
29
|
+
"dateRange": ["2025-01-01", "2025-12-31"]
|
|
30
|
+
}]
|
|
31
|
+
}'
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**SQL** — Full Cube SQL syntax for complex analysis:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
bon query --sql "SELECT status, MEASURE(revenue) FROM orders GROUP BY 1"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Fully managed
|
|
41
|
+
|
|
42
|
+
Your models are stored securely and served from Bonnard's infrastructure. Each organization gets isolated query execution scoped by JWT — no shared data, no noisy neighbors.
|
|
43
|
+
|
|
44
|
+
Deploy in seconds. Query in milliseconds.
|
|
45
|
+
|
|
46
|
+
## See Also
|
|
47
|
+
|
|
48
|
+
- [workflow.query](workflow.query) — Query format reference
|
|
49
|
+
- [cubes](cubes) — Cube modeling guide
|
|
50
|
+
- [views](views) — View modeling guide
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Slack & Teams (Coming Soon)
|
|
2
|
+
|
|
3
|
+
> AI agents in your team chat. Coming soon.
|
|
4
|
+
|
|
5
|
+
Bonnard will bring semantic layer queries directly into Slack and Microsoft Teams — so anyone on your team can ask questions about data without leaving the conversation.
|
|
6
|
+
|
|
7
|
+
## Planned capabilities
|
|
8
|
+
|
|
9
|
+
- **Natural language queries** — Ask "what was revenue last month?" in a channel and get an answer with a chart
|
|
10
|
+
- **Governed responses** — Every answer goes through your semantic layer, so metrics are always consistent
|
|
11
|
+
- **Shared context** — Results posted in channels are visible to the whole team, not siloed in individual AI chats
|
|
12
|
+
- **Proactive alerts** — Get notified when key metrics change beyond thresholds you define
|
|
13
|
+
|
|
14
|
+
## Why it matters
|
|
15
|
+
|
|
16
|
+
Your team already lives in Slack and Teams. Instead of asking analysts or switching to a BI tool, anyone can get instant, governed answers right where they work. The same semantic layer that powers your AI agents and dashboards powers your team chat.
|
|
17
|
+
|
|
18
|
+
Interested in early access? Reach out at [hello@bonnard.dev](mailto:hello@bonnard.dev).
|
|
@@ -1,153 +1,12 @@
|
|
|
1
1
|
# Getting Started
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> Install the Bonnard CLI, connect your data warehouse, and define your first semantic layer with cubes and views in under five minutes.
|
|
4
4
|
|
|
5
5
|
## What is Bonnard?
|
|
6
6
|
|
|
7
7
|
Bonnard is a semantic layer platform that sits between your data warehouse and your consumers (BI tools, AI agents, applications). You define your metrics and dimensions once in YAML, then query them through a consistent API.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- **Node.js 18+** — [Install Node.js](https://nodejs.org)
|
|
12
|
-
- **A data warehouse** — PostgreSQL, Snowflake, BigQuery, or Databricks (or use our demo dataset)
|
|
13
|
-
- **A Bonnard account** — [Sign up at app.bonnard.dev](https://app.bonnard.dev)
|
|
14
|
-
|
|
15
|
-
## Install the CLI
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
npm install -g @bonnard/cli
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
Verify the installation:
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
bon --version
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Log in
|
|
28
|
-
|
|
29
|
-
Authenticate with your Bonnard account:
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
bon login
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
This opens your browser to complete authentication. Once done, verify with:
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
bon whoami
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## Initialize a project
|
|
42
|
-
|
|
43
|
-
Navigate to your project directory and run:
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
bon init
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
This creates the project structure:
|
|
50
|
-
|
|
51
|
-
```
|
|
52
|
-
my-project/
|
|
53
|
-
├── bon.yaml # Project configuration
|
|
54
|
-
├── bonnard/
|
|
55
|
-
│ ├── cubes/ # Cube definitions (measures + dimensions)
|
|
56
|
-
│ └── views/ # View definitions (curated interfaces)
|
|
57
|
-
└── .bon/ # Local config (gitignored)
|
|
58
|
-
└── datasources.yaml
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
If you have an existing dbt project, `bon init` will detect it and set up your agent context accordingly.
|
|
62
|
-
|
|
63
|
-
## Connect a data source
|
|
64
|
-
|
|
65
|
-
Add your warehouse connection:
|
|
66
|
-
|
|
67
|
-
```bash
|
|
68
|
-
bon datasource add
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
Follow the interactive prompts to configure your connection. If you use dbt, you can import from your profiles:
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
bon datasource add --from-dbt
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
**No warehouse yet?** Use our demo dataset — a read-only retail database (Contoso) with sales, products, stores, and customer data:
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
bon datasource add --demo
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
Test the connection:
|
|
84
|
-
|
|
85
|
-
```bash
|
|
86
|
-
bon datasource test contoso_demo
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
## Create your first cube
|
|
90
|
-
|
|
91
|
-
Create a file at `bonnard/cubes/sales.yaml` (using the demo dataset — adapt table and column names to your own data):
|
|
92
|
-
|
|
93
|
-
```yaml
|
|
94
|
-
cubes:
|
|
95
|
-
- name: sales
|
|
96
|
-
sql_table: contoso.fact_sales
|
|
97
|
-
data_source: contoso_demo
|
|
98
|
-
|
|
99
|
-
measures:
|
|
100
|
-
- name: count
|
|
101
|
-
type: count
|
|
102
|
-
|
|
103
|
-
- name: total_revenue
|
|
104
|
-
type: sum
|
|
105
|
-
sql: sales_amount
|
|
106
|
-
|
|
107
|
-
dimensions:
|
|
108
|
-
- name: sales_key
|
|
109
|
-
type: number
|
|
110
|
-
sql: sales_key
|
|
111
|
-
primary_key: true
|
|
112
|
-
|
|
113
|
-
- name: date
|
|
114
|
-
type: time
|
|
115
|
-
sql: date_key
|
|
116
|
-
|
|
117
|
-
- name: sales_quantity
|
|
118
|
-
type: number
|
|
119
|
-
sql: sales_quantity
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
## Validate
|
|
123
|
-
|
|
124
|
-
Check your cubes and views for errors:
|
|
125
|
-
|
|
126
|
-
```bash
|
|
127
|
-
bon validate
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
## Deploy
|
|
131
|
-
|
|
132
|
-
Push your semantic layer to Bonnard:
|
|
133
|
-
|
|
134
|
-
```bash
|
|
135
|
-
bon deploy
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
## Query
|
|
139
|
-
|
|
140
|
-
Test your deployed semantic layer:
|
|
141
|
-
|
|
142
|
-
```bash
|
|
143
|
-
bon query '{"measures": ["sales.count"]}'
|
|
144
|
-
|
|
145
|
-
# With a dimension
|
|
146
|
-
bon query '{"measures": ["sales.total_revenue"], "dimensions": ["sales.date"]}'
|
|
147
|
-
|
|
148
|
-
# Or use SQL format
|
|
149
|
-
bon query --sql "SELECT MEASURE(total_revenue) FROM sales"
|
|
150
|
-
```
|
|
9
|
+
<GettingStartedSteps />
|
|
151
10
|
|
|
152
11
|
## Next steps
|
|
153
12
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Pre-Aggregations
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> Pre-aggregations materialize query results into summary tables for faster analytics performance. Define rollups to speed up dashboards, AI agent queries, and API responses.
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Rollups
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> Rollups are pre-aggregation tables that store summarized data for high-performance queries. Define which measures and dimensions to materialize, and Bonnard generates and refreshes them automatically.
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Context Variables
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> Context variables give you access to runtime information inside SQL expressions. Use them to implement row-level security, multi-tenancy, dynamic date ranges, and environment-specific logic.
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# References
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> References let you point to columns, measures, dimensions, and other cubes inside SQL expressions. Use curly-brace syntax to create type-safe, refactor-friendly cross-cube references.
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# View Cubes
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> The cubes property in a view selects which cubes and members to expose. Pick specific measures and dimensions from multiple cubes to create focused, consumer-ready interfaces.
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# View Folders
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> Folders organize a view's measures and dimensions into logical groups. Use folders to structure large views so consumers can navigate fields by category instead of a flat list.
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# View Includes
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> The includes and excludes properties control which cube members appear in a view. Include everything from a cube and selectively exclude fields, or cherry-pick specific members.
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Views
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> Views compose measures and dimensions from multiple cubes into focused, consumer-friendly interfaces. Use views to expose curated data to BI tools, AI agents, and applications.
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|