适用于 React 的嵌入式分析 SDK

快速构建自定义应用内分析

这是一个专为 React 设计的工具包,用于构建应用内报表,使其外观、行为和体验都与您的应用程序融为一体。您可以完全掌控原型设计、样式设置和交付复杂的分析功能,而无需复杂的开发过程。

npx @metabase/embedding-sdk-react@latest start
探索实时演示 前往快速入门

多租户且安全

确保客户只能看到他们需要的内容。您的数据永远不会离开您的服务器。

几分钟内即可开始

快速安装 SDK 并嵌入您的第一个图表。随着需求的增长,逐步构建更高级的分析功能。

丰富的文档和支持

开发者优先的工具和专家支持,确保集成过程按您的计划进行。

Metabase 受到超过 80,000 家公司的信赖
huggingface logo mcdonalds logo huma logo capital-one logo airbyte logo betterment logo Deutsche Telekom logo kong logo

与您的 UI 集成

嵌入独立的组件——从单个图表到查询构建器——它们能够无缝融入您的产品。像素级的精确定位,无固定宽度或高度,支持响应式设计。您可以覆盖菜单、重新排列字段、移动按钮,并根据您的 UI 布局组件。

Integrate With Ui 1
        
import {
  MetabaseProvider,
  InteractiveQuestion,
  defineEmbeddingSdkConfig
} from "@metabase/embedding-sdk-react";

const config = defineEmbeddingSdkConfig({
  metabaseInstanceUrl: "https://metabase.example.com", // Required: Your Metabase instance URL
  authProviderUri: "https://app.example.com/sso/metabase", // Required: An endpoint in your app that signs the user in and returns a session
});

<MetabaseProvider config={config}>
  <InteractiveQuestion
    questionId={questionId}
    isSaveEnabled={false}
    withResetButton={true}
    customTitle="Orders over time"
  />
</MetabaseProvider>
        
      

动态主题

为每个组件设置样式,以匹配您应用的外观和感觉。自定义字体、背景颜色、工具提示、阴影等。可以为每个组织、团队甚至每个用户应用不同的样式。

Dynamic Theming 1 Dynamic Theming 2 Dynamic Theming 3
        
const metabase: MetabaseTheme = {
  fontFamily: "Inter",
  fontSize: "14px",
  colors: {
    brand: colors.primary,
    "brand-hover": colors.darkGrey,
    "brand-hover-light": colors.darkGrey,
    filter: colors.filter,
    "text-primary": colors.lighterGrey,
    "text-secondary": colors.lighterGrey,
    "text-tertiary": colors.lighterGrey,
    border: colors.darkGrey,
    background: colors.background,
    "background-secondary": colors.darkGrey,
    "background-hover": colors.background,
    "background-disabled": colors.darkGrey,
    charts: [
      colors.primary,
      colors.filter,
      "#ED6A5A",
      "#FED18C",
      "#82A74B",
      "#FF8D69",
      "#ED6A5A",
      "#FED18C",
    ],
    positive: "#45DF4C",
    negative: "#FF3389",
  },
  components: {
    cartesian: {
      padding: "6px 16px",
    },
    dashboard: {
      card: {
        border: `"1px solid ${colors.darkGrey}"`,
        backgroundColor: "#212426",
      },
    },
    number: {
      value: {
        fontSize: "18px",
        lineHeight: "22px",
      },
    },
    popover: {
      zIndex: 201,
    },
  },
};
        
      
        
const metabase: MetabaseTheme = {
  fontFamily: "Arsenal",
  fontSize: "14px",
  colors: {
    brand: colors.primary,
    "brand-hover": "#fff",
    "brand-hover-light": "#fff",
    filter: colors.viz1,
    summarize: "#BE54C0",
    "text-primary": colors.green3,
    "text-secondary": colors.green3,
    "text-tertiary": colors.green3,
    border: colors.green1,
    background: colors.background,
    "background-secondary": colors.background,
    "background-hover": colors.background,
    "background-disabled": colors.green2,
    charts: [
      colors.viz1,
      "#E09862",
      "#BE54C0",
      "#DDA51F",
      "#B34332",
      "#4998E3",
      "#BE54C0",
      "#DDA51F",
    ],
    positive: colors.green3,
    negative: "#B34332",
    shadow: "rgba(0, 0, 0, 0.1)",
  },
  components: {
    cartesian: {
      padding: "6px 16px",
    },
    dashboard: {
      backgroundColor: "transparent",
    },
    number: {
      value: {
        fontSize: "36px",
        lineHeight: "36px",
      },
    },
    popover: {
      zIndex: 201,
    },
  },
};
        
      
        
