<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Metabase | Business Intelligence, Dashboards, and Data Visualization</title>
    <description>Metabase is the easy, open-source way for everyone to ask questions and learn from data.</description>
    <link>https://www.metabase.com/</link>
    <atom:link href="https://www.metabase.com/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Thu, 16 Apr 2026 00:37:19 +0000</pubDate>
    <lastBuildDate>Thu, 16 Apr 2026 00:37:19 +0000</lastBuildDate>
    <generator>Jekyll v4.3.3</generator>
    
      <item>
        <title>Meet Repro-Bot, our GitHub issue triage agent</title>
        <description>&lt;p&gt;Reproducing bug reports is one of the most time-consuming parts of maintaining an open source project. We built an AI agent called Repro-Bot to help us with this task. In this post, we’re sharing how we built it and show you how you can build your own. If you want to skip ahead and check out our code, &lt;a href=&quot;https://github.com/metabase/repro-bot&quot;&gt;take a look at the Repro-Bot repo&lt;/a&gt;!&lt;/p&gt;

&lt;h2 id=&quot;repro-bot-automates-the-boring-parts&quot;&gt;Repro-Bot automates the boring parts&lt;/h2&gt;

&lt;p&gt;Think about how you, a human person, would reproduce a bug report:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Set up an environment identical (or at least similar) to what the reporter has.&lt;/li&gt;
  &lt;li&gt;Follow the steps provided in the issue.&lt;/li&gt;
  &lt;li&gt;If you can reproduce the bug:
    &lt;ul&gt;
      &lt;li&gt;Write a test for the bug&lt;/li&gt;
      &lt;li&gt;Fix it&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;If you can’t reproduce, think through why:
    &lt;ul&gt;
      &lt;li&gt;Is there information missing?&lt;/li&gt;
      &lt;li&gt;Are there any hidden dependencies?&lt;/li&gt;
      &lt;li&gt;Did anything change recently?&lt;/li&gt;
      &lt;li&gt;etc&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This process is a mix of judgement calls (like ”fix it,” or what constitutes a relevant change), and chores like setting up the environment, following the steps, and asking the same questions over and over.&lt;/p&gt;

&lt;p&gt;Repro-Bot automates the boring parts and gets us started on fixing the issue.&lt;/p&gt;

&lt;h3 id=&quot;results-repro-steps-findings-possible-root-cause&quot;&gt;Results: repro steps, findings, possible root cause&lt;/h3&gt;

&lt;p&gt;As Repro-Bot attempts to repro an issue, it generates a report with its findings, a pointer to where in the code the bug probably occurs, etc.. For example, here is the first part of its output for &lt;a href=&quot;https://github.com/metabase/metabase/issues/68802&quot;&gt;this issue about disappearing percentages on some pie charts&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;../images/posts/engineering-2026/reprobot-repro.png&quot; alt=&quot;Repro-Bot reproducing an issue with a summary and reproduction steps&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This information helps us respond to the person who reported the issue faster and get more details from them while it’s still fresh in their mind. We’ve also cleared out a number of issues from our backlog that Repro-Bot confirmed we had already fixed.&lt;/p&gt;

&lt;p&gt;Of course, Repro-Bot isn’t infallible. Sometimes it can’t repro an issue. Sometimes it thinks it has reproduced a bug when it hasn’t. But even in those cases, Repro-Bot’s reports are still valuable. They give us hints and chronicle dead-ends, both of which save devs time getting to the root cause.&lt;/p&gt;

&lt;h3 id=&quot;how-repro-bot-works-and-how-to-build-your-own&quot;&gt;How Repro-Bot works, and how to build your own&lt;/h3&gt;

&lt;p&gt;The details of Repro-Bot are quite specific to Metabase, but we’ll walk you through its inner workings so you can build a similar agent for your own codebase and development setup. You can also &lt;a href=&quot;https://github.com/metabase/repro-bot&quot;&gt;fork our repo&lt;/a&gt; and adapt it to your workflow.&lt;/p&gt;

&lt;p&gt;Repro-Bot needs to be able to perform these tasks:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Parse and understand issues&lt;/li&gt;
  &lt;li&gt;Spin up a test environment&lt;/li&gt;
  &lt;li&gt;Work through reproduction steps&lt;/li&gt;
  &lt;li&gt;Write tests&lt;/li&gt;
  &lt;li&gt;Write a report&lt;/li&gt;
  &lt;li&gt;Clean up and self-review&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here’s how we approached each one.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/metabase/repro-bot/blob/main/.claude/commands/repro.md#phase-2-issue-parsing&quot;&gt;Parsing issues&lt;/a&gt; tells the LLM what you, a developer, are looking for when you analyze the issue yourself. For example, for Metabase, we need information about the Metabase version, the application database, the data warehouse. We also triage the issue as backend-focused or frontend-focussed to guide which tools should the agent use for reproduction.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/metabase/repro-bot/blob/main/.claude/skills/playwright-cli/SKILL.md&quot;&gt;Spinning up a test environment&lt;/a&gt; is very specific to your codebase and tools, of course. At Metabase, we use Playwright for browser automation, filling forms, and taking screenshots. Repro-Bot spins up an environment in the same way that a developer would, and uses REPL access to the instance.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/metabase/repro-bot/blob/main/.claude/commands/repro.md#phase-4-reproduction-max-3-attempts&quot;&gt;To work through the reproduction steps&lt;/a&gt;, we &lt;a href=&quot;https://github.com/metabase/repro-bot/blob/main/.claude/skills/metabase-reference/SKILL.md&quot;&gt;wrote a skill&lt;/a&gt; that gives code recipes for common actions we see in reported reproduction steps, like inspecting a table or creating a query. We also wrote down some of the “folklore” domain knowledge around some features (like for example that there are two different ways to make a pivot table with two different code paths). Repro-Bot uses the reproduction steps that it previously extracted from the issue, invokes the tools based on the “triage” into backend/frontend, and uses the recipes for those tools to run through the repro steps.
It then evaluates what was tested and if its results match the reported behavior. If the agent can’t determine whether the issue was reproduced, it tries again (but no more than three times total).&lt;/li&gt;
  &lt;li&gt;If the agent reproduces the issue, it &lt;a href=&quot;https://github.com/metabase/repro-bot/blob/main/.claude/skills/write-test/SKILL.md&quot;&gt;writes a failing test&lt;/a&gt; so that a developer can have something to test against when they’re fixing the issue. We give some directions on the kind of tests we write for our code and troubleshooting common issues, but since the agent already has full access to the codebase, it can learn a lot from just analyzing existing tests.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/metabase/repro-bot/blob/main/.claude/commands/repro.md#phase-6-report--post&quot;&gt;Write a report and post to Linear&lt;/a&gt;. This provides the bot with a detailed outline for the report (as you saw in the previous section), as well as instructions for how to post to Linear, and how to prevent the internal report from getting synced back to GitHub.&lt;/li&gt;
  &lt;li&gt;Finally, &lt;a href=&quot;https://github.com/metabase/repro-bot/blob/main/.claude/commands/repro.md#phase-7-cleanup&quot;&gt;cleanup and self-review&lt;/a&gt;. After each run, Repro-Bot &lt;a href=&quot;https://github.com/metabase/repro-bot/blob/main/.claude/commands/auto-improve.md&quot;&gt;reviews the notes from this and previous runs&lt;/a&gt; to make concrete suggestions for improvements, for example to address tool errors, close any knowledge gaps it found, document new tools it might need, etc.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;integrating-repro-bot-into-the-workflow&quot;&gt;Integrating Repro-Bot into the workflow&lt;/h2&gt;

&lt;p&gt;We use GitHub to collect reported bugs, and Linear to manage development work. To run Repro-Bot, a human tags a bug on GitHub with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.Run Repro-Bot&lt;/code&gt;, which triggers a GitHub action that runs the workflow described above.&lt;/p&gt;

&lt;p&gt;Running the bot is not an automated task by design: a human in the loop is essential to prevent injection attacks. Most issues come from our public GitHub issues, so it would be trivial for somebody to poison context. To guard against this, we sandbox the agent and limit its permissions. We also require a human to review issues before running it to make sure there is nothing suspicious in the issue.&lt;/p&gt;

&lt;p&gt;We intentionally did not ask Repro-Bot to fix the issue. We had initially wanted to make a more end-to-end bot that could do it all, but that wider scope opened up a number of wrong paths the bot could go down. Keeping the agent’s purview limited keeps its output manageable, and we can always introduce more automation downstream.&lt;/p&gt;

&lt;h2 id=&quot;what-we-learned&quot;&gt;What we learned&lt;/h2&gt;

&lt;p&gt;We think that Repro-Bot is an interesting approach to using LLMs and AI tooling for software development, because it’s not about code generation. Our Repro-Bot repo is very specific to our setup, but with the code as a starting point and the description above, you can build your own.&lt;/p&gt;

&lt;p&gt;Repro-Bot has become part of our daily development work, and continues to save us time. We hope that it inspires others to build (and share!) similar tools for themselves.&lt;/p&gt;
</description>
        <pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate>
        <link>https://www.metabase.com/blog/reprobot-github-issue-triage-agent</link>
        <guid isPermaLink="true">https://www.metabase.com/blog/reprobot-github-issue-triage-agent</guid>
        
        
        <category>Engineering</category>
        
      </item>
    
      <item>
        <title>Meet Data Studio: tools to curate your semantic layer in Metabase</title>
        <description>&lt;p&gt;Metabase has grown a lot over the past few years. We’ve added a bunch of tools to help people stay on top of their analytics as things scale.&lt;/p&gt;

&lt;p&gt;Eventually, it became clear these tools needed their own home.&lt;/p&gt;

&lt;p&gt;Today, we’re introducing &lt;a href=&quot;/product/data-studio/&quot;&gt;Metabase Data Studio&lt;/a&gt;, a place where teams can shape their data and define shared metrics.&lt;/p&gt;

&lt;h2 id=&quot;analytics-starts-simple-then-it-gets-less-simple&quot;&gt;Analytics starts simple. Then it gets… less simple&lt;/h2&gt;

&lt;p&gt;One goal at Metabase has always been to help non-technical people answer questions with data. And at first, that’s easy. You connect Metabase to your database, build a few dashboards, and things feel straightforward. But over time, cracks in the data model inevitably start to show.&lt;/p&gt;

&lt;p&gt;People aren’t sure which tables to use, dashboard loading times get annoying, and there are three different queries that say “ARR”. AIs don’t stand a chance sifting through this stuff.&lt;/p&gt;

&lt;h2 id=&quot;data-studio-has-all-the-tools-you-need-to-clean-up-the-mess&quot;&gt;Data Studio has all the tools you need to clean up the mess&lt;/h2&gt;

&lt;div style=&quot;width: ; margin-bottom: 2em;&quot;&gt;
    
        &lt;div class=&quot;youtube-container&quot; style=&quot;position: relative;
                    width: 100%;
                    height: 0;
                    padding-bottom: 56.25%&quot;&gt;

          &lt;iframe class=&quot;youtube-video&quot; style=&quot;position: absolute;
                         top: 0;
                         left: 0;
                         width: 100%;
                         height: 100%;
                         border: 0&quot; allowfullscreen=&quot;&quot; src=&quot;https://www.youtube.com/embed/ac3zH1SyT70&quot;&gt;
	  &lt;/iframe&gt;
        &lt;/div&gt;
    &lt;/div&gt;

&lt;p&gt;Data Studio lets teams transform raw tables into analytics-ready datasets. You can define reusable metrics (like MRR) and segments (like Active Customers) that everyone (including AI!) can trust when building dashboards and questions.&lt;/p&gt;

&lt;p&gt;Data Studio lives in Metabase: no extra tools, no duplicate work, no workflow overhauls, just publish and share instantly. You can start small and grow into it naturally as analytics becomes more shared and harder to change.&lt;/p&gt;

