关系数据建模

Zoho Reports中一个很棒的功能是它支持关系数据建模。您可以创建或者导入一个由一个关系数据库中多个关联表组成的数据库。在关系数据库中,使用外键关系来关联表。在Zoho Reports中,使用可以将一个表中的某列指向另一个表中某列的引用列功能来实现。

使用引用列这样的功能您可以:

  • 组织您标准化模型中的数据,避免多个表中的信息重复。
  • 分离为度量 (您可以聚合数值数据列)以及事实/维度 (您使用其进行报表分组的数据列)。
  • 定义相似的模型,例如对报表和分析都进行了优化的星型模式 & 雪花型模式。

一旦您使用引用列关联了两个表,Zoho Reports将使用此信息通过结合这些表中的列来使您能够创建报表。对此,将会在此文档的 使用自动连接来连接表 部分更加详细地讨论。

使用引用列连接表

让我们尝试通过创建一个样例雇员数据库来进行解释。假设雇员数据库由两个表部门雇员组成。部门表包含两列 - 部门名称雇员ID

雇员表包含雇员名称 和他们各自的雇员ID。每个雇员所属的部门来源于第三列部门ID

我们定义部门表中的部门ID 列被雇员表中的部门ID 列所引用。点击雇员表中的编辑设计按钮来定义此关联。双击引用列字段的单元格,单元格中的下拉框会列出不同表 & 它们的列。在我们的例子中,我们选择部门表的部门ID

现在将会出现如下所示的对话框,其中包含了处理转化期间错误和维护数据完整性的选项。

这里是设计更改设置对话框中可用选项的简述。

如果转换出错?

更改一个列为引用列可能会发生错误。此选项列出了假若引用列转换期间发生错误将采取的操作。选项有:

  • 为相应记录的列设置空值:

    如果选择此选项,那么转换期间每个失败行的相应引用列值将会被设置为空(NULL)。

  • 停止转换并回滚更改: 如果选择了此选项,转换期间发生错误的话,将会终止整个转换并且所做的更改将会被回滚。这样,表将会保留现有的设计 & 值,而且不会创建任何的引用列和发生任何变更。

删除引用列(父表)的值时:

本节提供当父表 (您所引用的表)中的一条记录被删除时子表(您定义了引用的表)可采取的操作选项。下一个主题强制数据完整性部分会详细地讨论此选项。

点击确定,Zoho Reports将会创建表之间的引用列关系。
当在一个引用了另一个表某列的表中添加一个新行时,会自动列出所有的值。比如说添加一个新的雇员部门ID 将会列在部门 列,然后您可以选择新雇员 所属的合适部门。

强制数据完整性

为了确保从相关表删除数据行时保持数据的完整性,Zoho Reports支持以下功能。

  • 保留子表数据
  • 级联删除
  • 删除时设置为空

这些选项基本上指定了当在父表(您所引用的表)中删除一条记录时子表(您定义了引用的表)可采取的操作。

保留子表数据

当使用引用列关联表,在打开的设计更改设置对话框中选择了此(子)表没有相应操作选项时,此功能是可用的。选择了此选项,即使删除父表中的相应数据,子表中数据仍将会保留。强烈推荐此选项,因为它提供了高性能的数据上传(添加/修改/删除记录)到表。

级联删除

当使用引用列关联表,在出现的设计更改设置对话框中选择了从子表中删除相应行选项时,此功能将会是可用的。选择此选项之后,删除父表中某行将会随之使Zoho Reports删除子表中所有的相应行 (Zoho Reports中的父表和子表是使用上面讨论过的引用列功能关联起来的)。此选项基本上确保了子表中的任何行在父表中都会有一个相应的关联行。这在关系建模中称之为强制数据完整性

继续以上的例子,如果部门表(父表)中删除了任意一个部门的话,那么将会从雇员 表(子表)中自动地删除所有的雇员。假设,比如说删除了财务部门(行)。

这将会导致删除相应的雇员行。

删除时设置为空

当定义一个引用列,在设计更改设置对话框选择了将子表相应值设置为空(Null)选项时,此功能将会是可用的。如果选择了此选项且删除了父表中的某行,那么子表中相应行的引用列值将会被设置为NULL (即空)。这意味着,您允许即使父表中没有关联行而子表中的行仍然存在。

在上面的例子中,如果删除财务部门(行)且这个选项是启用的,那么雇员表中的所有相应行都将会被如下所示设置为NULL。

使用引用列连接表

引用列可被用于连接您需要从一个报表数据库的2个或更多表中检索数据的表。在Zoho Reports,可以按照以下2种方式连接带有引用关系的表:

使用自动连接来连接表

(观看自动连接表 & 创建报表视频)

在创建报表的时候,Zoho Reports提供给您一项特殊的称作自动连接的功能,可以使用其自动连接使用引用列连接的表。选择完您想要基于其创建报表的表之后,自动连接功能要决定是否选中的表与数据库中其他表有任何的引用关系。如果有,自动连接将会在报表设计器列列表面板列出关联表的所有列。

一旦列出来,您可以从列表拖拽所需的列到单独的区域来创建报表。Zoho Reports将会连接相应的表并获取所需的数据来生成报表。(您也可以使用查询表来连接表。参照使用查询表来连接表这个主题)。

下面的例子显示了部门与对应雇员数量的数据透视表,此数据透视表是通过雇员 部门 表使用自动连接功能所创建。

在以上的例子中,自动连接功能使用两表中共通的部门ID (引用)列来检测部门雇员 表之间创建的引用关系(参照 使用引用列来关联表 主题部分讨论的示例模型)。如以上截图所示,它会基于此关系在报表设计器列列表面板部分列出两个表中的列。

在这个透视表中,我们使用了部门表的部门名称 列(放在区域)和雇员表的雇员ID(放在应用了"合计"函数的数据 区域)。一旦生成了透视表,自动连接功能将会使用部门ID 引用列自动地连接部门雇员这两个表中的数据并提供报表。

配置连接类型时注意:

Zoho Reports默认将使用左连接类型来连接表。可能的连接类型有

  • 左连接 - 将会使用子表(左)的所有行和父表(右)的匹配行计算报表。匹配是基于子 & 父表之间定义的引用列完成的。这将是默认的连接类型。
  • 右连接 - 将会使用父表(右)的所有行和子表(左)的匹配行计算报表。匹配是基于子 & 父表之间定义的引用列完成的。

您可以选择更改连接类型。当通过连接表创建报表时,您将会在报表设计器中看到一个查看关系图标。点击它,将会打开查看此报表中使用的关系对话框。选择连接类型并点击应用

使用查询表来连接表

(观看Zoho Reports中创建查询表视频)

在Zoho Reports中,您可以通过使用共同列创建一个包含SQL Select连接查询的查询表来结合一个或多个表中的数据。例如,可以创建一个如下所示的雇员和部门表相结合的查询。

上面的查询例子结合了雇员 & 部门表,将部门名称映射到每个雇员。通过连接必要的表而创建的查询表,Zoho Reports允许您创建任意类型的报表以进行分析和可视化。

x