页面树结构
转至元数据结尾
转至元数据起始

正在查看旧版本。 查看 当前版本.

与当前比较 查看页面历史

« 前一个 版本 11 下一个 »

1 概述

在数据模型中进行表/查询关联时,支持对某个数据连接的多个表进行关联,也支持对多个数据连接中的表进行关联。

前置条件

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

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

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

4、基数 暂不支持 多对多

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

2 关系

2.1 关系用途

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


1、模型关系会将应用于模型表列的筛选器传播到其他表或查询。 只要有关系路径可循,筛选器就会进行传播,这可能涉及传播到多个表、查询。

关系路径是确定性的,这意味着筛选器始终以相同的方式传播,而不会随机变化。 

2、在下图示例中,模型由四个表组成:"Category"、"Product"、"Year"  "Sales", "Category" 表关联到 ”Product“ 表,而 ”Product“ 表关联到  “Sales”表, ”Year“ 表也关联到 “Sales” 表。 所有关系均为 一对多.

3、关系属性:

  •   模型关系可将一个表/查询中的一列关联到另一个表/查询中的一列。
  •  无法将同一表中的一列关联到另一列。
  • 无法使用数据模型创建父子关系。

4、关系支持:手动创建关系、加载期间自动检测、以及手动检测。

2.2 手动创建关系

数据模型支持手动创建关系。

以产品自带的 “产品表”、“订单表”、“产品类别表”等创建订单模型为示例进行说明,为了更好的说明,先关闭自动检测表关系的设置项: OLAP_QUERY_AUTO_ADD_CHECK_LINK=false。

具体操作步骤如下:

1、创建数据模型,并加入 “产品表”、“订单表”、“产品类别表“等表。

2、设置 ”订单表“与”订单明细表“的关系,选中”订单表“ 再右键菜单 新建关系,会出现 编辑关系对话框。

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

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

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

       

3、根据步骤2设置好各个表、查询的关系,并且构建数据模型

4、保存数据模型,可以查看到已经设置好关系的模型:

2.3 在加载期间自动检测

    

  • 开启自动检测关系:需要在运维设置/ 系统设置 / 高级选项 设置 OLAP_QUERY_AUTO_ADD_CHECK_LINK=true,在加载表或者模型时才会自动检测关系。
  • 不管是直连还是抽取模式,如果数据模型同时加载两个或多个表/查询时,Smartbi将尝试为你查找并创建关系, “关系”、 “基数” 会根据规则自动创建关系。如果无法以高置信度确定存在得匹配项,则不会创建关系。但是仍可使用 新建关系 对话框来手动创建或者编辑关系。
  • 如果 ”自动检测表关系“是禁用状态,则该模型加载表或查询时,不会自动检测关系,需要手工创建或者使用工具栏的”自动检测“创建关系。


2.4 使用"自动检测"创建关系

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


3 假设引用关系完整性

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

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

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

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

  • 关系中 From 列中的数据始终不能为 Null  空白
  • From 列中的每个值在 To 列中都有对应的值

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

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

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

2、下图显示了 OrderDetail 表和 Products 表,引用完整性存在于 OrderDetail [ProductID] 和 Products[ProductID] 之间。 OrderDetail 表中的 [ProductID] 列始终不能为 Null ,所有值也会出现在 Products 表中。 在这种情况下,应设置“假设引用完整性”以获得更高效的查询。 

              

              




  • 无标签