■presentnnv
presentnnv(cell, expr1, expr2)如果cell引用的单元在model子句执行之前已经存在,并且该单元的值不为空,则返回表达式expr1。如果记录不存在,或单元值为空,则返回表达式expr2;
■ignore nav 和 keep nav
此关键词使用在 model后面;
ignore nav返回值如下:
●空值或缺失数字值时返回0
●空值或缺失字符串值时返回空值字符串
●空值或缺失日期值时返回01-jan-2000。
●其它所有数据库类型时返回空值
keep nav对空值或缺失数字值返回空值,默认条件;
select ..... from table model ignore nav paratition by .... dimension by .... measures ....... 更新已有的单元默认情况下,如果表达式左端的引用单元存在,则更新该单元。如果该单元不存在,就在数组中创建一条新的记录。可以用rules update 改变这种默认行为,支出在单元不存在的情况下不创建新纪录;
为了验证效果,我们引用本文开头的代码:
select prd_type_id, year, month, sales_amount from all_sales where prd_type_id between 1 and 2 and emp_id = 21 model partition by (prd_type_id) dimension by (month, year) measures (amount sales_amount) rules update ( sales_amount[1, 2004] = sales_amount[1, 2003], sales_amount[2, 2004] = sales_amount[2, 2003] + sales_amount[3, 2003], sales_amount[3, 2004] = round(sales_amount[3, 2003] * 1.25, 2) ) order by prd_type_id, year, month;引用从图中可以看出已经没有2004年的数据了;