【贝克汉姆教程】 2.3.2 决定因素(Determinants)

浏览: 2827

2.3.2、决定因素(Determinants)
  决定因素是什么?为什么要使用决定因素?这个问题一直以来令很多cognos人员迷惑。其实它仅仅是Framework Manager里的一个排除重复记录的概念,理解它的方法莫过于用通俗易懂的实例去理解。相信对determinants还有疑惑的人看完本章教程之后会有新体会。

2.3.2.1、Determinants定义

  Determinants通过表达查询主题中的子集或数据组来反映粒度,并用于确保此重复数据的正确聚合运算。
  决定因素与数据源中键和索引的概念联系最密切,并且是在数据源中特有的键和索引信息的基础上导入的。因此建议建模者检查导入的决定因素,并修改这些决定因素或创建其他决定因素(如有必要)。它没有层次结构的概念,尽管它们被指定的顺序决定它们估算的顺序。

2.3.2.2、Determinants的用途

  建模设计时,在很有限的情况下才需要设定determinants,主要用于以下三个方面:
 
 A、对于重复的键或属性,需要进行计数或执行其他聚合函数。下面用一个简单的sample阐述:
  
维表Time_Dimension(Current_Year,month_key,days_in_month,day_key)
  根据数据记录可得知其中'Days_in_month'是重复的,该月的每一天显示一次。如1月份有31天,则days_in_month会重复31次。若你想在报表中引用它,而又不想看到下(图2.3.2.20)中左边ListTable2的效果。若只令其显示一次,如下图的左边ListTable1的效果,就须对该维表设置决定因素。在报表中展示时,系统自动取唯一值XMIN(Days_in_month for Month_Key),还有个group by。

Clipboard Image.png

上面2个效果所生成的CognosSQL语句如下:

Clipboard Image.png

 将上图表1的效果转化为普通的SQL就好理解得多了:  
   Select current_year,month_key,min(days_in_month) from Time_dimension
 Group by current_year,month_key
  
以上是一个比较简单的理解实例,那么在实际应用中,如事实表、维表,也经常使用了决定个因素。一般来说,只要你的数据表中设置了PK(主键),当被导入FM之后系统自动根据PK设置了决定因素,确保聚合运算避免double count,如下图:

Clipboard Image.png

 因此当在报表中引用Attributes的内容时,都将会采用XMIN取唯一值避免聚合重复计算。对于没有设置PK的数据表,在导入FM之后须手工设置决定因素。
 
 B、用作维度的查询主题具有多级粒度,并将基于不同的键集合联接至资料数据。
  这种情况的只用于’多资料、多粒度’查询(一个维表中的多个键和不同的事实表进行关联,后面的教程里会详细讲解),如Time_dimension(year,month_key,day_key)中day_key关联至 Sales_Fact、month_key关联至Sales_target(月份是该事实表的日期最小粒度,即销售部门只制定了月销售目标)。

Clipboard Image.png

 出现多粒度层的连接,MONTH_KEY和DAY_KEY 。这样当在两层进行多事实查询时,会出现问题,而你则需要防止重复计数。若未设置决定因素报表查询的结果如下: 

Clipboard Image.png

 图中事实表Sales_Target的日期最小粒度是month而不是day,而month在Time_Dimension表中是重复的。根据上图中计算,2000年1月份会有31个"1月"与Sales_Target关联、2000年2月份有29个"2月"月与Sales_Target关联。依次类推,就会得到上面错误的结果。
  如何避免月份的sales_target不重复计数?首先要让日期维表给'月'排重,接下来我们按照下图中的方法设置决定个因素:

Clipboard Image.png

 Day在Time_dimension是唯一的,所以将其设置为Uniquely Identified,而Year、Quarter、Month都是重复的,将其设置为Group By以避免重复。于是将会得到如下正确的结果:

Clipboard Image.png

 现在报表中,可以同时展现某个月份的实际收入与当月的销售目标:

Clipboard Image.png

 C、BLOB数据类型在查询主题中。这里不详述,有兴趣的朋友可以研究研究。

  一般而言,重复的健或属性需要计数或聚合运算多资料多粒度查询BLOB查询时才使用determinants。这里建议根据实际需求去使用它,因为无论是使用relationships或determinants都有一定的副作用。下一篇章继续讲解 '2.3.3 设置Relationships'


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

0 个评论

要回复文章请先登录注册