Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1105331
  • 博文数量: 148
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3555
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-30 13:00
个人简介

About me:Oracle ACE,optimistic,passionate and harmonious. Focus on oracle programming,peformance tuning,db design, j2ee,Linux/AIX,web2.0 tech,etc

文章分类

全部博文(148)

文章存档

2024年(3)

2023年(28)

2022年(43)

2020年(62)

2014年(3)

2013年(9)

分类: Oracle

2020-06-28 17:13:03

接PART1:http://blog.chinaunix.net/uid-7655508-id-5835050.html

1.2 Cell References(单元格引用)

  单元格引用是一个model查询中最基本的需求。你引用一个单元格是通过分区中的维度来标识。引用model中的单元格有两种方式:symbolic cell referencing and positional cell referencing(符号单元格引用和位置单元格引用).

1.2.1符号单元格引用

  在符号单元格引用中,可以对每个维度指定一个布尔表达式,比如列名(布尔条件比如in ,between,=,>等),注意名字如果有别名,要一致。诸如:

s[y=2001,m=3]   //其中s就是度量的值的别名,通过measures确定,y和m是维度,通过dimension by确定,而且顺序与dimension by一致。

SELECT r, y, m, s

FROM sales_history

WHERE month <= 10

MODEL

RETURN UPDATED ROWS

PARTITION BY (region_id r)

DIMENSION BY (year y, month m)

MEASURES (sales s)

--y=2004因为不存在,所有没有结果,改为2001可以

--s[y between 2000 and 2001,m=3]

--s[2004,m=3]也不行,只要规则左边有一个符号引用,有一个维度不存在就不行

--s[y in (2000,2001),m=3]

-- s[y in (2000,2004),m=3]因为2004的不存在此单元格,所以符号引用没有这个结果,但是2000的存在。

--s[y<=2001,m=3]

RULES (s[y=2001,m=3] = 200000)

ORDER BY y, r, m;




  上面语句的意思是对year=2001,month=3的所有数据的sales置为200000。 比如上面的符号单元格引用写成s[y<=2001,m=3]那么则会将2000年和2001年的3月各区域销售都改为200000

  注意:
  符号单元格引用的功能很强大,能够对指定范围的单元格进行操作,但是符号单元格不能根据原有数据对结果进行预测(指的是规则左边,右边不影响),也就是不能扩展不存在的单元格的值。比如上面的查询改为:RULES (s[y=2004,m=3] = 200000),因为20043月的数据在表中不存在,因此结果为空,但是要改为下面要说的标志单元格引用则可以得到结果。

1.2.2 位置单元格引用

  位置单元格也就是对于每个维度的确定是通过dimension by中维度列的顺序确定的,与符号单元格比较,位置单元格引用没有名字,只有值,如上面的使用位置单元格就是:

       s[2004,3]   //顺序是dimension by确定的名字的对应值。

       改写上面的例子为:

SELECT r, y, m, s

FROM sales_history

WHERE month <= 10

MODEL

RETURN UPDATED ROWS

PARTITION BY (region_id r)

DIMENSION BY (year y, month m)

MEASURES (sales s)

RULES (s[2004,3] = 200000)

ORDER BY y, r, m;

注意:

虽然sales_history表中不存在2004年的数据,但是使用位置单元格引用,根据分区和纬度定义,能够预测到20043月的数据。这是位置单元格引用和符号单元格引用的一个很大区别,符号单元格引用必须确定找到单元格,但是位置单元格引用则没有这个要求。


1.2.3 符号和位置组合

  符号和位置单元格可以混用,如下:

SELECT r, y, m, s

FROM sales_history

WHERE month <= 10

MODEL

RETURN UPDATED ROWS

PARTITION BY (region_id r)

DIMENSION BY (year y, month m)

MEASURES (sales s)

RULES (s[2000,m=3] = (s[2000,3]+s[y=2001,m=3])/2)

ORDER BY y, r, m;

  上面的例子中,有的使用位置单元格引用,有的使用符号单元格引用。混合单元格引用注意如果规则左边只要使用了符号引用,有一个维度不存在,此范围内的单元格不会有结果,右边不受影响,右边不存在默认结果为NULL,见下节详细介绍。


未完待续,见PART3:http://blog.chinaunix.net/uid-7655508-id-5835078.html

阅读(1730) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~