...
信息 | ||
---|---|---|
| ||
1、数据模型支持自动检测关系,也支持手动创建关系、手动检测关系。 2、数据模型默认开启 自动检测关系 ,如没有开启:需要在运维设置/ 常用功能 / 系统选项/高级设置 设置 OLAP_QUERY_AUTO_ADD_CHECK_LINK=true,在加载表或者查询时才会自动检测关系。 3、如开启了自动检测关系:假设自动检测没检测出来,用户手动设置关系不正确时,会提示关系无效,但目前未强制更正;检测关系的原理就是利用建立关系的字段在表中是否重复,会真实查数据库,部分数据库慢可关闭此检测。 4、基数 暂不支持 多对多。 5、假设引用关系完整性,仅在数据模型是直连模式生效,抽取模式不生效。 6、在V11 版本去掉了 一对一(内连接)、一对一(外连接),只有 一对一;如果是旧资源升级: 7、产品目前支持设置筛选方向:多对一、一对多默认单向筛选;一对一默认就是双向筛选,详情可查看:双向筛选介绍。 8、基于指标模型生成的数据模型无法设置查询/表关系,详细可查看:指标模型。 |
要了解关系,需要先了解子图概念。
2 关系
信息 |
---|
自动识别关系字段原则:相同别名+相同数据类型的字段,会自动关联。 |
2.1 关系用途
1、数据模型设置的关系会应用于模型表列的筛选器传播到其他表或查询, 只要有关系路径可循,筛选器就会进行传播,这可能涉及传播到多个表/查询,
...
以产品自带的 “产品表”、“订单表”、“产品类别表”等创建订单模型为示例进行说明。
为了更好的说明,先在运维设置/系统选项/高级设置关闭自动检测表关系的设置项高级设置中关闭自动检测表关系的设置项: OLAP_QUERY_AUTO_ADD_CHECK_LINK=false 或者把模型的 自动检测表关系 禁用。
...
选项 | 内容 |
---|---|
关系 |
|
条件 | 默认 等于,支持等于、不等于、大于等于、小于、小于等于;如果是抽取模式,并且缓存库是ClickHouse,则不支持 等于、不等于、大于等于、小于、小于等于 条件(ClickHouse库本身不支持)。 |
基数 |
|
假设引用关系完整性 | 该设置项仅对 直连 模式生效。 详情可查看本篇章节 假设引用关系完整性 。 |
方式1:
方式2:
3、根据步骤2设置好各个表、查询的关系,最终效果如下,构建了一个 星型模型:
...
当系统没有开启自动识别字段关系时,可以点击 检测关系 检测各个表/查询之间的关联关系。规则与第2章 在加载期间自动检测 一致。
锚 | ||||
---|---|---|---|---|
|
3 基数
信息 | ||
---|---|---|
| ||
1、逐个判断查询相同别名的字段列,是1还是多;当count()的数量和count(distinct(XXXX))的数据不一致,说明该列是多,否则为1。 2、例如orders 与orderDetail 表,关联字段是OrderID,当orders 的count(*)与count(distinct (OrderID)),是一致的,则认为是“一”的一方;当orderDetail的count(*)与count(distinct (OrderID))不是一致时,则认为是“多”的一方。 3、注意:这个检测方法会做一次count,所以数据库执行count慢时,会出现检测性能问题;自动构建表关系就是依赖基数检测结果,如果数据量很大时,建议关闭自动检测基数。 |
信息 | ||
---|---|---|
| ||
1、子图(也可以理解为扩展表),也可以理解为数据模型中的每个表都可构建一个子图,A表的子图是以A表为中心,根据筛选方向即箭头指向它的,代表能筛选它(比如B-→A,即B可以筛选A)都会把它纳入子图中。 2、每个子图,我们可以理解为以"多" 方 left join "一"方构建子图查询,如果在直连模式下勾选了“假设引用完整性”,也就是”多“方有的记录”一“方一定存在,并且”一“方有的记录,多方也一定存在,子图会用 inner join 构建查询,部分数据库inner join会更快。 3、注意:我们的模型是动态建模,不是基于肥模型建模,根据勾选的字段进行建模的。 用户查询时,是根据用户所选维度、度量、条件,从数据模型中,动态查找相关表及其子图,基于命中后的子图再查数;查询性能,一般和命中的子图本身的查询性能有关,和整个数据模型关系不大或者说是固定消耗(除非模型超大,模型定义的解析消耗较大时间)。 |
3.1 多对一/一对多
1、“一对多”和“多对一”基数选项基本相同,并且它们也是最常见的基数类型:
...
2、在数据模型中,”订单表“和”订单明细表“基数关系如果是 一对多,代表”订单表“中用于和”订单明细表“建立关系的字段值OrderID,在”订单明细表“是唯一的; ,代表”订单表“中用于和”订单明细表“建立关系的字段OrderID,在”订单表“是唯一的; ”订单表“中用于建立与”订单明细表“关系的字段值,在”订单明细表“会有多条记录匹配。
...
3、站在业务角度,数据模型中的基数关系(一对一、一对多/多对一),描述的是真实业务数据之间联系,能反应真实世界对应业务实体之间的关联关系描述的是真实业务数据之间的联系,能反映真实世界对应业务实体之间的关联关系,如一个顾客可以有多笔订单,一个订单可能购买多个产品,一个订单也可能分拆多个快递单等等,对应到数据模型就是:
...
4、如下图所示,请注意 Orders[CustomerID] 和 Customers[CustomerID ] 之间不存在引用完整性,Orders[CustomerID ]包含一些值,这些值不存在于 Customers 表中, 在这种情况下,不应设置 假设引用完整性。
5 关系布局
使用数据模型的布局,可以创建仅包含模型中部分表或查询的关系图,可以帮助你提供你想要使用的表的更清晰视图,并让你能够更为轻松地使用复杂数据模型。使用数据模型的布局,可以创建仅包含模型中部分表或查询的关系图,可以帮助你提供你想要使用的表的更清晰的视图,并让你能够更为轻松地使用复杂数据模型。
5.1 创建单独的关系视图
具体操作如下:
1、以产品自带的northwind数据库的“产品表”、“订单表”等构建“订单模型”。
2、然后在创建单独的关系视图,也可以叫做布局
- 首先选中 关系视图 的 所有表 右键菜单 新增布局,布局名称默认布局1,布局2,布局3,......。
- 再到右侧维度区域 选中“产品表”,然后 右键菜单 添加相关表 ,会把“产品表”相关联的所有表添加到布局中; 一般是添加 事实表,以事实表为中心,查看其对应的维表关系、基数设置。
- 如果发现在布局中添加错了表或查询也可以使用右键菜单的 从布局中删除 菜单将其删除。
- 构建好布局之后,可以在布局上修改各个表/查询的关系,会直接更新到 所有表 中。
- 构建好布局之后,可通过选中布局名称,然后 右键菜单 对应其重命名、或者删除操作,也可以新增更多的布局。
- 布局里面的表或查询的右键菜单基本与 所有表中右键菜单是一致的,详情可查看:设置及修改查询。
- 布局支持直接添加各个查询,布局中添加了,在 所有表中也会添加。
...