&lt;h2 id=&quot;the-tools-in-the-toolbox&quot;&gt;The tools in the toolbox&lt;/h2&gt;

&lt;p&gt;The first version of Data Studio ships with the following tools:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/docs/latest/data-studio/library&quot;&gt;Library&lt;/a&gt;&lt;/strong&gt;: A curated space for your organization’s most trusted analytics content—tables, metrics, and SQL snippets that your data team recommends.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/docs/latest/data-studio/data-structure&quot;&gt;Data structure&lt;/a&gt;&lt;/strong&gt;: Add table metadata to make tables easier to work with.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/docs/latest/exploration-and-organization/data-model-reference#glossary&quot;&gt;Glossary&lt;/a&gt;&lt;/strong&gt;: Define terms relevant to your business, both for people and agents trying to understand your data.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/docs/latest/data-studio/dependency-graph&quot;&gt;Dependency graph&lt;/a&gt;&lt;/strong&gt;: A visual map of how your content connects, so you can understand the impact of changes before you make them.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/docs/latest/data-studio/dependency-diagnostics&quot;&gt;Dependency diagnostics&lt;/a&gt;&lt;/strong&gt;: See which items have broken dependencies, or that aren’t used.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/docs/latest/data-studio/transforms/transforms-overview&quot;&gt;Transforms&lt;/a&gt;&lt;/strong&gt;: Wrangle your data in Metabase, write the query results back to your database, and reuse them in Metabase as sources for new queries.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And we have more to come, so stay tuned.&lt;/p&gt;

&lt;h2 id=&quot;open-source-at-the-core&quot;&gt;Open source at the core&lt;/h2&gt;

&lt;p&gt;We want data structure and curation to be accessible to everyone, which is why foundational features of Data Studio are available in our open source edition, with Pro and Enterprise features to grow into as you need them.&lt;/p&gt;

&lt;h2 id=&quot;do-i-even-need-to-care-about-data-studio&quot;&gt;Do I even need to care about Data Studio?&lt;/h2&gt;

&lt;p&gt;People tend to need some kind of data transformations when they have multiple sources of data (like your application and payments data), or a bunch of normalized tables. If you’re under 50 tables in your schema, don’t stress, watercress. If you have multiple data sources or a lot of tables, chances are you’ve been paying a tax on clarity, correctness, and performance. Data Studio can help get you sorted.&lt;/p&gt;

&lt;div class=&quot;blog-callout p2 mb4 bordered rounded&quot;&gt;
Data Studio is just one part of a bumper release. &lt;a href=&quot;/releases/metabase-59&quot;&gt;Check out what else is new in v59&lt;/a&gt;
&lt;/div&gt;

&lt;h2 id=&quot;how-to-get-started-with-data-studio&quot;&gt;How to get started with Data Studio&lt;/h2&gt;

