<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>datahashi — blog</title><description>Notes on governed semantic layers, from the people building datahashi.</description><link>https://datahashi.com/</link><item><title>Grounding a support copilot in certified customer health metrics</title><link>https://datahashi.com/blog/2026-10-30-support-copilot-customer-health/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-30-support-copilot-customer-health/</guid><description>How a support copilot answers an account-health question from certified metrics, with sample schema, model and queries that separate ticket volume from open critical escalations.</description><pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/support-copilot-customer-health.png"/><category>Agents &amp; MCP</category><category>agents</category><category>customer-success</category><category>mcp</category><category>filtering</category></item><item><title>Self-hosting regulated AI agents without leaking warehouse credentials</title><link>https://datahashi.com/blog/2026-10-29-self-hosted-regulated-agents/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-29-self-hosted-regulated-agents/</guid><description>How a healthcare compliance team gave LLM agents access to clinical treatment analytics inside a private VPC without exposing database passwords.</description><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/self-hosted-regulated-agents.png"/><category>Agents &amp; MCP</category><category>agents</category><category>security</category><category>self-hosted</category><category>mcp</category></item><item><title>How to survive warehouse schema changes without breaking dashboards</title><link>https://datahashi.com/blog/2026-10-28-schema-change-without-breaking-dashboards/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-28-schema-change-without-breaking-dashboards/</guid><description>Upstream dbt jobs renamed an invoice column to amount_usd, but central semantic mapping and model tests kept dashboards running without a blip.</description><pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/schema-change-without-breaking-dashboards.png"/><category>Governance &amp; trust</category><category>migrations</category><category>schema-drift</category><category>model-tests</category><category>lineage</category></item><item><title>Why marketing CAC and ROAS never matched finance</title><link>https://datahashi.com/blog/2026-10-27-marketing-cac-roas-match-finance/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-27-marketing-cac-roas-match-finance/</guid><description>How governed derived metrics and transparent lineage unify customer acquisition cost and return on ad spend across marketing channels and finance.</description><pubDate>Tue, 27 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/marketing-cac-roas-match-finance.png"/><category>Modeling &amp; metrics</category><category>metrics</category><category>marketing</category><category>lineage</category><category>cac</category></item><item><title>Serve a morning dashboard from rollups, not raw scans</title><link>https://datahashi.com/blog/2026-10-26-rollups-cut-warehouse-bill/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-26-rollups-cut-warehouse-bill/</guid><description>How pre-aggregation rollups serve morning executive dashboard queries from pre-computed tables rather than scanning raw transaction tables.</description><pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/rollups-cut-warehouse-bill.png"/><category>Querying</category><category>rollups</category><category>pre-aggregation</category><category>warehouse-costs</category><category>performance</category></item><item><title>Multi-tenant customer dashboards: row-level policy isolation</title><link>https://datahashi.com/blog/2026-10-25-multi-tenant-customer-dashboards/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-25-multi-tenant-customer-dashboards/</guid><description>How platform engineers secure embedded customer dashboards using JWT claims, row-level policies, and query metering in a thin semantic layer.</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/multi-tenant-customer-dashboards.png"/><category>Governance &amp; trust</category><category>multi-tenant</category><category>rls</category><category>jwt</category><category>security</category></item><item><title>E-commerce category tree revenue: safe hierarchical rollups</title><link>https://datahashi.com/blog/2026-10-24-ecommerce-category-tree-revenue/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-24-ecommerce-category-tree-revenue/</guid><description>How retail merchandisers drill down SKU, category, and department revenue without fan-out bugs in a thin semantic layer.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/ecommerce-category-tree-revenue.png"/><category>Modeling &amp; metrics</category><category>hierarchies</category><category>fan-out</category><category>ecommerce</category><category>merchandising</category></item><item><title>SaaS activation and retention without 14 CTEs</title><link>https://datahashi.com/blog/2026-10-23-saas-activation-retention/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-23-saas-activation-retention/</guid><description>How product managers analyze SaaS user activation and weekly retention across entity join graphs in a thin semantic layer.</description><pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/saas-activation-retention.png"/><category>Modeling &amp; metrics</category><category>retention</category><category>activation</category><category>entities</category><category>time-grains</category></item><item><title>Slack bot weekly results: certified metrics for operations</title><link>https://datahashi.com/blog/2026-10-22-slack-bot-weekly-results/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-22-slack-bot-weekly-results/</guid><description>How operations teams connect Slack bots to certified metrics using Model Context Protocol and query time zones in a thin semantic layer.</description><pubDate>Thu, 22 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/slack-bot-weekly-results.png"/><category>Agents &amp; MCP</category><category>mcp</category><category>slack-bot</category><category>time-zones</category><category>operations</category></item><item><title>Finance close: one ARR across board decks and dashboards</title><link>https://datahashi.com/blog/2026-10-21-finance-close-one-arr/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-21-finance-close-one-arr/</guid><description>How semi-additive snapshot measures and model tests keep ARR balances consistent across reporting tools in a thin semantic layer.</description><pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/finance-close-one-arr.png"/><category>Modeling &amp; metrics</category><category>arr</category><category>semi-additive</category><category>model-tests</category><category>finance</category></item><item><title>BigQuery least privilege for agents</title><link>https://datahashi.com/blog/2026-10-10-bigquery-least-privilege-agents/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-10-bigquery-least-privilege-agents/</guid><description>Apply BigQuery least privilege so agent-backed semantic serving never needs broad project roles or warehouse passwords in the agent.</description><pubDate>Sat, 10 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/bigquery-least-privilege-agents.png"/><category>Warehouses &amp; setup</category><category>bigquery</category><category>warehouse</category></item><item><title>Snowflake read-only roles for a semantic layer</title><link>https://datahashi.com/blog/2026-10-09-snowflake-readonly-semantic-layer/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-09-snowflake-readonly-semantic-layer/</guid><description>A semantic layer on Snowflake is only as safe as the role that runs its queries. datahashi&apos;s expected posture is least-privilege, read-only roles for query execution.</description><pubDate>Fri, 09 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/snowflake-readonly-semantic-layer.png"/><category>Warehouses &amp; setup</category><category>snowflake</category><category>warehouse</category></item><item><title>DuckDB sandbox: first metric in five minutes</title><link>https://datahashi.com/blog/2026-10-08-duckdb-sandbox-first-metric/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-08-duckdb-sandbox-first-metric/</guid><description>Stand up a DuckDB sandbox, publish one certified metric, and query it from the console and MCP without a cloud warehouse.</description><pubDate>Thu, 08 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/duckdb-sandbox-first-metric.png"/><category>Warehouses &amp; setup</category><category>duckdb</category><category>tutorial</category></item><item><title>Eval harness: agent vs dashboard same-number tests</title><link>https://datahashi.com/blog/2026-10-07-eval-harness-same-number/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-07-eval-harness-same-number/</guid><description>Create an eval harness that asserts agent answers match dashboard numbers for the same metric requests.</description><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/eval-harness-same-number.png"/><category>Governance &amp; trust</category><category>agents</category><category>eval</category><category>governance</category></item><item><title>MCP auth: agents never hold warehouse passwords</title><link>https://datahashi.com/blog/2026-10-06-mcp-auth-no-warehouse-passwords/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-06-mcp-auth-no-warehouse-passwords/</guid><description>Set up MCP auth so agents never hold warehouse passwords - credentials stay server-side behind the semantic layer.</description><pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/mcp-auth-no-warehouse-passwords.png"/><category>Governance &amp; trust</category><category>mcp</category><category>auth</category><category>security</category></item><item><title>Grounding copilots on governed metrics</title><link>https://datahashi.com/blog/2026-10-05-grounding-copilots-governed-metrics/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-05-grounding-copilots-governed-metrics/</guid><description>Ground copilots on certified metrics so natural-language answers inherit governance instead of table dumps.</description><pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/grounding-copilots-governed-metrics.png"/><category>Agents &amp; MCP</category><category>agents</category><category>copilots</category><category>mcp</category></item><item><title>Agent wrong numbers: five failure modes</title><link>https://datahashi.com/blog/2026-10-04-agent-wrong-numbers-five-modes/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-04-agent-wrong-numbers-five-modes/</guid><description>A composite war story — five failure modes that show up when agents get put on metrics before the rails are ready, and how a governed path changes the ending.</description><pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/agent-wrong-numbers-five-modes.png"/><category>Agents &amp; MCP</category><category>agents</category><category>war-story</category></item><item><title>Designing MCP tools agents cannot misuse</title><link>https://datahashi.com/blog/2026-10-03-designing-safe-mcp-tools/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-03-designing-safe-mcp-tools/</guid><description>MCP makes it easy to expose too much. datahashi treats MCP tool design as safety engineering — small verbs, strict schemas, fail-closed validation.</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/designing-safe-mcp-tools.png"/><category>Agents &amp; MCP</category><category>mcp</category><category>agents</category></item><item><title>Connect Cursor to governed metrics via MCP</title><link>https://datahashi.com/blog/2026-10-02-connect-cursor-mcp-metrics/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-02-connect-cursor-mcp-metrics/</guid><description>Connect Cursor to governed metrics over MCP — catalog discovery and typed queries for coding agents, without raw warehouse access.</description><pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/connect-cursor-mcp-metrics.png"/><category>Agents &amp; MCP</category><category>mcp</category><category>cursor</category></item><item><title>MCP for warehouse data without raw table access</title><link>https://datahashi.com/blog/2026-10-01-mcp-without-raw-table-access/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-10-01-mcp-without-raw-table-access/</guid><description>How agents can query governed metrics through MCP without seeing raw warehouse tables or writing SQL.</description><pubDate>Thu, 01 Oct 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/mcp-without-raw-table-access.png"/><category>Agents &amp; MCP</category><category>mcp</category><category>agents</category></item><item><title>Prove two consumers return the same number</title><link>https://datahashi.com/blog/2026-09-30-prove-two-consumers-same-number/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-30-prove-two-consumers-same-number/</guid><description>Run a practical same-number test between two consumers (dashboard and agent) against one metric request.</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/prove-two-consumers-same-number.png"/><category>Governance &amp; trust</category><category>governance</category><category>tutorial</category><category>agents</category></item><item><title>Limits, defaults, and agent-safe query shapes</title><link>https://datahashi.com/blog/2026-09-29-agent-safe-query-defaults/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-29-agent-safe-query-defaults/</guid><description>Agents ask for everything by default. datahashi ships agent-safe limits so the first query an agent runs is already bounded, typed, and reviewable.</description><pubDate>Tue, 29 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/agent-safe-query-defaults.png"/><category>Agents &amp; MCP</category><category>agents</category><category>querying</category></item><item><title>Reading compiled SQL to debug wrong answers</title><link>https://datahashi.com/blog/2026-09-28-reading-compiled-sql-debug/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-28-reading-compiled-sql-debug/</guid><description>When a semantic query returns a number that feels wrong, read the compiled SQL. datahashi exposes it from `run_semantic_query` so you can see exactly how names became joins and filters.</description><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/reading-compiled-sql-debug.png"/><category>Querying</category><category>querying</category><category>debugging</category></item><item><title>Rollups: answer hot questions without the warehouse</title><link>https://datahashi.com/blog/2026-09-27-rollups-hot-questions/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-27-rollups-hot-questions/</guid><description>Rollups now ship in datahashi, hosted and self-hosted. Declare one in YAML, and the engine builds it through your Query Runner and answers matching queries from it - with the limits stated up front.</description><pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/rollups-hot-questions.png"/><category>Querying</category><category>querying</category><category>performance</category></item><item><title>Filters that compose safely</title><link>https://datahashi.com/blog/2026-09-26-filters-that-compose-safely/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-26-filters-that-compose-safely/</guid><description>Two filters interacting should narrow a result, not rewrite the metric. How datahashi treats filter composition as a first-class part of every semantic query.</description><pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/filters-that-compose-safely.png"/><category>Querying</category><category>querying</category><category>filters</category></item><item><title>How semantic queries become SQL</title><link>https://datahashi.com/blog/2026-09-25-how-semantic-queries-become-sql/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-25-how-semantic-queries-become-sql/</guid><description>A semantic query names metrics and dimensions; the warehouse still speaks SQL. Here&apos;s how datahashi compiles one into SQL you can inspect and trust.</description><pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/how-semantic-queries-become-sql.png"/><category>Querying</category><category>querying</category><category>sql</category></item><item><title>Semantic Query 101: metrics × dimensions × filters</title><link>https://datahashi.com/blog/2026-09-24-semantic-query-101/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-24-semantic-query-101/</guid><description>Introduce the semantic query triad so any consumer can ask the same question the same way.</description><pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/semantic-query-101.png"/><category>Querying</category><category>querying</category><category>tutorial</category><category>semantic-layer</category></item><item><title>Derived metrics without double counting</title><link>https://datahashi.com/blog/2026-09-23-derived-metrics-without-double-counting/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-23-derived-metrics-without-double-counting/</guid><description>Derived metrics compose other metrics, not raw columns — get the expansion order wrong and a ratio silently double-counts. Here&apos;s how datahashi keeps composition honest.</description><pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/derived-metrics-without-double-counting.png"/><category>Modeling &amp; metrics</category><category>metrics</category><category>modeling</category></item><item><title>Entities and relationships in the semantic model</title><link>https://datahashi.com/blog/2026-09-22-entities-relationships-semantic-model/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-22-entities-relationships-semantic-model/</guid><description>Metrics sit on entities. Relationships tell the layer how to join without letting every consumer reinvent the graph.</description><pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/entities-relationships-semantic-model.png"/><category>Modeling &amp; metrics</category><category>modeling</category><category>semantic-layer</category></item><item><title>Time grains and asymmetric aggregates</title><link>https://datahashi.com/blog/2026-09-21-time-grains-asymmetric-aggregates/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-21-time-grains-asymmetric-aggregates/</guid><description>Time grain is part of the metric contract. Some aggregates roll cleanly across grains. Others do not, and agents need to know the difference.</description><pubDate>Mon, 21 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/time-grains-asymmetric-aggregates.png"/><category>Modeling &amp; metrics</category><category>metrics</category><category>time</category></item><item><title>Additive vs non-additive metrics</title><link>https://datahashi.com/blog/2026-09-20-additive-vs-non-additive-metrics/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-20-additive-vs-non-additive-metrics/</guid><description>Why some metrics can be summed across dimensions and time, and why others must never be.</description><pubDate>Sun, 20 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/additive-vs-non-additive-metrics.png"/><category>Modeling &amp; metrics</category><category>metrics</category><category>modeling</category></item><item><title>Fan-out-safe metrics explained</title><link>https://datahashi.com/blog/2026-09-19-fan-out-safe-metrics-explained/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-19-fan-out-safe-metrics-explained/</guid><description>What fan-out risk looks like in metric queries and how to keep aggregates correct.</description><pubDate>Sat, 19 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/fan-out-safe-metrics-explained.png"/><category>Modeling &amp; metrics</category><category>metrics</category><category>modeling</category></item><item><title>Dimensions that do not explode joins</title><link>https://datahashi.com/blog/2026-09-18-dimensions-without-exploding-joins/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-18-dimensions-without-exploding-joins/</guid><description>How to model dimensions so metric grain stays correct and joins do not multiply rows.</description><pubDate>Fri, 18 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/dimensions-without-exploding-joins.png"/><category>Modeling &amp; metrics</category><category>metrics</category><category>modeling</category></item><item><title>Your first metric: name it, do not hand-write SQL</title><link>https://datahashi.com/blog/2026-09-17-first-metric-name-it/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-17-first-metric-name-it/</guid><description>Walk through defining a first certified metric by name and measure without pasting hand-written SQL into the agent path.</description><pubDate>Thu, 17 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/first-metric-name-it.png"/><category>Modeling &amp; metrics</category><category>metrics</category><category>tutorial</category><category>modeling</category></item><item><title>Thin layer, thick warehouse: what not to copy</title><link>https://datahashi.com/blog/2026-09-16-thin-layer-thick-warehouse/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-16-thin-layer-thick-warehouse/</guid><description>What belongs in your warehouse versus your semantic layer, and why copying logic into both creates drift.</description><pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/thin-layer-thick-warehouse.png"/><category>Strategy &amp; comparisons</category><category>semantic-layer</category><category>warehouse</category></item><item><title>Metric contracts: the same-number test</title><link>https://datahashi.com/blog/2026-09-15-metric-contracts-same-number-test/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-15-metric-contracts-same-number-test/</guid><description>A metric contract is a shared definition you can test. If two consumers disagree on the number, the contract failed.</description><pubDate>Tue, 15 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/metric-contracts-same-number-test.png"/><category>Governance &amp; trust</category><category>governance</category><category>metrics</category></item><item><title>The engine never opens your warehouse</title><link>https://datahashi.com/blog/2026-09-14-the-engine-never-opens-your-warehouse/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-14-the-engine-never-opens-your-warehouse/</guid><description>Why datahashi stopped holding warehouse passwords — compile and execute are different jobs, and agents make the wrong trust boundary expensive.</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/the-engine-never-opens-your-warehouse.png"/><category>Governance &amp; trust</category><category>architecture</category><category>security</category><category>query-runner</category></item><item><title>Why LLMs invent joins (and how to stop them)</title><link>https://datahashi.com/blog/2026-09-14-why-llms-invent-joins/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-14-why-llms-invent-joins/</guid><description>Explain why models invent joins from schemas and how governed metrics remove join invention from the agent loop.</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/why-llms-invent-joins.png"/><category>Agents &amp; MCP</category><category>agents</category><category>llm</category><category>semantic-layer</category></item><item><title>One request shape for every consumer</title><link>https://datahashi.com/blog/2026-09-13-one-request-shape-every-consumer/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-13-one-request-shape-every-consumer/</guid><description>Dashboards, APIs, and agents should ask for metrics the same way. One structured request shape keeps definitions stable and tooling simple.</description><pubDate>Sun, 13 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/one-request-shape-every-consumer.png"/><category>Querying</category><category>semantic-layer</category><category>api</category></item><item><title>Semantic layer vs dbt models vs BI cubes</title><link>https://datahashi.com/blog/2026-09-12-semantic-layer-vs-dbt-vs-cubes/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-12-semantic-layer-vs-dbt-vs-cubes/</guid><description>Compare dbt models, BI cubes, and a serving semantic layer so you know what each owns and why agents need a request-shaped contract on top.</description><pubDate>Sat, 12 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/semantic-layer-vs-dbt-vs-cubes.png"/><category>Strategy &amp; comparisons</category><category>semantic-layer</category><category>dbt</category><category>bi</category></item><item><title>What is a semantic layer (and why agents need one)</title><link>https://datahashi.com/blog/2026-09-11-what-is-a-semantic-layer-for-agents/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-11-what-is-a-semantic-layer-for-agents/</guid><description>A semantic layer gives agents stable metric definitions, governed access, and one query shape so AI systems stop inventing their own numbers.</description><pubDate>Fri, 11 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/what-is-a-semantic-layer-for-agents.png"/><category>Agents &amp; MCP</category><category>semantic-layer</category><category>agents</category></item><item><title>From BI-only semantic layer to agent-ready serving</title><link>https://datahashi.com/blog/2026-09-10-bi-semantic-to-agent-ready/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-10-bi-semantic-to-agent-ready/</guid><description>How to move from a BI-only semantic layer to agent-ready serving without rewriting every dashboard.</description><pubDate>Thu, 10 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/bi-semantic-to-agent-ready.png"/><category>Strategy &amp; comparisons</category><category>bi</category><category>agents</category><category>semantic-layer</category></item><item><title>Querying the semantic layer via REST</title><link>https://datahashi.com/blog/2026-09-09-querying-via-rest/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-09-querying-via-rest/</guid><description>Call the semantic layer over REST with a metrics × dimensions × filters payload and read certified results - conceptual request and response shapes.</description><pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/querying-via-rest.png"/><category>Querying</category><category>api</category><category>querying</category><category>rest</category></item><item><title>Multi-tool MCP chaos: one revenue definition</title><link>https://datahashi.com/blog/2026-09-08-multi-tool-mcp-one-revenue/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-08-multi-tool-mcp-one-revenue/</guid><description>A composite war story about conflicting revenue answers across MCP tools and how one certified metric restored trust.</description><pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/multi-tool-mcp-one-revenue.png"/><category>Agents &amp; MCP</category><category>mcp</category><category>agents</category><category>war-story</category></item><item><title>Postgres or MySQL as a starter warehouse</title><link>https://datahashi.com/blog/2026-09-07-postgres-mysql-starter-warehouse/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-07-postgres-mysql-starter-warehouse/</guid><description>Use Postgres or MySQL as a starter warehouse for a thin semantic layer, then move to Snowflake or BigQuery without rewriting consumers.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/postgres-mysql-starter-warehouse.png"/><category>Warehouses &amp; setup</category><category>warehouse</category><category>tutorial</category><category>postgres</category></item><item><title>Modeling revenue so agents cannot break it</title><link>https://datahashi.com/blog/2026-09-06-modeling-revenue-agent-safe/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-06-modeling-revenue-agent-safe/</guid><description>How to define revenue as a certified metric with clear grain, filters, and guardrails so agents and humans get the same number.</description><pubDate>Sun, 06 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/modeling-revenue-agent-safe.png"/><category>Modeling &amp; metrics</category><category>metrics</category><category>modeling</category><category>agents</category></item><item><title>When you do not need a semantic layer yet</title><link>https://datahashi.com/blog/2026-09-05-when-you-dont-need-a-semantic-layer/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-05-when-you-dont-need-a-semantic-layer/</guid><description>Honest signals for postponing a semantic layer versus when agent and multi-consumer chaos makes one urgent.</description><pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/when-you-dont-need-a-semantic-layer.png"/><category>Strategy &amp; comparisons</category><category>semantic-layer</category><category>strategy</category></item><item><title>Audit trails for agent answers</title><link>https://datahashi.com/blog/2026-09-04-audit-trails-agent-answers/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-04-audit-trails-agent-answers/</guid><description>Implement audit trails for agent answers tied to metric requests so compliance can replay who asked what.</description><pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/audit-trails-agent-answers.png"/><category>Governance &amp; trust</category><category>governance</category><category>agents</category><category>audit</category></item><item><title>Build an internal data agent on certified metrics</title><link>https://datahashi.com/blog/2026-09-03-internal-data-agent-certified-metrics/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-03-internal-data-agent-certified-metrics/</guid><description>Build an internal data agent that only answers from certified metrics via MCP, with a clear eval for same-number trust.</description><pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/internal-data-agent-certified-metrics.png"/><category>Agents &amp; MCP</category><category>mcp</category><category>agents</category><category>tutorial</category></item><item><title>Semantic layer vs warehouse-native semantics</title><link>https://datahashi.com/blog/2026-09-02-vs-warehouse-native-semantics/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-02-vs-warehouse-native-semantics/</guid><description>Contrast vendor-native semantic features with a portable serving layer that works across warehouses and agent tooling.</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/vs-warehouse-native-semantics.png"/><category>Strategy &amp; comparisons</category><category>semantic-layer</category><category>warehouse</category></item><item><title>Claude + MCP: certified metrics only</title><link>https://datahashi.com/blog/2026-09-01-claude-mcp-certified-metrics/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-09-01-claude-mcp-certified-metrics/</guid><description>Configure Claude with MCP tools that only return certified metrics, keeping free-form SQL out of the loop.</description><pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/claude-mcp-certified-metrics.png"/><category>Agents &amp; MCP</category><category>mcp</category><category>agents</category><category>claude</category></item><item><title>Every query is metered</title><link>https://datahashi.com/blog/2026-02-18-metering-every-query/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-02-18-metering-every-query/</guid><description>datahashi records what each query scanned, so &quot;what did this tenant cost&quot; is one endpoint away — not a data-warehouse billing archaeology project.</description><pubDate>Wed, 18 Feb 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/metering-every-query.png"/><category>Governance &amp; trust</category><category>governance</category><category>metering</category></item><item><title>Introducing datahashi</title><link>https://datahashi.com/blog/2026-01-15-introducing-datahashi/</link><guid isPermaLink="true">https://datahashi.com/blog/2026-01-15-introducing-datahashi/</guid><description>Same metric for humans and AI agents — without hallucinated SQL. A governed semantic layer you author as YAML, publish as an immutable artifact, and query over REST or MCP.</description><pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate><media:thumbnail url="https://datahashi.com/images/blog/4x3/introducing-datahashi.png"/><category>Strategy &amp; comparisons</category><category>announcement</category><category>semantic-layer</category><category>agents</category><category>mcp</category></item></channel></rss>