Business-aware
Connect business concepts and relationships to metrics, calculations, and source data.
Explore business meaningdatus init --datasource snowflakeA workspace for teams, a complete data Agent, and semantic execution grounded in an open specification. Datus brings them together around your business context.
A shared workspace for Agent-driven data engineering.
A complete data Agent for engineering and analysis.
Execute compatible Ossie definitions as native SQL.
An open, vendor-neutral semantic modeling specification.
Connect business concepts and relationships to metrics, calculations, and source data.
Explore business meaningWork with Datus Agent in Studio, or bring context and execution into your own agent workflows.
Explore Agent workflowsReview definitions, inspect generated SQL, and trace results back to their source.
Explore execution evidenceDevelop data systems, create visual analysis, and answer business questions from one shared business context.
Use Datus Agent in Studio to explore data, develop and debug SQL, build semantic models, and inspect results in one workspace.
Explore Datus AgentBuild dashboards that respond to filters, or publish reports that preserve reviewed findings. Refine both with Datus Agent in Studio.
Explore Datus StudioUse configured MCP connections to ask questions in ChatGPT, Claude, or another compatible client, grounded in your team’s definitions.
Explore MCP connectionsReview definitions, inspect DOSI’s native SQL, and check the sources and calculations behind a report.
northstar_premier.yamlReview examplename: return_handling expression: >- SUM(returns.processing_cost_cents)
name: return_handling expression: >- SUM(returns.processing_cost_cents*0.01)
Semantic Hub · review fixture. Approve and Merge only change this preview.
customers.customer_idcustomers.full_namecustomers.customer_margincustomers.customer_orderscustomers.customer_return_ratecustomers.customer_premier = trueApache OssieInput from the recorded Northstar compilation. Inspect the requested fields and model; no live validation runs here.
northstar_premier.sqlCompiler output · excerptSELECT customers.customer_id AS customer_id, customers.full_name AS full_name, CASE WHEN COALESCE(f0.fixed_order_count, 0) > 0 THEN COALESCE(f1.fixed_booked_revenue, 0) - COALESCE(f2.fixed_refund_amount, 0) - COALESCE(f3.fixed_product_cost, 0) + COALESCE(f4.fixed_recovered_product_cost, 0) - COALESCE(f5.fixed_outbound_shipping, 0) - COALESCE(f3.fixed_payment_fees, 0) - COALESCE(f4.fixed_return_handling, 0) END AS customer_margin, COALESCE(COALESCE(f0.fixed_order_count, 0), -- …
SELECT
customers.customer_id AS customer_id,
customers.full_name AS full_name,
CASE WHEN COALESCE(f0.fixed_order_count,
0) > 0 THEN COALESCE(f1.fixed_booked_revenue,
0) - COALESCE(f2.fixed_refund_amount,
0) - COALESCE(f3.fixed_product_cost,
0) + COALESCE(f4.fixed_recovered_product_cost,
0) - COALESCE(f5.fixed_outbound_shipping,
0) - COALESCE(f3.fixed_payment_fees,
0) - COALESCE(f4.fixed_return_handling,
0) END AS customer_margin,
COALESCE(COALESCE(f0.fixed_order_count,
0),
0) AS customer_orders,
COALESCE(COALESCE(f0.fixed_returned_order_count,
0),
0) * 1.0 / NULLIF(COALESCE(f0.fixed_order_count,
0),
0) AS customer_return_rate
FROM crm.dim_customer AS customers
LEFT JOIN (SELECT
orders.customer_id AS customer_id,
COUNT(DISTINCT orders.order_id) AS fixed_order_count,
COUNT(DISTINCT CASE WHEN orders.is_returned THEN orders.order_id END) AS fixed_returned_order_count
FROM (SELECT
o.*
FROM commerce.fct_orders AS o JOIN crm.dim_customer AS c USING (customer_id)
WHERE o.status = 'delivered' AND NOT o.is_test AND o.delivered_at >= CAST('2025-09-20' AS DATE) AND o.delivered_at < CAST('2026-09-20' AS DATE) AND NOT c.is_employee AND c.identity_status = 'resolved' AND EXISTS(SELECT
1
FROM commerce.fct_order_lines AS l
WHERE l.order_id = o.order_id AND l.delivered_qty > 0)) AS orders
GROUP BY orders.customer_id) AS f0
ON customers.customer_id = f0.customer_id
LEFT JOIN (SELECT
customers.customer_id AS customer_id,
SUM((lines.gross_sales_cents - lines.discount_cents) * 0.01) AS fixed_booked_revenue
FROM (SELECT
l.*
FROM commerce.fct_order_lines AS l JOIN commerce.fct_orders AS o
ON l.order_id = o.order_id JOIN crm.dim_customer AS c
ON o.customer_id = c.customer_id
WHERE o.status = 'delivered' AND NOT o.is_test AND o.delivered_at >= CAST('2025-09-20' AS DATE) AND o.delivered_at < CAST('2026-09-20' AS DATE) AND NOT c.is_employee AND c.identity_status = 'resolved' AND l.delivered_qty > 0) AS lines
LEFT JOIN (SELECT
o.*
FROM commerce.fct_orders AS o JOIN crm.dim_customer AS c USING (customer_id)
WHERE o.status = 'delivered' AND NOT o.is_test AND o.delivered_at >= CAST('2025-09-20' AS DATE) AND o.delivered_at < CAST('2026-09-20' AS DATE) AND NOT c.is_employee AND c.identity_status = 'resolved' AND EXISTS(SELECT
1
FROM commerce.fct_order_lines AS l
WHERE l.order_id = o.order_id AND l.delivered_qty > 0)) AS orders
ON lines.order_id = orders.order_id
LEFT JOIN crm.dim_customer AS customers
ON orders.customer_id = customers.customer_id
GROUP BY customers.customer_id) AS f1
ON customers.customer_id = f1.customer_id
LEFT JOIN (SELECT
refunds.customer_id AS customer_id,
SUM(refunds.merchandise_refund_cents * 0.01) AS fixed_refund_amount
FROM (SELECT
a.*,
o.customer_id AS customer_id
FROM finance.fct_refund_events AS a JOIN commerce.fct_order_lines AS l
ON a.order_line_id = l.order_line_id JOIN commerce.fct_orders AS o
ON l.order_id = o.order_id JOIN crm.dim_customer AS c
ON o.customer_id = c.customer_id
WHERE o.status = 'delivered' AND NOT o.is_test AND o.delivered_at >= CAST('2025-09-20' AS DATE) AND o.delivered_at < CAST('2026-09-20' AS DATE) AND NOT c.is_employee AND c.identity_status = 'resolved' AND l.delivered_qty > 0 AND a.status = 'posted' AND a.posted_at < CAST('2026-10-20' AS DATE)) AS refunds
GROUP BY refunds.customer_id) AS f2
ON customers.customer_id = f2.customer_id
LEFT JOIN (SELECT
customers.customer_id AS customer_id,
SUM(line_costs.cogs_cents * 0.01) AS fixed_product_cost,
SUM(line_costs.payment_fee_cents * 0.01) AS fixed_payment_fees
FROM (SELECT
a.*
FROM finance.fct_order_line_costs AS a JOIN commerce.fct_order_lines AS l
ON a.order_line_id = l.order_line_id JOIN commerce.fct_orders AS o
ON l.order_id = o.order_id JOIN crm.dim_customer AS c
ON o.customer_id = c.customer_id
WHERE o.status = 'delivered' AND NOT o.is_test AND o.delivered_at >= CAST('2025-09-20' AS DATE) AND o.delivered_at < CAST('2026-09-20' AS DATE) AND NOT c.is_employee AND c.identity_status = 'resolved' AND l.delivered_qty > 0) AS line_costs
LEFT JOIN (SELECT
l.*
FROM commerce.fct_order_lines AS l JOIN commerce.fct_orders AS o
ON l.order_id = o.order_id JOIN crm.dim_customer AS c
ON o.customer_id = c.customer_id
WHERE o.status = 'delivered' AND NOT o.is_test AND o.delivered_at >= CAST('2025-09-20' AS DATE) AND o.delivered_at < CAST('2026-09-20' AS DATE) AND NOT c.is_employee AND c.identity_status = 'resolved' AND l.delivered_qty > 0) AS lines
ON line_costs.order_line_id = lines.order_line_id
LEFT JOIN (SELECT
o.*
FROM commerce.fct_orders AS o JOIN crm.dim_customer AS c USING (customer_id)
WHERE o.status = 'delivered' AND NOT o.is_test AND o.delivered_at >= CAST('2025-09-20' AS DATE) AND o.delivered_at < CAST('2026-09-20' AS DATE) AND NOT c.is_employee AND c.identity_status = 'resolved' AND EXISTS(SELECT
1
FROM commerce.fct_order_lines AS l
WHERE l.order_id = o.order_id AND l.delivered_qty > 0)) AS orders
ON lines.order_id = orders.order_id
LEFT JOIN crm.dim_customer AS customers
ON orders.customer_id = customers.customer_id
GROUP BY customers.customer_id) AS f3
ON customers.customer_id = f3.customer_id
LEFT JOIN (SELECT
customers.customer_id AS customer_id,
SUM(returns.recoverable_cogs_credit_cents * 0.01) AS fixed_recovered_product_cost,
SUM(returns.processing_cost_cents * 0.01) AS fixed_return_handling
FROM (SELECT
a.*
FROM returns.fct_return_events AS a JOIN commerce.fct_order_lines AS l
ON a.order_line_id = l.order_line_id JOIN commerce.fct_orders AS o
ON l.order_id = o.order_id JOIN crm.dim_customer AS c
ON o.customer_id = c.customer_id
WHERE o.status = 'delivered' AND NOT o.is_test AND o.delivered_at >= CAST('2025-09-20' AS DATE) AND o.delivered_at < CAST('2026-09-20' AS DATE) AND NOT c.is_employee AND c.identity_status = 'resolved' AND l.delivered_qty > 0 AND a.status = 'received' AND a.received_at < CAST('2026-10-20' AS DATE)) AS returns
LEFT JOIN (SELECT
l.*
FROM commerce.fct_order_lines AS l JOIN commerce.fct_orders AS o
ON l.order_id = o.order_id JOIN crm.dim_customer AS c
ON o.customer_id = c.customer_id
WHERE o.status = 'delivered' AND NOT o.is_test AND o.delivered_at >= CAST('2025-09-20' AS DATE) AND o.delivered_at < CAST('2026-09-20' AS DATE) AND NOT c.is_employee AND c.identity_status = 'resolved' AND l.delivered_qty > 0) AS lines
ON returns.order_line_id = lines.order_line_id
LEFT JOIN (SELECT
o.*
FROM commerce.fct_orders AS o JOIN crm.dim_customer AS c USING (customer_id)
WHERE o.status = 'delivered' AND NOT o.is_test AND o.delivered_at >= CAST('2025-09-20' AS DATE) AND o.delivered_at < CAST('2026-09-20' AS DATE) AND NOT c.is_employee AND c.identity_status = 'resolved' AND EXISTS(SELECT
1
FROM commerce.fct_order_lines AS l
WHERE l.order_id = o.order_id AND l.delivered_qty > 0)) AS orders
ON lines.order_id = orders.order_id
LEFT JOIN crm.dim_customer AS customers
ON orders.customer_id = customers.customer_id
GROUP BY customers.customer_id) AS f4
ON customers.customer_id = f4.customer_id
LEFT JOIN (SELECT
customers.customer_id AS customer_id,
SUM(deliveries.shipping_cost_cents * 0.01) AS fixed_outbound_shipping
FROM (SELECT
d.*
FROM logistics.fct_order_logistics AS d JOIN commerce.fct_orders AS o USING (order_id) JOIN crm.dim_customer AS c USING (customer_id)
WHERE o.status = 'delivered' AND NOT o.is_test AND o.delivered_at >= CAST('2025-09-20' AS DATE) AND o.delivered_at < CAST('2026-09-20' AS DATE) AND NOT c.is_employee AND c.identity_status = 'resolved') AS deliveries
LEFT JOIN (SELECT
o.*
FROM commerce.fct_orders AS o JOIN crm.dim_customer AS c USING (customer_id)
WHERE o.status = 'delivered' AND NOT o.is_test AND o.delivered_at >= CAST('2025-09-20' AS DATE) AND o.delivered_at < CAST('2026-09-20' AS DATE) AND NOT c.is_employee AND c.identity_status = 'resolved' AND EXISTS(SELECT
1
FROM commerce.fct_order_lines AS l
WHERE l.order_id = o.order_id AND l.delivered_qty > 0)) AS orders
ON deliveries.order_id = orders.order_id
LEFT JOIN crm.dim_customer AS customers
ON orders.customer_id = customers.customer_id
GROUP BY customers.customer_id) AS f5
ON customers.customer_id = f5.customer_id
WHERE (COALESCE((CASE WHEN COALESCE(f0.fixed_order_count,
0) > 0 THEN COALESCE(f1.fixed_booked_revenue,
0) - COALESCE(f2.fixed_refund_amount,
0) - COALESCE(f3.fixed_product_cost,
0) + COALESCE(f4.fixed_recovered_product_cost,
0) - COALESCE(f5.fixed_outbound_shipping,
0) - COALESCE(f3.fixed_payment_fees,
0) - COALESCE(f4.fixed_return_handling,
0) END) >= 3000 AND COALESCE(f0.fixed_order_count,
0) >= 6 AND (COALESCE(COALESCE(f0.fixed_returned_order_count,
0),
0) * 1.0 / NULLIF(COALESCE(f0.fixed_order_count,
0),
0)) <= 0.20,
FALSE)) = TRUE
LIMIT 10000Recorded DOSI compiler output · DuckDB. No query runs in this preview.
customers.customer_premier = trueNorthstar · recorded results and model definitions. This report does not run a query.
Start with the knowledge already present in your data systems. Datus Agent helps turn it into connected models that teams can review, execute, and improve.
Apache Ossie is an open, vendor-neutral specification for semantic models. DOSI makes compatible Ossie definitions executable as native SQL.
Keep business meaning in reviewable Ossie files. Convert supported existing models, then validate and execute them with DOSI on the data source you choose.
Define datasets, relationships, dimensions, and metrics in reviewable files.
Validate supported definitions, plan the request, and generate native SQL.
Run on the selected supported source; inspect the SQL and returned results.
Apache Ossie (incubating) is an open specification. DOSI is a compatible runtime distributed under Elastic License 2.0.

Connect customers, orders, returns, and fulfillment with a reviewed margin definition. Agents can investigate channel performance; teams can trace the calculation back to costs and source records.
Which channels generate margin after returns and fulfillment costs?

Connect merchants, payments, disputes, and settlements with reviewed balance definitions. Agents can help investigate differences; finance teams can inspect query logic and trace the result to transactions.
Which merchants have unsettled balances after refunds, disputes, and fees?

Connect suppliers, work orders, and shipments with reviewed delivery definitions. Agents can help investigate exceptions; operations teams can inspect the rules and underlying production records.
Which orders missed promised dates, and which production lines or suppliers were involved?
The relationships, boundaries, and choices behind shared business context.
Open refers to inspectable, reusable definitions based on the Apache Ossie specification and supported interfaces that work with your stack. DOSI uses Elastic License 2.0. The datus-agent project is open-source; these are different licensing models.
Ontology expresses business concepts, roles, and relationships. A semantic layer defines metrics, dimensions, calculations, and mappings to source data. Datus connects them so teams and agents can relate business meaning to the definitions behind a query.
DOSI turns compatible definitions into native SQL for the selected supported data source. Its adapters and interfaces determine the execution path. Reusing definitions across sources does not imply automatic cross-warehouse federation.
Inspect the model and its source mappings, trace lineage, review generated SQL, and validate the returned data. Supported validation and planning checks expose execution constraints; teams still review business meaning and source-data quality.
Studio is the workspace for collaborative Agent-driven data work. Datus Agent is a complete data Agent for engineering and analysis. DOSI is the semantic execution module and can also be used independently through its supported interfaces.
How Datus Agent, Studio, and DOSI turn reviewed business definitions into calculations teams can inspect.
Read the articleWhy AI agents need shared metric definitions and business relationships to work together.
Read the articleFive ways to give AI agents business context, from semantic layers to knowledge graphs.
Read the article