const metabase: MetabaseTheme = {
  fontFamily: "DM Mono",
  fontSize: "14px",
  colors: {
    brand: colors.primary,
    filter: colors.secondary,
    "text-primary": colors.darkGrey,
    "text-secondary": colors.lightGrey,
    "text-tertiary": colors.lightGrey,
    border: "#3B3F3F",
    background: colors.background,
    "background-hover": "#FCFAF1",
    "background-disabled": colors.lighterGrey,
    charts: [
      colors.primary,
      colors.negative,
      "#ECB405",
      "#BD37C9",
      colors.positive,
      "#545455",
      colors.primary,
      colors.negative,
    ],
    positive: colors.positive,
    negative: colors.negative,
  },
  components: {
    cartesian: {
      padding: "6px 16px",
    },
    dashboard: {
      card: {
        border: "1px solid var(--mantine-color-gray-3)",
      },
    },
    number: {
      value: {
        fontSize: "24px",
        lineHeight: "30px",
      },
    },
    popover: {
      zIndex: 201,
    },
  },
};
        
      

管理每个组件的用户可见和可操作内容

为大规模数据探索定义权限和交互工具。为某些人提供只读访问权限。为某些人提供图表钻取功能,但不能保存。为其他人提供完全访问权限,可以创建、修改和保存问题,创建仪表盘等。

        
switch(currentUser.role) {
  case curator: {
    return (
      <MetabaseProvider config={config} theme={theme}>
        <InteractiveQuestion questionId={questionId} />
      </MetabaseProvider>
    );
    break;
  }
  default: {
    <MetabaseProvider config={config} theme={theme}>
      <StaticQuestion questionId={questionId} />
    </MetabaseProvider>
  }
}
return <GuestGreeting />;
        
      
        
switch (currentUser.role) {
  case (curator): {
    return (
      <MetabaseProvider config={config} theme={theme}>
        <InteractiveQuestion questionId={questionId} />
      </MetabaseProvider>
    );
  }
  default: {
    return (
      <MetabaseProvider config={config} theme={theme}>
        <StaticQuestion questionId={questionId} />
      </MetabaseProvider>
    )
  }
}

return <GuestGreeting />;
        
      

查看 SDK 的成功案例

来自真实客户的真实成果,他们使用 SDK 快速交付了自定义分析功能。

Marketfuel logo

一名开发人员,30 天:从概念到生产

Marketfuel 需要紧密集成的分析功能,以在其电子商务平台中保持品牌体验。通过使用嵌入式分析 SDK,他们仅用一名开发人员,在不到一个月的时间里就完成了概念验证。

“使用 Metabase 对我们来说是一个改变游戏规则的举措。它让我们能够专注于我们最擅长的事情,而无需重新发明分析功能,从而节省了我们的时间和资源。”

Brian Urso

Marketfuel 联合创始人兼首席技术官

了解 Marketfuel 如何使用 SDK 将报表构建到其产品中
Owlery logo

将仪表盘迭代时间从几天缩短到几小时

Owlery 需要一个解决方案,让他们的团队和客户都能够创建和管理仪表盘,而无需工程师的持续参与。SDK 为他们提供了将分析功能无缝集成到产品中的灵活性。

“我们对使用 SDK 的决定感到非常满意。它让我们能够掌控我们产品的未来,并为我们的客户提供最佳的分析体验。”

Travis Downs

Owlery 联合创始人

了解 Owlery 如何使用 SDK 更快地将产品推向市场

由您决定用户体验

自定义每个组件的行为和流程,例如在菜单中添加自定义操作,或彻底改造查询构建器的布局。没有规则限制。

Ux by You 1
        
<MetabaseProvider
  config={config}
  theme={theme}
  pluginsConfig={{
    mapQuestionClickActions: (clickActions, clicked) => {
      const nextClickActions = [...clickActions]

      // If we are drilling down on the user id, add a custom action to view the user profile.
      if (clicked.column?.name === "user_id") {
        nextClickActions.push({
          buttonType: "horizontal",
          name: "view-profile",
          section: "info",
          type: "custom",
          icon: "person",
          title: "View user profile",
          onClick: ({ closePopover }) => {
            console.log(`View Profile > user_id = ${clicked.value}`)
            closePopover()
          },
        })
      }

      return nextClickActions
    },
  }}
/>
        
      

适合您任何需求的正确实施类型

快速

Iframe 嵌入

适用于需要以极少的工程开销快速实现嵌入式分析的组织。
  • 在您的应用中嵌入图表、仪表盘和报表。提供交互式或静态两种模式。
  • 交互式嵌入允许您进行白标定制并设置权限,以便客户可以查询、可视化和钻取数据。
  • 静态嵌入允许您的用户在一个简单的仪表盘中查看您的数据,但不能点击进入数据内部。
查看实时演示
Interactive Embedding
定制化

适用于 React 的嵌入式分析 SDK

适用于需要定制化应用内分析的组织。包含 Iframe 的所有功能,但具有更多的控制和灵活性。
  • 选择您要嵌入的组件以及它们的位置,以实现与您应用的深度集成。
  • 按组件和用户管理权限和交互性。
  • 精细的主题设置,使分析功能看起来就像是您产品的一部分。
了解更多
Interactive Embedding
还有问题吗? 我们很乐意为您提供帮助
联系我们
© . This site is unofficial and not affiliated with Metabase, Inc.