请教问题的英文邮件有关biee 函数问题

下次自动登录
现在的位置:
& 综合 & 正文
Oracle BIEE 中的时间维与时间轴函数,同期,同比,环比,累计,同期累计计算
Ago:从当前时间起回溯用户指定的 n 个时间段,返回当时的度量值。
ToDate:从用户指定时间段的起点开始,到当前时间为止,计算度量值的累计值。
使用时间轴函数的前提条件是在逻辑模型内定义了时间维。上面两个函数说明中的“时间段”实际上指的是时间维的层级(Level)。例如使用 Ago 函数定义“去年同期值”,指定的时间段为“年”这一层级,指定的回溯周期为 1,表示得到去年的值。再比如使用 ToDate 函数定义“本年累计值”,指定的时间段也是“年”这一层级,表示从年的起点(年初)开始到当前时间为止,求度量值的累计值。
创建时间维的准备工作
时间维的创建过程与创建普通维度基本相同,只是维度对象的某些设置不同。因此创建物理模型、逻辑模型、及展现模型的过程在此不细说了,如果你不了解请参考之前的文章 。
在物理模型层,导入时间维表 V_COMMON_DATE;将 V_COMMON_DATE.DAY_ID 定义为 V_COMMON_DATE 的主键;将 V_COMMON_DATE.DAY_ID 定义为 V_FINANCE_EXPENSE.CONSUME_DATE 的外键。
在逻辑模型层,将物理表“V_COMMON_DATE”拖放到逻辑模型“Finance”内;使用“Rename Wizard”重命名;将逻辑字段“Day Id”定义为逻辑表“Date Dim”的逻辑主键;在逻辑表“Date Dim”和“Expense Fact”之间创建逻辑连接。
在展现模型层,将逻辑表“Date Dim”拖放到展现模型“消费分析”内;只保留年、月、日的名称字段,并重命名。
需要注意的是,Oracle BIEE 对与时间维相关的物理表及逻辑表有以下要求:
如果某个物理表的字段被映射到了时间逻辑表上,那么这个物理表中的字段不能再映射到其他逻辑表中。
作为时间逻辑表的数据源的物理表,只允许与物理事实表关联。且关联只能基于外键(foreign key),而不能基于复杂连接(complex join)。
创建时间维
与创建普通维度对象一样,以逻辑表“Date Dim”为基础创建维度对象“Date”;依次定义层级:“Total Level”、“Year Level”、“Month Level”、“Day Level”,并设定层级的元素数;将逻辑表“Date Dim”的各列拖放当相应的层级;定义各层级的层键,并设定主层键,以及用于下钻的层键。
Number of elements
Use for drilldown)
Total Level
Year Level
Month Level
Month Name
时间维与普通维度有两处不同。首先,双击维度“Date”节点,在“Dimension”对话框中需要选中“Time Dimension”选项,以表明此维度对象为时间维度。
其次,时间维度中需要定义时间序列键(Chronological Key)。时间序列键的作用是表明时间维中具有一组单调增加的时间序列值。定义时间序列 时存在以下原则:
时间维中,至少一个层级上应定义有时间序列键。
物理存储的最细时间粒度上必须定义时间序列键。在例子中,物理表“V_FINANCE_EXPENSEE”的日期字段“CONSUME_DATE”为日期,即 物理存储的最细时间粒度为日期,因此时间维“Date”的“Day
Level”上应该定义时间序列键。
除了必要的时间序列键,时间维的各个层级上均可建立额外的时间序列键,这主要是为提高查询性能服务。
时间维的同一层级上可以建立多个时间序列键,但只有第一个时间序列键有效。
在这个简单的例子中,我只把层级“Day Level”的逻辑层键“Day Id”定义为时间序列键。
使用时间轴函数定义度量值
定义好时间维后,就可以在逻辑事实表中定义使用时间轴函数的逻辑列了。在逻辑表“Expense Fact”上单击右键,选择“New Object\Logical Column”创建逻辑列。在“Logical Column”对话框中选择“Use existing logical columns as source”再按右侧的按钮,可以打开“Expression Builder”编辑逻辑列的公式。最后不要忘记将逻辑列添加到展现模型中。
例如,使用 Ago 函数定义“去年同期值”。
AGO(Finance."Expense Fact".Amount, Finance."Date"."Year Level", 1)
第一个参数是逻辑字段 Finance."Expense Fact".Amount,是用于时间轴运算的度量值;第二个参数是逻辑模型时间维的层级 Finance."Date"."Year Level",表明回溯的时间单位为年;第三个参数表示回溯的时间周期,1 则为回溯一年,即去年。
再例如,使用 ToDate 函数定义“本年累计值”。
TODATE(Finance."Expense Fact".Amount, Finance."Date"."Year Level")
第一个参数是逻辑字段 Finance."Expense Fact".Amount,是用于时间轴运算的度量值;第二个参数是逻辑模型时间维的层级 Finance."Date"."Year Level",表明累计计算开始自年时间的起点,终止到当前时间。
在进行时间查询时应注意几个重要的粒度,以查询 select "Date Dim"."Month Name", "Expense Fact"."Amount Year Ago" 为例:
"Date Dim"."Month Name" 为查询粒度。
"Expense Fact"."Amount Year Ago" 逻辑列对应的时间维层级为时间序列粒度。
在包含时间序列函数的查询中,时间序列粒度必须大于等于查询粒度。
"Expense Fact"."Amount Year Ago" 逻辑列对应的物理表的时间粒度被称为存储粒度。
与存储粒度对应的时间维层级上必须定义时间序列键。
Ago 与 ToDate 函数可以嵌套调用,但需要遵守一定规则。
在使用时间序列函数时也有一定限制,具体请参考 BIEE 文档。
定义如下查询,其中“消费金额(同期)”与“消费金额(年累计)”分别为使用 Ago 和 ToDate 函数创建的逻辑列:
结果如下图所示:
转载请注明出处,谢谢!
&&&&推荐文章:
【上篇】【下篇】软件技术(16)
1.在用EXCEL刷数据源的时候,日期列全部显示为数字,比如在BIEE中显示为“”,在excel中刷出来为“45213”;
问题分析:在设置列属性的时候,看到显示为“文本”,去后台看视图,程序员用to_char函数将原来的日期格式转换成了字符串。(典型的坑爹)
处理方式:在列公式中,使用公式to_datetime函数将格式转换回去,变成日期即可;使用to_date总是不对,可能是因为to_datetime是BIEE自带函数的缘故。其实也可以用EVALUATE函数,但是这个函数需要启用,重启BI服务。
启用EVALUATE函数方式:\instances\instance1\config\OracleBIServerComponent\coreapplication_obis1 下的
NQSConfig.INI找到
# EVALUATE_SUPPORT_LEVEL:
# 1: evaluate is supported for users with manageRepositories permssion
# 2: evaluate is supported for any user.
# other: evaluate is not supported if the value is anything else.
EVALUATE_SUPPORT_LEVEL = 0;
将 0设置为2 (根据自己权限需要)
EVALUATE_SUPPORT_LEVEL = 2;
重启BI服务
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
(2)(5)(6)(8)(2)}

我要回帖

更多关于 请教问题的英文邮件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信