&lt;p&gt;Data Studio ships with both OSS and EE editions (&lt;a href=&quot;/pricing&quot;&gt;with some paid features&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Admins can find Data Studio from the top right grid icon. Some paid plans can grant non-admins access to Data Studio by adding people to the Data Analysts group.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://store.metabase.com/checkout&quot;&gt;Try Metabase Pro for free&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Tue, 10 Mar 2026 00:00:00 +0000</pubDate>
        <link>https://www.metabase.com/blog/meet-data-studio-semantic-layer</link>
        <guid isPermaLink="true">https://www.metabase.com/blog/meet-data-studio-semantic-layer</guid>
        
        
        <category>Analytics</category>
        
        <category>and</category>
        
        <category>BI</category>
        
      </item>
    
      <item>
        <title>February 2026 vulnerability: What happened?</title>
        <description>&lt;h2 id=&quot;what-happened&quot;&gt;What happened?&lt;/h2&gt;

&lt;p&gt;Sho Odagiri, a security researcher, &lt;a href=&quot;https://github.com/metabase/metabase/security/advisories/GHSA-vcj8-rcm8-gfj9&quot;&gt;reported a vulnerability&lt;/a&gt; in Metabase’s notification API. The vulnerability allowed an authenticated user to craft a specially formatted notification template that could extract database connection details, including credentials, and send them via outbound email.&lt;/p&gt;

&lt;h2 id=&quot;who-was-affected&quot;&gt;Who was affected?&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;We have no evidence that this vulnerability was exploited by any customer or malicious actor prior to the fix being released.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;See the &lt;strong&gt;Fixed versions&lt;/strong&gt; below, and find the latest point version for the Metabase version you’re running. If you’re running a point version &lt;em&gt;below&lt;/em&gt; that version, you’re still vulnerable and should upgrade immediately.&lt;/p&gt;

&lt;h2 id=&quot;why-did-it-happen&quot;&gt;Why did it happen?&lt;/h2&gt;

&lt;p&gt;Two independent changes introduced this vulnerability:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;We updated the notification system to support user-supplied Handlebars templates for rendering email content.&lt;/li&gt;
  &lt;li&gt;We added metadata objects to query results, which could be traversed to access database connection details.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Together, these changes made it possible for an authenticated user to write a template that could extract sensitive database details via an outgoing email.&lt;/p&gt;

&lt;p&gt;Part of what made this vulnerability difficult to catch is that the Handlebars library did not clearly document a method resolver that allows templates to invoke arbitrary Java methods.&lt;/p&gt;

&lt;h2 id=&quot;what-did-we-fix&quot;&gt;What did we fix?&lt;/h2&gt;

&lt;p&gt;We addressed this vulnerability through two fixes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Locked down the Handlebars template engine.&lt;/strong&gt; We removed the method resolver from the Handlebars library configuration, which prevents templates from invoking arbitrary Java methods on objects in the rendering context. This eliminates the ability for user-supplied templates to traverse into internal objects.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Stripped metadata from query results used in notifications.&lt;/strong&gt; We ensured that internal metadata objects—which previously could carry a reference to database connection details—are no longer present in the notification rendering context.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;fixed-versions&quot;&gt;Fixed versions&lt;/h2&gt;

&lt;p&gt;All Metabase Cloud instances have been upgraded and are no longer vulnerable.&lt;/p&gt;

&lt;p&gt;If you are self-hosted and haven’t already upgraded, please upgrade to one of the following versions (or higher) for your respective version.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Version 55: &lt;a href=&quot;https://github.com/metabase/metabase/releases/tag/v0.55.20&quot;&gt;v0.55.20&lt;/a&gt; / &lt;a href=&quot;https://github.com/metabase/metabase/releases/tag/v0.55.20&quot;&gt;v1.55.20&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Version 56: &lt;a href=&quot;https://github.com/metabase/metabase/releases/tag/v0.56.20&quot;&gt;v0.56.20&lt;/a&gt; / &lt;a href=&quot;https://github.com/metabase/metabase/releases/tag/v0.56.20&quot;&gt;v1.56.20&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Version 57: &lt;a href=&quot;https://github.com/metabase/metabase/releases/tag/v0.57.13&quot;&gt;v0.57.13&lt;/a&gt; / &lt;a href=&quot;https://github.com/metabase/metabase/releases/tag/v0.57.13&quot;&gt;v1.57.13&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Version 58: &lt;a href=&quot;https://github.com/metabase/metabase/releases/tag/v0.58.7&quot;&gt;v0.58.7&lt;/a&gt; / &lt;a href=&quot;https://github.com/metabase/metabase/releases/tag/v0.58.7&quot;&gt;v1.58.7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;what-are-we-doing-to-prevent-this-in-the-future&quot;&gt;What are we doing to prevent this in the future?&lt;/h2&gt;

&lt;p&gt;Along with the fixes we’ve made, we’re working through additional improvements to reduce risk:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Improving logging around template rendering&lt;/strong&gt; so that we can audit user-supplied templates and detect unusual behavior.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Adding a wrapper around database credential access&lt;/strong&gt; to prevent credential access outside of designated connection establishment paths.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Patches are live across all affected versions, and we have no evidence this vulnerability was exploited before the fix landed. We’re tightening template evaluation, locking down credential access paths, and improving logging to catch unusual behavior early.&lt;/p&gt;

&lt;p&gt;If you’re self-hosted and haven’t upgraded already, please upgrade as soon as possible.&lt;/p&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;Hat tip to Sho Odagiri from GMO Cybersecurity by Ierae, Inc for discovering and disclosing this vulnerability.&lt;/p&gt;

&lt;h2 id=&quot;questions-or-concerns&quot;&gt;Questions or concerns?&lt;/h2&gt;

&lt;p&gt;Reach out at &lt;a href=&quot;mailto:support@metabase.com&quot;&gt;support@metabase.com&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Mon, 02 Mar 2026 12:10:18 +0000</pubDate>
        <link>https://www.metabase.com/blog/security-vulnerability-postmortem</link>
        <guid isPermaLink="true">https://www.metabase.com/blog/security-vulnerability-postmortem</guid>
        
        
        <category>News</category>
        
      </item>
    
      <item>
        <title>Security update available for Metabase - Please upgrade now</title>
        <description>&lt;p&gt;An independent security researcher Sho Odagiri from GMO Cybersecurity by Ierae submitted a severe issue with Metabase. We generally don’t blog about every bug, but this one is dangerous so we want to make sure that we reach out on all channels to our community to let them know that they should pay attention to this.&lt;/p&gt;

&lt;p&gt;While we have no evidence that the vulnerability was ever exploited in the wild, and exploiting this vulnerability isn’t simple, &lt;strong&gt;if you are self-hosting Metabase, you should IMMEDIATELY update your Metabase instances (if you have not already).&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;the-vulnerability&quot;&gt;The vulnerability&lt;/h2&gt;

&lt;p&gt;The vulnerability allows an authenticated user (including embedding users) to retrieve sensitive information from a Metabase instance, including database access credentials. For more info, check out the &lt;a href=&quot;https://github.com/metabase/metabase/security/advisories/GHSA-vcj8-rcm8-gfj9&quot;&gt;security advisory&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;are-you-affected&quot;&gt;Are you affected?&lt;/h2&gt;

&lt;h3 id=&quot;metabase-cloud-customers-dont-need-to-upgrade&quot;&gt;Metabase Cloud customers don’t need to upgrade&lt;/h3&gt;

&lt;p&gt;No action needed. We’ve already upgraded your Metabase, and you’re no longer vulnerable.&lt;/p&gt;

&lt;h3 id=&quot;all-self-hosted-metabases-including-customers-should-upgrade-immediately&quot;&gt;All self-hosted Metabases, including customers, should upgrade immediately&lt;/h3&gt;

&lt;p&gt;IF you haven’t already, you should immediately upgrade to the latest point version of whichever Metabase version you’re running.&lt;/p&gt;

&lt;p&gt;See the &lt;a href=&quot;#minimum-safe-releases-for-each-metabase-version&quot;&gt;list of minimum safe releases&lt;/a&gt; below, and find the latest point version for the Metabase version you’re running. If you’re running a point version &lt;em&gt;below&lt;/em&gt; that version, you’re still vulnerable and should upgrade immediately.&lt;/p&gt;

&lt;p&gt;For example, if you are running 1.58.6, you should upgrade to 1.58.7 release or later. If you’re running a version of Metabase below version 55, you should upgrade to one of the versions listed below. You can find your current version by clicking on the “gear” icon in the upper right and selecting “About Metabase.”&lt;/p&gt;

&lt;h3 id=&quot;if-youre-running-a-custom-fork-of-metabase-reach-out-to-us-for-the-patches&quot;&gt;If you’re running a custom fork of Metabase, reach out to us for the patches&lt;/h3&gt;

&lt;p&gt;Email us at help@metabase.com so we can provide you the appropriate patches.&lt;/p&gt;

&lt;h2 id=&quot;minimum-safe-releases-for-each-metabase-version&quot;&gt;Minimum safe releases for each Metabase version&lt;/h2&gt;

&lt;p&gt;The downloads below include the minimum safe release for each Metabase version.&lt;/p&gt;

&lt;h3 id=&quot;55&quot;&gt;55&lt;/h3&gt;

&lt;p&gt;v0.55.20&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Docker image: metabase/metabase:v0.55.20&lt;/li&gt;
  &lt;li&gt;Download the JAR here: &lt;a href=&quot;https://downloads.metabase.com/v0.55.20/metabase.jar&quot;&gt;https://downloads.metabase.com/v0.55.20/metabase.jar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;v1.55.20&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Docker image: metabase/metabase-enterprise:v1.55.20&lt;/li&gt;
  &lt;li&gt;Download the JAR here: &lt;a href=&quot;https://downloads.metabase.com/enterprise/v1.55.20/metabase.jar&quot;&gt;https://downloads.metabase.com/enterprise/v1.55.20/metabase.jar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;56&quot;&gt;56&lt;/h3&gt;

&lt;p&gt;v0.56.20&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Docker image: metabase/metabase:v0.56.20&lt;/li&gt;
  &lt;li&gt;Download the JAR here: &lt;a href=&quot;https://downloads.metabase.com/v0.56.20/metabase.jar&quot;&gt;https://downloads.metabase.com/v0.56.20/metabase.jar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;v1.56.20&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Docker image: metabase/metabase-enterprise:v1.56.20&lt;/li&gt;
  &lt;li&gt;Download the JAR here: &lt;a href=&quot;https://downloads.metabase.com/enterprise/v1.56.20/metabase.jar&quot;&gt;https://downloads.metabase.com/enterprise/v1.56.20/metabase.jar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;57&quot;&gt;57&lt;/h3&gt;

&lt;p&gt;v0.57.13&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Docker image: metabase/metabase:v0.57.13&lt;/li&gt;
  &lt;li&gt;Download the JAR here: &lt;a href=&quot;https://downloads.metabase.com/v0.57.13/metabase.jar&quot;&gt;https://downloads.metabase.com/v0.57.13/metabase.jar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;v1.57.13&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Docker image: metabase/metabase-enterprise:v1.57.13&lt;/li&gt;
  &lt;li&gt;Download the JAR here: &lt;a href=&quot;https://downloads.metabase.com/enterprise/v1.57.13/metabase.jar&quot;&gt;https://downloads.metabase.com/enterprise/v1.57.13/metabase.jar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;58&quot;&gt;58&lt;/h3&gt;

&lt;p&gt;v0.58.7&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Docker image: metabase/metabase/v0.58.7&lt;/li&gt;
  &lt;li&gt;Download the JAR here: &lt;a href=&quot;https://downloads.metabase.com/v0.58.7/metabase.jar&quot;&gt;https://downloads.metabase.com/v0.58.7/metabase.jar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;v1.58.7&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Docker image: metabase/metabase-enterprise/v1.58.7&lt;/li&gt;
  &lt;li&gt;Download the JAR here: &lt;a href=&quot;https://downloads.metabase.com/enterprise/v1.58.7/metabase.jar&quot;&gt;https://downloads.metabase.com/enterprise/v1.58.7/metabase.jar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;We thank Sho Odagiri from GMO Cybersecurity by Ierae, Inc for discovering and disclosing this vulnerability.&lt;/p&gt;
</description>
        <pubDate>Thu, 19 Feb 2026 12:10:18 +0000</pubDate>
        <link>https://www.metabase.com/blog/security-vulnerability</link>
        <guid isPermaLink="true">https://www.metabase.com/blog/security-vulnerability</guid>
        
        
        <category>News</category>
        
      </item>
    
      <item>
        <title>Lessons learned from building AI analytics agents: build for chaos</title>
        <description>&lt;p&gt;Last year, I came back from a conference, pulled the latest code, and fired up our brand new version of &lt;a href=&quot;/features/metabot-ai&quot;&gt;Metabot&lt;/a&gt; to show our CEO the progress we’d made. While I was away, the team had been shipping new features and improvements.&lt;/p&gt;

&lt;p&gt;My excitement quickly turned into one of the most embarrassing moments of my professional career. Metabot had transformed into a confused intern: eager to help but unable to remember what tools it had or how to use them.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;../images/posts/metabot-header.png&quot; alt=&quot;A broken Metabot on fire, and an embarrassed engineer&quot; /&gt;&lt;/p&gt;

&lt;p&gt;But here’s the thing: this disaster taught us a lot about building production AI agents. In this post, I’ll walk you through what actually broke, why it happened, and the patterns we discovered that actually work in production for us.&lt;/p&gt;

&lt;p&gt;If you want the full story with all the details, you can watch &lt;a href=&quot;https://www.youtube.com/watch?v=EnvozxnWjP4&quot;&gt;the talk we gave at the AI Engineering conference 2025 in Paris&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;what-we-were-building-and-why-its-hard&quot;&gt;What we were building (and why it’s hard)&lt;/h2&gt;

&lt;p&gt;When we started building &lt;a href=&quot;/features/metabot-ai&quot;&gt;Metabot&lt;/a&gt;, the text-to-SQL space was already crowded: you describe what you want, give an LLM your database schema, and it generates SQL. Easy, right?&lt;/p&gt;

&lt;p&gt;Yes and no.&lt;/p&gt;

&lt;p&gt;The happy path works great - you’ve probably seen the demos with 5 well-documented tables and simple questions. But even if it works, there’s a problem: &lt;strong&gt;not everyone speaks SQL&lt;/strong&gt;. A query can look fancy and return results, but how do you know if it’s answering the right question?&lt;/p&gt;

&lt;p&gt;We wanted to go beyond SQL generation. Our goal was to leverage the &lt;a href=&quot;/features/query-builder&quot;&gt;Metabase query builder&lt;/a&gt;, a visual interface where users can click together queries and actually see what filters and aggregations are applied. This gives non-SQL users a way to validate and iterate on results themselves more easily.&lt;/p&gt;

&lt;p&gt;But here’s where it gets hard:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;SQL is baked into LLM training data. Our query builder language? Not so much.&lt;/li&gt;
  &lt;li&gt;Real customer data is messy: hundreds of tables, vague descriptions, legacy cruft.&lt;/li&gt;
  &lt;li&gt;Humans are notoriously bad at providing context: “How many customers did we lose?” (Which time period? What’s a “customer”? Logo churn or revenue churn?)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The real challenge wasn’t query generation. It was building an agent that could navigate this chaos by understanding what users are looking at, what they actually mean, and helping them find answers even when they don’t know how to ask the question.&lt;/p&gt;

&lt;p&gt;That’s what Metabot set out to do. And that’s what spectacularly broke.&lt;/p&gt;

&lt;h2 id=&quot;what-broke-local-optimization&quot;&gt;What broke: local optimization&lt;/h2&gt;

&lt;p&gt;The demo failure traced back to parallel development without integration testing. One engineer perfected the context awareness to make sure Metabot knew exactly what dashboard you were looking at. Another engineer optimized the querying tool, fine-tuning descriptions, parameters, and prompts until it worked beautifully in isolation.&lt;/p&gt;

&lt;p&gt;Together, they created chaos.&lt;/p&gt;

&lt;p&gt;The LLM doesn’t experience your architecture. It sees one context window: every instruction, every tool description, every piece of dynamic state, flattened into a single prompt. Our individually-optimized components were sending contradictory signals. Tool descriptions assumed different conventions. Instructions overlapped and conflicted.
The model couldn’t figure out what we wanted because we were telling it multiple inconsistent things simultaneously.&lt;/p&gt;

&lt;p&gt;The fix required thinking differently about what we were building. We weren’t building a querying tool with some context features. &lt;strong&gt;We were building a context engineering system&lt;/strong&gt;. The LLM handles the generation; our job is to ensure it sees clean, unambiguous context at every decision point.&lt;/p&gt;

&lt;h2 id=&quot;what-worked-context-engineering-over-prompt-engineering&quot;&gt;What worked: context engineering over prompt engineering&lt;/h2&gt;

&lt;p&gt;We stopped front-loading prompts and started engineering context throughout the agent’s lifecycle. Three patterns—optimized data representations, just-in-time instructions, and actionable error guidance—transformed how the LLM understood and used its tools&lt;/p&gt;

&lt;h3 id=&quot;llm-optimized-data-representations&quot;&gt;LLM-optimized data representations&lt;/h3&gt;

&lt;p&gt;We stopped dumping raw API responses into the context. Instead, we built explicit serialization templates for every data object Metabot works with — tables, fields, dashboards, questions — optimized for LLM consumption:&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;table&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;database_id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
  ### Description  ### Fields | Field Name | Field ID |
  Type | Description | |------------|----------|------|-------------| 
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This structured format gives the LLM consistent, hierarchical context it can parse reliably. Table metadata, field types, and relationships are always in the same place, reducing hallucination and tool misuse. The format is also reusable across all of Metabot’s tools, so when one person optimizes it, everyone benefits.&lt;/p&gt;

&lt;p&gt;Use this pattern when your agent works with complex domain objects that appear across multiple tools or conversation turns.&lt;/p&gt;

&lt;h3 id=&quot;just-in-time-instructions&quot;&gt;Just-in-time instructions&lt;/h3&gt;

&lt;p&gt;Our original architecture front-loaded everything into the system prompt. The LLM ignored most of it.&lt;/p&gt;

&lt;p&gt;So we tried something different: include instructions in tool results, right in the relevant moment:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;data&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Chart created with ID 123&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;instructions&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&quot;Chart created but not yet visible to the user.

  To show them:
  - Navigate: use navigate_to tool with chart_id 123
  - Reference: include [View chart](metabase://chart/123) in your response
  &quot;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;When a chart gets created, tell the LLM &lt;em&gt;right then&lt;/em&gt; how to show it. The LLM pays attention to context that shows up exactly when it’s relevant, not buried in a system prompt from 20 messages ago.&lt;/p&gt;

&lt;h3 id=&quot;explicit-error-guidance&quot;&gt;Explicit error guidance&lt;/h3&gt;

&lt;p&gt;This pattern is more commonly known, but worth emphasizing: don’t just return error messages, return recovery paths instead.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Table &apos;orders_v2&apos; not found&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;guidance&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&quot;This table may have been renamed or deprecated.

  Try:
  1. Search for tables matching &apos;orders&apos;
  2. Check if &apos;orders&apos; or &apos;order_items&apos; fits your query
  3. Ask the user which orders table they want to use&quot;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The LLM handles ambiguity much better when you tell it how to handle ambiguity.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;../images/posts/metabot-tool-use.png&quot; alt=&quot;Diagram showing how tool use improved after the changes were made&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;the-benchmark-problem-in-ai-analytics-agents&quot;&gt;The benchmark problem in AI analytics agents&lt;/h2&gt;

&lt;p&gt;After the demo disaster, we built benchmarks. Scores climbed into the 90s, but perceived quality dropped.&lt;/p&gt;

&lt;p&gt;The issue is subtle but important: engineers write benchmark prompts like engineers. “Count of orders grouped by created_at week.” Clean, precise, all context provided.&lt;/p&gt;

&lt;p&gt;Real people say: “Why is revenue down?”&lt;/p&gt;

&lt;p&gt;That question is missing a time period, revenue definition, comparison baseline, and probably some context about what triggered the question in the first place. And even if you nail the realistic test cases, there’s the uncontrollable data mess underneath - legacy tables, missing descriptions, inconsistent naming. The gap between benchmark coverage and production chaos is where AI products fail.&lt;/p&gt;

&lt;p&gt;We now treat benchmarks as integration tests, not pure quality measures. If a change drops the score, something broke. But a passing score doesn’t mean the agent works, just that it handles clean inputs correctly. The real evaluation is production feedback, analyzed through a lens of what people actually asked versus what they needed.&lt;/p&gt;

&lt;h2 id=&quot;build-for-chaos-not-happy-paths&quot;&gt;Build for chaos, not happy paths&lt;/h2&gt;

&lt;p&gt;Our initial Metabot hackathon prototype had 5 perfectly documented tables and worked beautifully. Production has hundreds of tables with varying quality, used by people who phrase questions in wildly creative ways, and with edge cases we never imagined.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;../images/posts/metabot-data-warehouse.png&quot; alt=&quot;The imagined clean and simple data warehouse we like to imagine on the left, the broken chaos that is often the reality on the right&quot; /&gt;&lt;/p&gt;

&lt;p&gt;That’s the core lesson: don’t build for the happy path. Every polished demo with clean data creates expectations you can’t meet. People wander off the happy path in seconds.
Better to understand the chaos, build for it, and deliver consistently than to show something impressive that falls apart on contact with reality.&lt;/p&gt;

&lt;p&gt;We learned this the hard way. But it forced us to focus on what actually matters: robust context engineering, handling messy data gracefully, and building for the chaos that production inevitably brings.&lt;/p&gt;

&lt;h2 id=&quot;try-it-yourself&quot;&gt;Try it yourself&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;/features/metabot-ai&quot;&gt;Metabot is now out of beta&lt;/a&gt; in Metabase. You can try it with your own data and see how these patterns work in practice. Pro tip: Do your homework and &lt;a href=&quot;/docs/latest/data-modeling/metadata-editing&quot;&gt;set up your semantic types&lt;/a&gt; like foreign key relations, &lt;a href=&quot;/docs/latest/data-modeling/metadata-editing#adding-a-metric&quot;&gt;metrics&lt;/a&gt; and &lt;a href=&quot;/docs/latest/data-modeling/segments-and-metrics&quot;&gt;segments&lt;/a&gt;. This will help improve the experience.&lt;/p&gt;

&lt;p&gt;Want the full technical deep dive? &lt;a href=&quot;https://www.youtube.com/watch?v=EnvozxnWjP4&amp;amp;t=1s&amp;amp;pp=ygUiYWkgZW5naW5lZXIgbWV0YWJvdCB0aG9tYXMgc2NobWlkdA%3D%3D&quot;&gt;Watch the complete talk from AI Engineer Paris 2025&lt;/a&gt; where we go deeper into the implementation details.&lt;/p&gt;

&lt;p&gt;These patterns apply beyond analytics agents. Any time you’re building with LLMs, think about the full context window, deliver instructions when they’re actionable, and always (always!) build for the chaos.&lt;/p&gt;
</description>
        <pubDate>Tue, 03 Feb 2026 00:00:00 +0000</pubDate>
        <link>https://www.metabase.com/blog/lessons-learned-building-ai-analytics-agents</link>
        <guid isPermaLink="true">https://www.metabase.com/blog/lessons-learned-building-ai-analytics-agents</guid>
        
        
        <category>Analytics</category>
        
        <category>and</category>
        
        <category>BI</category>
        
      </item>
    
      <item>
        <title>We simplified embedding</title>
        <description>&lt;p&gt;TL;DR: If you’re embedding Metabase and upgrading to 58, &lt;strong&gt;you don’t have to do anything.&lt;/strong&gt; Your existing embeds will continue to work exactly as before. These changes are about simplifying our embedding options so it’s easier for people to pick the option they need.&lt;/p&gt;

&lt;h2 id=&quot;what-changed&quot;&gt;What changed&lt;/h2&gt;

&lt;p&gt;Starting in &lt;a href=&quot;/releases/metabase-58&quot;&gt;Metabase 58&lt;/a&gt;, there are two ways to embed Metabase for new embeds.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/docs/latest/embedding/modular-embedding&quot;&gt;Modular Embedding&lt;/a&gt;&lt;/strong&gt; - Embed Metabase components, as Guest or as user via SSO.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/docs/latest/embedding/full-app-embedding&quot;&gt;Full-app Embedding&lt;/a&gt;&lt;/strong&gt; - The full Metabase, SSO only.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re already embedding Metabase, your existing embeds still work. Static embedding will still work for existing embeds, but new embeds must use Modular Embedding.&lt;/p&gt;

&lt;h2 id=&quot;how-the-old-options-map-to-the-new&quot;&gt;How the old options map to the new&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Before 58&lt;/th&gt;
      &lt;th&gt;Starting in 58&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Static embedding&lt;/td&gt;
      &lt;td&gt;Modular Embedding - Guest&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Embedded analytics JS&lt;/td&gt;
      &lt;td&gt;Modular Embedding - SSO&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Embedded analytics SDK&lt;/td&gt;
      &lt;td&gt;Modular Embedding SDK - Guest or SSO (React only)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Interactive embedding&lt;/td&gt;
      &lt;td&gt;Full-app Embedding - SSO only&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;why-we-changed-our-embedding-options&quot;&gt;Why we changed our embedding options&lt;/h2&gt;

&lt;p&gt;They were confusing. Static embedding was also somewhat interactive, but we also had interactive embedding, which was a different thing. Each had a different setup flow. It worked, but figuring out the right path could have been easier, so that’s what we did. Plus, the new Modular Embedding provides an easier upgrade path from static embedding—you can start with Guest embeds and upgrade to SSO without major code changes.&lt;/p&gt;

&lt;h2 id=&quot;modular-embedding-overview&quot;&gt;Modular Embedding overview&lt;/h2&gt;

&lt;p&gt;We built an in-app wizard that walks you through setup and generates a code snippet. Copy, paste, done. The choice you have to make is whether you give people in your app a Metabase account. If you do, it unlocks a lot of stuff, and reduces your maintenance burden.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Guest&lt;/strong&gt; — People don’t need Metabase accounts. You sign embed URLs with JWT (just like static embedding), and they see the dashboard or question you’ve embedded. You can add and lock filters, but that’s about it. Guest embeds are available in the OSS Edition (with a “Powered by Metabase” badge) and on Pro/Enterprise.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;SSO&lt;/strong&gt; — People authenticate through your identity provider and get their own Metabase account. And since your Metabase knows who’s viewing what, it can unlock everything: drill-through, the query builder, AI chat, collection browser, and more, all with the correct permissions applied. Self-service embedded analytics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Modular Embedding has an &lt;a href=&quot;/docs/latest/embedding/sdk/introduction&quot;&gt;SDK for React&lt;/a&gt;, so if your app uses React, you should go with the SDK.&lt;/p&gt;

&lt;p&gt;The nice part: Guest and SSO embeds share the same foundation, so it’s a much smoother upgrade path from Guest to SSO.&lt;/p&gt;

&lt;h2 id=&quot;upgrading-existing-embeds-to-58&quot;&gt;Upgrading existing embeds to 58&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;You don’t have to do anything special when upgrading.&lt;/strong&gt; Your existing embeds will continue to work exactly as before.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Static embeds&lt;/strong&gt; — Keep working. No code changes required. The iframe URLs, JWT signing, and parameter handling all work the same way. By default, you’ll see the new Modular Embedding wizard, but there’s an escape hatch: you can still access the legacy static embedding UI, configure embeds with the new wizard, and use the traditional iframe + JWT approach. Migrating to Modular Embedding SSO unlocks deep theming options that weren’t available with static embedding (Pro/Enterprise).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Interactive embeds&lt;/strong&gt; — Keep working. Now called “Full-app Embedding,” but nothing changes on your end.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;SDK embeds&lt;/strong&gt; — Keep working. No changes to the SDK API. It’s just called the Modular Embedding SDK.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The only difference is what you’ll see in the Metabase UI when setting up new embeds.&lt;/p&gt;

&lt;h2 id=&quot;further-reading&quot;&gt;Further reading&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/docs/latest/embedding/introduction&quot;&gt;Embedding docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/releases&quot;&gt;Releases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/releases/metabase-58&quot;&gt;Metabase 58&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Tue, 13 Jan 2026 00:01:00 +0000</pubDate>
        <link>https://www.metabase.com/blog/we-simplified-metabase-embedding</link>
        <guid isPermaLink="true">https://www.metabase.com/blog/we-simplified-metabase-embedding</guid>
        
        
        <category>News</category>
        
      </item>
    
      <item>
        <title>Become a data analyst in 2026: a practical roadmap</title>
        <description>&lt;p&gt;Becoming a data analyst is both a great goal and a big undertaking. It’s tempting to try to list everything you might need to learn, but that quickly becomes overwhelming and still incomplete.&lt;/p&gt;

&lt;p&gt;Instead, this guide gives you a solid starting point. It focuses on building a strong foundation that will support all the topics you’ll want, or need, to learn later. The topics are broken down below into chunks of related topics, and organized by tools you might know or want to learn: &lt;strong&gt;Spreadsheets&lt;/strong&gt;, &lt;strong&gt;Metabase&lt;/strong&gt;, and &lt;strong&gt;SQL&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Stay tuned for part 2, which will include pointers to more advanced topics for you to tackle once you’ve mastered the basics laid out here.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/posts/data-analyst-roadmap.png&quot; alt=&quot;Data analytics roadmap&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;step-1-data-basics&quot;&gt;Step 1: Data basics&lt;/h2&gt;

&lt;p&gt;First, let’s look at what data and data analytics even are. This is the foundation for all further steps. Even if you’re familiar with some of the material here, it will pay off to remind yourself of these fundamental concepts.&lt;/p&gt;

&lt;h3 id=&quot;data-analytics-fundamentals&quot;&gt;Data analytics fundamentals&lt;/h3&gt;

&lt;p&gt;Analytics is all about understanding what your data means and what it can tell you about your business (or whatever your data is about). Analytics serves a number of purposes, and doesn’t just react to the data. There are different types of analytics you should be aware of, even if we are mostly covering descriptive analytics in this guide.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core concepts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What data analysts do, explained in &lt;a href=&quot;https://www.datacamp.com/blog/what-is-data-analysis-expert-guide&quot;&gt;this expert guide&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;The main &lt;a href=&quot;https://www.geeksforgeeks.org/data-analysis/types-of-analytics/&quot;&gt;types of analytics&lt;/a&gt;: descriptive, diagnostic, predictive, and prescriptive&lt;/li&gt;
  &lt;li&gt;The difference between &lt;a href=&quot;https://www.ibm.com/think/topics/data-science-vs-data-analytics&quot;&gt;data science and data analytics&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;data-types-and-structures&quot;&gt;Data types and structures&lt;/h3&gt;

&lt;p&gt;Data comes in many forms, but we’re really only looking at a fairly specific kind of data here: tabular data the way it is used in spreadsheets and databases. Much of the worlds of business and technology run on this kind of data, however. In this section, we’re looking at how this data is organized and what kinds of information you can find in databases and spreadsheets.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;How data tables work, including &lt;a href=&quot;/learn/grow-your-data-skills/spreadsheets-to-databases/sheets-vs-tables&quot;&gt;rows and columns&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;The difference between &lt;a href=&quot;https://careerfoundry.com/en/blog/data-analytics/difference-between-quantitative-and-qualitative-data/&quot;&gt;quantitative and qualitative data&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Understanding &lt;a href=&quot;https://eagereyes.org/blog/2013/data-continuous-vs-categorical&quot;&gt;discrete vs continuous variables&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;What &lt;a href=&quot;https://www.ibm.com/think/topics/structured-vs-unstructured-data&quot;&gt;structured and unstructured data&lt;/a&gt; mean&lt;/li&gt;
  &lt;li&gt;Why &lt;a href=&quot;https://www.coursera.org/articles/data-granularity&quot;&gt;data granularity&lt;/a&gt; matters&lt;/li&gt;
  &lt;li&gt;Additional reading on &lt;a href=&quot;https://365datascience.com/tutorials/statistics-tutorials/numerical-categorical-data/&quot;&gt;numerical and categorical data&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;step-2-getting-started-with-your-tools&quot;&gt;Step 2: Getting started with your tools&lt;/h2&gt;

&lt;p&gt;Before diving into analysis, you need to get comfortable with your tools. The three most common are &lt;strong&gt;Excel&lt;/strong&gt; (for spreadsheets), &lt;strong&gt;Metabase&lt;/strong&gt; (a BI tool), and &lt;strong&gt;SQL&lt;/strong&gt; (for querying databases).&lt;/p&gt;

&lt;p&gt;Start with whichever tool is most relevant to your work. You don’t need to learn all three at once.&lt;/p&gt;

&lt;h3 id=&quot;excel-basics&quot;&gt;Excel basics&lt;/h3&gt;

&lt;p&gt;You can skip this if you’re comfortable in Excel, but take this opportunity to reacquaint yourself with the basics of spreadsheets if you’re unsure.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;An overview of essential formulas like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SUM&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AVERAGE&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;COUNT&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IF&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;VLOOKUP&lt;/code&gt; in &lt;a href=&quot;https://www.datacamp.com/tutorial/basic-excel-formulas-for-everyone&quot;&gt;this Excel tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;metabase-basics&quot;&gt;Metabase basics&lt;/h3&gt;

&lt;p&gt;As a BI tool, Metabase allows you to work directly with databases without necessarily knowing SQL, and also create data visualizations.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;An introduction to core Metabase concepts in the &lt;a href=&quot;/learn/metabase-basics/overview/concepts&quot;&gt;Metabase basics overview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;sql-basics&quot;&gt;SQL basics&lt;/h3&gt;

&lt;p&gt;SQL is the native language of databases. Even if it might look difficult, it’s worth knowing for more complex data analysis (and because it’s the industry standard). It’s also much less scary than it initially looks, once you get to know it a little bit.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A beginner-friendly &lt;a href=&quot;/learn/sql/getting-started/introduction&quot;&gt;SQL introduction&lt;/a&gt; from Metabase&lt;/li&gt;
  &lt;li&gt;Hands-on practice with &lt;a href=&quot;https://sqlbolt.com/lesson/introduction&quot;&gt;SQLBolt’s interactive lessons&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;A concise &lt;a href=&quot;/learn/cheat-sheets/sql-cheat-sheet&quot;&gt;SQL cheat sheet&lt;/a&gt; for quick reference&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;step-3-exploring-and-preparing-data&quot;&gt;Step 3: Exploring and preparing data&lt;/h2&gt;

&lt;p&gt;Now let’s get to the actual work with data! The first step is being able to organize it. Filtering and sorting data are the first operations, and they are part of all the next steps below.&lt;/p&gt;

&lt;p&gt;The good news is that once you understand the concept in one tool, it transfers easily to others.&lt;/p&gt;

&lt;h3 id=&quot;filtering-data&quot;&gt;Filtering data&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Filtering in Excel&lt;/strong&gt;
Learn how to narrow down rows in spreadsheets using built-in filters, as shown in &lt;a href=&quot;https://edu.gcfglobal.org/en/excel/filtering-data/1/&quot;&gt;this Excel filtering guide&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Filtering in Metabase&lt;/strong&gt;
Apply filters visually in the query builder without writing SQL, as explained in the &lt;a href=&quot;/learn/metabase-basics/getting-started/filter&quot;&gt;Metabase filtering guide&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Filtering in SQL&lt;/strong&gt;
Filter rows in database queries using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WHERE&lt;/code&gt; clauses, text and date conditions, and logical operators like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AND&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OR&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NOT&lt;/code&gt;, using examples from &lt;a href=&quot;/learn/sql/filtering/by-text&quot;&gt;filtering by text&lt;/a&gt; and &lt;a href=&quot;/learn/sql/filtering/by-date&quot;&gt;filtering by date&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;data-quality&quot;&gt;Data quality&lt;/h3&gt;

&lt;p&gt;Data is rarely clean and perfect. It may come from multiple sources, use inconsistent formats, or contain missing values.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Learn how to prevent errors using &lt;a href=&quot;https://support.microsoft.com/en-us/office/apply-data-validation-to-cells-29fecbcc-d1b9-42c1-9d76-eff3ce5f7249&quot;&gt;data validation in Excel&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Understand different strategies for handling missing values in &lt;a href=&quot;https://insightsoftware.com/blog/how-to-handle-missing-data-values-while-data-cleaning/&quot;&gt;this guide to data cleaning&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Format and clean results directly in Metabase using &lt;a href=&quot;/learn/metabase-basics/querying-and-dashboards/questions/formatting&quot;&gt;question formatting options&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;A checklist covering common data cleaning tasks in &lt;a href=&quot;https://www.datacamp.com/blog/infographic-data-cleaning-checklist&quot;&gt;this data cleaning checklist&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;step-4-summarizing-and-analyzing-data&quot;&gt;Step 4: Summarizing and analyzing data&lt;/h2&gt;

&lt;p&gt;Once your data has been checked and cleaned, and you’re able to perform basic sorting and filtering, the more advanced operations can begin. Data can be vast, so it is necessary to reduce it in different ways to make sense of it. This is done using various kinds of aggregations: groupings that compute values. They can be simple sums, or various statistical values like means or medians.&lt;/p&gt;

&lt;h3 id=&quot;basic-statistics&quot;&gt;Basic statistics&lt;/h3&gt;

&lt;p&gt;You’ve heard of means and medians, but what do they mean? And how are they computed?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;An explanation of mean, median, and mode in &lt;a href=&quot;https://www.geeksforgeeks.org/maths/mathematics-mean-variance-and-standard-deviation/&quot;&gt;this statistics overview&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;An introduction to statistics concepts commonly used in data analysis in &lt;a href=&quot;https://makemeanalyst.com/basic-statistics-for-data-analysis/&quot;&gt;Basic statistics for data analysis&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s also useful to understand data aggregation, how individual data points are grouped into summary values. See &lt;a href=&quot;https://www.techtarget.com/searchdatamanagement/definition/data-aggregation&quot;&gt;this data aggregation overview&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;aggregation-in-excel-pivot-tables&quot;&gt;Aggregation in Excel: Pivot tables&lt;/h3&gt;

&lt;p&gt;Pivot tables are a powerful way of computing aggregations in spreadsheets. While they might seem daunting at first, the basic idea is the same as in SQL: subdivide the data and compute values over each segment. Much of data analysis is built on top of this approach.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Learn how to create them with &lt;a href=&quot;https://support.microsoft.com/en-us/office/create-a-pivottable-to-analyze-worksheet-data-a9a84538-bfe9-40a9-a8e9-f99134456576&quot;&gt;Microsoft’s pivot table guide&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Read why they matter in this &lt;a href=&quot;https://www.reddit.com/r/excel/comments/1e7d03u/whats_the_point_of_a_pivot_table/&quot;&gt;Reddit discussion on pivot tables&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;See a visual explanation on &lt;a href=&quot;https://en.wikipedia.org/wiki/Pivot_table&quot;&gt;Wikipedia’s pivot table page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;aggregation-in-metabase&quot;&gt;Aggregation in Metabase&lt;/h3&gt;

&lt;p&gt;Similarly to Excel, Metabase has the tools for computing sums and breaking down large datasets into sections.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Learn how to summarize data using the &lt;a href=&quot;/learn/metabase-basics/getting-started/summarize&quot;&gt;Metabase summarize feature&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;aggregation-in-sql-group-by&quot;&gt;Aggregation in SQL: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GROUP BY&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;The SQL way of computing aggregations and statistics is done using the GROUP BY keyword. These resources will help you understand how it works.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A clear explanation of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GROUP BY&lt;/code&gt; in &lt;a href=&quot;https://www.geeksforgeeks.org/sql/sql-group-by/&quot;&gt;this SQL guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;metrics-and-kpis&quot;&gt;Metrics and KPIs&lt;/h3&gt;

&lt;p&gt;Once you can aggregate data, the next step is deciding &lt;em&gt;what&lt;/em&gt; to measure. Metrics and key performance indicators (KPIs) help turn raw numbers into signals you can track over time and use to guide decisions.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;An overview of common business metrics in &lt;a href=&quot;https://stripe.com/en-hu/resources/more/essential-saas-metrics&quot;&gt;Essential SaaS metrics&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tips for designing better metrics in &lt;a href=&quot;https://medium.com/data-science/how-to-design-better-metrics-9bad7bc8c875&quot;&gt;How to design better metrics&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;step-5-analysis-across-data-tables&quot;&gt;Step 5: Analysis across data tables&lt;/h2&gt;

&lt;p&gt;In real databases, data is usually organized into several data tables. To answer questions, these have to be connected through joins. This section explains how joins work, and how this operation can be performed even in Excel, but also in a BI tool like Metabase and using SQL.&lt;/p&gt;

&lt;h3 id=&quot;xlookup-and-vlookup-in-excel&quot;&gt;XLOOKUP and VLOOKUP in Excel&lt;/h3&gt;

&lt;p&gt;To combine data from different tables, Excel has the XLOOKUP and VLOOKUP functions.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;See how spreadsheet lookups relate to database joins in &lt;a href=&quot;/learn/grow-your-data-skills/spreadsheets-to-databases/xlookup-vs-joins&quot;&gt;From XLOOKUP to joins&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;joining-tables-in-metabase&quot;&gt;Joining tables in Metabase&lt;/h3&gt;

&lt;p&gt;In databases, this operation is called a join. Metabase can create joins in its query editor.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Learn how joins work in the &lt;a href=&quot;/learn/metabase-basics/querying-and-dashboards/questions/joins-in-metabase&quot;&gt;Metabase joins guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;database-joins-in-sql&quot;&gt;Database joins in SQL&lt;/h3&gt;

&lt;p&gt;SQL of course allows you to create joins using the JOIN keyword.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A practical introduction to joins in &lt;a href=&quot;/learn/sql/working-with-sql/sql-joins&quot;&gt;SQL joins explained&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;step-6-data-visualization-and-dashboards&quot;&gt;Step 6: Data visualization and dashboards&lt;/h2&gt;

&lt;p&gt;Finally, once your analysis is done, it is time to show your results to the world. The way to do this is using charts and visualizations. Here we cover the basics of creating visualizations from data, and how to turn them into a interesting and compelling story.&lt;/p&gt;

&lt;h3 id=&quot;visualization-fundamentals&quot;&gt;Visualization fundamentals&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Learn how to visualize trends with &lt;a href=&quot;/blog/how-to-visualize-time-series-data&quot;&gt;time series charts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Improve chart clarity with &lt;a href=&quot;/blog/how-to-build-better-line-and-bar-charts&quot;&gt;better line and bar charts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Explore geographic data using &lt;a href=&quot;/blog/maps-data-visualization&quot;&gt;maps and geospatial visualizations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Choose the right chart with &lt;a href=&quot;/blog/the-right-visualization&quot;&gt;this visualization guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;designing-clear-dashboards&quot;&gt;Designing clear dashboards&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Understand what dashboards are in &lt;a href=&quot;https://www.coursera.org/articles/what-is-dashboard&quot;&gt;this Coursera overview&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Avoid common mistakes highlighted in &lt;a href=&quot;/blog/top-5-dashboard-fails&quot;&gt;Top dashboard fails&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;data-storytelling&quot;&gt;Data storytelling&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Learn what data storytelling means in &lt;a href=&quot;https://www.duarte.com/resources/communication-skills/what-is-data-storytelling/&quot;&gt;this introduction&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Improve clarity by reducing clutter, as explained in &lt;a href=&quot;https://www.storytellingwithdata.com/blog/what-clutter-can-we-eliminate&quot;&gt;What clutter can we eliminate?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Build better charts with the idea of a &lt;a href=&quot;https://www.storytellingwithdata.com/blog/2021/10/13/your-graph-skeleton-shouldnt-be-spooky&quot;&gt;clear graph skeleton&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Data analysis is a fascinating field to dive into, but it is easy to get lost in the many different things you can do, and all the possible ways to do it. If you’re new to this field, our guide will give you a first foundation for you to then base your own explorations on.&lt;/p&gt;

&lt;p&gt;We very consciously kept this guide quite simple and basic. It’s better to have a shorter list of items to really work through, than a massive list that you have no hope of ever completing.&lt;/p&gt;

&lt;p&gt;In a few months, we will follow up with more advanced tutorials and topics, so stay tuned!&lt;/p&gt;
</description>
        <pubDate>Mon, 12 Jan 2026 00:00:00 +0000</pubDate>
        <link>https://www.metabase.com/blog/data-analyst-roadmap</link>
        <guid isPermaLink="true">https://www.metabase.com/blog/data-analyst-roadmap</guid>
        
        
        <category>Analytics</category>
        
        <category>and</category>
        
        <category>BI</category>
        
      </item>
    
      <item>
        <title>10 B2B SaaS product metrics that should be on your dashboard</title>
        <description>&lt;p&gt;For SaaS teams, product metrics are the backbone of decision-making. This guide walks through the core metrics every product and data team should track: conversion, activation, retention, churn, and NDR-showing how to define each one in SQL, calculate it correctly, and visualize results in Metabase.&lt;/p&gt;

&lt;h2 id=&quot;website-to-signup-conversion-rate&quot;&gt;Website to signup conversion rate&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Shows how well your website turns visitors into potential customers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to build:&lt;/strong&gt; Divide number of people who signed up to number of unique visitors and group by date (e.g. week/month).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bonus points&lt;/strong&gt;: if your signup flow has several steps, calculate conversion rate into each step and display as a set of line charts&lt;/p&gt;

&lt;iframe src=&quot;https://metabase-public.metabaseapp.com/public/question/bbc41b1c-e973-4942-9b9b-51f973532086&quot; frameborder=&quot;0&quot; width=&quot;620&quot; height=&quot;465&quot; allowtransparency=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;signups-segmentation&quot;&gt;Signups segmentation&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Shows which marketing channels bring you most customers and which are growing faster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to build:&lt;/strong&gt; Group signups by marketing_channel or another attribution parameters that you have.&lt;/p&gt;

&lt;iframe src=&quot;https://metabase-public.metabaseapp.com/public/question/cfeedc7d-985c-4062-98d9-c60ffc9c22c9&quot; frameborder=&quot;0&quot; width=&quot;620&quot; height=&quot;465&quot; allowtransparency=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h3 id=&quot;traffic-quality-aka-signups-quality-share-of-icp-signups-share-of-high-quality-signups-share-of-mqls&quot;&gt;Traffic quality (aka signups quality, share of ICP signups, share of high quality signups, share of MQLs)&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Not all signups are equal, and you should be monitoring what kind of users you are acquiring. Sudden spikes in traffic quality might influence a lot of metrics down the funnel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to build:&lt;/strong&gt; The quality of signups is usually defined by the marketing and product team together, historically looking at easy to define qualities of a signup.&lt;/p&gt;

&lt;p&gt;Those could be, for B2B: share of signups with business domain, share of signups from a specific country or a list of countries. Calculate the % of ICP signups over the total number of signups and group by week or month.&lt;/p&gt;

&lt;iframe src=&quot;https://metabase-public.metabaseapp.com/public/question/6d7b7d0c-ad46-413a-a8ec-2320d1250161&quot; frameborder=&quot;0&quot; width=&quot;620&quot; height=&quot;465&quot; allowtransparency=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h3 id=&quot;activation-rate&quot;&gt;Activation rate&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Activation rate is the most important metric every product manager should watch.&lt;/p&gt;

&lt;p&gt;Activation rate is a share of &lt;strong&gt;new signups&lt;/strong&gt; that reached the point where they understand your product’s value and are taking &lt;strong&gt;meaningful actions.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There’re 3 key things about a well defined activation metric. It should:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Be easily measurable and represent value&lt;/li&gt;
  &lt;li&gt;Correlate with conversion well&lt;/li&gt;
  &lt;li&gt;Show result in a 2-3 day window after signup (great if you can do it in a 1-day window).&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;how-to-define-and-validate-activation-rate-metrics&quot;&gt;How to define and validate activation rate metrics&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;List hypotheses&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Very likely you can name 1-2-5 actions that users should perform in your product in order to signal that they understood what it is about. For example in Metabase, likely users understood how to use the product if they were able to build a nice chart from their data. Make a list of activation metric hypotheses in the format:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performed X events in Y days after signup, Y&amp;lt;3&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New user should get 7 friends in 10 days (Facebook)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sent 1 document within 2 days after trial start (PandaDoc)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User executes 100 queries OR invites &amp;gt; 1 user within 3 days (Metabase)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Find correlations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the hypotheses you listed, build the shares: share of users who performed event x / total signups. Plot these shares on a chart and add your historical conversion rate (share of users who paid / total signups).&lt;/p&gt;

&lt;p&gt;You should get a picture like this:&lt;/p&gt;

&lt;iframe src=&quot;https://metabase-public.metabaseapp.com/public/question/42493555-3e90-43f3-bbe6-02c6f5379cab&quot; frameborder=&quot;0&quot; width=&quot;620&quot; height=&quot;465&quot; allowtransparency=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Run the correlation analysis for the curves of potential activation metrics and conversion on a weekly trend. Pick the best metric, the one that correlates with conversion better. You can check if your metrics correlate, using basic CORR function in SQL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not seeing correlations?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If correlation analysis did not work, try running an Odds Ratio analysis or &lt;a href=&quot;https://www.listendata.com/2015/03/weight-of-evidence-woe-and-information.html&quot;&gt;WOE/IV&lt;/a&gt; analysis.&lt;/p&gt;

&lt;p&gt;Or add an “&lt;strong&gt;OR did Z events&lt;/strong&gt;” condition to the hypotheses that you have and repeat the correlation exercise.&lt;/p&gt;

&lt;p&gt;Hopefully these steps would help. In order to further dissect the activation rate, it is often suggested to divide into “setup moment” and “aha moment”. E.g. in case of Metabase, our “setup moment” is connecting a database, which is super important but is not an activation action per se, while the “aha moment” in our case would be the creation of a chart.&lt;/p&gt;

&lt;h2 id=&quot;conversion-rate-from-trial-to-paid--conversion-rate-from-free-to-paid-customer&quot;&gt;Conversion rate from trial to paid / conversion rate from free to paid customer&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; To know how big is the share of traffic that actually pays you. It’s also a metric that is easy to benchmark (see Benchmarks below).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to build:&lt;/strong&gt; Divide the number of converted customers by the number of total signups and group by the date of signup (week/month).&lt;/p&gt;

&lt;p&gt;To make this metric more stable, add a conversion window that is typical for your customers. E.g. if you have a time-limited 14d trial without a credit card, people can convert any time after 14 days, sometimes it would be after 60 or 90 days, so pick something that is easy enough for you to make decisions, e.g. 15 days.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Conversion rate is a lagging metric and is not very suitable for being a goal for the product team. If you’d like to have goals on something, try activation rate or self-service revenue, not conversion.&lt;/p&gt;

&lt;iframe src=&quot;https://metabase-public.metabaseapp.com/public/question/ae3335f7-90db-4d18-aa0c-2acfcbade4c3&quot; frameborder=&quot;0&quot; width=&quot;620&quot; height=&quot;465&quot; allowtransparency=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;new-business-revenue--new-business-mrr&quot;&gt;New business revenue / new business MRR&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Your product’s most important metric is revenue and you need to know what’s going on with it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to build:&lt;/strong&gt; Sum the revenue/MRR of all new customers who converted in the given month&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip&lt;/strong&gt;: Group by pricing plans to see which products are bringing you more new revenue&lt;/p&gt;

&lt;iframe src=&quot;https://metabase-public.metabaseapp.com/public/question/d46d47e3-1c5f-4277-93a3-7002089d9776&quot; frameborder=&quot;0&quot; width=&quot;620&quot; height=&quot;465&quot; allowtransparency=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;feature-adoption-share-of-total-paid-customers--of-total-mrr&quot;&gt;Feature adoption share (of total paid customers / of total MRR)&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; The bigger the product becomes, the more features it has. Oftentimes new features are being added without consideration of their actual performance. This product strategy is called “Fire and forget”. For that not to happen, monitor the adoption rate of your features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to build:&lt;/strong&gt; Divide the number of customers who used the feature in a given month by the number of paid customers in the given month. Do it for all features in a form of a set of line charts over time to see the trends (and also see which features are doing well, and which aren’t).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; segment the features by pricing plans - to see what is actually driving customers to your higher plans.&lt;/p&gt;

&lt;iframe src=&quot;https://metabase-public.metabaseapp.com/public/question/0595fa3f-aecd-4561-a7e9-cb39b10c57dc&quot; frameborder=&quot;0&quot; width=&quot;620&quot; height=&quot;465&quot; allowtransparency=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;retention-rate-general-and-by-specific-featureuse-case&quot;&gt;Retention rate (general and by specific feature/use case)&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Retention is king, and knowing where the trends go is important. For anything new you ship you have to be sure people stick with the new features - retention cohorts to the rescue. If you see that people are dropping the feature after a first week and don’t come back — it’s time to iterate and improve. Otherwise your product might turn into a Frankenstein.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to build&lt;/strong&gt;: Divide your customers to monthly cohorts and calculate how big % of the cohort uses the feature on month 1, 2, and so on.&lt;/p&gt;

&lt;iframe src=&quot;https://metabase-public.metabaseapp.com/public/question/cdc2adfd-f038-46bb-baad-b75b1419c562&quot; frameborder=&quot;0&quot; width=&quot;620&quot; height=&quot;465&quot; allowtransparency=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;net-dollar-retention-rate--expansion-mrr&quot;&gt;Net Dollar Retention rate / Expansion MRR&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; The only thing that can save your business long term is your ability to upsell and expand your existing customers. There’s a limit to user acquisition efforts your marketing team can apply in order to bring new customers in a cheap way. The more you will be growing, the more expensive acquisition will become.&lt;/p&gt;

&lt;p&gt;Thus invest early in upgrade and upsell paths in your product — and monitor the Expansion MRR that will eventually drive your Net Dollar Retention rate up as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to build:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Expansion MRR:&lt;/strong&gt; Sum the revenue from Expansion MRR events for the given month.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;NDR in $&lt;/strong&gt;: Expansion MRR + Reactivation MRR - Contraction MRR - Churn MRR&lt;/li&gt;
&lt;/ul&gt;

&lt;iframe src=&quot;https://metabase-public.metabaseapp.com/public/question/89da7de1-2856-4d8e-848a-fb0ba29551f6&quot; frameborder=&quot;0&quot; width=&quot;620&quot; height=&quot;465&quot; allowtransparency=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;churn-rate-logo-mrr&quot;&gt;Churn rate (logo, MRR)&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; The opposite metric to retention rate, churn is telling you how much money you’re losing each month from customers who paid you but stopped paying you in this month. Churn in logo and in MRR % is a well benchmarked metric.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to build:&lt;/strong&gt; For all customers who paid in the previous month, but didn’t pay this month, generate Churn MRR events with a negative value. Sum these events to get the Churn MRR.&lt;/p&gt;

&lt;p&gt;Logo churn in % is the number of customers who paid you in the previous month but stopped paying you this month divided by the total number of paying customers in this month.&lt;/p&gt;

&lt;iframe src=&quot;https://metabase-public.metabaseapp.com/public/question/cde17551-835f-4c90-9ba7-7db2149bc8ba&quot; frameborder=&quot;0&quot; width=&quot;620&quot; height=&quot;465&quot; allowtransparency=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;essential-benchmarks-for-top-of-funnel-saas-metrics&quot;&gt;Essential benchmarks for top-of-funnel SaaS metrics&lt;/h2&gt;

&lt;p&gt;Some of these metrics, mostly conversion rates, are easy to benchmark, especially if you’re building a product that has a similar business model to the canonical digital products.&lt;/p&gt;

&lt;p&gt;Here’re some examples of top of the funnel metrics benchmarks for B2b SaaS types of products:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;&lt;strong&gt;Metric&lt;/strong&gt;&lt;/th&gt;
      &lt;th&gt;&lt;strong&gt;Benchmark&lt;/strong&gt;&lt;/th&gt;
      &lt;th&gt;&lt;strong&gt;Comment&lt;/strong&gt;&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Website visit (unique) → signup (finished)&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;8%&lt;/td&gt;
      &lt;td&gt;8% is for a mix of paid and organic traffic. Depending on your user acquisition strategy, it could be higher or lower for paid traffic. A very nice early indicator of how well your marketing campaigns perform — if they bring in traffic that converts to signups better than organic, you’re on the right track.&lt;br /&gt;&lt;br /&gt;This number might be lower if you’re offering a trial with credit card collection.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Signup start → signup finished&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;25%&lt;/td&gt;
      &lt;td&gt;Depends on the number of required fields/steps and again, on whether you collect a credit card or not.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Signup finished → Activated&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;35%&lt;/td&gt;
      &lt;td&gt;This is the canonical B2B SaaS activation rate, with activation defined as mentioned above.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Signup finished → paid (7 or 14d trial)&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;10% (trial without credit card, 30-day window)&lt;br /&gt;40% (trial with credit card)&lt;br /&gt;2.5–5% (freemium)&lt;/td&gt;
      &lt;td&gt;Trials with credit cards collected convert better, but you should be mindful of retention and refund rates.&lt;br /&gt;&lt;br /&gt;If you have a sales team engaging with leads from the self-service funnel, this number can be higher.&lt;br /&gt;&lt;br /&gt;Freemium products convert at best around 5%, which is considered very high — your product must be very sticky and have a large user base to sustain revenue at this rate.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Churn MRR %&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;4%&lt;/td&gt;
      &lt;td&gt;For B2B SaaS, under this amount churn is considered healthy. If you’re doing better — great!&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Net Dollar Retention %&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;100%+&lt;/td&gt;
      &lt;td&gt;If you’re upselling well, you might reach 100%+ NDR, meaning your business would grow even if user acquisition stopped. Investors love this metric because it signals strong expansion and retention.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;a href=&quot;https://openviewpartners.com/2023-product-benchmarks/&quot;&gt;Source: OpenView Product Benchmarks&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;how-to-turn-your-product-metrics-into-actionable-insights&quot;&gt;How to turn your product metrics into actionable Insights&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;First, get a full picture of your metrics in a nice bird view - make a dashboard that will serve as a navigating compass for your decisions. &lt;a href=&quot;https://store.metabase.com/checkout&quot;&gt;Metabase can help!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Look at the metrics and find the laggards: which metrics are far below the benchmarks?&lt;/p&gt;

&lt;p&gt;Try to pick 1-2 of them and find the reasons of why those could be so low.&lt;/p&gt;

&lt;p&gt;Low activation and user engagement on trial will naturally lead to low conversions. Is your product too complicated to use? Are you acquiring the right users?&lt;/p&gt;

&lt;p&gt;Perform user interviews, listen to sales calls to find the gaps in the first time user experience and focus on fixing those. Oh, and bugs, don’t forget to fix these as buggy software is also not converting people into paid and loyal customers well.&lt;/p&gt;

&lt;p&gt;Activation problem is not fixed by adding tooltips, walkthrough guides or extra documentation. The only thing that works well is thoughtful design of the navigation and first time user experience, that should help to overcome setup hurdles, if they are necessary.&lt;/p&gt;

&lt;p&gt;Churn is the derivative metric and won’t improve if you don’t fix the activation rate for new customers and adoption for the existing.&lt;/p&gt;

&lt;h2 id=&quot;final-thoughts-making-product-metrics-accessible-and-actionable&quot;&gt;Final thoughts: making product metrics accessible and actionable&lt;/h2&gt;

&lt;p&gt;This post showed you how to choose the right product metrics and visualize them. Metabase is a powerful tool not only for measuring and displaying these metrics but also for giving the entire team access to them, so everyone can explore the data and discover valuable insights on their own, no &lt;a href=&quot;/features/query-builder&quot;&gt;data expertise or SQL needed&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;more-product-metrics-resources&quot;&gt;More product metrics resources&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/events/how-to-build-a-product-dashboard-in-metabase&quot;&gt;How to build a product dashboard in Metabase&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=GqfWIKgpnHw&quot;&gt;From scattered metrics to move-ready insights&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/appchoose/bye-bye-amplitude-c581b52ff762&quot;&gt;Bye bye Amplitude. Our journey to Metabase&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Mon, 10 Nov 2025 00:05:05 +0000</pubDate>
        <link>https://www.metabase.com/blog/product-metrics</link>
        <guid isPermaLink="true">https://www.metabase.com/blog/product-metrics</guid>
        
        
        <category>Analytics</category>
        
        <category>and</category>
        
        <category>BI</category>
        
      </item>
    
      <item>
        <title>Metabase Community Data Stack Report 2025</title>
        <description>&lt;script type=&quot;application/ld+json&quot;&gt; { &quot;@context&quot;:&quot;https://schema.org&quot;, &quot;@type&quot;:&quot;Article&quot;, &quot;@id&quot;:&quot;https://www.metabase.com/blog/metabase-community-data-stack-report-2025-key-analysis&quot;, &quot;url&quot;:&quot;https://www.metabase.com/blog/metabase-community-data-stack-report-2025-key-analysis&quot;, &quot;headline&quot;:&quot;Metabase Community Data Stack Report 2025 - Key analysis&quot;, &quot;description&quot;:&quot;We asked 340 companies how they build and use their data stacks - from tool choices to AI adoption. Here&apos;s what we learned.&quot;, &quot;image&quot;:&quot;https://www.metabase.com/images/posts/og-data-stack-report-2025.jpg&quot;, &quot;datePublished&quot;:&quot;2025-09-03T08:00:00+08:00&quot;, &quot;dateModified&quot;:&quot;2025-09-03T08:00:00+08:00&quot;, &quot;author&quot;:[ { &quot;@type&quot;:&quot;Person&quot;, &quot;name&quot;:&quot;Alex Yarosh&quot;, &quot;url&quot;:&quot;https://www.metabase.com/blog&quot; } ] } &lt;/script&gt;

&lt;p&gt;We asked 330+ teams across 50+ countries how they build and use their data stacks, from tool choices to AI adoption. This is what we learned.&lt;/p&gt;

&lt;h2 id=&quot;building-a-community-resource-for-data-stack-decisions-in-2025&quot;&gt;Building a community resource for data stack decisions in 2025&lt;/h2&gt;

&lt;p&gt;For this report, we ask teams how they build their data stacks: what tools they choose, what challenges they face, and what their plans for the future are. Our goal is to build a community-sourced, open source resource that can help people make informed decisions about their data tools and shape modern data practices together.&lt;/p&gt;

&lt;p&gt;In 2025, we heard from 330+ teams of all shapes and sizes - from two-person startups to orgs with hundreds of employees - from 15+ different industries and 50+ countries. Teams shared their tool choices, adoption timelines, happiness levels, and how AI is changing the way they work. We compiled all that wisdom into a report (built with Metabase, of course) that we’re making available to the community.&lt;/p&gt;

&lt;p&gt;If you want to jump straight to the full report, &lt;a href=&quot;/data-stack-report-2025&quot;&gt;go forth&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;key-takeaways&quot;&gt;Key takeaways&lt;/h2&gt;

&lt;h3 id=&quot;most-data-teams-are-small-even-at-large-companies&quot;&gt;Most data teams are small, even at large companies&lt;/h3&gt;

&lt;p&gt;Most companies in our survey started building out their stacks when they reached 20-50 people - but then again, most of the companies that we surveyed tend to be around that size as well, so take this with a grain of salt. We found that the sizes of data teams, however, don’t vary much - most data teams are around 1-3 people, even in companies with hundreds of employees.&lt;/p&gt;

&lt;iframe src=&quot;https://community-data-stack-report-2025.metabaseapp.com/public/question/5249aac0-c788-48a1-a227-e80666574f07&quot; frameborder=&quot;0&quot; width=&quot;620&quot; height=&quot;465&quot; allowtransparency=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h3 id=&quot;postgresql-dominates-both-transactional-and-analytics-workloads&quot;&gt;PostgreSQL dominates both transactional and analytics workloads&lt;/h3&gt;

&lt;p&gt;Postgres is the most popular transactional database &lt;em&gt;and&lt;/em&gt; the most popular analytics storage. It’s the database that people choose the most regardless of their main concerns, and the database that most people who are thinking of leaving their current tool are considering as a replacement. It’s also the highest rated transactional database among our respondents, and in top 3 highest rated tools for analytics storage.&lt;/p&gt;

&lt;iframe src=&quot;https://community-data-stack-report-2025.metabaseapp.com/public/question/db0753ea-6051-4ebd-a3d7-21bda98670f6&quot; frameborder=&quot;0&quot; width=&quot;620&quot; height=&quot;465&quot; allowtransparency=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h3 id=&quot;50-of-teams-dont-use-a-data-warehouse-or-a-data-lake-to-store-their-analytics-data&quot;&gt;50% of teams don’t use a data warehouse or a data lake to store their analytics data&lt;/h3&gt;

&lt;p&gt;Nearly everyone we asked is separating their analytics data from their transactional data, but - maybe surprisingly - about half of respondents aren’t using a specialized tool (like a data warehouse or a data lake) to store their analytics data. No judgement from us: we’re long believed that &lt;a href=&quot;/blog/no-data-warehouse-necessary&quot;&gt;you don’t need a data warehouse&lt;/a&gt; (until you do).&lt;/p&gt;

&lt;iframe src=&quot;https://community-data-stack-report-2025.metabaseapp.com/public/question/2a503a67-d399-4338-9f50-4781b9cf1359&quot; frameborder=&quot;0&quot; width=&quot;620&quot; height=&quot;465&quot; allowtransparency=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Larger companies with larger data teams are more likely to be using data warehouses and data lakes, probably because larger company have more intense data needs.&lt;/p&gt;

&lt;h3 id=&quot;etl-and-transformation-tools-as-data-maturity-indicators&quot;&gt;ETL and transformation tools as data maturity indicators&lt;/h3&gt;

&lt;p&gt;About 60% of people using an &lt;a href=&quot;/learn/grow-your-data-skills/data-landscape/etl-landscape&quot;&gt;ingestion/ETL tool&lt;/a&gt;, and about 60% are using a modeling/transformation tool - with most of those people using both tools. Reverse ETL is also up there: if your company has the need for reverse ETL (which not every company does), you are likely to also be using ingestion and modeling tools as well. Companies also tend to adopt those around the same time. So if you’re reaching the point in your data journey where you’re considering an ingestion tool - you might want to evaluate whether it might be the time to add a modeling tool as well.&lt;/p&gt;

&lt;iframe src=&quot;https://community-data-stack-report-2025.metabaseapp.com/public/question/13f9c973-6ad4-4461-8daa-4a753428da2f&quot; frameborder=&quot;0&quot; width=&quot;620&quot; height=&quot;465&quot; allowtransparency=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;what-surprised-us&quot;&gt;What surprised us&lt;/h2&gt;

&lt;h3 id=&quot;ai-trust-does-not-track-with-ai-adoption&quot;&gt;AI trust does not track with AI adoption&lt;/h3&gt;

&lt;p&gt;People across nearly all industries, roles, and company sizes have adopted AI querying and code generation. That’s not newsworthy in 2025, of course, but what surprised us was how low the trust in the results of AI queries actually was, considering that near-universal adoption. People in more technical roles tend to trust AI results less.&lt;/p&gt;

&lt;iframe src=&quot;https://community-data-stack-report-2025.metabaseapp.com/public/question/e8c5ff8c-25bc-43d2-b19a-b35b2322a12d&quot; frameborder=&quot;0&quot; width=&quot;620&quot; height=&quot;465&quot; allowtransparency=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h3 id=&quot;engineers-are-the-hardest-to-please&quot;&gt;Engineers are the hardest to please&lt;/h3&gt;

&lt;p&gt;Across the entire stack, software and data engineers consistently gave lower ratings to their tools. The only exception to this rule is modeling/transformation tools, where the end users of the data that comes out of those tools (like product managers) rate them much lower than other tools, while people handling the day-to-day (data engineers) - rate them much higher.&lt;/p&gt;

&lt;iframe src=&quot;https://community-data-stack-report-2025.metabaseapp.com/public/question/a1a2b55c-d0da-4451-bd6b-aefb7a8ccc0e&quot; frameborder=&quot;0&quot; width=&quot;620&quot; height=&quot;465&quot; allowtransparency=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;individual-tools-matter-less-than-how-they-play-together&quot;&gt;Individual tools matter less than how they play together&lt;/h2&gt;

&lt;p&gt;People rated individual tools in their stack generally higher than they rated their stack as a whole. We think it’s because it doesn’t really matter if you have the best tools in the world handling their specific tasks - if you can’t ensure that the flow of data through the stack is smooth and transparent. The tools with the rating closest to the rating of the whole stack are the ingestion/ETL tools, whose entire purpose is to facilitate the movement of data across the data stack.&lt;/p&gt;

&lt;iframe src=&quot;https://community-data-stack-report-2025.metabaseapp.com/public/question/13f9c973-6ad4-4461-8daa-4a753428da2f&quot; frameborder=&quot;0&quot; width=&quot;620&quot; height=&quot;465&quot; allowtransparency=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;the-methodology-and-analytical-process-behind-the-report&quot;&gt;The methodology and analytical process behind the report&lt;/h2&gt;

&lt;p&gt;It might not surprise you that we, people at Metabase, thought that Metabase was the best tool to analyze and present the results of the survey.&lt;/p&gt;

&lt;p&gt;Our survey was conducted through a Typeform form, which gave us the results as a CSV file. Then we uploaded that CSV to &lt;a href=&quot;/docs/latest/cloud/storage&quot;&gt;Metabase Cloud Storage&lt;/a&gt; for analysis - no need to even set up a database.&lt;/p&gt;

&lt;p&gt;The data needed some additional formatting and cleaning - like relabeling answers for better presentation, accounting for different spellings, or combining answers for different types of analytics storage into a single column - so we used a &lt;a href=&quot;/learn/metabase-basics/getting-started/models&quot;&gt;Metabase model&lt;/a&gt; to create a cleaned-up and transformed dataset based on the original CSV.&lt;/p&gt;

&lt;p&gt;Metabase has a built-in &lt;a href=&quot;/learn/metabase-basics/getting-started/ask-a-question&quot;&gt;graphical query builder&lt;/a&gt; which we used to build questions like “what is the average satisfaction by role” based on our augmented CSV model and build visualizations without writing any code.&lt;/p&gt;

&lt;p&gt;This was sufficient for all explorations that we were interested in - except for one (can you guess which one?). One question required a more complicated query, so to handle that, we used SQL on our CSV: when you upload data to Metabase Cloud Storage, you’re actually putting it into a &lt;a href=&quot;/docs/latest/databases/connections/clickhouse&quot;&gt;ClickHouse database&lt;/a&gt;, so you can use Metabase to query data from your CSV using SQL. In our case of one stray question, we used SQL instead of graphical query builder because we needed to make use of a &lt;a href=&quot;/learn/sql/combining-tables/sql-union&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UNION&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here at Metabase, we have a lot of &lt;a href=&quot;/blog/top-5-dashboard-fails&quot;&gt;strong opinions&lt;/a&gt; about &lt;a href=&quot;https://www.youtube.com/playlist?list=PLzmftu0Z5MYFo7k8-GgrYuGq8Vmv1NaqK&quot;&gt;best practices&lt;/a&gt; for building dashboards, which we applied judiciously to build a dashboard that communicates the insights we found interesting while making sure to avoid misrepresenting the data.&lt;/p&gt;

&lt;p&gt;We wanted the dashboard to stand out visually, so we defined a custom color palette and uploaded a custom font to our Metabase instance and used it on the dashboard.&lt;/p&gt;

&lt;p&gt;Once the dashboard was ready, we created a &lt;a href=&quot;/learn/metabase-basics/embedding/charts-and-dashboards&quot;&gt;public embed&lt;/a&gt; so that people could access the dashboard without having a Metabase account and just iframe’d the embed into &lt;a href=&quot;/data-stack-report-2025&quot;&gt;our website&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;explore-the-full-report&quot;&gt;Explore the full report&lt;/h2&gt;

&lt;p&gt;You can &lt;a href=&quot;/data-stack-report-2025&quot;&gt;check out the full report&lt;/a&gt;, or, if you want to run your own analysis of the survey data, we’ve &lt;a href=&quot;https://github.com/metabase/metabase-data-stack&quot;&gt;set up a repository&lt;/a&gt; for you that spins up Metabase with the anonymized survey data pre-loaded, so you can explore it yourself.&lt;/p&gt;

&lt;p&gt;Let’s get the conversation rolling. Post your insights and tag us! We love seeing your takeaways in action.&lt;/p&gt;
</description>
        <pubDate>Wed, 03 Sep 2025 00:05:05 +0000</pubDate>
        <link>https://www.metabase.com/blog/metabase-community-data-stack-report-2025-key-analysis</link>
        <guid isPermaLink="true">https://www.metabase.com/blog/metabase-community-data-stack-report-2025-key-analysis</guid>
        
        
        <category>News</category>
        
      </item>
    
      <item>
        <title>The story behind our AI Dataset Generator</title>
        <description>&lt;p&gt;At Metabase, I often need fake data to demo new features. I found myself digging through Kaggle, but not feeling very inspired, and wasting a lot of time searching. So I built a little tool to help me generate datasets and decided to open source it.&lt;/p&gt;

&lt;p&gt;It ended up hitting the front page of Hacker News, &lt;a href=&quot;https://github.com/metabase/dataset-generator&quot;&gt;got 600+ stars on GitHub&lt;/a&gt;, received contributions from a YC-backed startup, and was picked up by TLDR newsletter.&lt;/p&gt;

&lt;div class=&quot;blog-callout p2 mb4 bordered rounded&quot;&gt;
We’ve brought the &lt;a href=&quot;/ai-data-generator&quot;&gt;AI data generator&lt;/a&gt; to the browser so the community can generate datasets instantly. Open access, instant results, and free to explore.
&lt;/div&gt;

&lt;h2 id=&quot;why-not-kaggle-or-chatgpt&quot;&gt;Why not Kaggle or ChatGPT&lt;/h2&gt;

&lt;p&gt;As mentioned above, I was feeling very uninspired by Kaggle datasets and kept turning to ChatGPT to generate fake data. I’d ask for something, get results back, visualize it, and spot issues. Bar charts all the same height, growth trends going the wrong way, not enough variation, etc. I found myself repeating that cycle and thought… maybe there’s a better way.&lt;/p&gt;

&lt;h2 id=&quot;what-i-actually-did&quot;&gt;What I actually did&lt;/h2&gt;

&lt;p&gt;Since I’d already been writing prompts and had some experience, I figured, why not turn that process into a simple tool? So I converted my prompt inputs into a few dropdowns:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Business type&lt;/li&gt;
  &lt;li&gt;Row count&lt;/li&gt;
  &lt;li&gt;Single or multi-table schema&lt;/li&gt;
  &lt;li&gt;Date range&lt;/li&gt;
  &lt;li&gt;Growth pattern&lt;/li&gt;
  &lt;li&gt;Variation and granularity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You hit “Preview Data” and get back a sample schema and 10 rows of data. If it looks good, you can export a full dataset as CSV, SQL, or launch Metabase to explore it.&lt;/p&gt;

&lt;h2 id=&quot;how-it-works&quot;&gt;How It Works&lt;/h2&gt;

&lt;h3 id=&quot;step-1-how-schema-generation-works&quot;&gt;Step 1: How schema generation works&lt;/h3&gt;

&lt;p&gt;When you hit “Preview Data,” the app sends a prompt to your selected LLM provider (OpenAI, Anthropic, or Google) via LiteLLM. It’s tailored to the business type and returns a JSON spec defining the tables, fields, relationships, and logic. Think of it as a blueprint for a believable dataset.&lt;/p&gt;

&lt;p&gt;Originally, I was just generating the schema with ChatGPT. But after a few folks on Hacker News mentioned it’d be cool to switch models, we got an awesome &lt;a href=&quot;https://github.com/metabase/dataset-generator/pull/6&quot;&gt;PR&lt;/a&gt; that added LiteLLM support, so now you can swap between providers easily. Thanks for the contribution &lt;a href=&quot;https://github.com/manueltarouca&quot;&gt;@manueltarouca&lt;/a&gt;!&lt;/p&gt;

&lt;h3 id=&quot;step-2-rows-are-generated-locally-by-the-datafactory&quot;&gt;&lt;strong&gt;Step 2: Rows are generated locally by the DataFactory&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;I originally had the LLM generate all the rows, but it was painfully slow, even for 100 rows. I tried splitting the job into batches, but that introduced new issues. For example, a user ID might be &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;001&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;002&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;003&lt;/code&gt; in the first batch and something like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;u099&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;u100&lt;/code&gt; in the second.&lt;/p&gt;

&lt;p&gt;So I took a step back and had a deep discussion with Cursor. I needed something fast, more realistic, and cheaper to run. After some back and forth, I decided to build the DataFactory. It generates data locally using &lt;a href=&quot;https://fakerjs.dev/&quot;&gt;Faker.js&lt;/a&gt; and applies the schema + simulation rules from the LLM. It also enforces logic like:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Realistic SaaS churn and pricing plans&lt;/li&gt;
  &lt;li&gt;E-commerce subtotals, tax, and shipping that actually add up&lt;/li&gt;
  &lt;li&gt;Healthcare claims where payouts never exceed procedure costs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/images/ai-dataset-generator-example.png&quot; alt=&quot;Preview data of a B2B SaaS business&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;step-3-performance-and-cost&quot;&gt;Step 3: Performance and cost&lt;/h3&gt;

&lt;p&gt;By splitting it into two phases, the tool stays fast and surprisingly cheap. Schema generation is the only part that hits the LLM, and I wanted to make sure it wouldn’t lead me to bankruptcy. So I added token tracking and ran the numbers using a super advanced formula:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;total_tokens × cost_per_token = ???&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Turns out… not that bad. Most previews come in around $0.03–$0.05 with GPT-4o. After that, it’s all free. No extra API calls, just pure, 100%, Grade A data.&lt;/p&gt;

&lt;h3 id=&quot;try-it-yourself--contribute&quot;&gt;Try it yourself + contribute&lt;/h3&gt;

&lt;p&gt;It’s still early, so it’s not bulletproof. But if you need quick, realistic datasets, give it a try. Everything runs locally with Docker, and all you need is an API key from your favorite LLM provider to get started.&lt;/p&gt;

&lt;p&gt;If you want to contribute, there’s plenty of room to jump in:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Add new business types or tweak existing ones&lt;/li&gt;
  &lt;li&gt;Improve schema logic or simulation rules&lt;/li&gt;
  &lt;li&gt;Add your awesome feature here&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The groundwork is already there. If you’ve got ideas, I’d love your help taking it further. &lt;a href=&quot;https://github.com/metabase/dataset-generator&quot;&gt;Star it, fork it, or open a PR on GitHub&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Tue, 15 Jul 2025 00:10:18 +0000</pubDate>
        <link>https://www.metabase.com/blog/story-behind-ai-dataset-generator</link>
        <guid isPermaLink="true">https://www.metabase.com/blog/story-behind-ai-dataset-generator</guid>
        
        
        <category>Data</category>
        
        <category>explorations</category>
        
      </item>
    
  </channel>
</rss>
