作为一家分析机构,我们乐于为客户提供自助式分析工具。让业务用户不仅可以探索我们准备好的仪表板,还可以探索整个数据集,这个想法非常强大。但是,业务用户在开始使用自助式分析时经常会遇到困难。
在本文中,我们将阐述自助式服务中常见的实体-关系数据模型的典型问题,并讨论如何通过使用不同的数据建模技术来改善自助式体验。
假设我们有一个从 Google Analytics 获取的典型数据集。我们有关于用户及其事件的信息。通常,我们会为这类数据准备两张表:用户表(Users)和事件表(Events)。
用户数据集示例:
事件数据集示例:
为了满足自助式服务需求,我们通常通过主外键连接事件表(EVENTS)和用户表(USER),并从事件表(EVENTS)中获取一些用户属性。
这种方法看起来很合理,至少直到有一天,我们的一位客户要求为某个管理会议绘制 DAU(日活跃用户)图表。
“您可以自助完成,”我们说,“只需前往事件表(EVENTS),按天统计独立用户数量即可。”
“但是,”业务用户说,“如果我想绘制日活跃用户图表,为什么我要去事件表(EVENTS)呢?我实在不明白!”
这就是公司自助式分析发展中的真正障碍——对工程师来说显而易见的事情,对核心业务用户来说却不一定显而易见。
因此,我们决定寻找一种比传统实体-关系模型更适合自助式需求的数据模型。
在探索了一些数据建模技术后,我们偶然发现了 极简建模方法,它将数据库分解为锚点(领域的主要名词)、锚点之间的链接和属性。
极简建模的要求之一是将链接表与锚点表分开。
因此,在重新建模我们的数据集后,我们得到
-
锚点表(用户和事件)
-
以及一个独立的链接表
这个链接表包含两个 ID:user_id
和 event_id
和事件发生的时间戳。
诀窍在这里:如果我们将此链接表用作自助式分析的主表,我们可以将用户表(USER)和事件表(EVENTS)都链接到它。
因此,用户表(USER)和事件表(EVENTS)将在“汇总”侧边栏中共享相同的级别。
因此,如果业务用户需要绘制日活跃用户指标,他无需猜测应该去哪里:用户表(USERS)还是事件表(EVENTS)。他可以直接进入链接表作为入口点。
使用链接表构建的日活跃用户:
用户(USERS)和事件(EVENTS)的指标都可以仅使用一个链接表来定义。拥有一个宽链接表的这个想法可以扩展:如果我们在领域中有订单(ORDERS)、交易(TRANSACTIONS)和其他锚点,它们也可以在单个链接表中链接在一起,从而成为自助式需求的单一入口点。