...
警告 |
---|
以"事实表"为中心,通过表或者查询的关系建议一个子图;一个子图就是围绕事实表型形模型或者扩展的星型模型; 如果在报表层次查看2个事实表的数据,并且通过勾选的字段无法找到关联关系(即不在同一个查询路径上),会提示:无法正常显示数据,因为无法确定勾选字段之间的关系路径,它们可能不在同一个关系路径上。 |
1、模型关系会将应用于模型表列的筛选器传播到其他表或查询。 只要有关系路径可循,筛选器就会进行传播,这可能涉及传播到多个表、查询。
关系路径是确定性的,这意味着筛选器始终以相同的方式传播,而不会随机变化。
2、在下图示例中,模型由四个表组成:"Category"、"Product"、"Year" 和 "Sales", "Category" 表关联到 ”Product“ 表,而 ”Product“ 表关联到 “Sales”表, ”Year“ 表也关联到 “Sales” 表。 所有关系均为 一对多.
3、关系属性:
- 模型关系可将一个表/查询中的一列关联到另一个表/查询中的一列。
- 无法将同一表中的一列关联到另一列。
- 无法使用数据模型创建父子关系。
4、关系支持:手动创建关系、加载期间自动检测、以及手动检测。
2.2 手动创建关系
数据模型支持手动创建关系。
以产品自带的 “产品表”、“订单表”、“产品类别表”等创建订单模型为示例进行说明,为了更好的说明,先关闭自动检测表关系的设置项: OLAP_QUERY_AUTO_ADD_CHECK_LINK=false。
...
当系统没有开启自动识别字段关系时,可以点击 检测关系 检测各个表/查询之间的关联关系。规则与第2章 在加载期间自动检测 一致。
3 假设引用关系完整性
当连接到使用 DirectQuery 的数据源时,你可以使用“假设引用完整性”选项对数据源运行更高效的查询。 此功能对基础数据有一些要求,并且仅在使用 DirectQuery 时可用 直连 的数据源时,你可以使用“假设引用完整性”选项对数据源运行更高效的查询。
设置“假设引用完整性”,使数据源上的查询使用 INNER JOIN 语句而不是 OUTER JOIN 语句,从而提高查询效率。
3.1 使用假设引用关系完整性的前提条件
这是一项高级设置,仅在连接到使用 DirectQuery 的数据时才可用。 若要使“假设引用完整性”正常工作,必须满足以下要求:
- 关系中 From 列中的数据始终不能为 Null 或 空白
- From 列中的每个值在 To 列中都有对应的值
在这种情况下,From 列是一对多关系中的“多”,或是一对一关系中第一个表中的列。
3.2 使用假设引用完整性的示例
1、创建数据模型并把产品自带的northwind数据库的“产品表(product)”、“订单表(orders)”加入到模型中2、”等加入到模型中。
2、下图显示了 OrderDetail 表和 Products 表,引用完整性存在于 OrderDetail [ProductID] 和 Products[ProductID] 之间。 OrderDetail 表中的 [ProductID] 列始终不能为 Null ,所有值也会出现在 Products 表中。 在这种情况下,应设置“假设引用完整性”以获得更高效的查询。