oracle model子句学习笔记

      Model子句是在Oracle数据库10g版本中引入的,提供了一个很好的替代电子表格的方法。通过Model子句,可以使用SQL语句中的一些很强大的功能,如聚合、并行、以及多维、多变量分析。如果你喜欢使用excel的电子表格来进行公式计算,你同样也会乐于使用model子句。由于model子句是SQL语言应用的一个扩展,其可扩展性是很强的,近似于oracle数据库的可扩展性。超过几百万行数据的多维、多变量计算,如果不是10亿级数据量的话,可以很容易地通过model子句来实现,而电子表格就不行。同时,很多数据库特性如对象分区以及并行执行都可以在model子句中高效地应用,从而进一步提高了可扩展性。传统的SQL语句与model子句的最核心区别在于model子句支持跨行引用,多单元格引用以及单元格聚合。

语法如下:

MODEL
[<global reference options>]
[<reference models>]
[MAIN <main-name>]
  [PARTITION BY (<cols>)]
  DIMENSION BY (<cols>)
  MEASURES (<cols>)
  [<reference options>]
  [RULES]  <rule options>
  (<rule>, <rule>,.., <rule>)
  <global reference options> ::= <reference options> <ret-opt>
   <ret-opt> ::= RETURN {ALL|UPDATED} ROWS
  <reference options> ::=
  [IGNORE NAV | [KEEP NAV]
  [UNIQUE DIMENSION | UNIQUE SINGLE REFERENCE]
  <rule options> ::=
  [UPDATE | UPSERT | UPSERT ALL]
  [AUTOMATIC ORDER | SEQUENTIAL ORDER]
  [ITERATE (<number>)  [UNTIL <condition>]]
  <reference models> ::= REFERENCE ON <ref-name> ON (<query>)
  DIMENSION BY (<cols>) MEASURES (<cols>) <reference options>
 

      CV() 函数是一个非常强大的工具,它可以高效地进行规则创建。CV() 用于规则的右侧,以复制左侧指定的当前维度值。对于左侧规范引用多个单元格来说,它非常有用。用关系数据库的概念来理解,该函数类似于连接操作。CV() 允许使用非常灵活的表达式。例如,通过从 CV(year) 值进行减法运算,可以引用数据集中的其他行。如果您的单元格引用中有表达式“CV(year) -2”,您两年前就可以访问数据。CV() 函数通常作为单元格引用的一部分使用,但是也可以在单元格引用外部作为独立的表达式元素。

例如:

RULES (
   sales['Bounce', year BETWEEN 1995 AND 2002] =
   sales['Mouse Pad', cv(year)] +
   0.2 * sales['Y Box', cv(year)]
)

     当上述规则的左侧引用单元格 Bounce 和 1999 时,右侧表达式将如下所示: sales['Mouse Pad', 1999] + 0.2 * sales['Y Box', 1999]

     同样,当左侧引用单元格 Bounce 和 2000 时,右侧表达式将为: sales['Mouse Pad', 2000] + 0.2 * sales['Y Box', 2000]

具体用法参见:http://blog.csdn.net/wh62592855/article/details/4783021

猜你喜欢

转载自mukeliang.iteye.com/blog/1704252
今日推荐