页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

信息
title前置条件

1、数据模型支持自动检测关系,也支持手动创建关系、手动检测关系。

2、数据模型默认开启 自动检测关系 ,如没有开启需要在运维设置/ 系统设置 / 高级选项 设置 OLAP_QUERY_AUTO_ADD_CHECK_LINK=true,在加载表或者模型时才会自动检测关系。

3、如开启了自动检测关系,用户手动设置关系不正确时,会提示关系无效,但目前未强制更正,检测关系的原理就是利用建立关系的字段在表中是否重复,会真实查数据库,部分数据库慢可关闭此检测。

4、基数 暂不支持 多对多

5、假设引用关系完整性,仅在数据模型是直连模式生效,抽取模式不生效。,仅在数据模型是直连模式生效,抽,取模式不生效。

2 关系

2.1 关系用途

警告

以"事实表"为中心,通过表或者查询的关系建议一个子图;一个子图就是围绕事实表型形模型或者扩展的星型模型; 如果在报表层次查看2个事实表的数据,并且通过勾选的字段无法找到关联关系(即不在同一个查询路径上),会提示:无法正常显示数据,因为无法确定勾选字段之间的关系路径,它们可能不在同一个关系路径上。

...

选项内容
关系
  • 需要选择原表(左表)的关联字段,再选择目标表(右表)对应的关联字段; 如果原表设置的字段是字符串,那么目标表的也只能选择字符串的字段与之关联。
  • 关系是必填项,一定要设置至少一个关系;点击 支持新建多个关系;假设设置了多个关系,生成的SQL语句是and。
  • 关系支持设置 自定义计算列:比如想要关系字段需要使用contact、replace等函数进行拼接、替换等,需要使用自定义计算列。
条件默认 等于,支持等于、不等于、大于等于、小于、小于等于;如果是抽取模式,并且缓存库是ClickHouse,则不支持 等于、不等于、大于等于、小于、小于等于 条件
基数
  • 定义: 连接基数:属于连接的自然属性(与数据分析领域无关),一般,在有主键、外键的表建立关系时:
    1. 一对多、多对一 关系:字段通过外键关联到目标表的主键字段、或唯一索引字段。
    2. 一对一:通过主键字段(或唯一索引字段)关联到另外一个表或查询的主键(或唯一索引字段)
    3. 当数据库缺乏主键/唯一索引信息标识时,需要用户手动创建关系唯一索引信息标识时,需要用户手动创建关系。
  • 如果设置好了关系,但是不知道基数应该选择什么,可以点击旁边的,检测基数。
  • 站在业务角度,数据模型中的基数关系(一对一、一对多、多对一),描述的是真实业务数据之间联系,能反应真实世界对应业务实体之间的关联关系

           如一个顾客可以有多笔订单,一个订单可能购买多个产品,一个订单也可能分拆多个快递单等等,对应到数据模型就是:

    Image Removed
假设引用关系完整性该设置项仅对 直连 模式生效。 详情可查看本篇章节 假设引用关系完整性 。

...

 当系统没有开启自动识别字段关系时,可以点击 检测关系 检测各个表/查询之间的关联关系。规则与第2章  在加载期间自动检测 一致。


3 基数

3.1 多对一(和一对多 )

1、“一对多”和“多对一”基数选项基本相同,并且它们也是最常见的基数类型:

  • 定义:一个表中共享字段的每个值都可以与另一个表中的多个行相关(该值在另一个表中重复)。
  • 缩写:*:1 或 1:*
  • 表/查询的顺序确定是多对一还是一对多(类似于左右联接)。

 2、在数据模型中,”订单表“和”订单明细表“基数关系如果是 一对多,代表”订单表“中用于和”订单明细表“建立关系的字段值OrderID,在”订单明细表“是唯一的; ”订单表“中用于建立与”订单明细表“关系的字段值,在”订单明细表“会有多条记录匹配。

  • 如果”订单明细表“在左边,”订单表“在右边,我们需要选择”多对一“的关系;如果“订单表”在左边,“订单明细表”在右边,我们需要选择”一对多“的关系

Image Added

3、站在业务角度,数据模型中的基数关系(一对一、一对多/多对一),描述的是真实业务数据之间联系,能反应真实世界对应业务实体之间的关联关系,如一个顾客可以有多笔订单,一个订单可能购买多个产品,一个订单也可能分拆多个快递单等等,对应到数据模型就是:

Image Added


3.2 一对一

信息

1、由于示例使用了 业务表 进行分析,在复现示例时,可以把数据先导入到模型中,详细请参考导入文件数据

2、示例下载数据:车牌与车俩.xls。 


一对一 定义:一个表中共享字段的每个值最多与另一个表中共享字段中的一个值相关;缩写:1:1。

示例:每辆车都有自己的车牌,车牌是特定于一辆汽车的,汽车与车牌的关系是 一对一 的,如下图所示:

Image Added

具体操作步骤如下:

1、把数据导入到模型中,并且设置好关系、基数:

Image Added

2、保存模型并去建仪表盘,拖入”车牌“、"汽车识别号", 效果如下图:请注意,即使汽车未注册或车牌号尚未分配给汽车,也同样会查询出来:

Image Added

4 假设引用关系完整性

当连接到使用 直连 的数据源时,你可以使用“假设引用完整性”选项对数据源运行更高效的查询。

设置“假设引用完整性”,使数据源上的查询使用 INNER JOIN 语句而不是 OUTER JOIN 语句,从而提高查询效率。

...

4.1 使用假设引用关系完整性的前提条件

仅在连接到使用 直连 的数据时才可用。 若要使“假设引用完整性”正常工作,必须满足以下要求:

...

在这种情况下,左表/查询 列是一对多关系中的“多”,或是一对一关系中第一个表中的列。

...

4.2 使用假设引用完整性的示例

1、创建数据模型并把产品自带的northwind数据库的“产品表(product)”、“订单表(orders)”等加入到模型中。

...

4、如下图所示,请注意 Orders[DepotID] 和 Depots[DepotID] 之间不存在引用完整性,因为某些 Orders 的 DepotID 为 Null 。 在这种情况下, 应设置“假设引用完整性

              

...

4.3 设置假设引用完整性

      1、勾选该设置项: 取数的SQL 是inner join; 没有勾选: A left join B,B left join A,两个再加起来,是full join的效果。

  勾选该设置项,将对数据验证此设置,以确保没有   Null   或不匹配的行。 但是,在值的数量非常大的情况下,验证不能保证没有引用完整性问题。2、如果在抽取模式勾选了该选项,依然是不生效。

      如果错误地设置了假设引用完整性,会发生什么?如果在数据中有引用完整性问题时设置“假设引用完整性”,该设置不会导致错误。 但是,可能会导致数据明显不一致。3、如果错误地设置了假设引用完整性,会发生什么?如果在数据中有引用完整性问题时设置“假设引用完整性”,该设置不会导致错误。 但是,可能会导致数据不一致。