壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 582|回复: 0

2.3.2、决定因素(Determinants)

[复制链接]
发表于 2012/3/16 15:15:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
决定因素是什么?为什么要使用决定因素?这个问题一直以来令很多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。
  
(图2.3.2.20-ListTable比较)
  上面2个效果所生成的CognosSQL语句如下:
ListTable2产生的cognos sql

ListTable1产生的cognos sql

select
  T1.current_year as current_year,
  T1.month_key as month_key,
  T1.days_in_month as days_in_month
from great_outdoors_sales..gosales.time_dimension T1

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

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

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


(图2.3.2.24 set determinants)
  Day在Time_dimension是唯一的,所以将其设置为Uniquely Identified,而Year、Quarter、Month都是重复的,将其设置为Group By以避免重复。于是将会得到如下正确的结果:
  
(图2.3.2.25 正确的查询结果)
  现在报表中,可以同时展现某个月份的实际收入与当月的销售目标:
  
(图2.3.2.26 多粒度、多资料查询结果)
  C、BLOB数据类型在查询主题中。这里不详述,有兴趣的朋友可以研究研究。
  一般而言,重复的健或属性需要计数或聚合运算多资料多粒度查询BLOB查询时才使用determinants。这里建议根据实际需求去使用它,因为无论是使用relationships或determinants都有一定的副作用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 14:21 , Processed in 0.011939 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表