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