(57)【特許請求の範囲】
【請求項１】
データベースが複数の変数の値を含む複数のデータテーブルから構成され、各データテーブルが前記複数の変数の値の少なくとも２つを含む少なくとも一つのデータレコードから成り、前記情報が一つあるいは複数の選択された計算変数に関して演算する少なくとも一つの数学的関数を評価することで抽出され、前記抽出された情報が一つあるいは複数の選択された分類変数に基づいて分割される、データベースから情報を抽出するための方法において：
前記選択された変数の一つの少なくとも一つの値を含む全てのデータテーブルであって、これらデータテーブルが境界テーブルであるデータテーブルを識別するステップと、
直接的あるいは間接的に前記境界テーブルと共通の変数を持ち、これらを接続する全てのデータテーブルであって、これらのデータテーブルが接続テーブルであるデータテーブルを識別するステップと、
前記境界テーブルおよび接続テーブルの間から開始テーブルを選択するステップと、
前記境界テーブル内の各選択された変数の値を前記開始テーブル内の一つあるいは複数の接続変数の対応する値にリンクする変換構造を構築するステップと、  前記変換構造を用いて各接続テーブルの各値を少なくとも一つの対応する選択された変数の少なくとも一つの値に変換することによって、前記開始テーブルの各データレコードに対して前記数学的関数を評価するステップとを含み、
この評価によって、各分類変数の個々の全ての一意な値に対する前記数学的関数の結果を含む最終データ構造が得られることを特徴とするデータベースから情報を抽出するための方法。
【請求項２】
さらに、結果としてのデータ構造の関連部分を人が読むことが可能な形式でユーザに提出するステップを含むことを特徴とする請求項１記載の方法。
【請求項３】
さらに、最初に前記データベースの前記データレコードをコンピュータの一次メモリ内に読み出すステップを含むことを特徴とする請求項１または２記載の方法。
【請求項４】
さらに、最初に前記データベース内の各データ変数の各一意な値に異なる２進コードを割当るステップと、前記データレコードを２進コード化された形式にて格納するステップを含むことを特徴とする請求項１乃至３のいずれかに記載の方法。
【請求項５】
さらに、最初に前記データベース内の、変数を共通に持つ全てのデータテーブルを識別するステップと、データテーブルの間に仮想接続を割当るステップと、これによりスノーフレーク構造を持つデータベースを作成するステップと、を備え、前記接続テーブルが前記スノーフレーク構造内において前記複数の境界テーブルの間に位置するように構成されていることを特徴とする請求項１乃至４のいずれかに記載の方法。
【請求項６】
さらに、前記数学的関数の正確な評価にはそれらの各値の発生の回数が必要とされる全ての計算変数を識別するステップと、このような変数を含む境界テーブルとこのような境界テーブルを接続するデータテーブルから成るデータテーブルのサブセットを定義するステップと、前記サブセットから前記開始テーブルを選択するステップと、各値の前記発生の回数に関するデータを前記変換構造内に含めるステップと、を備えたことを特徴とする請求項１乃至５のいずれかに記載の方法。
【請求項７】
前記開始テーブルが前記境界テーブルおよび接続テーブルの内の最も多数のデータレコードを持つデータテーブルから選択されることを特徴とする請求項１乃至６のいずれかに記載の方法。
【請求項８】
さらに、複数のデータレコードを含み、各データレコードが各選択された分類変数に対するフィールドおよび前記数学的関数に対する総合フィールドを含む前記最終データ構造を構築するステップを含み、この最終データ構築ステップが、前記開始テーブルのデータレコードを順次的に読み出すステップと、前記変換構造を用いて、前記データレコード内の各接続変数の各値を少なくとも一つの対応する選択された変数の値に変換することで前記選択された変数の複数の値の現在の値の組合せを作成するステップと、前記数学的関数を前記値の現在の組合せに対して評価するステップと、前記評価の結果を各選択された分類変数の現在の値に基づいて該当する総合フィールド内に集めるステップとを含むことを特徴とする請求項１乃至７のいずれかに記載の方法。
【請求項９】
さらに、前記選択された変数の値の組合せを含む仮想データレコードを作成するステップを含み、この作成ステップが前記開始テーブルのデータレコードを読み出すステップと、前記変換構造を用いて前記データレコード内の各接続変数の各値を少なくとも一つの対応する選択された変数の値に変換するステップとを含むことを特徴とする請求項１乃至７のいずれかに記載の方法。
【請求項１０】
さらに、複数のデータレコードを含み、各データレコードが各選択された分類変数に対するフィールドおよび前記数学的関数に対する総合フィールドを含む前記最終データ構造を構築するステップを含み、この構築ステップが、前記開始テーブルのデータレコードを順次的に読み出すステップと、前記仮想データレコードの内容をこうして読み出される各データレコードの内容に基づいて更新するステップと、前記数学的関数を前記更新された仮想データレコードに基づいて評価するステップと、および前記評価の結果を前記更新された仮想データレコード内の各選択された分類変数の現在の値に基づいて該当する総合フィールド内に集めるステップと、を含むことを特徴とする請求項９記載の方法。
【請求項１１】
さらに、複数のデータレコードを含み、各データレコードが各選択された分類変数に対するフィールドおよび前記数学的関数によって含意される各数式に対する総合フィールドを含む中間データ構造を構築するステップを含み、この構築ステップが、前記開始テーブルのデータレコードを順次的に読み出すステップと、前記仮想データレコードの内容をこうして読み出される各データレコードの内容に基づいて更新するステップと、各数式を前記更新された仮想データレコードに基づいて評価するステップと、前記評価の結果を前記更新された仮想データレコード内の各選択された分類変数の現在の値に基づいて該当する総合フィールド内に集めるステップとを含むことを特徴とする請求項９記載の方法。
【請求項１２】
前記中間データ構造を構築するステップが：
前記中間データ構造内の前記分類変数の一つを削除するステップを含み、この削除ステップが、前記結果を前記一つの分類変数の全ての値を通じて残りの分類変数の複数の値の各一意な組合せに対して集めるステップと、追加のデータレコードを作成するステップと、前記合計結果を前記中間データ構造の前記追加のデータレコード内に組み込むステップと、を含むことを特徴とする請求項１１記載の方法。
【請求項１３】
さらに、前記数学的関数を前記分類変数の値の各一意な組合せに対して前記総合フィールド内の結果に基づいて評価することで、前記最終データ構造を構築するステップを含むことを特徴とする請求項１１乃至１２記載の方法。
【請求項１４】
前記変換構造を構築するステップが、
ａ）境界テーブルのデータレコードを読み出し、前記境界テーブル内の少なくとも一つの接続変数の各一意な値とこの中の少なくとも一つの選択された変数の各対応する値との間のリンクを含む変換構造を作成するステップと、
ｂ）前記境界テーブルから前記開始テーブルに向って移動するステップと、
ｃ）接続テーブルが見つかった場合は、前記接続テーブルのデータレコードを読み出し、前記変換構造内の前記少なくとも一つの接続変数の各一意な値を前記接続テーブル内の少なくとも一つの接続変数の少なくとも一つの対応する一意な値の代わりに用いるステップと、
ｄ）ステップ（ｂ）〜（ｃ）を前記開始テーブルが見つかるまで反復するステップと、を含むことを特徴とする請求項１乃至１３のいずれかに記載の方法。
【請求項１５】
請求項１乃至１４のいずれかに記載するデータベースから情報を抽出するための方法の前記複数のステップを実行するためのコンピュータプログラムを格納するコンピュータにて読み出し可能な記録媒体。
【発明の詳細な説明】
【０００１】
技術分野
本発明は、データベースから情報を抽出するための方法に関する。データベースは、複数の変数の値を含む複数のデータテーブルから構成され、各データテーブルは、少なくとも前記変数値の２つを含む少なくとも一つのデータレコードから成る。情報が、一つあるいは複数の選択された計算変数に関して演算する少なくとも一つの数学的関数を評価することで抽出される。さらに、抽出された情報が一つあるいは複数の選択された分類変数に基づいて分割される。
【０００２】
従来の技術
しばしば、コンピュータの二次メモリ上に格納されているデータベースから特定の情報を抽出することが必要となる。より具体的には、データベース内の多量のデータを要約し、要約されたデータを明快なやり方でユーザに提出することが必要とされる。例えば、ユーザは、大きな会社に対する取引データを含むデータベースから、年および顧客別の総売上を抽出することを必要とすることがある。この抽出には、数学的関数、例えば、計算変数（x,y）、例えば販売された項目の数（"Number")と項目当たりの価格（"Price"）の組合せに関して演算する数学的関数、例えば合計（"SUM(x×y)")を評価することが必要となる。この抽出には、さらに、情報を、分類変数、例えば"年（Year）"および"顧客（Client）"に従って分割することが必要となる。こうして、これら分類変数は、数学演算の結果がどのように提出されるべきかを定義する。この特定のケースにおいては、年および顧客別に総売上を抽出するためには、"年および顧客別に合計（数ｘ価格）を評価すること、つまり、SUM(Number*Price) per Year,Clientを評価することが必要となる。
【０００３】
一つの従来の技術による解決策においては、コンピュータプログラムがデータベースを処理し、次元とも呼ばれる全ての考え得る分類変数に基づいて分割された、全ての考え得る計算変数に関して演算する、全ての考え得る数学的関数を評価するように設計される。この演算の結果として通常多次元立方体として知られる大きなデータ構造が得られる。この多次元立方体は、非常に時間の掛かる演算を通じて得られ、典型的には演算が夜通し遂行される。この多次元立方体は、分類変数の発生する値の個々の全ての一意な組合せに対する数学的関数の評価結果を含む。ユーザは、次に、この多次元立方体に関して動作する別個のコンピュータプログラムを用いて、データベースのデータを、例えばピボットテーブル内の選択されたデータを視覚化することによって、あるいは、２次元もしくは３次元チャートにて探索する。ユーザが、ある数学的関数と一つあるいは複数の分類変数を定義すると、他の全ての分類変数は多次元立方体内にこの数学的関数に対して格納されている結果を合計することで削除される。この合計は、他の全ての分類変数に対して行なわれる。こうして、ユーザは、分類変数を追加あるいは除去することで、多次元立方体の次元内を上下に移動する。
【０００４】
上述のアプローチは、幾つかの望ましくない制約を持つ。この多次元立方体が評価の後平均量、例えば、複数の分類変数に基づいて分割された平均売上高を含む場合は、平均量の合計は正しい総平均を与えないために、一つあるいは複数のこれら分類変数を削除することができなくなる。このような場合、この多次元立方体は分類変数の各考え得る組合せに基づいて分割された平均量を含むことを要求され、多次元立方体を構築する動作は一層複雑なものとなる。同一の問題が他の量、例えば、中央値についても発生する。
【０００５】
しばしば、全ての関与する数学的関数、計算変数および分類変数を予測することは、データベース内のデータを実際に探索するまでは困難である。このため、傾向およびパターンを識別した結果、ユーザは、そのデータ内の底辺に横たわる詳細に到達するためには、関数あるいは変数を追加する必要があることに気付くこともある。このような場合、新たな多次元立方体を構築するための時間の掛かる手続きを再び遂行することが必要となる。
【０００６】
発明の概要
従って、本発明の一つの目的は上述の短所を緩和すること、より具体的には、ユーザが数学的関数を自由に選択すること、数学的変数をこれら数学的関数内に自由に組み込むこと、および結果の提出のために分類変数を自由に選択することを可能とするデータベースからの情報を抽出するための方法を提供することにある。
【０００７】
この目的が独立請求項１に記載される特徴を有する方法によって達成され、幾つかの好ましい実施例が従属項に列挙される。
【０００８】
本発明によると、データベース内のデータから最終データ構造、つまり、多次元立方体を処理時間およびメモリ要件の両方の点で効率的なやり方にて生成するための方法が提供される。この多次元立方体は、従来の技術による解決策よりかなり速く生成できるために、多次元立方体をアドホックに生成することが可能となる。ユーザは、多次元立方体を極く少数の数学的関数および変数に制限されることなく対話的に定義および生成することができる。数学的関数は、通常は、数式の組合せから構成される。ユーザが数学的関数を変更すること、例えば、数式を変更、追加もしくは削除することを望む場合、通常はユーザの仕事の妨げとならないほど十分に短時間に新たな多次元立方体を生成することができる。同様に、ユーザが変数を追加あるいは除去することを希望する場合も、多次元立方体を迅速に再構成することができる。
【０００９】
これを達成するためには、全ての考慮中のデータテーブルが境界テーブルにクレバーグルーピング（clever grouping）され、これらテーブルが各テーブル内に含まれる変数のタイプに基づいて互いに接続される。これらテーブルの一つが開始点として選択され、適当な変換構造が構築され、この変換構造を用いて最終データ構造が開始テーブルから効率的に生成される。
【００１０】
好ましくは、最初に、データベースのデータレコードがデータをオフラインにて処理できるようにコンピュータの一次メモリ内に読み込まれる。これによって、データベースを探索するため、および最終データ構造を生成するために必要とされる時間はさらに短縮化される。データベースは二次メモリ上に格納することも、あるいは遠隔地に格納し、これにコンピュータをモデムにて接続することもできる。こうして一次メモリ内に読み込まれるデータベースは、より大きなデータベースの選択された部分であっても、２つあるいはそれ以上のデータベースの組合せであっても構わない。
【００１１】
一つの好ましい実施例においては、各データ変数の各異なる値に２進コードが割当てられ、データレコードは２進コード化された形式にて格納される。２進コード化することで、データテーブル内の探索を高速化することが可能となることに加えて、冗長情報を除去し、結果としてデータの量を削減することが可能となる。
【００１２】
もう一つの好ましい実施例においては、頻度データを必要とする計算変数、つまり、数学的関数を正しく評価するためには各値の複製回数が必要とされる計算変数を含む全ての境界および接続テーブルによってサブセットが定義される。このサブセットから開始テーブルを選択し、変換構造内に頻度データを含めることで、最終データ構造を構築する際に複製を、メモリ効率良く格納することが可能となる。
【００１３】
変換構造内には、頻度データが各値を複製させることで含められる。つまり、変換構造は、開始テーブル内の接続変数の各値から境界テーブル内の少なくとも一つの対応する選択された変数の各値の正しい番号へのリンクを含む。代替として、変換構造内に、開始テーブル内の各接続変数の各一意な値に対するカウンタを含めることもできる。
【００１４】
好ましくは、境界あるいは接続テーブルの内の最も多数のデータレコードを持つ一つが開始テーブルとして選択される。このやり方によると、傾向として、変換構造内に組み込まれるべき頻度データの量が少なくなり、従って、変換構造をより迅速に構築することが可能となる。
【００１５】
もう一つの好ましい実施例においては、開始テーブルのデータレコードを読み出し、変換構造を用いてこのデータレコード内の各接続変数の各値を少なくとも一つの対応する選択された変数の値に変換することで仮想データレコードが生成される。こうして、この仮想データレコードは、選択された複数の変数の複数の値の現在の組合せを含む。この実施例では、最終データ構造を漸進的に構築することができる。つまり、このためには、開始テーブルからデータレコードが順次的に読み出され、仮想データレコードの内容が各読み出されたデータレコードの内容に基づいて更新され、数学的関数が各更新された仮想データレコードの内容に基づいて評価される。この手続きは、データベースから所望の情報を抽出するために要求されるコンピュータメモリの量を最小化する。さらに、任意の計算変数の未定義の値、いわゆる無効（NULL）値を含む仮想データレコードは、しばしば、とりわけ全ての計算変数が無効（NULL）値を示す場合は、直ちに削除することができる。これは、多くのケースにおいて、このような無効値は数学的関数の評価には用いられないためである。これは性能をさらに最適化することに寄与する。
【００１６】
もう一つの実施例においては、中間データ構造が仮想データレコードの内容に基づいて構築される。中間データ構造の各データレコードは、各選択された分類変数に対するフィールドおよび数学的関数内に含まれる各数式に対する総合フィールドを含む。仮想データレコードが更新される度に、各数式が評価され、結果が各選択された分類変数の現在の値に基づいて該当する総合フィールド内に集められる。この中間データ構造を用いると、頻度データに対する異なる必要性を持つ複数の数式を、一つの数学的関数に結合することが可能となる。対応する頻度データを組み込む複数の変換構造が構築され、開始テーブルのデータレコードが、各これら数式に関して、対応する変換構造に基づいて評価され、評価結果が一つの中間データ構造に併合される。同様にして、数学的関数を修正したい場合、例えば、既に選択されている計算変数に関して演算する新たな数式を追加したい場合は、現存の中間データ構造に一つの総合フィールドを追加すること、あるいは現存の総合フィールドを拡張することのみが必要とされる。
【００１７】
仮想データレコード一般は、事実、仮想であるとに、つまり、仮想データレコードには、開始テーブルのデータレコードから最終データ構造への遷移の際に、物理的に、いかなるメモリも割当てられないことに注意する。ただし、この仮想データレコードは、少なくともインプリシットに、開始テーブルのデータレコードの内容を選択された変数の現在の値に変換する手続きにおいて、常に、識別することができる。
【００１８】
発明の実施の形態
以下に本発明を単に一例として付録Ａのテーブルおよび図面の図１〜２との関連で説明する。
【００１９】
図１に示すように、データベースは複数のデータテーブル（テーブル１〜５）から構成される。各データテーブルは複数のデータ変数のデータ値を含む。例えば、テーブル１においては、各データレコードは、データ変数："製品（Product）"、"価格（Price）"および"部品（Part）"のデータ値を含む。データレコードのあるフィールド内に特定な値が存在しない場合は、このフィールドは無効（NULL）値を保持するものとみなされる。同様に、テーブル２においては、各データレコードは変数："日付（Date）"、"顧客（Client）"、"製品（Product）"、および"数（Number）"の値を含む。典型的には、日付の値はASCII-コード化された文字列の形式内に格納される。
【００２０】
本発明による方法はコンピュータプログラムによって実現される。第一のステップ（ステップ１０１）において、プログラムは、データベース内の全てのデータレコードを読み出す。これは、例えば、データベースの全てのテーブル、つまり、説明の実施例においては、テーブル１〜５を選択するSELECT（選択）ステートメントを用いて行なわれる。典型的には、このデータベースは、コンピュータの一次メモリ内に読み込まれる。
【００２１】
評価速度を向上させるために、好ましくは、前記データベース内の各データ変数の各一意な値に異なる２進コードが割当てられ、これらデータレコードは二進コード化された形式にて格納される（ステップ１０１）。これは、典型的には、プログラムが最初にデータベースからデータレコードを読み出すとき行なわれる。各入力テーブルに対して、以下のステップが遂行される。最初に、テーブルの列名、つまり、変数が順次的に読み出される。新たなデータ変数が現われる度に、それに対するデータ構造が例示（instantiated）される（データ変数に対応するデータ構造のインスタンスが作成される）。次に、全てのデータレコードを二進形式にて含む内部テーブル構造が例示され（内部テーブル構造のインスタンスが作成され）、その後、データレコードが順次的に読み出され、二進コード化される。各データ値について、対応するデータ変数のデータ構造が、その値に既に２進コードが割当てられていないか確定するためにチェックされる。割当てられている場合は、その２進コードが上述のテーブル構造内に適切な位置に挿入される。割当てられていない場合は、そのデータ値がそのデータ構造に追加され、新たな２進コード、好ましくは、昇順にて次のコードが割当てられ、割当てられたコードがそのテーブル構造内に挿入される。換言すれば、各データ変数について、一意な２進コードが各一意なデータ値に割当てられる。
【００２２】
付録Ａのテーブル６〜１２は、図１のデータベース内に含まれる様々なデータ変数の異なるデータ値に割当てられた２進コードを示す。
【００２３】
データベース内の全てのデータレコードを読み出した後に、プログラムはデータテーブル間の全ての接続を識別するためにデータベースを分析する（ステップ１０２）。２つのデータテーブル間の接続は、これらデータテーブルが一つの変数を共通に持つことを意味する。このような分析を遂行するための様々なアルゴリズムが当分野において周知である。分析の後、全てのデータテーブルが仮想的に接続される。図１においては、このような仮想接続が両端に矢印を持つ矢（ａ）によって示される。仮想的に接続されたデータテーブルは、少なくとも一つのいわゆるスノーフレーク構造（snowflake structure）、すな わち、ブランチングデータ構造（branching data structure）を形成すべきである。このスノーフレーク構造においては、データベース内の任意の２つのデータテーブル間にたった一つのみの接続経路が存在し、このため、スノーフレーク構造はどのようなループも含まない。万一、仮想接続されたデータテーブル間にループが発生した場合でも、つまり、２つのテーブルが複数の変数を共通に持つ場合でも、幾つかのケースにおいては、このようなループを解決するための当分野において周知の特別なアルゴリズムを用いてスノーフレーク構造を形成することができる。
【００２４】
この初期分析の後、ユーザはデータベースの探索を開始する。探索を遂行するためには、ユーザは数学的関数を定義するが、これは数式の組合せであり得る（ステップ１０３）。ユーザは、図１のデータベースから、年ごとおよび顧客ごとの総売上を抽出することを望むものと想定する。ユーザは、対応する数学的関数"合計(x×y)"を定義し、この関数内に含まれるべき計算変数："価格"と"数"を選択する。ユーザは、さらに、分類変数："顧客"と"年"を選択する。
【００２５】
コンピュータプログラムは、次に、スノーフレーク構造内の全ての対象となるデータテーブル、つまり、選択された計算変数および分類変数の任意の１つを含む全てのデータテーブル（これらデータテーブルは境界テーブルと呼ばれる）、並びに、これら境界テーブル間の接続経路内の全ての中間データテーブル（これらデータテーブルは接続テーブルと呼ばれる）を識別する（ステップ１０４）。明快さの目的で、これら対象となるデータテーブルのグループ（テーブル１〜３）が図１の第一の枠（Ａ）内に含まれる。図からわかるように、この特定のケースにおいては接続テーブルは存在しない。
【００２６】
説明のケースにおいては、数学的関数の評価のために、選択された計算変数の個々の値、つまり、頻度データの全ての発生を含めることが要求される。図１において、このような頻度データを必要とする選択された変数（"価格"と"数"）は太い矢印（ｂ）によって示され、残りの選択された変数は点線（ｂ’）によって示される。次に、スノーフレーク構造内のこれら計算変数を含む全ての境界テーブル（テーブル１〜２）およびこれら境界テーブル間の任意の接続テーブルを含むサブセット（Ｂ）が定義される。特定の変数の頻度要件は、その変数がその中に含まれる数式によって決定されることに注意する。つまり、平均あるいは中間値の決定には頻度情報が必要となる。一般に合計の決定にも頻度情報が必要とされるが、最大あるいは最小の決定には計算変数の頻度データは必要とされない。分類変数も一般に頻度データを必要としない。
【００２７】
次に、好ましくは、サブセット（Ｂ）内のデータテーブル、より好ましくは、このサブセット内の最も多数のデータレコードを持つデータテーブルから開始テーブルが選択される（ステップ１０５）。図１においては、テーブル２が開始テーブルとして選択される。こうして、開始テーブルは、選択された変数（"顧客"、"数"）、および接続変数（"日付"、"製品"）を含む。これら接続変数は、開始テーブル（テーブル２）を境界テーブル（テーブル１および３）にリンクする。
【００２８】
その後、テーブル１３および１４に示すような変換構造が構築される（ステップ１０６）。この変換構造は、開始テーブル（テーブル２）内の各接続変数（"日付"、"製品"）の各値を、境界テーブル（それぞれ、テーブル３および１）内の対応する選択された変数（"年"、"価格"）の値に翻訳するために用いられる。テーブル１３は、テーブル３のデータレコードを順次的に読み出し、接続変数（"日付"）の各一意な値と選択された変数（"年"）の対応する値との間のリンクを作成することで構築される。値４（"日付:1999-01-12"）からのリンクは、この値が境界テーブル内には含まれていないために存在しないことに注意する。同様に、テーブル１４は、テーブル１のデータレコードを順次的に読み出し、接続変数"製品"の各一意な値と選択された変数（"価格"）の対応する値との間のリンクを作成することで構築される。説明のケースにおいては、値２（"製品：練り歯磨き"）が、この接続が境界テーブル内で２度発生するために、選択された変数（"価 格：6.5"）の２つの値にリンクされ、こうして、この変換構造内には頻度データが含められることに注意する。さらに、値３（"製品：シャンプー"）からのリンクは存在しないことにも注意する。
【００２９】
変換構造の構築を終えると、仮想データレコードが作成される。仮想データレコードはテーブル１５に示すように、データベース内の全ての選択された変数（"顧客"、"年"、"価格"、"数"）を含む。仮想データレコードの構築（ステップ１０７〜１０８）においては、最初に開始テーブル（テーブル２）からデータレコードが読み出される。次に、開始テーブルの現在のデータレコード内の各選択された変数（"顧客"、"数"）の値が仮想データレコード内に組み込まれる。さらに、変換構造（テーブル１３〜１４）を用いることで、開始テーブルの現在のデータレコード内の各接続変数（"日付"、"製品"）の各値が対応する選択された変数（"年"、"価格"）の値に変換され、この値が仮想データレコード内にも組み込まれる。
【００３０】
この段階で（ステップ１０９）、仮想データレコード（テーブル１５）を用いて、中間データ構造（テーブル１６）が構築される。中間データ構造の各データレコードは、各選択された分類変数（次元）および数学的関数によって含意される各数式に対する総合フィールドを含む。中間データ構造（テーブル１６）は、仮想データレコード（テーブル１５）内の選択された変数の値に基づいて構築される。こうして、各数式が仮想データレコード（テーブル１５）内の一つあるいは複数の考慮中の計算変数に基づいて評価され、結果が、該当する総合フィールド内に、分類変数（"顧客"、"年"）の現在の値の組合せに基づいて合計される。
【００３１】
上述の手続きが開始テーブルの全てのデータレコードに対して反復される（ステップ１１０）。こうして、開始テーブルのデータレコードを順次的に読み出し、選択された変数の現在の値を仮想データレコード内に組み込み、各数式を仮想データレコードの内容に基づいて評価することで中間データ構造が構築される。仮想データレコード内の分類変数の値の現在の組合せが新たなものである場合は、新たなデータレコードが中間データ構造内に評価の結果を保持するために作成される。新たなものでない場合は、該当するデータレコードが迅速に見つけられ、評価の結果が総合フィールド内で合計される。こうして、開始テーブルが横断（探索）される度に、データレコードが中間データ構造に追加される。好ましくは、中間データ構造は、効率的な索引系、例えば、AVLあるいはハッシュ構造と関連するデータテーブルから構成される。殆どのケースにおいては、総合フィールドは総合レジスタとして実現され、この中に評価された数式の結果が累積される。幾つかのケース、例えば、中間値を評価する場合は、総合フィールドは、代わりに、指定された分類変数の値の一意な組合せに対する全ての個々の結果を保持するように実現される。開始テーブルから中間データ構造を構築するための手続きにおいては、たった一つの仮想データレコードが必要とされるのみであることに注意する。こうして、仮想データレコードの内容が、開始テーブルの各データレコードに対して更新される。これによってコンピュータのプログラムを実行する際のメモリ要件が最小化される。
【００３２】
以下では中間データ構造を構築する手続きについて、テーブル１５〜１６との関連でさらに詳しく説明する。テーブル１５内に示す第一の仮想データレコードR1を作成するためには、選択された変数：" 顧客"および"数"の値が、開始テーブル（テーブル２）の第一のデータレコードから直接に取られる。次に、接続変数："日付"の値"1999-01-02"が、変換構造（テーブル１３）を用いて、選択された変数："年"の値"1999"に変換される。同様にして、接続変数："製品"の値"練り歯磨き"が、変換構造（テーブル１４）を用いて、選択された変数："価格"の値"6.5"に変換され、この結果として仮想データレコードR1が作成される。次に、中間データ構造内のデータレコードがテーブル１６に示すように作成される。説明のケースにおいては、中間データ構造は、３つの列を持ち、２つの列は、選択された分類変数（"顧客"、"年"）を保持し、第三の列は、合計欄を保持する。総合フィールド内には、選択された計算変数（"数"、"価格"）に関して動作（演算）する数式（"x×y"）の評価結果が合計される。仮想データレコードR1を評価するためには、最初に分類変数の現在の値（２進コード：0,0）が読み出され、中間データ構造の対応するデータレコード内に組み込まれる。次に、計算変数の現在の値（２進コード：2,0）が読み出され、これら値に対して数式が評価され、結果が関連する総合フィールドに加えられる。
【００３３】
次に、開始テーブルに基づいて仮想データレコードが更新される。変換構造（テーブル１４）が、選択された変数"価格"の値"6.5"が、接続変数"製品"の値"練り歯磨き"について重複することを示すために、更新された仮想データレコードR2は変更されず、R1と同一とされる。次に、仮想データレコードR2が上述と同様にして評価される。説明のケースにおいては、中間データ構造は、分類変数の現在の値（２進コード：0,0）に対応するデータレコードを含む。こうして、数式を評価した結果が関連する総合フィールド内に累積される。
【００３４】
次に、開始テーブルの第二のデータレコードに基づいて仮想データレコードが更新される。更新された仮想データレコードR3を評価するために、中間データ構造内に新たなデータレコードが作成され、同様な動作が繰り返される。
【００３５】
説明の例においては、無効（NULL）値は、−２なる２進コードにて表されることに注意する。さらに、説明の例において、計算変数の任意の１つに無効値（−2）を保持する全ての仮想データレコードは、無効値は数式（"x×y"）においては評価されることはないために、直接削除されることに注意する。さらに、分類変数の全ての無効値（−2）は全ての他の有効（valid）値と同様に扱われ、中間データ構造内に置かれることにも注意する。
【００３６】
開始テーブルを横断した後で、中間データ構造は、４個のレコードを持ち、おのおのが、分類変数の値の一意な組合せ（0,0;1,0;2,0;3,-2）、および対応する評価された数式の累積結果（41;37.5;60;75）を含む。
【００３７】
好ましくは、中間データ構造は一つあるいはそれ以上の分類変数（次元）を削除するためにも処理される。好ましくは、これは上述の中間データ構造を構築する過程の際に行なわれる。仮想データレコードが評価される度に、中間データ構造内に追加のデータレコードが作成され、あるいはそれらが既に存在する場合は見つけられる。追加の各データレコードは、一つあるいは複数の分類変数の全ての値に対する数式の評価結果の合計を保持するよう予定される。こうして、中間データ構造は、開始テーブルの横断（探索）が完了した時点で、分類変数の値の全ての一意な組合せに対する合計結果、および関連する各分類変数が削除された後の合計結果の両方を含むこととなる。
【００３８】
以下では、中間データ構造の次元を削除するためのこの手続きについて、テーブル１５および１６との関連でさらに詳しく説明する。仮想データレコードR1（テーブル１５）が評価され、中間データ構造内に第一のデータレコード（0,0）が作成されると、中間データ構造内に追加のデータレコードが作成される。これら追加のデータレコードは、一つあるいは複数の次元が削除されたときの対応する結果を保持することを予定される。テーブル１６において、中間データ構造内の分類変数に−１なる２進コードが割当てられている場合、これはその変数の全ての値が評価されることを示す。説明のケースにおいては、３つの追加のデータレコードが作成され、各データレコードは分類変数の値の新たな組合せ（-1,0;0,-1;-1,-1）を保持する。評価結果がこれら追加のデータレコードの関連する総合フィールド内に合計される。これら追加のデータレコードの第一のレコード（-1,0)は、分類変数"年"が値"1999"を持つときの、分類変数"顧客"の全ての値に対する合計結果を保持することを予定される。第二の追加のデータレコード（0,-1）は、分類変数"顧客"が"Nisse"であるときの、分類変数"年"の全ての値に対する合計結果を保持することを予定される。第三の追加のデータレコード（-1,-1）は、分類変数"顧客"および"年"の両方の全ての値に対する合計結果を保持するように予定される。
【００３９】
仮想データレコードR2が評価されると、結果が、分類変数の値の現在の組合せ（２進コード：0,0）と関連する総合フィールド内、並びに考慮中の追加のデータレコード（２進コード：-1,0;0,-1;-1,-1）と関連する総合フィールド内に合計される。仮想データレコードR3が評価されると、結果が、分類変数の値の現在の組合せ（２進コード：1,0）と関連する総合フィールド内に合計される。この結果は、さらに、中間データ構造内に新に作成された追加のデータレコード（２進コード：1,-1）の総合フィールドおよび考慮中の現存のデータレコード（２進コード：-1,0;-1,-1）と関連する総合フィールド内にも合計される。
【００４０】
開始テーブルが横断（探索）を終えた時点で、中間データ構造はテーブル１６に示すような１１個のデータレコードを含む。
【００４１】
好ましくは、中間データ構造が２つより多くの分類変数を含む場合は、中間データ構造は、各削除された分類変数に対して、この分類変数の全ての値について合計された評価結果を、残りの分類変数の値の各一意な組合せに対して含む。
【００４２】
中間データ構造の構築を終えると、最終データ構造、つまり、テーブル１７に非２進表記にて示すような多次元立方体が、数学的関数（"合計(x×y)）を中間データ構造内に含まれる数式（"x×y)"の結果に基づいて評価することで作成される（ステップ１１１）。これを行なうためには、分類変数の値の各一意な組合せに対する総合フィールド内の結果が結合される。説明のケースにおいては、最終データ構造の作成は、この数学的関数が本質的に単純であるために非常に率直なものとなる。最終データ構造の内容は、その後、ユーザに、テーブル１８に示されるような２次元テーブルにて提出することも（ステップ１１２）、代替として、最終データ構造が多くの次元を含む場合は、データをピボットテーブルにて提出し、当分野において周知のように、ユーザがこれら次元内に対話的に上下に移動できるようにすることもできる。
【００４３】
以下では、本発明の第二の実施例についてテーブル２０〜２９との関連で説明する。説明はこの実施例の幾つかの特徴についてのみ、つまり、接続テーブルからのデータを含む変換構造の構築、およびより複雑な数学的関数に対する中間データ構造の構築についてのみ行なわれる。この実施例においては、ユーザは、テーブル２０〜２３に示すようなデータテーブルを含むデータベースから顧客ごとの売上データを抽出することを希望するものと想定する。理解を容易にするために、この実施例においては２進コード化については省略されている。
【００４４】
ユーザは、結果がそれに対して顧客ごとに分割されるべき以下の数学的関数を指定するものと想定する：
ａ）"IF（Only (環境インデックス）＝'I') THEN
合計(数×価格)×2, ELSE 合計(数×価格))"、and
ｂ）"平均((数×価格)"
数学的関数（ａ）は、売上高が'I'なる環境インデックスを持つ製品群に属する製品に対しては２倍されるべきであり、他の製品に対しては実際の売上高が用いられるべきことを指定する。数学的関数（ｂ）は参照の目的で含めるられている。
【００４５】
この実施例においては、分類変数として"環境インデックス（Environment index）"と"顧客"選択され、計算変数として"数"と"価格"選択される。テーブル２０、２２および２３は境界テーブルとして識別され、テーブル２１は接続テーブルとして識別される。テーブル２０が開始テーブルとして選択される。こうして、開始テーブルは、選択された変数（"数"、"顧客"）、および接続変数（"製品"）を含む。接続変数は、開始テーブル（テーブル２０）を、接続テーブル（テーブル２１）を介して境界テーブル（テーブル２２〜２３）にリンクする。
【００４６】
次に、変換構造の作成についてテーブル２４〜２６との関連で説明する。変換構造の第一の部分（テーブル２４）は、第一の境界テーブル（テーブル２３）のデータレコードを順次的に読み出し、接続変数（"製品群"）の各一意な値と選択された変数（"環境インデックス"）の対応する値との間にリンクを作成することで構築される。同様にして、変換構造の第二の部分（テーブル２５）が第二の境界テーブル（２２）のデータレコードを順次的に読み出し、接続変数（"価格群"）の各一意な値と選択された変数（"価格"）の対応する値との間にリンクを作成することで構築される。次に、接続テーブル（テーブル２１）のデータレコードが順次的に読み出される。テーブル２４と２５内の接続変数（それぞれ、"製品群"と"価格群"）の各値がテーブル２１内の接続変数（"製品"）の対応する値に代わりとして用いられ、結果が、テーブル２６に示すような一つの最終変換構造に併合される。
【００４７】
次に、中間データ構造が構築される。これは、開始テーブル（テーブル２０）のデータレコードを順次的に読み出し、変換構造（テーブル２６）を用いて、選択された変数（"環境インデックス"、"顧客"、"数"、"価格"）の現在の値を仮想データレコード内に組み込み、各数式を仮想データレコードの現在の内容に基づいて評価することで行なわれる。
【００４８】
簡潔さの目的で、テーブル２７は、開始テーブルの各データレコードに対する仮想データレコードの対応する内容を表示する。第一の実施例との関連でも説明したように、たった１つの仮想データレコードのみが必要とされる。この仮想データレコードの内容が、開始テーブルの各データレコードに対して、更新、つまり、置換される。
【００４９】
中間データ構造の各データレコードは、テーブル２８に示すように、各選択された分類変数（"顧客"、"環境インデックス"）の値、および数学的関数によって含意される各数式に対する総合フィールドを含む。このケースにおいては、中間データ構造は２つの総合フィールドを含む。一方の総合フィールドは、選択された計算変数（"数"、"価格"）に関して演算する数式（"x×y"）の合計結果、並びにこれら動作の回数のカウンタを含む。この総合フィールドのレイアウトは、平均量（"平均(x×y)）が計算されるべきである事実のために与えられる。他方の総合フィールドは分類変数の値の各組合せに対して、分類変数"環境インデックス"の最低値と最高値を保持するように設計される。
【００５０】
第一の実施例の場合と同様に、中間データ構造（テーブル２８）は、数式を仮想データレコード（テーブル２７内の各行）の現在の内容に対して評価し、結果を分類変数（"顧 客"、"環境インデックス"）の現在の値の組合せに基づいて該当する総合フィールド内に合計することで構築される。中間データ構造は、さらに、値"<ALL>"が分類変数の一方あるいは両方に割当てられているデータレコードを含み、対応する総合フィールドは、この一つあるいは複数の変数（次元）が削除されたときの合計結果を含む。
【００５１】
中間データ構造の構築を終えると、最終データ構造、つまり、多次元立方体が、数学的関数を中間データ構造内に含まれる数式の評価結果に基づいて評価することで作成される。最終データ構造の各データレコードは、テーブル２９に示すように、各選択された分類変数（"顧客"、"環境インデックス"）の値、およびユーザによって選択された各数学的関数に対する総合フィールドを含む。
【００５２】
最終データ構造は、分類変数の値の各一意な組合せに対する中間データ構造の総合フィールド内の結果に基づいて構築される。関数（ａ）を、テーブル２８のデータレコードを順次的に読み出すことで評価されるときは、プログラムは、最初に、テーブル２８の最後の列内の両方の値が'I'に等しいかチェックする。そうである場合は、テーブル２８の第一の総合フィールド内に含まれる関連結果に２が乗じられ、テーブル２９内に格納される。そうでない場合は、テーブル２８の第一の総合フィールド内に含まれる関連結果が直接にテーブル２９内に格納される。関数（ｂ）を評価するときは、選択された計算変数（"数"、"価格"）に関して動作する数式（"x×y"）の合計結果が、動作の回数によって割られ（合計結果と動作の回数は両方ともテーブル２８の第一の総合フィールド内に格納されている）、結果がテーブル２９の第二の総合フィールド内に格納される。
【００５３】
上の説明から明らかなように、本発明によると、ユーザは数学的関数を自由に選択し、これら数学的関数内に計算変数を組み入れることができるとともに、分類変数を自由に選択し、その結果を得ることができる。
【００５４】
上述の開始テーブルからデータレコードを順次的に読み出すことに基づいて中間データ構造を構築する手続きに対する代替として、メモリ効率は落ちるが、最初に、いわゆる結合テーブル（join table）を作成することもできる。結合テーブルを構築するためには、開始テーブルの全てのデータレコードを横断（探索）され、変換構造を用いて、開始テーブル内の各接続変数が、境界テーブル内の少なくとも一つの対応する選択された変数の値に変換される。こうして、結合テーブルのデータレコードは、選択された変数の値の全ての発生する組合せを含むこととなる。次に、結合テーブルの内容に基づいて中間データ構造が構築される。このためには、結合テーブルの各レコードに対して、各数式が評価され、結果が、各選択された分類変数の現在の値に基づいて、該当する総合フィールド内に合計される。ただし、この代替の手続きは、所望の情報を抽出するためにより多くのコンピュータメモリを必要とする。
【００５５】
数学的関数が、頻度データに対する異なる矛盾する要求を持つ数式を含むこともあり得る。この場合は、ステップ１０４〜１１０（図２）がこれら各数式に対して反復され、結果が一つの共通の中間データ構造内に格納される。代替として、一つの最終データ構造、つまり、多次元立方体を各数式に対して構築し、これら多次元立方体の内容をユーザへの提出の際に融合することもできる。
【表１】
0004463431.tif 000002
【表２】
0004463431.tif 000003
【表３】
0004463431.tif 000004
【表４】
0004463431.tif 000005
【図面の簡単な説明】
【図１】  本発明の方法に従って考慮中のデータテーブルの識別の後のデータテーブルの内容を示す。
【図２】  本発明の方法の一つの実施例のステップのシーケンスを示す。
【図１】
0004463431.tif 000006
【図２】
0004463431.tif 000007