【贝克汉姆教程】2.3.3 Set (关系)Relationships and (基数)Cardinality

浏览: 3267

2.3.3 Relationships and Cardinality

  在模型中针对多个查询主题,Relationships则描述了如何创建关系型的查询,没有relationships则查询主题就变成了独立的数据集。关联是数据模型中不可缺少的,普通俩个查询对象之间建立关联,是最为常见的用法。然而实际应用中一个查询往往是高度复杂的,因而会有错综复杂的关联,而关联也会因此产生了许多副作用,如连接陷阱、转移陷阱、深坑陷阱和扇形陷阱。那么如何解决这些陷阱呢,首先来了解Relationships的含义。

2.3.3.1 Relationships的含义

  为查询主题设置关联之前,我必须懂得它的含义和业务规则。 以下三种类型的关联:One-to-one查询对象中只有一个实例设计到另一个查询对象的一个实例,如一个学生只有一个学号;One-to-many or zero-to-many查询对象中有一个实例涉及到另一个查询对象的多个实例,如一个老师教多个学生;Many-to-many查询对象中多个实例涉及到另一个查询对象的多个实例,如一个学生有多个老师。

Clipboard Image.png

  当导入元数据到FM中建模设计后,系统会基于数据库中设置的PK(主键)和FK(外键),为多个查询主题创建relationships。亦可手工修改它们以便最好的表示符合项目业务需求的逻辑结构。导入元数据后须检查存在工程里的relationships和cardinality(基数)设置是否正确。有时,数据库中可能没有为元数据指定引用实体(有些PK和FK没有在数据库中指定),因此在导入FM之后须指定关联字段为identifier后且手工设置关联。

  Relationships将会被存储在两个查询主题最近的公共父级中,如文件夹(Folder)或命名空间(Namespace)。如文件夹P_Folder里有Product,Product_line俩查询对象,他们之间的Relationships将会包含于P_Folder中。若将Poruduct_line查询对象移出P_Foder之外,则relationships将会被移动到P_Folder的最近父级。若将Relationships移动到另一个Namespace中,则与其相关联的Product,Product_line将会同时被移出到新的Namespace中。

  1)Modify(修改),您可为Relationship重命名、重新定义基数、编辑关系表达式或修改操作符

Clipboard Image.png

 2)Complex Expression(复杂关联表达式),一个关联有时需要多个或复杂的表达式来实现,如

Where a.product_id=b.product_id and a.Sales_country=#prompt(‘Country’)# and a.Year(Sales_Date)=’2004’

Clipboard Image.png

 3)Creat Relationships Shortcut(新建关联快捷键)

它是一个指向已存在的关系的指针,任何对源关联的修改会自动影响快捷键。它主要用于解决俩查询主题中的不明Relationships.请看下一章(2.3.4解决不明确的Relationships)。右键任意2个shortcut query objects—>Create relationships

Clipboard Image.png

  4)Detect and Generate Relationship(检测和生成关联)

根据你所选择的规则,为俩查询对象自动建立Relationships。选中2个查询对象Tools菜单选择‘Detect Relationships’选择生成规则:

Clipboard Image.png

Clipboard Image.png

2.3.3.2 Cardinality (基数)

  两个查询主题之间存在关系。关系的基数是两个查询主题中每个的相关行数。这些行通过关系的表达式进行关联,而该表达式通常涉及基础表的主键和外键。IBM Cognos 8 按照以下方式使用关系的基数:

  ● 避免对资料数据重复计数

  ● 支持星形模式模型中常见的循环联接(loop joins)

  ● 优化对基础数据源系统的访问

  ● 识别用作资料或维度的查询主题

  使用来自不同基础表的多个资料的查询将拆分为适用于每个基础资料表的单独查询。每个单资料查询涉及各自的资料表以及与该资料表相关的维度表。另一个查询用于将这些独立查询合并到一个结果集。后面这项操作通常称为缝合查询。当看到完整的外部联接时,便说明有缝合缝合。

  生成的查询中的基数

  IBM Cognos 8 既支持最小-最大基数,又支持可选基数。

  在0:1 中,0 是最小基数,1 是最大基数。

  在1:n 中,1 是最小基数,n 是最大基数。

  当关注最大基数时,与指定为1:1 到1:n 的基数的关系通常表达为1 到n。

  最小基数0 表明关系是可选的。如果您希望查询在没有匹配项时保留关系的另一方的信息,请指定最小基数为0。例如,客户和实际销售额之间的关系可以指定为1:1 到0:n,这表示报表即使在没有任何销售数据时,也会显示请求的客户信息。所以,1 到n 关系也可以指定为:

  ● 0:1 到0:n

  ● 0:1 到1:n

  ● 1:1 到0:n

  ● 1:1 到1:n

  如下图:Sales Branch 用作Order Header 对应的维度,Order Header 用作Sales Branch对应的资料。一个Sales Branch有多个Order Header.

Clipboard Image.png

 确保基数在模型中正确捕获非常重要,因为基数决定资料查询主题的检测,并可用来避免对资料数据重复计数。生成查询时,IBM Cognos 8 按照以下基本规则来应用基数:

  ● 基数应用于查询的上下文中。

  ● 1 到n 基数暗示了n 方的资料数据,并暗示了1 方的维度数据。

  ● 根据回答特定查询所需的关系,查询主题可以用作资料查询主题或维度查询主题。

  亦可使用“Tools-->Run Model Advisor”来查看对模型中的基数所暗示行为的评估。

  至此,关于关系和基数的概念已介绍完毕,当然这里只能做一个引导,更多的还须您去理解含义。关系和基数是建模设计时必不可少的部分,然凡事相对,自然也会有一些副作用发生,比如会发生连接陷阱等不明确关系。如何处理这些副作用呢?请继续关注下一篇 “【贝克汉姆教程】2.3.4 FM不明确Relationships“

推荐 0
本文由 贝克汉姆 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册