(57)【特許請求の範囲】
【請求項１】
データベース問合せ演算を処理するための、コンピュータにより実現される方法であって、
データベースサーバが、第１の配列参照を含むデータベース問合せを受取るステップを含み、
前記データベース問合せは、データベース言語に適合した表現式であり、
前記データベースサーバは、１つ以上のコンピュータで動いており、
第１の配列参照は、１つ以上の指標を有する配列のセルとして、リレーショナル構造の或る行のうちの或る列をアドレス指定しており、
前記１つ以上の指標のうちの各指標は、前記或る列とは異なる別の列に対応しており、
前記１つ以上の指標のうちの第１の指標は、第１の列に対応しており、
第１の配列参照は、第１の指標のための第１の指標式を特定し、
第１の配列参照の第１の指標式は、前記第１の列における第１の値に対応しており、
データベース問合せは、第１の配列参照に基づいて演算を特定し、前記方法はさらに、
前記データベース問合せを受取るのに応答して、データベースサーバが、前記データベース問合せで特定された前記演算を行なうことによってデータベース問合せを実行するステップを含む、方法。
【請求項２】
１つ以上の指標は第２の指標を含み、
第１の配列参照は、第２の指標のための第２の指標式を含む、請求項１に記載の方法。
【請求項３】
１つ以上のプロセッサによって実行されると１つ以上のプロセッサに請求項２に記載の方法を行なわせる１つ以上の命令シーケンスを記憶している、コンピュータ読取可能媒体。
【請求項４】
第１の指標式はブール式である、請求項１に記載の方法。
【請求項５】
１つ以上のプロセッサによって実行されると１つ以上のプロセッサに請求項１に記載の方法を行なわせる１つ以上の命令シーケンスを記憶している、コンピュータ読取可能媒体。
【請求項６】
第１の指標式は値の範囲を識別する、請求項１に記載の方法。
【請求項７】
１つ以上のプロセッサによって実行されると１つ以上のプロセッサに請求項４に記載の方法を行なわせる１つ以上の命令シーケンスを記憶している、コンピュータ読取可能媒体。
【請求項８】
第１の指標式は、第１の列における多数の値に対応している、請求項１に記載の方法。
【請求項９】
前記多数の値の各値は、前記リレーショナル構造のそれぞれの行に記憶され、
前記データベース問合せで特定された前記演算を行なうステップは、前記各値について前記演算を行なうステップを含む、請求項８に記載の方法。
【請求項１０】
１つ以上のプロセッサによって実行されると１つ以上のプロセッサに請求項９に記載の方法を行なわせる１つ以上の命令シーケンスを記憶している、コンピュータ読取可能媒体。
【請求項１１】
１つ以上のプロセッサによって実行されると１つ以上のプロセッサに請求項８に記載の方法を行なわせる１つ以上の命令シーケンスを記憶している、コンピュータ読取可能媒体。
【請求項１２】
第１の配列参照のための第１の指標式は、値の範囲を特定するルーピングコンストラクトを含む、請求項１に記載の方法。
【請求項１３】
１つ以上のプロセッサによって実行されると１つ以上のプロセッサに請求項１２に記載の方法を行なわせる１つ以上の命令シーケンスを記憶している、コンピュータ読取可能媒体。
【請求項１４】
データベース問合せは、配列への第２の配列参照を含み、
第２の配列参照は、第１の指標のための第１の指標式を含む、請求項１に記載の方法。
【請求項１５】
第２の配列参照の第１の指標式は、第１の配列参照の第１の指標式に関連するやり方で指標値をアドレス指定する、請求項１４に記載の方法。
【請求項１６】
１つ以上のプロセッサによって実行されると１つ以上のプロセッサに請求項１５に記載の方法を行なわせる１つ以上の命令シーケンスを記憶している、コンピュータ読取可能媒体。
【請求項１７】
１つ以上のプロセッサによって実行されると１つ以上のプロセッサに請求項１４に記載の方法を行なわせる１つ以上の命令シーケンスを記憶している、コンピュータ読取可能媒体。
【請求項１８】
演算は、前記或る行の或る列への更新演算である、請求項１に記載の方法。
【請求項１９】
１つ以上のプロセッサによって実行されると１つ以上のプロセッサに請求項１８に記載の方法を行なわせる１つ以上の命令シーケンスを記憶している、コンピュータ読取可能媒体。
【請求項２０】
演算は、前記或る行の挿入演算である、請求項１に記載の方法。
【請求項２１】
１つ以上のプロセッサによって実行されると１つ以上のプロセッサに請求項２０に記載の方法を行なわせる１つ以上の命令シーケンスを記憶している、コンピュータ読取可能媒体。
【請求項２２】
データベース問合せは、割当ステートメントを特定することによって、第１の配列参照に基づいて演算を特定し、
データベース問合せは、配列への第２の配列参照を含み、
割当ステートメントは、第１の配列参照によって表わされるセルへ割当てる値を規定する割当式を含み、
割当式は第２の配列参照を含む、請求項１に記載の方法。
【請求項２３】
割当式は割当演算子の右側にあり、第１の配列参照は割当演算子の左側にある、請求項２２に記載の方法。
【請求項２４】
１つ以上のプロセッサによって実行されると１つ以上のプロセッサに請求項２３に記載の方法を行なわせる１つ以上の命令シーケンスを記憶している、コンピュータ読取可能媒体。
【請求項２５】
第１の指標式は、第１の列における多数の値に対応しており、
前記多数の値の各値は、前記リレーショナル構造のそれぞれの行に記憶され、
前記データベース問合せで特定された前記演算を行なうステップは、前記多数の値の前記各値について、前記各値のそれぞれの行の第１の列への割当演算を行なうステップを含む、請求項２２に記載の方法。
【請求項２６】
１つ以上のプロセッサによって実行されると１つ以上のプロセッサに請求項２５に記載の方法を行なわせる１つ以上の命令シーケンスを記憶している、コンピュータ読取可能媒体。
【請求項２７】
第２の配列参照の第１の指標式は、第１の配列参照の第１の指標式に関連するやり方で指標値をアドレス指定する、請求項２２に記載の方法。
【請求項２８】
第１の配列参照のための第１の指標式は、第１の列における値の範囲に対応するルーピングコンストラクトを含む、請求項２７に記載の方法。
【請求項２９】
１つ以上のプロセッサによって実行されると１つ以上のプロセッサに請求項２８に記載の方法を行なわせる１つ以上の命令シーケンスを記憶している、コンピュータ読取可能媒体。
【請求項３０】
１つ以上のプロセッサによって実行されると１つ以上のプロセッサに請求項２７に記載の方法を行なわせる１つ以上の命令シーケンスを記憶している、コンピュータ読取可能媒体。
【請求項３１】
１つ以上のプロセッサによって実行されると１つ以上のプロセッサに請求項２２に記載の方法を行なわせる１つ以上の命令シーケンスを記憶している、コンピュータ読取可能媒体。
【請求項３２】
前記データベース問合せは、リレーショナル構造の第１の列を前記第１の指標に相互に関連付ける、請求項１に記載の方法。
【請求項３３】
１つ以上のプロセッサによって実行されると１つ以上のプロセッサに請求項３２に記載
の方法を行なわせる１つ以上の命令シーケンスを記憶している、コンピュータ読取可能媒体。
【請求項３４】
前記データベース問合せは、リレーショナル構造の或る列を配列の測定値に相互に関連付ける、請求項１に記載の方法。
【請求項３５】
１つ以上のプロセッサによって実行されると１つ以上のプロセッサに請求項３４に記載の方法を行なわせる１つ以上の命令シーケンスを記憶している、コンピュータ読取可能媒体。
【請求項３６】
１つ以上のプロセッサによって実行されると１つ以上のプロセッサに請求項６に記載の方法を行なわせる１つ以上の命令シーケンスを記憶している、コンピュータ読取可能媒体。
【発明の詳細な説明】
【０００１】
【著作権の認可】
この特許文献の開示の一部は、著作権による保護を必要とする資料を含んでいる。著作権所有者は、米国特許商標庁の特許ファイルまたは記録に現われる特許開示のいずれかによる複写複製には異議なしとするが、他ではあらゆる著作権を留保する。
【０００２】
【優先権の主張】
この特許出願は、２０００年７月１３日に出願の「ＳＱＬスプレッドシート関数（SQL SPREADSHEET FUNCTIONS）」と題された米国仮特許出願番号第６０／２１８，８５１号からの優先権を主張し、その内容はここでその全体において引用により援用される。
【０００３】
【発明の分野】
この発明は一般的にデータベース問合せの処理に関し、より特定的には、データシステムにおいてスプレッドシート様の演算を行なうことに関する。
【０００４】
【発明の背景】
業務用解析ツールのうち最も成功を収めたものの１つがスプレッドシートである。一般に、スプレッドシートプログラム（以下「スプレッドシート」とも呼ぶ）は、人が業務用データを特定してデータに対する演算を公式化し、再帰的モデルで連立方程式を構成し、マクロ言語を用いてデータに対し抽象的な計算を行なうことを可能にする。加えて、多くのスプレッドシートプログラムには、公式を管理して、図形式、表形式およびその他のさまざまな種類の形式で結果を提示するための、ユーザインターフェイスが付随している。
【０００５】
たとえば典型的なスプレッドシートプログラムは、会計係の多桁式帳簿の列／行または格子形式に似たコンピュータメモリを構成し、こうしてユーザが見ることのできる計算機を提供する。スプレッドシートにある情報にアクセスするには、コンピュータが理解できる形式でスプレッドシート内の特定の位置をコンピュータに伝えることになる。これを達成するための一般的な方式は、スプレッドシートの各行に数を、各列には文字（letter）を割当てることである。たとえば列Ａおよび行１（すなわち左上の隅）の位置を参照するためには、ユーザは“Ａ１”を打込む。このようにスプレッドシートは、列と行との各交差部にアドレス指定可能な記憶位置、または「セル」を規定する。
【０００６】
残念ながら、構造化問合せ言語（ＳＱＬ）などのデータベース問合せ言語の解析の有用性は、スプレッドシートの有用性にまだ到達してはいない。たとえばＳＱＬで行間の算出を行なうことは一般的に極めて面倒であり、多くの場合、極めて非効率的である。一般的にこの限界は、ＳＱＬにおけるセルの概念およびセルアドレス指定の欠如、より具体的にはセル内でデータを操作するための形式の欠如の結果として生じる、根本的な問題に由来する。よって典型的なシナリオでは、データはまずリレーショナルデータベース管理システム（ＲＤＢＭＳ）から抜き出され、スプレッドシート（または特化された多次元解析ツール）のようなツールに与えられる。この後、抜き出されたデータはスプレッドシート内のデータに対し１セットのスプレッドシート演算を実行することにより操作され得る。
【０００７】
しかしながら、これらスプレッドシート演算を用いたデータの操作自体が或る問題をもたらす可能性がある。たとえば、スプレッドシート演算の典型的なセットは二次元的な「行−列」セルアドレス指定を考慮したものであるが、このために記号的な構造化モデルを構築することが困難となる。たとえば、計算パラメータの追加はスプレッドシートの手動変化を必要とするため、変化管理が困難となる。加えて、公式の数が多大（数千以上）なものとなれば顕著なスケーラビリティの問題が存在するが、これはスプレッドシートが並列実行を可能としないからである。さらに、企業における数多くのスプレッドシートを含む共同作業環境で、統合が極めて困難となることがある。しかしスプレッドシート上の情報が統合されていなければ、多数のスプレッドシートを問合せて業務状態を把握することはほとんど不可能であろう。
【０００８】
上記のことに基づき、スプレッドシートプログラムでのデータの操作に一般的に関連する問題と、ＲＤＢＭＳ内に含まれるデータに対しスプレッドシート様の演算を行なう試みから典型的に生じる課題とに対処する機構が、明らかに必要とされている。
【０００９】
【発明の概要】
データベースシステムでスプレッドシート様の演算を行なうための方法およびシステムがここに記載される。ここに記載のように、データベース言語は、ＲＤＢＭＳ内に含まれるデータに対するスプレッドシート様の演算を定義および実行するための新たな句（「スプレッドシート様の句」）を導入するように拡張される。この発明の一局面に従うと、データを操作するための演算を特定するデータベース問合せを受取るのに応答して、リレーショナル構造からのデータが検索され、多次元的な配列（array）としてアドレス指定され得る非リレーショナル構造で記憶される。次に、データベース問合せで特定された演算がデータに対し行なわれる。
【００１０】
この発明の別の局面に従うと、スプレッドシート様の演算を含む問合せを受取るのに応答して、データが検索され多次元配列で記憶される。次に、スプレッドシート様の句で特定された演算が、多次元配列で記憶されていたデータに対して行なわれる。
【００１１】
この発明はさらに、コンピュータ読取可能媒体、搬送波で実施されるコンピュータデータ信号、および上記のステップを行なうよう構成された装置を含む。以下の説明および前掲の特許請求の範囲より、その他の特徴および局面が明らかとなるであろう。
【００１２】
添付の図面の図において、限定としてではなく例としてこの発明を示す。ここで、同様の参照番号は同様の要素を指す。
【００１３】
【好ましい実施例の詳細な説明】
データベースシステムでスプレッドシート様の演算を行なうためのメカニズムが提供される。以下の記載では、この発明の完全な理解をもたらすために説明上多くの特定の詳細を記述する。しかしながら、当業者であればこの発明はこれら特定の詳細なしに実施可能であることが明らかであろう。他の場合には、この発明を不必要に不明瞭なものにすることを避けるために、周知の構造および装置をブロック図の形で示す。
【００１４】
演算コンテキストの概観
ここで、データベースシステムでスプレッドシート様の演算を行なうためのメカニズムを説明する。一実施例でデータベース言語は、ＲＤＢＭＳ内に含まれるデータに対するスプレッドシート様の演算を定義および実行するための新たな句（「スプレッドシート様の句」）を導入するように拡張される。この拡張は、スプレッドシートプログラムの解析機能をＲＤＢＭＳと一体化し、記号による参照で読みやすさを改善し、スケーラビリティを増大させ、管理性（安全性、空間、およびその他の制御を一括して）を改良することによって、スプレッドシートプログラムを改良することができる。さらにこの拡張は、スプレッドシート様の計算を直接言語内に与えることによって、従来のデータベース言語をはっきりと向上させる。
【００１５】
説明上、データベースシステム内のスプレッドシート様の計算を提供するための技術を、構造化問合せ言語（ＳＱＬ）の拡張との関連で説明する。しかしながら、ここに説明する方法およびシステムはその他のデータベースおよび／または問合せ言語にも適用可能である。したがってここに与える例は、この発明の実施例を特定のいかなるデータベースおよび／または問合せ言語に限定するものとしても解釈されるべきではない。
【００１６】
たとえば或る実施例においてＳＱＬなどの問合せ言語は、表（または問合せの結果）を区画化（partition）して、区画内で配列状の計算を行ない以下の新たな特徴点をもたらすための、新たなＳＱＬ句を含むように拡張される。
【００１７】
（１）  記号的セルアドレス指定  ＳＱＬ言語は、個々の行にある列が記号により参照（および更新）され得るセルのように扱われることを可能にするよう拡張される。たとえば事項表（fact table）（地域（region）、年（year）、売上（sales））では、ユーザは所与の地域および年についての売上を直接参照できる（たとえばsales［region='west（西部）', year=1998］）。ここに示すように、セルは記号によって参照可能であり、こうして典型的なスプレッドシートアプリケーションが改良される。
【００１８】
（２）  記号配列計算  ＳＱＬ言語は、スプレッドシートの公式と同様の態様でユーザが一連の割当を特定できるように拡張される。一実施例でＳＱＬの拡張は、個々のセルおよび／またはセルの範囲に対しユーザが演算を行なうことを可能にする。或る実施例では，ＳＱＬの拡張はセルの或る範囲にわたりデータを集約するための新たな句をサポートする。たとえばＳＱＬ拡張は、以下の新たなＳＱＬ句を可能にする。
【００１９】
【数１】
0004465147.tif 000002
【００２０】
（３）  略記  略記は表示を容易にするために設けられるものである。たとえば、s［r='west', y=2000］の代わりにs［'west', 2000］とするなどの位置参照を可能にする略記が設けられ得る。加えて、単一の（スプレッドシートマクロに近い）割当規則を用いて、左辺にある多数のセルを更新することを可能にする略記が設けられ得る。たとえばＳＱＬ言語は、s［r=*,y=2000］=s［current (r), 1999］という略記を可能にするように拡張することができ、これを用いて２０００年度におけるすべての地域（ｒ）に１９９９年度の売上の値（ｓ）を割当てることができる。この例では、相対アドレス指定は関数current(r)によって行なわれ、これは地域の値を左辺から右辺へ渡す。
【００２１】
（４）  自動的な表現式の順序付け  或る実施例では、スプレッドシートと同様に、スプレッドシート句にある表現式がセル間の依存性に基づいて自動的に順序付けられる。たとえば以下の表現式
【００２２】
【数２】
0004465147.tif 000003
【００２３】
が与えられると、最後の２つの割当がまず処理される。
（５）  計算のスケーラビリティ  或る実施例でＳＱＬ言語は、ユーザがデータを区画化して区画内で並列に１セットの配列計算を行なうことを可能にするように拡張される。たとえば以下の表現式
【００２４】
【数３】
0004465147.tif 000004
【００２５】
については、データは地域ｒにより区画化され、各々の区画（これは並列に処理され得る）内で２０００年度の売上予測が、１９９０年から１９９９年までの平均売上の数に基づき算出される。この区画化の関数は、スプレッドシートアプリケーションには典型的に存在しないスケーラビリティの増加をもたらす。
【００２６】
（６）  再帰的（recursive）モデル解答  スプレッドシートと同様、ＳＱＬ言語は再帰的参照を解くことを可能にするよう拡張される。たとえば
【００２７】
【数４】
0004465147.tif 000005
【００２８】
では、演算の実行は再帰的なs［x=1］:=s［x=1］/2の割当を四度繰返す。或る実施例では、再帰の終了は特定されたサイクルおよび／または特定の収束基準の数に基づき得る。この種の演算はさまざまな異なった業務用アプリケーションで有益であろう。
【００２９】
（７）  ストアードモデル  或る実施例では、新たなスプレッドシート句は問合せに直接現われるか、または命名、記憶されて後に問合せに適用され得る。これによりユーザはビジネスモデルを直接ＲＤＢＭＳに記憶させることができる。こうしてデータおよびモデルを単一のＲＤＢＭＳ管理（安全性を含む）のもとにあるようにすることで、潜在的にビジネスモデルの一体化を容易にする。一実施例では２つのメカニズム、すなわちパラメータ化されたビューおよびスプレッドシートテンプレートが、モデルの記憶のために設けられる。これらモデルはオンライン解析処理（ＯＬＡＰ）コンテキストの外側で有益であり得るが、これはこれらモデルが、従来のＳＱＬのサポートしない、データと計算とを分離するやり方をもたらすからである。たとえばパラメータ化されたビューは、ユーザが表または問合せブロックをパラメータとしてのビューへ渡すことを可能にする。この場合、ビューはパラメータ上の「計算終わり（computation done）」を特定し、こうしてビュー呼出中に、表の名称または問合せを与えることで「実（real）」データが渡され得る。
【００３０】
（８）  具現化ビュー（materialized view）  或る実施例では、スプレッドシート句での問合せは、具現化ビューに記憶され得る。こうしてデータの変化が引起こされ、その結果モデルが自動的に維持される。
【００３１】
ＳＱＬでのスプレッドシートアドレス指定
以下、ＳＱＬがどのようにスプレッドシート様の演算を含むように拡張され得るかの例を与える。説明上いくつかの例で、時間、製品および地域の次元、ならびに１測定値としての売上を有する事項表fact(t,p,r,s)が用いられる。なお、説明上特定の例を与えるが、この発明の実施例はいかなる特定の例に限定されることはない。
【００３２】
スプレッドシート句
多次元的な応用例では、一般的に事項表は行を一意的に識別する列と、依存的な測定値または属性として働く他の情報とからなる。一実施例では、識別列を「区画化」列および「次元化」列に分ける新たなＳＱＬ句（「スプレッドシート句」）が設けられる。次元化列は区画内の行を一意的に識別し、その中の測定値に対し配列指標として働く。或る実施例では、スプレッドシート句は更新のリストを含み、これは区画内の配列計算を表わしかつＳＱＬ問合せブロックの一部である。たとえば、スプレッドシート句構造は以下のようなものであり得る。
【００３３】
【数５】
0004465147.tif 000006
【００３４】
この例では、各々の＜update rule＞（「規則（rule）」）は割当を表わし、（１）セル（またはセルの範囲）を参照する左辺と、（２）定数、ホスト変数、個々のセル、または区画内のセルの範囲についての表現式を含む右辺とを含む。
【００３５】
たとえば、以下の問合せ
【００３６】
【数６】
0004465147.tif 000007
【００３７】
は、SELECT（選択する）…GROUP BY（〜によりグループ分けする）…演算の結果を受取り、次にこれを地域ｒで区画化し、各地域内で２０００年のワイン（wine）の売上が１９９９年と同じであり、かつ２０００年のビール（beer）の売上が１９９８年と１９９９年の合計売上高であると予測する。
【００３８】
一実施例でスプレッドシート句は、どのベーステーブルも更新することなくSELECT…GROUP BY…問合せの結果に対し演算を行なう。
【００３９】
任意のORDERED｜UPSERTなどのサブ句は後に詳細に説明する。
セル参照
セルへの参照は、区画内のすべての次元を修飾（qualify）することになり、記号または位置による参照を用いることができる。記号による参照を用いると、単一の次元はたとえば
【００４０】
【数７】
0004465147.tif 000008
【００４１】
または
【００４２】
【数８】
0004465147.tif 000009
【００４３】
などのブール条件を用いて修飾（qualify）される。
一般に、“［］”大括弧内の条件は、DIMENSION BY（〜により次元化する）句での次元と同じだけある。単一の条件はただ１つの次元のみを修飾（qualify）することができ、単一のどの列の述語であってもよい。たとえば、d=＜value＞、d is null、ｄ｛＞,＞=,＜,＜=,＜＞｝＜value＞、d in＜list of values＞、d between＜value＞and＜value＞、d like＜value＞などがある。或る実施例では、限定を条件に与えることで、複問合せが許可されなくなる。たとえば、d=＜value＞は単一のセルを選択する。これに代えて他の条件を用いて多数のセルを選択することもできる。
【００４４】
或る実施例で、位置による参照については、次元がDIMENSION BY句内で位置により含意され、表現式により修飾（qualify）される。たとえばスプレッドシート句DIMENSION BY(p,t)について、以下の参照
【００４５】
【数９】
0004465147.tif 000010
【００４６】
は、s［p='wine', t=2000］およびs［p is null, t=2000］と等価である。加えて、位置および記号による参照を混合することもでき、たとえばs［'wine', t=2000］は正当である。しかしながら、或る実施例では記号と位置との両方による参照で一貫性を確保するために、DIMENSION BY句で示される位置に次元ｄが現われなければならない。したがってDIMENSION BY(b,t)については、句s［'wine', t=2000］は正当であるが、一方で句s［t=2000,'wine'］は一般に正当ではない。
【００４７】
この発明の或る実施例では、演算の次元を修飾（qualify）する条件は、定数およびホスト変数を用いることもできる。右辺にある次元は左辺の次元によって決定されることが多く、たとえば
【００４８】
【数１０】
0004465147.tif 000011
【００４９】
となる。
略記による表記法を設けることにより、右辺にある次元は左辺に与えられる次元へデフォルトされるようになり、こうして割当でエラーが起こりにくくなる。一実施例では、略記による表記法として“．”という表記を用いる。たとえば上述の句について“．”の略記表記を用いると、句は以下のように表現され得る。
【００５０】
【数１１】
0004465147.tif 000012
【００５１】
加えて他のＳＱＬ表現式では、割当の右辺にある表現式に関数が適用され得る。たとえば以下の表現式
【００５２】
【数１２】
0004465147.tif 000013
【００５３】
では、割当の右辺にある表現式に関数が適用される。
右辺における範囲参照
或る実施例でＳＱＬ言語は、規則の右辺にある１セットのセルへの参照を可能にするように拡張される。一実施例では、和またはカウントなどの集合演算がこのセットに与えられることになる。次元ｄにわたるセットを参照するために、ブール条件が列ｄの１つの次元に対し用いられ、たとえばd BETWEEN…またはd IN…またはd LIKE…d｛＞,＞=,＜,＜=,＜＞｝…などとなる。たとえば
【００５４】
【数１３】
0004465147.tif 000014
【００５５】
などとなる。
一般に右辺の範囲参照は新たな行を生成することはなく、その代わりに既存の行にわたるループを生成する。たとえば上述の規則には、偶数値t=1990,1992,…,1998を有する行があるが、奇数値t=1991,1993,…,1999を有する行がない場合、ｔの既存の偶数値のみが集合に寄与する。或る実施例では、集合演算は２つ以上の測定値に適用され得る。たとえば、売上ｓに加え、各行につき、所与の年が予測にどれだけ寄与することになるかを示す重みｗもまた記憶される。次に、以下の表現式
【００５６】
【数１４】
0004465147.tif 000015
【００５７】
については、１９９０年から１９９９年までの重み付けられた売上の合計が算出される。加えて或る実施例では，関係演算子｛例えば＞,＞=,＜,＜=,＜＞｝を用いた開放型の範囲が与えられ得る。たとえば以下の表現式
【００５８】
【数１５】
0004465147.tif 000016
【００５９】
などとなる。
一実施例では、開いた範囲のための、たとえば“＊”などの特殊な表記が表現式の両辺に与えられる。たとえば以下の表現式
【００６０】
【数１６】
0004465147.tif 000017
【００６１】
は、製品がワインである区画におけるすべての年度を合計する。
さらなる実施例では、セルの範囲を特定する別のやり方は、小括弧に囲まれたセル参照のリストを列挙することである。たとえば以下の表現式
【００６２】
【数１７】
0004465147.tif 000018
【００６３】
または、ことによればより簡略に
【００６４】
【数１８】
0004465147.tif 000019
【００６５】
におけるようなものがある。
これらの表現式は述語（p='wine', t=1998）OR（p='wine', t=1999）OR…により生成されるセットと等価である。
【００６６】
さらに、規則は
【００６７】
【数１９】
0004465147.tif 000020
【００６８】
とも表現され得る。
一実施例で、セルの範囲が右辺で参照される場合、順序付けを明示的に特定しない既存の集合（sum,avg,count）が許される。或る実施例では、集合関数はDISTINCTオプションを含むことができない。ウィンドウ（window）関数およびインバース・ディストリビューション（inverse distribution）関数については、演算を正しく行なうためにセルの順序付けが必要となる。
【００６９】
一実施例で、右辺の表現式を評価するための規則はＳＱＬの拡張されていないバージョンと同じである。たとえば、セルが空（null）であると評価される、またはセルが抜けている場合、表現式の結果は、空が無視される集合に含まれていない限り空である。この点を例示するために、１９９８年度についてのレコードが記録されなければ、表現式
【００７０】
【数２０】
0004465147.tif 000021
【００７１】
は空の値を戻す。これに代えて、集合を含む以下の表現式では、セットの中の少なくとも１つのセルが空でない値であると評価されるため、空の値は返されない。
【００７２】
【数２１】
0004465147.tif 000022
【００７３】
或る実施例では、スプレッドシート句はデフォルトによるUPSERTセマンティックを含む。一実施例で、割当の左辺を表わす行が表にあれば、示されたセルが更新され、表になければ新たな行が生成される。たとえば、以下の問合せ
【００７４】
【数２２】
0004465147.tif 000023
【００７５】
については、２０００年がある行が存在しなければ、各々の地域についての２つの新たなt=2000行（１行が'wine'について、１行が'beer'についてである）が出力において生成される。加えて、新たな行について、値が割当てられていない列は空にセットされる。たとえば、上述の問合せのうちSELECT…GROUP BY…の部分が図１の表１００に示すものであれば、スプレッドシート句を適用した後には、表１００に含まれる情報は更新され、図２の表２００に反映されるように新たな行２０２、２０４、２０６、および２０８を含む。
【００７６】
左辺におけるルーピングコンストラクト
以上の例は、割当の左辺が単一のセルを有するように示されている。しかしながら実施例によっては、左辺がセルの範囲である割当を実行することもある。一実施例では、セルの範囲からなる左辺の各々について右辺が再評価される。しかしこの機能を行なうには、一般に左辺に関する相対指標を行なうことができることが必須である。或る実施例では、特殊な関数current（）が導入され、これが次元の現在の値を左辺から戻す。この特殊な関数は次に割当の右辺で用いられ得る。たとえば以下の表現式を考慮されたい。
【００７７】
【数２３】
0004465147.tif 000024
【００７８】
この例では、右辺はcurrent(p)への参照を含み、これは左辺の製品ｐの現在の値（すなわち'beer'）を受取る。したがって、上述の表現式は
【００７９】
【数２４】
0004465147.tif 000025
【００８０】
と等価であり、これは
【００８１】
【数２５】
0004465147.tif 000026
【００８２】
と等価である。
加えて、実施例によっては、current（）関数についての略記表記は、以下の例に示すように“．”で表わされ得る。
【００８３】
【数２６】
0004465147.tif 000027
【００８４】
なお、相対指標は左辺のルーピングコンストラクトで補足され得る。このことに対処するために、或る実施例では、２つのコンストラクトすなわち存在ループおよび修飾（qualify）されたループが設けられる。たとえば、左辺にある存在ルーピングコンストラクトは、't between 1990 and 1999'または't like “199%”'などの単一の列述語を用いて既存のセルの範囲を特定する。これらのコンストラクトは既存の行を修飾（qualify）するのに用いられる。こうして左辺で範囲を指定でき、相対指標は右辺で用いられ得る。たとえば以下の割当を考慮されたい。
【００８５】
【数２７】
0004465147.tif 000028
【００８６】
説明上、データは奇数の年の値のみ（すなわちt=2001、2003および2005）を含むものとする。こうして右辺は、各々の既存の年について先行する２年間の合計を表わす。これはたとえば２００１年について、１９９９年と２０００年との合計となる。
【００８７】
加えて或る実施例では、数、日付およびストリング範囲について、増分を用いてセルを指定する修飾（qualify）されたループが設けられる。たとえばＳＱＬは、既存のBETWEEN＜v1＞AND＜v2＞句がBETWEEN＜v1＞AND＜v2＞INCREMENT（増分）＜n＞句へと拡張されて範囲内の離散的増分を可能にするように拡張され得る。さらに既存のLIKE句は、LIKE＜string with single%＞INCREMENT＜n＞へ拡張され得る。たとえば以下の割当を考慮されたい。
【００８８】
【数２８】
0004465147.tif 000029
【００８９】
この例では、左辺は２０００年から２００５年までの範囲を増分１で指定する（すなわち２０００年、２００１年、２００２年、２００３年、２００４年、および２００５年）。したがってデフォルトにより、データが奇数年、たとえばｔ＝２００１、２００３、および２００５の値を含む場合、奇数年は更新されて、抜けている年t=2000、2002および2004について追加の行が生成される。
【００９０】
以上の例では、各々の年について右辺は先行する２年の合計を表わす。たとえば２００２年について、これは２０００年と２００１年との合計となる。しかしながら、上述の割当は
【００９１】
【数２９】
0004465147.tif 000030
【００９２】
などの集合を用いても表現できる。したがって、以下の問合せ
【００９３】
【数３０】
0004465147.tif 000031
【００９４】
と、図３の表３００に示すSELECT…GROUP BY…の初期データとが与えられると、問合せの実行は、図４の表４００に反映されるような新たな行４０２、４０４、４０６、４０８、４１０、および４１２を生成することになる。
【００９５】
この例に関し、d BETWEEN＜v1＞AND＜v2＞INCREMENT＜n＞は意味的に（FOR d=＜v1＞TO＜v2＞d+＜n＞）と等価である。したがってこの例では、d BETWEEN 2005 AND 2000 INCREMENT -1は行d=2005、2004、…2000をこの順序で指定し、d BETWEEN 2005 AND 2000 INCREMENT 1は空いている範囲を指定する。
【００９６】
加えて、INCREMENT演算子は加算および減算がサポートされるすべてのデータタイプ、すなわち数および日付タイプに適用される。後者については、間隔のあるタイプの増分を用いることができる。
【００９７】
さらに、LIKE＜string with single%＞INCREMENT＜n＞は、＜string with single%＞がただ１つの'％'キャラクタを含むことを想定する。これは'％'を、実行中に＜ｎ＞に対応するキャラクタと置換える。たとえば以下の割当を考慮されたい。
【００９８】
【数３１】
0004465147.tif 000032
【００９９】
ここで左辺は、y=2000であり四半期（quarter）が'Ｑ１'、'Ｑ２'、'Ｑ３'、'Ｑ４'である行を指定し、右辺は、年度が１９９９であり四半期が左辺に指定されたものである行を指定する。
【０１００】
或る実施例では、current（）関数は同じ次元についてのみ特定され得る。したがって、表現式
【０１０１】
【数３２】
0004465147.tif 000033
【０１０２】
は正当である（すなわち２０００年から２００５年までの各々の年について、先行する２年間の売上についての平均が算出される）。しかしながら、表現式
【０１０３】
【数３３】
0004465147.tif 000034
【０１０４】
は、次元ｔとｐとを混合するため正当ではない。
或る実施例では、セルの範囲を指定する他の条件を左辺に用いることもできる。たとえば、１９９９年より前のすべての記録された年についてのビールの売上を２倍にするためには、以下の表現式を用いることができる。
【０１０５】
【数３４】
0004465147.tif 000035
【０１０６】
この例では、't between 2000 and 2005'と't between 2000 and 2005 increment 1'との間にわずかな差異が認められる。特に前者は既存のデータに対してのみ演算を行ない、すなわちt=2000、2004、2005を有する行についてはこれら３年間を通じてのみループすることになる。しかし後者では、２０００年から２００５年までのすべての年を通じてのループが行なわれる。
【０１０７】
或る実施例では、左辺でのルーピングは２つ以上の次元について特定され得る。たとえば、表現式
【０１０８】
【数３５】
0004465147.tif 000036
【０１０９】
については、すべての組合せが試みられ、評価の順序は最も左の次元から始まる入れ子にされたループにより決定される。たとえば上述の場合については、表現式を評価するシステムはまずp='beer'を固定し、２０００年、…２００５年を通じて反復し、それからp='wine'を固定してこれらの年を再び反復する。
【０１１０】
一般的に、修飾（qualify）されたルーピングコンストラクトBETWEEN ＜v1＞ AND ＜v2＞ INCREMENT ＜n＞はスプレッドシート句にのみ現われることができる。＜ｎ＞パラメータは負の値を取ることもでき、この結果降順ループが得られる。加えて、修飾（qualify）されたルーピングコンストラクトは規則の右辺で参照され得る。このような場合、パラメータはセルの範囲を含意し、こうして集合演算子がこれらに与えられることになる。たとえば表現式
【０１１１】
【数３６】
0004465147.tif 000037
【０１１２】
は、２０００年のビールの売上が１９９０年から１９９８年までの偶数年の平均売上となることを予測する。
【０１１３】
空および抜けている値の扱い
或る普及しているスプレッドシートでは、数表現式での初期化されていないセルは０として扱われ、これにより便利にプログラムを簡略化する（すなわち初期化されていないセルについてテストする必要がないなど）。ここでこの発明の或る実施例は未定の値の２つの種類に対処する必要がある。一方の種類は既存のセルでのNULL値であり、他方は抜けているセルからの未定の値である。
【０１１４】
一実施例で、NULLはＳＱＬで他のところと同じように扱われる。抜けている値は、直接的なセル参照ではNULLとして扱われ、集合では存在しない値として扱われる（これはＳＱＬでのNULLの扱いと同様である）。
【０１１５】
たとえば、以下の表現式
【０１１６】
【数３７】
0004465147.tif 000038
【０１１７】
で行［'beer',1999］が抜けている場合、その結果得られる表現式はNULLである。しかしながら、以下の表現式
【０１１８】
【数３８】
0004465147.tif 000039
【０１１９】
については、抜けている行は無視される。
或る場合には、既存のNULL値と抜けている値とを区別することが望ましいであろう。このような場合には、述語を導入してこの問題を解決できる。たとえば、IS PRESENT（＜cell＞）述語は、＜cell＞参照により示される行がスプレッドシート句の実行よりも以前に存在していれば、TRUE（真）にセットされ得る。ここで、IS PRESENT句は、スプレッドシート句の実行前の状態と関係することが注目される。
【０１２０】
たとえば、以下の問合せ
【０１２１】
【数３９】
0004465147.tif 000040
【０１２２】
を実行する場合、問合せはまず、［p='wine', t=1999］を有する行が存在するかどうかを調べ、もしそうであれば行内の情報を用いる。
【０１２３】
“is present”述語の変形例が“presentv”関数である。これはセルと２つの表現式ｅ１およびｅ２、たとえば“presentv（cell, e1, e2）”を受入れる。このセルを含む行が存在すると判断されると、ｅ１が返され、そうでなければｅ２が返される。こうして上述の問合せに“presentv”関数を代入する場合、問合せは
【０１２４】
【数４０】
0004465147.tif 000041
【０１２５】
として表現され得る。
“is present”述語のもう１つの有用となり得る変形例が“presentnnv”（present & not null）関数、たとえば“presentnnv（cell, e1, e2）”である。“presentnnv”関数は、セルがありかつ空でないかどうかを調べ、
【０１２６】
【数４１】
0004465147.tif 000042
【０１２７】
と等価である。
この関数は、いくつかの多次元ツールの挙動をエミュレートするのに用いられ得る。もしセルが存在し、かつ空でないデータを有していれば、これをそのままにしておき、そうでなければ（もしセルが存在しなければ）それを作成し値を割当てる。たとえば
【０１２８】
【数４２】
0004465147.tif 000043
【０１２９】
となる。
或る実施例では、“is present”述語ならびにpresentv関数およびpresentnnv関数は、スプレッドシート句の内部でのみ利用可能であり、外部での使用はエラー条件を発生させることになる。各セルの存在および空状態をテストするには“is present”および“is null”述語を用いることもできるが、これは一般的に使用しづらいものである。これに対処するため、IGNORE NAVと呼ばれるスプレッドシート句のオプションを導入することができ、これは、抜けているおよび空の値についてのスプレッドシート様の挙動をもたらす。このオプションが特定されると、数および日付のデータについての空および抜けている値は０へデフォルトし、ストリングデータは空いているストリングにデフォルトする。たとえば、以下の表現式
【０１３０】
【数４３】
0004465147.tif 000044
【０１３１】
について、s［'beer', 1998］が抜けているまたは空である場合、これは算術演算のために０へデフォルトすることになる。
【０１３２】
更新オプション
一実施例で、スプレッドシート句での更新はアップサート（upsert）セマンティックにデフォルトする（すなわち、左辺で指し示されたセルが存在すればそれは更新され、そうでなければこのセルを含む新たな行が生成される）。或る実施例では、このデフォルトは、UPDATE（更新する）またはUPDATEIF（〜であれば更新する）オプションを特定することにより更新セマンティックに変えることができる。
【０１３３】
UPDATEオプションを用いると、割当の左辺が存在しなければ（実行時の）エラーが発生する。これに代えてUPDATEEIFオプションを用ると、左辺が存在しない場合、割当は無視される。
【０１３４】
たとえば、以下の問合せ
【０１３５】
【数４４】
0004465147.tif 000045
【０１３６】
において、［p='wine', t=2000］を有する行が存在しなければ、割当は無視される。
【０１３７】
スプレッドシート句のための規則
この節では、スプレッドシート句での規則を実現するためにはどのようにＳＱＬ言語を拡張するのかについてのさらなる例を説明する。一般に、スプレッドシート句での列（すなわちPARTITION/DIMENSION BYの列）が問合せに対するキーを形成することになる。ユーザは、GROUP BY/DISTINCTを問合せの中に置くこと、または問合せの中に表に対する一意的なキー制約を作成することによって、上記のことを確実にできる。もしこれら２つのコンパイル時認識可能条件が満足されなければ一意性検証のステップが実行時に行なわれ、これはシステムにオーバーヘッドを追加することになり、こうしてその性能に影響を与える可能性がある。
【０１３８】
或る実施例では、スプレッドシート句内で更新され得る列は、PARTITION BY/DIMENSION BYリストにない列のみである。スプレッドシート句での列は、これらが問合せのSELECT句でエイリアス化されている場合には、表現式であり得る。たとえば、３０００年期での売上が１０００年期および２０００年期の売上の平均であることを表現するためには、以下の問合せを用いることができる。
【０１３９】
【数４５】
0004465147.tif 000046
【０１４０】
例示のように、スプレッドシート句は問合せのSELECTリストからのエイリアスを用いることができる。加えて、スプレッドシート句は問合せブロックの一部である。したがって、これは問合せが用いられ得るところであればどこでも（すなわちビュー、インラインビュー、副問合せなど）用いられ得る。
【０１４１】
一般に、スプレッドシート句は、ORDER BY（〜により順序付ける）句を除き、ウィンドウ関数を含む問合せブロックのすべての句が評価された後に評価される。ORDER BY句は最後に実行される。
【０１４２】
たとえば、以下の問合せにおいて、
【０１４３】
【数４６】
0004465147.tif 000047
【０１４４】
内部問合せはスプレッドシート句を含む。この句は、１９９０年から１９９９年までのワイン生産での変化を表わす一時変数s［p='wine increase 90-99'］を有する。これはreg＿slope（回帰勾配）集合関数を用いて算出され得る。次に、生成された一時変数を用いて２０００年度のワイン売上を算出する。s［p='wine', t=2000］。しかしながら外部問合せでは一時変数は必要でなく、したがって省略できる。
【０１４５】
スプレッドシート句内でのセルの評価の順序
スプレッドシートと同様、規則の評価の順序は典型的に依存性グラフを用いて決定される。他のセルｃ２に依存するセルｃ１は、ｃ２についてのすべての規則が計算された後に評価される。
【０１４６】
たとえば、以下の問合せ
【０１４７】
【数４７】
0004465147.tif 000048
【０１４８】
においては、セルs［r='west', y=2000］は、s［r='west', y=1999］およびs［r='west', y=1998］に依存する。したがって後者の２つのセルが最初に評価される。
【０１４９】
場合によっては、ユーザはスプレッドシート句にORDEREDキーワードを与えることによって、特定の評価順序を強制することができる。たとえば、以下の問合せ
【０１５０】
【数４８】
0004465147.tif 000049
【０１５１】
においては、割当は特定されたシーケンスで行なわれる。ORDEREDがない場合、ただ１つの規則がスプレッドシートの同じセルに割当を行なうことができる。
【０１５２】
サイクルおよび連立方程式
スプレッドシートと同様、記載された計算はサイクルを含んでいてもよい。たとえば、問合せ：
【０１５３】
【数４９】
0004465147.tif 000050
【０１５４】
は、終了質問を提起する再帰算出ｓ［１］：＝ｓ［１］／２を行なう。この例では、ｓ＝１０２４に対する初期値は内部選択により提供されている。
【０１５５】
サイクルは普通、スプレッドシート句に受入れられず、通常は検出されてエラーとなる。しかし、明示されたITERATE（反復する）サブ句が特定される場合、サイクルはスプレッドシート句に受入れられる。この句は、行なわれるべき反復回数か、または満たされるべき何らかの収束条件のいずれかを特定できる。
【０１５６】
たとえば、ITERATE（４）句：
【０１５７】
【数５０】
0004465147.tif 000051
【０１５８】
は、ｓ［１］：＝ｓ［１］／２を４回反復する。こうして問合せは単一のタプル（１，６４）へ戻る。この例では、ITERATE句は正の定数をパラメータとして受付ける。
【０１５９】
スプレッドシートと同様、セルの更新前状態と更新後状態とを用いて、いつ再帰を終了させるかについて条件を特定することができる。たとえば、一実施例では、再帰の終了を許可するために、新しいUNTIL（〜まで）＜condition＞サブ句が提供される。＜condition＞はセルの更新前および更新後の値“ｓ”を参照でき、各反復の完了後に評価される。こうしてセルのデルタ変更が決定可能となり、収束基準として役割を果たし得る。ある実施例では、新しい関数“previous（前の）（＜cell＞）”は、各反復の開始に従い＜cell＞の値を戻す。計算が終了するのを保証するには、UNTIL句をITERATE句とともに用いなければならない。
【０１６０】
たとえば、問合せ：
【０１６１】
【数５１】
0004465147.tif 000052
【０１６２】
では、スプレッドシート句は１０回実行する。パラメータ“ｓ”は初期値が１０２４で開始し、“ｓ”の前の値マイナスその現在の値が１（“１”）未満となるまで（つまりこの例では１０回）反復する。
【０１６３】
記載されたメカニズムは連立方程式に使用可能である。通常どおり、ITERATE句については、規則の評価の順序はスプレッドシート句におけるそれらの順序によって与えられる。このため、たとえば問合せ：
【０１６４】
【数５２】
0004465147.tif 000053
【０１６５】
では、規則ｓ［１］＝ｓ［２］＋１とｓ［２］＝ｓ［１］＊２とは互いのセルを参照する。
【０１６６】
この例では、初期値はｓ［１］＝１０およびｓ［２］＝２０である。規則ｓ［１］＝ｓ［２］＋１がまず実行され、次にｓ［２］＝ｓ［１］＊２が続く。２回の反復後、ｓ［１］＝４３およびｓ［２］＝８６となる。
【０１６７】
多くのシナリオにおいては、プログラミングのために反復回数を手元に用意しておくことが便利である。一実施例では、整数値を仮定し、スプレッドシート句の反復回数を記憶する新しいシステム変数SYSITERATEが導入される。システム変数SYSITERATEはゼロ（“０”）の値で開始し、スプレッドシート句内でのみ使用可能で、それ以外での使用はエラー条件をもたらす。ある実施例では、SYSITERATEは「簡単な」配列ルーピングコンストラクトの役割を果たすことができる。たとえば、問合せ：
【０１６８】
【数５３】
0004465147.tif 000054
【０１６９】
は、'west'地域の売上を１９９０−１９９９から２０００−２００９のセルへコピーする。
【０１７０】
具現化ビューおよびスプレッドシート句
問合せブロックの一部であるスプレッドシート句は、具現化ビュー（ＭＶ）において使用可能である。ある実施例では、スプレッドシート句を有する具現化ビューは完全リフレッシュでのみリフレッシュ可能である。増分リフレッシュを行なうためには異なるアルゴリズムを用いてもよい。
【０１７１】
スプレッドシート句を含むＭＶを用いた書換
スプレッドシート句を持たない具現化ビューＭと１を有する問合せＱとを考慮されたい。問合せＱはＭにアクセスするために書換規則を用いて限定されずに書換可能である。書換規則の例は以下の米国特許出願に記載されている：
米国特許出願第０９／２２１，６４７号、「準結合を含む関連する問合せを処理するための具現化ビューの使用（USING A MATERIALIZED VIEW TO PROCESS A RELATED QUERY CONTAINING A SEMIJOIN）」、１９９８年１２月２８日、ウィトコウスキ（WITKOWSKI）により出願；
米国特許出願第０９／２２１，９１３号、「反結合を含む関連する問合せを処理するための具現化ビューの使用（USING A MATERIALIZED VIEW TO PROCESS A RELATED QUERY CONTAINING AN ANTI JOIN）」、１９９８年１２月２８日、ウィトコウスキにより出願；
米国特許第０９／２２１，６４９号、「１対多無損失結合を含む関連する問合せを処理するための具現化ビューの使用（USING A MATERIALIZED VIEW TO PROCESS A RELATED QUERY CONTAINING A ONE TO MANY LOSSLESS JOIN）」、１９９８年１２月２８日、ウィトコウスキにより出願；
米国特許出願第０９／２２１，６４１号、「関数従属性と結合バックに基づき、および結合導出可能性に基づいたサマリの観点での問合せの書換（REWRITING A QUERY IN TERMS OF A SUMMARY BASED ON FUNCTIONAL DEPENDENCIES AND JOIN BACKS, AND BASED ON JOIN DERIVABILITY）」、１９９８年１２月２８日、ベッロ（BELLO）他により出願；
米国特許出願第０９／２２１，３６３号、「結合の１対１および１対多無損失性に基づいたサマリの観点での問合せの書換（REWRITING A QUERY IN TERMS OF A SUMMARY BASED ON ONE-TO-ONE AND ONE-TO-MANY LOSSLESSNESS OF JOINS）」、１９９８年１２月２８日、ベッロ他により出願；
米国特許出願第０９／３６１，６８８号、「順序付けられた次元に沿ってグループ分けを行なう具現化ビューにアクセスするための問合せの書換（REWRITING QUERIES TO ACCESS MATERIALIZED VIEWS THAT GROUP ALONG AN ORDERED DIMENSION）」、１９９９年７月２７日、ウィトコウスキ他により出願。
【０１７２】
たとえば、ＭＶが
【０１７３】
【数５４】
0004465147.tif 000055
【０１７４】
で、問合せが
【０１７５】
【数５５】
0004465147.tif 000056
【０１７６】
であるとすると、それは以下のように書換可能である。
【０１７７】
【数５６】
0004465147.tif 000057
【０１７８】
そうすることで具現化ビューＭＡＶはGROUP BYにおいて問合せＱ４よりも多くの列を含むことに注目されたい。こうしてそれはスプレッドシート句を適用する前にロールアップされなければならない。ここでスプレッドシート句を含む具現化ビューＭを考慮されたい。スプレッドシート句は重要なデータ含有問題を導入するため、Ｍを用いた書換は限定される。限定は以下のとおりである。
【０１７９】
（１）  Ｑはスプレッドシート句を持たねばならず、ＭおよびＱの句は正確に整合しなければならない。
【０１８０】
（２）  Ｍ′およびＱ′がスプレッドシート句を持たないＭおよびＱである場合、Ｍ′はＱ′と同じセットの行を作成しなければならない。
【０１８１】
このことは、既存の書換規則のいくつか（たとえば上述の特許を参照されたい）が適用可能である（特に無損失結合規則および列等価規則）ことを含意する。しかし、ロールアップ規則などの多くの既存の規則はこの場合のようには使用できず、Ｍ′はＱ′よりも多くの行を含み得る。
【０１８２】
たとえば、以下のＭＶを考慮されたい。
【０１８３】
【数５７】
0004465147.tif 000058
【０１８４】
ここでＭＶは、以下の問合せを書換えるため、fact＞＜product（製品）間の結合が無損失である場合に使用可能である。
【０１８５】
【数５８】
0004465147.tif 000059
【０１８６】
しかし、同じｍａｖ２を用いて、WHERE（〜の場合）句に限定を含む非常に類似した問合せを書換えることはできない。たとえば、句：
【０１８７】
【数５９】
0004465147.tif 000060
【０１８８】
では、Ｑ５は事項表をｐ＜＞'wine'の場合の行に限定する。一方、Ｍａｖ２はそれらの行を含み、このためそれらをスプレッドシート句における算出に用いることができる。この場合にｍａｖ２から何をフィルタすべきかを決定することは困難である場合があり、このためスプレッドシート句を有する具現化ビューは書換えにそれほど有益ではないかもしれない。したがって、ユーザに対し、句を持たない具現化された問合せブロックの使用を考慮すべきであるということが推奨される。
【０１８９】
スプレッドシート句を有するＭＶの推奨使用
スプレッドシートのある用途では、スプレッドシート句の選択問合せが大きなセット（つまり何百万もの行）にわたる集合であることが考えられる。しかし、その結果は比較的小さなセット（最大で何万もの行）である。この結果は（何百もの行の）より小さなセットへ区画化され、それらの行はスプレッドシート句の支配を受けてそれらの最大８０％が変更される。このため、記載されたシステムはときには何千もの区画を有し、各区画につき何百もの更新規則を有していてもよいということになる。
【０１９０】
たとえば、問合せ：
【０１９１】
【数６０】
0004465147.tif 000061
【０１９２】
は、何千もの区画を生成し、各区画につき何百もの更新規則を潜在的に有することが見込まれる。自己再計算可能なスプレッドシートが必要とされる場合、具現化ビューはこのシナリオにおいて効果的に使用可能である。一実施例では、１つはSELECT…GROUP BY…問合せ用、もう１つはスプレッドシート用の２つの別個のＭＶが使用可能である。たとえば、上述の問合せは、
【０１９３】
【数６１】
0004465147.tif 000062
【０１９４】
および、
【０１９５】
【数６２】
0004465147.tif 000063
【０１９６】
によって、再帰具現化ビューとして表わすことができる。
ここで、具現化ビューＭＡＶは増分して維持され得る。具現化ビューSPREADSHEET＿ＭＶは（ＭＡＶの上部に構築されているため）ずっと小さく、完全リフレッシュにより維持される。このため、具現化ビューによってユーザは、オラクル(Oracle）ＲＤＢＭＳTMなどのＲＤＢＭＳ内において連立方程式モデルを含むモデルを保存し再計算することができる。また、上述のように、ＭＶの書換能力はいくぶん限定されていてもよく、リフレッシュが書換よりも重要なシナリオにおいて通常あるべきである。
【０１９７】
スプレッドシート句を有する問合せの最適化
スプレッドシート句を有する問合せに適用されてもよい最適化はいくつかある。適用されてもよい最適化の１つは、スプレッドシート句において不必要な計算を避けることである。たとえば、句がビューに含まれる場合、外部問合せがスプレッドシート句により行なわれるいかなる更新からも外れたデータを選択する。例として、以下の問合せを考慮されたい。
【０１９８】
【数６３】
0004465147.tif 000064
【０１９９】
この例では、問合せはスプレッドシート句により更新されるデータを選択せず、したがってその実行は切捨てられ得る。この種の最適化は一般にコンパイル時に決定され得る。また、外部問合せが［p='beer'］である場合のデータを選択すると、スプレッドシート句の一部のみが実行される必要がある。
【０２００】
一実施例では、オプティマイザを用いてスプレッドシート句により行なわれる不必要な計算を検出し切捨てる。たとえば、オプティマイザをコンパイル時に用いて、スプレッドシート句内に存在するかもしれない不必要な計算を識別して切捨てることが可能である。
【０２０１】
スプレッドシート句の使用例
以下は、ＳＱＬにおけるスプレッドシート様の演算を達成するために、ＲＤＢＭＳ内でスプレッドシート句をいかに使用するかという例である。
【０２０２】
ケース１．  目的は、ニューヨークとニュージャージーの売上、および各製品についての２都市間の差を示すことである。差はcity（都市）='Diff'（差）を有する新しい行に記録されるものとする。
【０２０３】
【数６４】
0004465147.tif 000065
【０２０４】
ケース２．  目的は、各都市における各製品の売上が、１９９９年１１月から１９９９年１２月にかけて、１９９９年１０月から１９９９年１１月にかけてと同じ月別レートで伸びた（または低下した）場合、第４四半期は会社および各都市にとってどうなるかを知ることである。
【０２０５】
【数６５】
0004465147.tif 000066
【０２０６】
ケース３．  目的は、個人の純所得の３０％を利子として計算する（純所得＝給与−税金−利子）ことである。利子は総所得から税控除の対象とされ、税金は給料（salary）の３８％、および譲渡所得（capital gain）の２８％である。個人がいくら借りるべきか判断したい場合、これは連立方程式の例（純所得は利子に依存し、利子は純所得に依存する）であり、このためITERATE句が含まれる。
【０２０７】
【数６６】
0004465147.tif 000067
【０２０８】
ケース４．  １２月の売上は、各州／製品について、過去６ヵ月間の売上の平均となることが予想される。目的は、過去６ヵ月間の売上を示し、１２月の売上を予測することである。
【０２０９】
【数６７】
0004465147.tif 000068
【０２１０】
ケース５．  ２０００年のワインの売上は１９９９年に比べ、前世紀の到来、つまり１８９９年〜１９００年と同様に増加するであろう。２０００年のビールの売上は１９９９年に比べ、幸せな６０年代の戦争期間、つまり、１９６０年〜１９６９年と同様に増加するであろう。目的は、回帰集合関数reg＿slope（回帰勾配）を用いて増加を計算することである。
【０２１１】
【数６８】
0004465147.tif 000069
【０２１２】
スプレッドシートテンプレート
ある実施例では、この文書に記載のスプレッドシート句は、基本ＳＱＬ構造への拡張を必要とする問合せブロックの一部である。一実施例では、基本ＳＱＬ構造への拡張は、スプレッドシートテンプレートの概念を導入することによって回避されてもよい。この節の終わりで２つのアプローチの利点を比較する。
【０２１３】
一実施例では、スプレッドシート句は、ＩＳＯ／ＩＥＣ９０７５−２：１９９９  サブ句７．１２、＜query expression＞において定義されるような＜with clause＞を拡張することにより、計算テンプレートとして宣言され、それは次に主問合せにおいて表または問合せに適用される関数として用いられる。スプレッドシートテンプレートはオブジェクトとして記憶可能であり、後に問合せの結果に適用され、これがスプレッドシート句の記憶されたバージョンとなる。ある実施例では、スプレッドシートテンプレートはスプレッドシート句のものに非常に近いシンタックスを有し、そのためスプレッドシート句からの概念のすべてがここに同様に当てはまる。
【０２１４】
インラインスプレッドシートテンプレート
ある実施例では、スプレッドシートテンプレートを定義するためにWITH句が拡張される。テンプレートは、＜template name＞、＜input columns＞、およびこの文書において以前に記載されたようなスプレッドシート句の定義（「スプレッドシート句」を参照されたい）からなる。以下は、この発明のある実施例に従ったテンプレートの形式例である。
【０２１５】
【数６９】
0004465147.tif 000070
【０２１６】
この例では、WITH句はdrink＿projection（飲料予測）テンプレートを定義する。
【０２１７】
【数７０】
0004465147.tif 000071
【０２１８】
このテンプレートは次に、問合せへのパラメータ化されたビューについて記載されたものと同様の方法で、問合せへ適用可能である。たとえば、上述のテンプレートを有する問合せ全体は、以下のようになり得る。
【０２１９】
【数７１】
0004465147.tif 000072
【０２２０】
記憶されたテンプレート
ある実施例では、スプレッドシートテンプレートは新しいデータベースオブジェクトとして記憶される。一実施例では、３つの新しいＤＤＬステートメント、つまり、CREATE SPREADSHEET TEMPLATE（スプレッドシートテンプレートを作成する）、ALTER SPREADSHEET TEMPLATE（スプレッドシートテンプレートを変更する）、およびDROP SPREADSHEET TEMPLATE（スプレッドシートテンプレートをドロップする）が用いられる。
【０２２１】
CREATE SPREADSHEET TEMPLATEは、テンプレートのインライン形を定義すること（上述のＱ２２参照）に類似している。たとえば、以下のようである。
【０２２２】
【数７２】
0004465147.tif 000073
【０２２３】
テンプレートは一旦定義されると、問合せにおいて使用可能である。たとえば、それは以下の問合せにおいて使用可能である。
【０２２４】
【数７３】
0004465147.tif 000074
【０２２５】
ALTER TEMPLATEステートメントにより、＜update rules＞は追加されたりまたはテンプレートからドロップされるようになる。その形式は以下のとおりである。
【０２２６】
【数７４】
0004465147.tif 000075
【０２２７】
たとえば、２０００年のコーラ（coke）の売上を予測するためにdrink＿projectionテンプレートに更新規則を追加するには、以下の更新問合せを使用してもよい。
【０２２８】
【数７５】
0004465147.tif 000076
【０２２９】
同様に、＜update rules＞を用いて、drink＿projectionテンプレートから規則をドロップすることができる。ある実施例では、＜update rule＞の重複がある場合、その重複も取除かれる。
【０２３０】
多数測定値集合
ある実施例では、多数の測定値にわたる集合が、各測定値について同じ範囲を特定するために必要とされる。たとえば、問合せ：
【０２３１】
【数７６】
0004465147.tif 000077
【０２３２】
は、測定値ｓとｗの両方が同じ範囲［'beer'，t between 1998 and 1999］にわたって変化するという要件を課している。集合は、範囲定義を考慮から除外してのみ、測定値について特定される。またこれに代えて、各測定値は例のようにそれ自体の範囲で特定されてもよい。
【０２３３】
【数７７】
0004465147.tif 000078
【０２３４】
ある実施例では、範囲が同一であることを確実にするため、検証プロセスがコンパイル時に実行される。
【０２３５】
しかし、各測定値にそれ自体の範囲が付随するようにするシンタックスは、以下の例のように、全測定値に対して異なる範囲の特定を提供する。
【０２３６】
【数７８】
0004465147.tif 000079
【０２３７】
この場合、各範囲が同じ濃度（cardinality）を確実に有するようにすることが望ましいかもしれない。しかし、実行時においてさえ、各範囲が同じ濃度を有するかどうかを判断することは問題となるかもしれない。たとえば、データが以下を含むと仮定されたい。
【０２３８】
【数７９】
0004465147.tif 000080
【０２３９】
範囲［d1 between 'C' and 'D'，d2 between 1 and 2］の濃度は４である。同様に、［d1 between 'K' and 'L'，d2 between 11 and 12］の濃度は４である。しかし、これらの範囲の形状は異なる。たとえば、第１の範囲はｄ１がたった１つの値（'Ｃ'）にわたっており、その形状は線であるが、一方、第２の範囲は２つの値（'Ｋ'と'Ｌ'）にわたっており、その形状は正方形である。ユーザはこの状態が起こってほしいとは思わないであろう。
【０２４０】
たとえば、スプレッドシートプログラムにおいて以下の式ＳＵＭ（Ｂ１：Ｂ１５＊Ｃ１１：Ｃ２５）を実行することを考慮されたい。その式の実行はまず、倍数の内部配列を作り出し、それは次にスカラ値へと合計される。等価式をＱ２７のシンタックスへ適用すると、関数ＳＵＭは以下のように書かれる。
【０２４１】
【数８０】
0004465147.tif 000081
【０２４２】
しかしここで、次元（ｄ１，ｄ２）が以下の値を有し得るシナリオを考慮されたい。
【０２４３】
【数８１】
0004465147.tif 000082
【０２４４】
この場合、両方の範囲の形状は同じとなり（それらは線である）、結果は以下のようになる。
【０２４５】
【数８２】
0004465147.tif 000083
【０２４６】
一実施例では、潜在的なセル整合問題を解決するため、システムは、範囲の濃度が同じであることだけでなく、形状も同様に同じであることを要求する。この目的を達成するため、ある実施例では、各次元ｄに対して、それがすべての範囲において同じ数の行を修飾（qualify）しているかを判断するためにチェックがなされる。たとえば、上述のデータについては、Ｑ２８のｄ１は両方の範囲において１つの値（つまり第１の範囲における値'Ｂ'と第２の範囲における値'Ｃ'）を修飾（qualify）し、ｄ２は、第１の範囲における３つの値（１，５，６．６）と第２の範囲における３つの値（１１，１２．６，２４）とを修飾（qualify）する。このため、形状は同じである。ある実施例では、形状の整合を確実にする検証プロセスが実行時に行なわれる。
【０２４７】
他の実施例では、潜在的なセル整合問題は、IN（〜に入っている）コンストラクトまたはINCREMENT演算子のいずれかを用いてセルを明示的に列挙することによって解決される。セルのセットが多数測定値集合に対したやすく整合可能なため、次に各範囲がコンパイル時に検証され得る。
【０２４８】
たとえば、以下の問合せ：
【０２４９】
【数８３】
0004465147.tif 000084
【０２５０】
については、（'Ｂ'，５）、（'Ｂ'，６．６）などの他の点は修飾（qualify）しないため、結果はｓ［'Ｂ'，１］＊ｓ［'Ｃ'，１１］である。曖昧さを避けるため、システムはINリストをその要素（つまりｄ２＝１，ｄ２＝２，…ｄ２＝１５）の順に段階的に進む。
【０２５１】
また、Ｑ２９はINCREMENT演算子を用いて以下のように書換えられてもよい。
【０２５２】
【数８４】
0004465147.tif 000085
【０２５３】
この例では、INCREMENT演算子が適用可能である場合に、Ｑ３０のシンタックスは数値および日付次元に対してうまく機能する。しかし、ストリングタイプの次元は通常、明示的に列挙される必要がある。
【０２５４】
Ｑ２９およびＱ３０のシンタックスは、左辺と右辺とが同一形状の配列を定義するアドレス配列計算に使用可能である。たとえば、以下の問合せが使用可能である。
【０２５５】
【数８５】
0004465147.tif 000086
【０２５６】
この例ではTREND（傾向）関数がセルの２つの配列を入力として取込み、セルの同一形状の配列を出力する。入力配列は［d1=‘B'，d2 between 11 and 20 increment １］と［d1=‘C'，d2 between 31 and 40 increment 1］で、ともに１０の要素を含むベクトルである。出力配列は［d1=‘A'，d2 between 1 and 10 increment 1］で、それも１０の要素を含むベクトルである。このシンタックスはまた、線状回帰勾配および切片などの２値集合（つまり２つの引数を取込むもの）のための引数の範囲にも使用可能である。たとえば、年によって次元化された測定値ＸおよびＹ（つまり、表（year,x,y））を有すると仮定する。その場合、ＸおよびＹの勾配は、（x,y）が同じ行から来ていなくても決定できる。
【０２５７】
例を挙げる。
【０２５８】
【数８６】
0004465147.tif 000087
【０２５９】
INCREMENTを用いた上述のシンタックスはコンパイル時に検証可能で理解しやすい。しかし、既存のデータを特定できないという欠点がある。たとえば、'd2 between 11 and 20'はその間隔におけるｄ２のすべての値を含むことに注目されたい。しかし、'd2 between 11 and 20 increment 1'は、１１、１２、…、３０の１０の値しか許容しない。
【０２６０】
このように、以前に示したように、範囲が同じであることを保証するＱ２５に示された概念は、ほとんどの場合を対象とする。Ｑ２９およびＱ３０のシンタックスは、範囲は異なり得るもののそれらの形状は同じである場合を対象とし、全範囲値がINまたはINCREMENT演算子のいずれかを用いて効果的に列挙されるため、範囲はコンパイル時に発見可能である。最後に、Ｑ２７のシンタックスについては、範囲は異なり得るもののそれらの形状は同じでなければならず、範囲は実行時に決定される。
【０２６１】
ルーピングコンストラクト
ルーピングコンストラクトの使用を示すいくつかの例が提供されてきた。数々の例は宣言ルーピングコンストラクトを示す。他の例はプログラマチックルーピングコンストラクトを示す。一般に，ルーピングコンストラクトは、数値指標付けを有するセルに対しうまく機能する。しかし、他のデータ型に対しては通常うまく機能しない。
【０２６２】
たとえば、ｔが数値型であるとすると、コンストラクト：
【０２６３】
【数８７】
0004465147.tif 000088
【０２６４】
は、２０００年、２００１年、２００２年、２００３年、２００４年，および２００５年における'beer'に対する割当が先行する２年の合計となるよう生成する。“ｔ”が'２０００年'、'２００１年'、'２００２年'といったストリングタイプの形である場合、“ｔ”は数値に変換されて増分を行なうために用いることができないため、コンストラクトは機能しないであろう。
【０２６５】
一実施例では、この問題に対処するため、一般的なプログラマチックルーピングコンストラクトが提供される。たとえば、以下のプログラマチックコンストラクトが使用されてもよい。
【０２６６】
【数８８】
0004465147.tif 000089
【０２６７】
データ駆動型計算−セルアドレス指定の緩和
一般に、セルは個々の次元についてブール条件を用いて特定される。条件は単一の次元と定数とを参照する。
【０２６８】
たとえば、問合せ：
【０２６９】
【数８９】
0004465147.tif 000090
【０２７０】
では、ワイン、ビール、およびコーラの生産が２０００年について予測される。各製品につき、３つのパラメータ、つまり、予測に対する重み、開始時、および終了時がある。たとえば、ワインについては、重みは０．２であり、開始時および終了時はそれぞれ１９９６と１９９９である。パラメータは製品ごとであるため、製品をその予測パラメータに関連付けるルックアップ表にパラメータを入れることが望ましいかもしれない。この場合、ルックアップ表はｐ、重み、開始年（syear）、終了年（eyear）をルックアップする。
【０２７１】
【表１】
0004465147.tif 000091
【０２７２】
ここでの課題は、Ｑ３２におけるような定数よりむしろルックアップ表からのデータによってセルをアドレス指定するために、スプレッドシート句をいかに使用するかということである。一実施例では、次元をアドレス指定するため、ブール条件について限定が緩和され得る。現在、そのような条件は単一の次元ｄと定数とを参照可能である。また、ある測定値（つまりPARTITION BY/DIMENSION BYリストにない列）が許容されてもよい。たとえば、以下の式：
【０２７３】
【数９０】
0004465147.tif 000092
【０２７４】
について、セルtemp=syear［'wine',1999］がまず検索され、次にs［'wine',t=temp］におけるｔを修飾（qualify）するために用いられてもよい。このため、上述の問合せ（Ｑ３２）は以下のように書換え可能である。
【０２７５】
【数９１】
0004465147.tif 000093
【０２７６】
この例では、製品ｐは重み、開始年、および終了年を決定する。このため、すべての対（p,t）について、これらのパラメータは決定可能である。なぜなら、上述の問合せは明白であることをスプレッドシート句が保証するためである。
【０２７７】
ある実施例では、表（または問合せ）を反復するため、ITERATE句が拡張される。ここで、その考えは、すべての行をルックアップ表（ｐ、重み、開始年、終了年）から取ること、および、以下の問合せに示されるように結果をスプレッドシート句のコンストラクトに基づかせるということである。
【０２７８】
【数９２】
0004465147.tif 000094
【０２７９】
この例では、スプレッドシート句は、ルックアップ表の行と同じくらい多い回数実行される。各行は次の反復用のパラメータを提供する。なお、ORDER BY句はITERATE OVER（〜を反復する）副問合せに挿入されている。なぜなら、スプレッドシート句の実行はルックアップ表からの行の順序に依存するためである。決定的な結果のため、一意の順序付けが必要とされ得る。
【０２８０】
上述の例の変形は、以下の例のように、規則に従ったルックアップ表についてのルーピングをもたらすものである。
【０２８１】
【数９３】
0004465147.tif 000095
【０２８２】
個々の規則におけるUPDATE/UPDATEIF/UPSERTオプション
UPDATE、UPDATEIFおよびUPSERTオプションは、スプレッドシート句レベルで提供される。また、ある実施例では、UPDATE、UPDATEIF、およびUPSERTオプションは、個々の規則レベルで提供される。たとえば、以下の問合せを考慮されたい。
【０２８３】
【数９４】
0004465147.tif 000096
【０２８４】
セルのより一般的な指標付け
ある実施例では、ブール条件によりすべての次元において識別されるセルまたはセルの範囲を指標付けするために、より一般的な指標付け方法が提供される。たとえば、式：
【０２８５】
【数９５】
0004465147.tif 000097
【０２８６】
では、条件ｘ2＋ｙ2＝１０は、半径１０以内の円上の点を指定する。割当は次に、２０の値を半径上のセルに割当てる。
【０２８７】
また、別の例は２次元（x,y）に対する識別マトリックスの作成にあり、それは以下のように表わされ得る。
【０２８８】
【数９６】
0004465147.tif 000098
【０２８９】
この例では、評価の順序は特定されておらず、このため非決定的な規則を以下の例のように書くことが可能である。
【０２９０】
【数９７】
0004465147.tif 000099
【０２９１】
この例は、セルが評価される順序に依存する異なる結果をもたらす。ある実施例では、ユーザがこの非決定性を制御するのを助けるため、ORDER BY能力が提供されて選択された行の順序付けを可能とする。たとえば、以下のシンタックスを用いて選択された行の順序付けを制御してもよい。
【０２９２】
【数９８】
0004465147.tif 000100
【０２９３】
一般添字を用いることにより、規則をその依存性に基づいた順序にソートすることが難しくなり得る。その結果、ユーザが一般添字を特定する場合、ユーザはORDERED（順序付けられた）セットの規則を特定しなければならない。なぜなら順序付けられていない規則は通常、特殊添字内でしか使用できないためである。一実施例において、以下はユーザによって特定されてもよいORDEREDセットの規則である。
【０２９４】
１．  ２種類の添字、つまりWHEREで始まるもの（一般添字）とそうでないもの（特殊添字）がある。
【０２９５】
２．  特殊添字は、添字をAND（論理積）と組合せることにより一般添字と等価である。
【０２９６】
３．  規則の左辺は、規則が適用される１セットのセルを特定する。１セットのセルは、規則を任意のセルに対して実行する前に効果的に決定される（これは、修飾されたセルが検出されるやいなや規則を実行するにはいつが正当かを認識する最適化を妨げるものではない）。
【０２９７】
４．  次元の現在の値を戻す演算子が規則の右辺にある。
５．  集合への引数内にある右辺でのセル参照は、集合が適用される１セットのセルを特定する。
【０２９８】
６．  集合外の右辺でのいかなるセル参照も、単一のセルを参照しなければならず、さもなければ例外が生じる。
【０２９９】
７．  左辺での一般添字も規則内の順序付けに対してORDER BY句を提供し、そのため、２つ以上のセルを選択する規則の評価の順序を特定できる。
【０３００】
８．  規則がORDEREDである場合、一般添字は左辺でのみ使用可能である。
ORDER BYを有するウィンドウ関数および集合
一実施例では、ＳＱＬは拡張されて、スプレッドシート句においてpercentile＿contなどのORDER BYを用いてウィンドウ関数または集合を行なうためのシンタックスを提供する。たとえば、以下のシンタックスが挙げられる。
【０３０１】
【数９９】
0004465147.tif 000101
【０３０２】
また、たとえば一月にわたる和を移動するウィンドウ関数に対して可能なシンタックスは、以下のとおりである。
【０３０３】
【数１００】
0004465147.tif 000102
【０３０４】
ランクの例は以下のとおりである。
【０３０５】
【数１０１】
0004465147.tif 000103
【０３０６】
ハードウェア例
図５は、この発明の一実施例が実現され得るコンピュータシステム５００を示すブロック図である。コンピュータシステム５００は、バス５０２または情報を通信するための他の通信メカニズムと、情報を処理するためにバス５０２と結合されたプロセッサ５０４とを含む。コンピュータシステム５００はまた、プロセッサ５０４により実行されるべき命令および情報を記憶するためにバス５０２に結合された、ランダムアクセスメモリ（ＲＡＭ）または他のダイナミック記憶デバイスといったメインメモリ５０６を含む。メインメモリ５０６は、プロセッサ５０４により実行されるべき命令の実行中に一時的変数または他の中間情報を記憶するためにも使用されてもよい。コンピュータシステム５００は、スタティック情報およびプロセッサ５０４用の命令を記憶するためにバス５０２に結合された、読出専用メモリ（ＲＯＭ）５０８または他のスタティック記憶デバイスをさらに含む。磁気ディスクまたは光ディスクなどの記憶デバイス５１０が、情報および命令を記憶するために設けられてバス５０２に結合されている。
【０３０７】
コンピュータシステム５００は、バス５０２を介して、コンピュータユーザへ情報を表示するための陰極線管（ＣＲＴ）などのディスプレイ５１２へ結合されてもよい。英数字およびその他のキーを含む入力装置５１４が、情報およびコマンド選択をプロセッサ５０４へ通信するためにバス５０２に結合されている。別の種類のユーザ入力装置としてマウス、トラックボール、またはカーソル方向キーなどのカーソル制御５１６があり、方向情報およびコマンド選択をプロセッサ５０４へ通信し、ディスプレイ５１２上のカーソルの動きを制御する。この入力装置は通常、２つの軸、つまり第１の軸（たとえばｘ）および第２の軸（たとえばｙ）において２つの自由度を有し、それによって装置は平面における位置を特定できる。
【０３０８】
この発明は、構造化問合せ言語（ＳＱＬ）においてスプレッドシート様の演算を行なうためのコンピュータシステム５００の使用に関する。この発明の一実施例によれば、構造化問合せ言語（ＳＱＬ）におけるスプレッドシート様の演算は、プロセッサ５０４がメインメモリ５０６に含まれる１つまたはそれ以上の命令の１つまたはそれ以上のシーケンスを実行するのに応答して、コンピュータシステム５００により行なわれる。そのような命令は、記憶デバイス５１０などの別のコンピュータ読取可能媒体からメインメモリ５０６へ読出されてもよい。メインメモリ５０６に含まれる命令のシーケンスの実行により、プロセッサ５０４はここに記載されたプロセスステップを行なうようになる。メインメモリ５０６に含まれる命令のシーケンスを実行するため、マルチプロセッシング構成の１つまたはそれ以上のプロセッサも採用されてもよい。代替的な実施例では、この発明を実現するため、ソフトウェア命令の代わりに、またはソフトウェア命令と組合せて、ハードワイヤード回路が用いられてもよい。このため、この発明の実施例はハードウェア回路およびソフトウェアのいかなる特定の組合せにも限定されない。
【０３０９】
ここで用いられる「コンピュータ読取可能媒体」という用語は、命令をプロセッサ５０４に提供して実行させることにかかわるあらゆる媒体を指す。そのような媒体は、不揮発性媒体、揮発性媒体、および伝送媒体を含む多くの形を取ってもよいが、これらに限定されない。不揮発性媒体はたとえば、記憶デバイス５１０などの光ディスクまたは磁気ディスクを含む。揮発性媒体は、メインメモリ５０６などのダイナミックメモリを含む。伝送媒体は、バス５０２を構成する配線を含む同軸ケーブル、銅線、および光ファイバを含む。伝送媒体はまた、電波および赤外線データ通信中に生成されるような音波または光波の形を取り得る。
【０３１０】
コンピュータ読取可能媒体の一般的な形態は、たとえば、フロッピー（Ｒ）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、または他のあらゆる磁気媒体、ＣＤ−ＲＯＭ、他のあらゆる光媒体、パンチカード、紙テープ、孔のパターンを有する他のあらゆる物理的媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、他のあらゆるメモリチップまたはカートリッジ、以下に記載されるような搬送波、または、コンピュータがそれから読出可能な他のあらゆる媒体を含む。
【０３１１】
コンピュータ読取可能媒体のさまざまな形態は、１つまたはそれ以上の命令の１つまたはそれ以上のシーケンスをプロセッサ５０４へ搬送して実行させることに関与してもよい。たとえば、命令はまず遠隔コンピュータの磁気ディスク上を搬送されてもよい。遠隔コンピュータは命令をそのダイナミックメモリへロードし、モデムを用いて電話回線で命令を送ることができる。コンピュータシステム５００近傍のモデムは、電話回線上のデータを受取り、赤外線送信器を用いてデータを赤外線信号に変換することができる。バス５０２に結合された赤外線検出器は、赤外線信号の中の搬送されたデータを受取り、データをバス５０２上へ置くことができる。バス５０２はデータをメインメモリ５０６へ搬送し，そこからプロセッサ５０４が命令を検索して実行する。メインメモリ５０６により受取られた命令は、プロセッサ５０４による実行の前または後のいずれかにおいて、任意に記憶デバイス５１０上に記憶されてもよい。
【０３１２】
コンピュータシステム５００はまた、バス５０２に結合された通信インターフェイス５１８も含む。通信インターフェイス５１８は、ローカルネットワーク５２２に接続されたネットワークリンク５２０へ２方向データ通信結合を提供する。たとえば、通信インターフェイス５１８は、対応する種類の電話回線へデータ通信接続を提供する統合サービスデジタル通信網（ＩＳＤＮ）カードまたはモデムであってもよい。別の例として、通信インターフェイス５１８は、互換性のあるＬＡＮへデータ通信接続を提供するローカルエリアネットワーク（ＬＡＮ）カードであってもよい。無線リンクも実現されてもよい。そのようないかなる実現においても、通信インターフェイス５１８は、さまざまな種類の情報を表わすデジタルデータストリームを搬送する電気、電磁、または光信号を送信し、受信する。
【０３１３】
ネットワークリンク５２０は通常、１つまたはそれ以上のネットワークを介して他のデータ装置にデータ通信を提供する。たとえば、ネットワークリンク５２０はローカルネットワーク５２２を介して、ホストコンピュータ５２４へ、またはインターネットサービスプロバイダ（ＩＳＰ）５２６により動作されるデータ装置へ接続を提供してもよい。ＩＳＰ５２６は次に、現在一般に「インターネット」５２８として言及されている全世界的パケットデータ通信ネットワークを介して、データ通信サービスを提供する。ローカルネットワーク５２２とインターネット５２８とは双方とも、デジタルデータストリームを搬送する電気、電磁、または光信号を使用する。コンピュータシステム５００へ、およびコンピュータシステム５００からデジタルデータを搬送する、さまざまなネットワークを通った信号、およびネットワークリンク５２０上にあり通信インターフェイス５２８を通った信号は、情報を伝送する搬送波の例示的な形態である。
【０３１４】
コンピュータシステム５００は、ネットワーク、ネットワークリンク５２０、および通信インターフェイス５１８を介して、メッセージを送り、プログラムコードを含むデータを受取ることができる。インターネットの例では、サーバ５３０はアプリケーションプログラム用の要求されたコードを、インターネット５２８、ＩＳＰ５２６、ローカルネットワーク５２２、および通信インターネット５１８を介して送信するかもしれない。この発明によれば、そのようなダウンロードされた１つのアプリケーションは、ここに記載のように構造化問合せ言語（ＳＱＬ）においてスプレッドシート様の演算を行なうために提供される。
【０３１５】
受取られたコードは、受取時にプロセッサ５０４によって実行されてもよく、および／または、記憶デバイス５１０または他の不揮発性記憶装置に記憶されて後に実行されてもよい。このように、コンピュータシステム５００は搬送波の形のアプリケーションコードを得てもよい。
【０３１６】
代替、拡張
リレーショナルデータベースシステムにおいてスプレッドシート様の演算を行なうために構造化問合せ言語（ＳＱＬ）を拡張するための方法およびシステムを、ここに記載する。一実施例では、拡張されたＳＱＬは問合せブロックの出力時に演算するスプレッドシート句を含む。ある実施例では、スプレッドシート句の演算は、具現化ビューを用いた書換え、指標選択、または結合順序などの問合せブロックのいかなる最適化をも妨げはしない。また、スプレッドシート句は問合せの最適化を提供し、句の不必要な部分の再計算を回避するかもしれない。
【０３１７】
たとえば、スプレッドシート句を有する内部問合せと内部問合せ内に押込まれ得るという限定を有する外部問合せとを仮定すると、スプレッドシート句はPARTITION BY句を用いてデータを区画化することができ、句の実行は区画にわたって並列して行なわれてもよい（つまり、各区画は単一のスレーブにマッピング可能となり、区画内の計算は他のスレーブからの情報を必要としない）。またこれに代えて、スプレッドシート句がPARTITION BY句を持たない場合（つまり１つの区画しか持たない場合）、それは並列化されない。しかし、このことは、行を句へ送る問合せを並列して実行することを妨げない。
【０３１８】
この発明のある実施例を記載するにあたり、説明のためにいくつかの図面が用いられた。しかし、この発明は図面に示されたようないかなる特定の状況にも限定されない。なぜならこの発明の範囲は、ここに記載されたメカニズムおよびプロセスが他のメカニズム、方法、プログラム、およびプロセスに利用できる他の状況および用途を含むためである。このため、明細書および図面は、したがって、限定的な意味というよりもむしろ例示的な意味において考えられるべきである。たとえば、ＳＱＬにおけるスプレッドシート様の算出を行なうための例が記載されたが、この発明の実施例は特定のデータベースおよび／または問合せ言語に限定されない。たとえば、ある実施例では、記載された特徴はＸＭＬなどの他の言語においてスプレッドシート様の算出を行なうために実現されてもよい。このため、この発明は、ここに記載されたメカニズムおよびプロセスが他のメカニズム、方法、プログラム、およびプロセスに利用できる他の状況および用途を含む。
【０３１９】
また、この開示では、あるプロセスステップが特定の順序で記載され、英字および英数字のラベルを用いてあるステップを識別している。この開示に特に述べられていない限り、この発明の実施例はそのようなステップを実行するいかなる特定の順序にも限定されない。特に、ラベルは単にステップを便利に識別するために用いられており、そのようなステップを実行する特定の順序を含意、特定、または要求する意図はない。
【図面の簡単な説明】
【図１】  スプレッドシート句の適用前にあった表１００を示す図である。
【図２】  スプレッドシート句の適用後における、新たに追加された行情報を例示する表２００を示す図である。
【図３】  スプレッドシート句の適用前にあった表３００を示す図である。
【図４】  スプレッドシート句の適用後における、新たに追加された行情報を例示する表４００を示す図である。
【図５】  或る実施例が実行され得るコンピュータシステムを示すブロック図である。
【図１】
0004465147.tif 000104
【図２】
0004465147.tif 000105
【図３】
0004465147.tif 000106
【図４】
0004465147.tif 000107
【図５】
0004465147.tif 000108