(57)【特許請求の範囲】
【請求項１】
第１のテーブルのある特定の列の列定義を含む入力を受信するステップであって、前記入力は、前記第１のテーブルのうち前記特定の列以外の少なくとも１つの列と、第２のテーブルの少なくとも１つの列に基づくＤＡＸ(data analysis expression)を含むステップと、
前記第１のテーブルと前記第２のテーブルとの間のリレーションシップを決定するステップと、
前記ＤＡＸ(data analysis expression)を実行することで、前記特定の列を事前設定するステップであって、ある特定の行において前記ＤＡＸ(data analysis expression)を実行することとは、
ユーザ入力からクエリを受信するステップと、
前記クエリを基にして前記ＤＡＸ(data analysis expression)の値を計算するコマンドを生成するステップと、
前記特定の行に含まれる第１のデータと、前記特定の行に関連するフィルタに基づいて前記第２のテーブルから取り出した第２のデータに基づいて、前記ＤＡＸ(data analysis expression)の値を計算するステップと、
計算された前記ＤＡＸ(data analysis expression)の値を前記特定の列と前記特定の行の要素であるセルに出力するステップと、
を含む、コンピュータで実行される方法。
【請求項２】
更に、
前記第１のテーブルの行のサブセットの選択を受信するステップと、
選択された行のサブセットのために前記ＤＡＸ(data analysis expression)を再実行するステップと、
を含む、請求項１に記載のコンピュータで実行される方法。
【請求項３】
前記ＤＡＸ(data analysis expression)は、ユーザ定義式を含む、請求項１又は２に記載のコンピュータで実行される方法。
【請求項４】
前記ＤＡＸ(data analysis expression)は、少なくとも一つのデータ・テーブルの複数の行に渡って集計される式を含む、請求項１〜３のいずれか一項に記載のコンピュータで実行される方法。
【請求項５】
請求項１〜４のいずれか一項に記載の方法を実行するためのプログラム。
【請求項６】
請求項１〜４のいずれか一項に記載の方法を実行するためのプログラムを記録した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、多次元データ分析に関する。
【背景技術】
【０００２】
多次元データ分析（例えば、複数の視点からのデータ表示および分析）は、ビジネスにおいてますます注目されている。しかしながら、現在の多次元データ分析アプリケーションは、典型的には、ユーザが、ＭＤＸ（Multi-Dimensional Expression Language）のような複雑な意味言語について習熟していることを要求する。なぜならば、ＭＤＸ式は、データを整理し、分析するために用いられるからである。したがって、ＭＤＸの訓練を受けていないビジネスマンにとって、多次元データ分析を行うことは難しいであろう。さらに、ビジネスマンは一般的に利用可能なスプレッドシート・アプリケーションによって提供されるデータ分析式に精通しているかもしれないが、通常、そのような式は多次元データ分析プログラムほど強力ではない。例えば、そのような式は、データの１次元（例えば、シーケンシャルな）での集計を可能とするのみであろう。したがって、複数の要因に基づいて意思決定を行う事業では、費用のかかる２つの選択肢間で選択を迫られる可能性がある。つまり、既存の従業員に対してＭＤＸのような複雑な言語についての訓練を行うか、もしくは、多次元データ分析を専門とするアナリストを雇うかである。
【発明の概要】
【０００３】
ＤＡＸｓ（data analysis expressions）の受信および処理のシステムおよび方法が開示される。ＤＡＸは、スプレッドシート式（spreadsheet formulae）と同様の式言語（expression language）で定義することができる。また、ＤＡＸは、スプレッドシート・テーブル上で、多次元データ分析およびリレーショナル・データ・モデルに関するデータ分析を実行するように機能する。このように、ＤＡＸｓによって、既存のスプレッドシート・アプリケーションに精通した人々は、多次元データ分析およびリレーショナル・データ・モデル（例えば、既存のスプレッドシート・アプリケーション内の）に関するデータ分析を行うことが可能となる。従来のスプレッドシート式とは異なり、ＤＡＸはスプレッドシートの特定のセル範囲から有効的に独立している。
【０００４】
例えば、ＤＡＸは受信されて、スプレッドシート・アプリケーションのピボット・テーブルにおいて実行される。ピボット・テーブルの特定のセルに対してＤＡＸを実行することは、その特定のセルについてコンテキストを決定すること、その特定のセルのためのＤＡＸの値を計算すること、および計算されたＤＡＸの値をその特定のセルで出力することを含む。
【０００５】
ＤＡＸｓは、マルチテーブルの実行をサポートする。例えば、ＤＡＸは第１のデータ・テーブルおよび第２のデータ・テーブルを参照し、ＤＡＸを実行することは、第１のデータ・テーブルと第２のデータ・テーブルとの間のリレーションシップを横断すること（例えば、第１のテーブルの列（column）と第２のテーブルの列との間に存在するリレーションシップに従うこと）を含んでもよい。ＤＡＸｓは、動的な再実行（dynamic re-execution）もサポートする。例えば、ＤＡＸは、データ・テーブルの１組の行（row）に格納されるデータのユーザ変更に応答して、その１組の行に関して自動的に再実行される。
【０００６】
この概要は、以下の詳細な説明にさらに説明される概念をまとめたものを簡素化した形で紹介するためのものである。この概要は、特許請求の主題の重要な特徴または本質的な特徴を認定することを意図しておらず、特許請求の主題の範囲を限定することを意図したものでもない。
【図面の簡単な説明】
【０００７】
【図１】ＤＡＸｓ（data analysis expressions）を受信して処理するコンピュータ・システムの一実施形態を説明するブロック図である。
【図２】ＤＡＸｓ（data analysis expressions）を受信して処理するコンピュータ・システムの他の実施形態を説明するブロック図である。
【図３】図１のコンピュータ・システムが使用可能なデータ・テーブルの一実施形態を説明する図である。
【図４】図３のデータ・テーブルに基づくピボット・テーブルの一実施形態を説明する図である。
【図５】図１のコンピュータ・システムが使用可能なデータ・テーブルの他の実施形態を説明する図である。
【図６】図３のデータ・テーブルおよび図５のデータ・テーブルに基づくピボット・テーブルの一実施形態を説明する図である。
【図７】ＤＡＸｓ（data analysis expressions）の受信および処理の方法の一実施形態を説明するフロー図である。
【図８】ＤＡＸｓ（data analysis expressions）の受信および処理の方法の他の実施形態を説明するフロー図である。
【図９】ＤＡＸｓ（data analysis expressions）の受信および処理の方法の他の実施形態を説明するフロー図である。
【図１０】図１〜図９に示される各実施形態に係るコンピュータ実装される方法、コンピュータ・プログラム製品、およびシステム・コンポーネントをサポートするように動作可能なコンピューティング・デバイスを含むコンピューティング環境のブロック図である。
【発明を実施するための形態】
【０００８】
ＤＡＸｓ（Data analysis expressions）により、スプレッドシート・アプリケーションのように、従来のデータ処理アプリケーションにおける多次元データ分析が可能となる。例えば、ＤＡＸは、スプレッドシートの列のための列定義として、またはピボット・テーブルにおける処理手法として受信されうる。ＤＡＸは列を事前設定するために実行されるが、その列では、それぞれのセルにおける値がそのセルについての行コンテキストに基づいて計算される。代わりに、ピボット・テーブルのセルは、ＤＡＸを実行することにより事前設定されるが、ＤＡＸの実行においては、ピボット・テーブルのそれぞれのセルにおける値がそのセルに関連するコンテキスト（例えば、フィルタ・コンテキスト）に基づいて計算される。
【０００９】
一実施形態においては、コンピュータ実装される方法は、スプレッドシートのピボット・テーブルにおけるＤＡＸ（data analysis expression）を受信することを含むことが開示される。コンピュータ実装される方法は、少なくとも１つのスプレッドシートのデータ・テーブルに対してＤＡＸ（data analysis expression）を実行することも含む。ピボット・テーブルの特定のセルのためにＤＡＸ（data analysis expression）を実行することは、その特定のセルに関連するコンテキストを決定すること、そのコンテキストに基づいてＤＡＸ（data analysis expression）の値を計算すること、および計算された値をそのセルで出力することによって果たされる。
【００１０】
他の実施形態においては、プロセッサによって実行されると、プロセッサに第１のスプレッドシート・テーブルの列定義を含む入力を受信させる命令を含むコンピュータ読出可能な媒体が開示される。その入力は、スプレッドシート・テーブルの少なくとも１つの列および第２のスプレッドシート・テーブルの少なくとも１つの列に基づくＤＡＸ（data analysis expression）を含む。コンピュータ読出可能な媒体は命令を含み、その命令は、プロセッサによって実行されるとプロセッサに、第１のスプレッドシート・テーブルと第２のスプレッドシート・テーブルとの間のリレーションシップを決定させ、ＤＡＸ（data analysis expression）を実行することでその特定の列を事前設定させる命令である。第１のスプレッドシート・テーブルの特定の行に対してＤＡＸ（data analysis expression）を実行することは、第１のスプレッドシート・テーブルの特定の行における第１のデータ、およびその特定の行に関連付けられている行コンテキストに基づいて第２のスプレッドシート・テーブルから検索された第２のデータに基づいてＤＡＸ（data analysis expression）の値を計算することを含む。ＤＡＸ（data analysis expression）を実行することは、計算された値を特定の列および特定の行の要素であるセルにて出力することをも含む。
【００１１】
他の実施形態においては、システムが開示される。システムは、メモリおよびデータを受信するように構成されたデータ・インタフェースを含み、受信されたデータに基づいて１つまたは複数のデータ・テーブルを生成し、データ・テーブルを列ベースのインメモリ記憶（in-memory store）（例えば、ＯＬＡＰ（online analytical processing）キューブ構造に対応する構造）中に記憶する。システムは、 データ・テーブルに基づいてピボット・テーブルを生成するように構成されたピボット・テーブル・モジュールをも含む。システムはさらに、ＤＡＸ（data analysis expression）を受信して、データ・テーブルの少なくとも１つの列に関してそのＤＡＸ（data analysis expression）を実行するように構成された分析モジュールを含む。ピボット・テーブルの特定のセルのためにＤＡＸ（data analysis expression）を実行することは、その特定のセルに関連するフィルタ・コンテキストを決定し、その特定のセルのフィルタ・コンテキストに対応するデータ・テーブルの１つまたは複数の行に関連するデータを検索することを含む。ＤＡＸ（data analysis expression）を実行することは、検索されたデータに基づいてＤＡＸ（data analysis expression）の値を計算し、計算された値をセルにて出力することを含む。
【００１２】
図１は、一実施形態に係るＤＡＸｓ（data analysis expressions）を受信して処理するコンピュータ・システムを説明するブロック図である。コンピュータ・システム１００は、データ・インタフェース１１０とメモリ１１４とを含む。コンピュータ・システム１００は、スプレッドシート分析モジュール１２６とスプレッドシート・ピボット・テーブル・モジュール１１８とを含む。通常、コンピュータ・システム１００は、例示のＤＡＸ１０４のようなＤＡＸｓを受信して処理する。ＤＡＸｓは、既存のスプレッドシート式と同様の構文をとり、コンピュータ・システム１００における多次元（例えば、複数テーブルおよび／または複数列）データ分析を可能とすることができる。
【００１３】
コンピュータ・システム１００は、データ１０２を受信するように構成されたデータ・インタフェース１１０を含む。一実施形態においては、データ１０２は、コンピュータ・システム１００のユーザによって供給される。これに代えて、データ１０２は、他のコンピュータ・システム、ネットワーク・ストレージ装置、またはネットワークシェアから受信されてもよい。データ・インタフェース１１０は、さらに、インメモリの列ベースの記憶を用いたメモリ１１４において受信されたデータに基づいてデータ・テーブル１１２を生成するように構成される。例えば、データ・インタフェース１１０は、スプレッドシート・アプリケーション内でテーブル（例えば、スプレッドシート・テーブル）を生成してもよく、そのテーブルはデータ１０２を含んでいてもよい。 ＯＬＡＰ（online analytical processing）キューブ１１６のデータ構造は、インメモリの列ベースの記憶に基づくメモリ１１４に構築されてもよい。ＯＬＡＰキューブは、ＯＬＡＰキューブの３次元（すなわち、３軸）のそれぞれが異なるデータの配置を行うように、配置されたデータを記憶してもよい。例えば、本明細書の図３〜図６を参照してさらに説明されるように、ＯＬＡＰキューブは、日付ごとに配置された売上データ、製品ＩＤ、および顧客ＩＤを構成するようになっていてもよい。これに代えて、データ・テーブル１１２は、ＯＬＡＰハイパーキューブ（例えば、３次元よりも多次元のＯＬＡＰデータ構造）または何らかの他のインメモリの列記憶のような他のデータ構造に記憶されてもよい。メモリ１１４（例えば、コンピュータ・システム１００のＲＡＭ（random access memory））におけるＯＬＡＰキューブ１１６でのデータ・テーブル１１２の記憶装置により、本明細書に記載されるように多次元データ分析およびピボット・テーブルの操作は容易になるであろう。データ・テーブルについては、図３および図５とともに、さらに本明細書において説明する。
【００１４】
コンピュータ・システム１００は、 スプレッドシート・ピボット・テーブル・モジュール１１８をも含む。例示の実施形態においては、スプレッドシート・ピボット・テーブル・モジュール１１８は、コンピュータ・システム１００のスプレッドシート・アプリケーションの一部である。スプレッドシート・ピボット・テーブル・モジュール１１８は、ＯＬＡＰキューブ１１６によって参照されるデータ・テーブル１１２に基づいてピボット・テーブル１２２を生成するロジック１２０を含む。 ピボット・テーブル１２２は、“ピボット”の操作をサポートする。“ピボット”の操作により、ピボット・テーブル１２２の行ヘッダ、列ヘッダ、フィルタ、またはスライサーが変更され、ピボット・テーブル１２２におけるデータの値は、その変更を反映するように自動的に更新される。一実施形態においては、ピボット操作に応答してピボット・テーブル１２２を更新することは、インメモリのＯＬＡＰキューブ１１６のクエリを再実行することを含み、ＯＬＡＰキューブからのデータは、ＯＬＡＰキューブ１１６と異なる次元に沿って配置されて表示される。ピボット・テーブルについては、図４および図６を参照して、さらに本明細書において説明する。
【００１５】
コンピュータ・システム１００は、さらにスプレッドシート分析モジュール１２６を含む。一例示的形態においては、スプレッドシート分析モジュール１２６は、コンピュータ・システム１００のスプレッドシート・アプリケーションの一部である。スプレッドシート分析モジュール１２６は、ＤＡＸ１０４を受信するように構成され、ＤＡＸ１０４を実行するように構成されたＤＡＸ実行ロジック１２８を含む。例えば、スプレッドシート分析モジュール１２６は、データ・テーブル１１２に関してＤＡＸ１０４を実行する。ピボット・テーブル１２２の特定のセルに対してＤＡＸを実行することは、ＤＡＸ１０４に参照されるテーブルに対する行コンテキストと同様にその特定のセルに対するフィルタ・コンテキストを決定すること、行コンテキストに基づいてデータ１２４（例えば、データ・テーブル１１２の１つまたは複数の行に関連するデータ）をＯＬＡＰキューブ１１６から検索すること、検索されたデータに基づいてＤＡＸ１０４の値１３０を計算すること、および算出された値１３０をピボット・テーブルのそのセルにて出力することを含む。従って、ピボット・テーブル１２２を事前設定することは、様々なコンテキストおよび複数のデータ・テーブルのクロス・フィルタリング（cross-filtering）に関して、ＤＡＸ１０４が自動的に再帰的に実行することを含んでもよい。これに代えて、ピボット・テーブルの複数のセルのための計算が同時に実行されように、計算はブロック・モードで実行されてもよい。
【００１６】
一実施形態においては、ＤＡＸ１０４は、データ・テーブル１１２の複数の行に渡って集計される式を含む。その式は、スプレッドシート・アプリケーションの特定のセルの範囲を参照せずに、モジュール１１８、１２６を含むスプレッドシート・アプリケーションのネイティブ式言語で表現されたユーザ定義式であってもよい。従って、ユーザが精通している既存のスプレッドシート式を組み込みながら、ＤＡＸｓ（例えば、ＤＡＸ１０４）によって、テーブルベース（例えば、列ベース）の多次元データ分析が可能となるであろう（従来のスプレッドシートのセルベースでの分析とは対照的に）。例えば、ＤＡＸ１０４は、集計（例えば、合計、平均、最低、最大、または総数）、時間ベースの関数（例えば、日、週、月、四半期、年、最初と最後の日付、非空白期間の最初と最後の日付、月／四半期／年の始まりと終わり、追加された日付、合間の日付、期間中の日付、並行した期間、前の日／月／四半期／年、次の日／月／四半期／年、現在の日付までの月／四半期／年、去年の同じ時期、月／四半期／年に渡る集計、または月／四半期／年ごとの使用可能および使用不可の口座の残高）、またはこれらの組み合わせのいずれを含んでいてもよい。ＤＡＸは、さらに、apply関数、group by関数、 semi join関数、lookup values関数、earlier/earliest関数（例えば、セルの以前の値を指すための関数）、intersect関数、except関数、union関数、select関数、join関数、topN関数、rank関数、またはこれらの組み合わせのいずれをも含んでいてもよい。ＤＡＸ１０４は、一般的に使用されるスプレッドシート式に類似する構文を持つ専門的なテーブルベースの関数をも含んでいてもよい。例えば、ＤＡＸ１０４は、related table関数、related table table関数、filter table関数、distinct table関数、values table関数、all table関数、all except table関数、all no blank row table関数、またはこれらの組み合わせのいずれをも含んでいてもよい。
【００１７】
操作において、データ・テーブル１１２は、データ・インタフェース１１０によって受信されるデータ１０２に基づいて生成されてもよい。ここで、単一のデータ・テーブル１１２に関する操作としているのは、あくまで例示目的のものであることに留意されたい。任意の数のデータ・テーブルとデータソースが存在していてもよい。データ・テーブル１１２は、メモリ１１４のＯＬＡＰキューブ１１６のためのデータソースとして用いられてもよい。スプレッドシート・アプリケーションのユーザは、ピボット・テーブル１２２を使用してデータ・テーブル１１２上の分析を実行することを希望することもありうる。ピボット・テーブル１２２は、スプレッド・ピボット・テーブル・モジュール１１８によって生成される。 ピボット・テーブル１２２によって処理手法の出力を定義する際に、ユーザがＤＡＸ１０４を入力してもよい。スプレッドシート分析モジュール１２６は、ＤＡＸ１０４を実行することによってピボット・テーブル１２２のセルを事前設定できる。ピボット・テーブル１２２の特定のセルを事前設定することは、その特定のセルに関連するフィルタ・コンテキストを決定すること、そのコンテキストに基づいてその特定のセルのためのＤＡＸ値１３０を計算すること、および計算されたＤＡＸ値１３０をそのセルで出力することを含んでいてもよい。
【００１８】
一実施形態において、ＤＡＸｓの実行は、ハイブリッドな反復子ベースおよび検索ベースの実行戦略を伴う。他の実施形態においては、ＤＡＸの実行は、ＤＡＸの実行ツリーの正規の形式（例えば、非リレーショナル代数形式）のクロス・アプリケーションを含んでいてもよい。他の実施形態においては、ＤＡＸの実行は、計算列が依存しているもののサブ計算を決定するために、依存関係の分析を実行することを含んでいてもよい。その依存関係の分析に基づいて、サブ計算を計算する順序を決定することができる。例えば、計算列の値Ａが３つのサブ計算Ｂ、Ｃ、およびＤの結果に依存している場合、ルールが生成されて、Ａを計算しようとする前にＢ、Ｃ、およびＤのそれぞれを計算するということになるであろう。
【００１９】
図１に例示される実施形態はピボット・テーブルにおけるＤＡＸｓの使用を示しているが、ＤＡＸｓはピボット・テーブル無しで使用される場合もあることに留意されたい。例えば、ＤＡＸ１０４は、スプレッドシート・アプリケーションにおいて、データ・テーブル１１２の特定の列の列定義として入力されてもよい。ＤＡＸ１０４は、特定の列よりも、データ・テーブル１１２（および可能な限り追加されたテーブル）の１つまたは複数の列に基づく。特定の列のセルを事前設定することは、そのセルについての行コンテキストを決定すること、この行コンテキストに基づいてＤＡＸ１０４の値を計算すること、およびＤＡＸ１０４のために計算された値をそのセルで出力することを含んでもよい。他の実施形態においては、ＤＡＸ１０４は、さらに第２のデータ・テーブルの少なくとも１つの列に基づいていてもよい。このような実施形態の場合、ＤＡＸのための値を計算することは、データ・テーブル１１２と第２のデータ・テーブルとの間のリレーションシップに基づいて、第２のデータ・テーブルからデータを検索することを含んでもよい。例えば、データ・テーブル１１２は、第２のデータ・テーブルの関連する列（related column）（例えば、インデックス列）に存在する可能性のある値を含む列を含んでいてもよい。一実施形態においては、第２のデータ・テーブルは、リレーションシップが存在しない場合でさえ、その計算に関与する。例えば、ＤＡＸ１０４を実行することは、データ・テーブル１１２中のデータ値に関連する行を備える第２のデータ・テーブルをフィルタすることを含んでもよい。その結果であるフィルタされた行は、その後、ＤＡＸに集計されうる。関連する列がデータ・テーブル１１２において、第２のデータ・テーブルにおける名前と異なる名前であったとしても、データ・テーブル１１２と第２のデータ・テーブルとの間のリレーションシップ（例えば、関連する列）は存在しうることに留意されたい。データ・テーブル間のリレーションシップについては、図５および図６とともに、さらに説明する。
【００２０】
図１のコンピュータ・システム１００によって、ＤＡＸｓを通じて、一般的なスプレッドシート式によっては不可能な高度なデータ分析が可能となりうることが分かるであろう。さらに、図１のコンピュータ・システム１００によって、スプレッドシートの特定のセル範囲 を参照せずに、複数のテーブルに基づいてそのような高度な分析が可能となりうることも分かるであろう。
【００２１】
図２は、他の実施形態に係るＤＡＸｓを受信して処理するコンピュータ・システム１００を説明するブロック図である。システム２００は、ユーザ入力２０２を受け付けるように構成されたスプレッドシート・アプリケーション２１０を含む。スプレッドシート・アプリケーション２１０は、分析モジュール２２０を含む。例示的かつ非限定的実施形態において、分析モジュール２２０は、図１のスプレッドシート分析モジュール１２６であり、図１のＤＡＸ実行ロジック１２８と同様のＤＡＸ実行ロジック２２２を含む。
【００２２】
スプレッドシート・アプリケーション２１０は、 スプレッドシート・アプリケーション２１０のピボット・テーブルでの変化に応じてクエリ２０１を受信するように構成されたロジック２０４を含んでいてもよい。例えば、ロジック２０４は、図１のピボット・テーブル１２２での設定をユーザが変更したことに応じて、クエリ２０１を受信する。また、クエリ２０１を受信したことに応じて、ロジック２０４は、ピボット・テーブルに関連するＤＡＸを再計算するコマンド２０８を自動的に生成し、そのコマンド２０８を分析モジュール２２０に送信してもよい。
【００２３】
スプレッドシート・アプリケーション２１０は、スプレッドシート・アプリケーション２１０での１つまたは複数のデータ・テーブルでの変化を検出するように構成されたロジック２０６を含んでいてもよい。例えば、ロジック２０６は、図１のピボット・テーブル１１２のようなデータ・テーブルでの変化を検出するように構成されている。このデータ・テーブルでの変化は、ユーザ入力２０２に基づいて検出されてもよい。例えば、ユーザ入力２０２は、データ・テーブルのセルのための新しい値を含んでいてもよい。データ・テーブルでの変化を検出すると、ロジック２０６は、変更されたデータ・テーブルに関連するＤＡＸ（例えば、列定義ＤＡＸ）を再計算するコマンド２０８を自動的に生成し、そのコマンド２０８を分析モジュール２２０に送信してもよい。
【００２４】
コマンド２０８の受信に応じて、分析モジュール２２０は、スプレッドシート・アプリケーションにて１つまたは複数のＤＡＸｓを自動的に再計算する。例えば、分析モジュール２２０は、スプレッドシート・アプリケーション２１０のデータ・テーブルでの列定義ＤＡＸｓ、スプレッドシート・アプリケーション２１０のピボット・テーブルでのＤＡＸｓ、またはこれらの任意の組み合わせを自動的に再計算してもよい。
【００２５】
図２のシステム２００は、ＤＡＸｓの自動的な再計算を可能とすることで、ユーザをスプレッドシート・アプリケーション２１０により慣れさせることができることを理解されたい。従って、スプレッドシート・アプリケーションのユーザは、データ・テーブルおよびピボット・テーブルを変更すると、これに応じて、再定義および手動によるＤＡＸｓの再実行をせずともＤＡＸ値が変化することが分かるであろう。よって、ＤＡＸは、一旦入力されると変化するデータに関する多次元データ分析を複数回実行するために使用されることを理解されたい。
【００２６】
図３および図４は、一実施形態に係る図１のデータ・テーブル１１２（売上テーブル３００として示される）および売上テーブル３００に基づいて生成されるピボット・テーブル４００を説明する図である。売上テーブル３００は、１つまたは複数の行３１０、および列３２０、３３０、３４０、３５０、３６０、３７０を含む。一例示的形態においては、売上テーブル３００は、図１のデータ・テーブル１１２を含んでいる。
【００２７】
売上テーブル３００の行３１０のそれぞれは売買取引を表し、売上テーブル３００の各列３２０〜３７０は売買取引に関連するデータを表している。例えば、列３２０は売上げの日付を表し、列３３０はその売上について支払いをした顧客を識別する顧客識別子（CustID）を表し、列３４０は支払いが行われた製品を識別する製品識別子（ProdID）を表し、列３５０は売られた製品の数量を表し、列３６０は売られた製品の単価を表し、列３７０は売上の合計金額３７０を表す。一実施形態においては、合計列３７０は、スプレッドシート式（例えば、"=Qty*Price"）で定義される。売上テーブル３００はさらに、合計列３７０の静的和集合３８０を有する。
【００２８】
ＤＡＸに含まれる列の参照は多様であることに留意されたい。つまり、ＤＡＸ中の列参照は、列の計算に使用されると、その結果は列となる場合があり、スカラ計算に使用されると、その結果はその列の特定の行に格納される値となる場合がある。例えば、列の計算に使用されると、列参照“Amount”は列３７０となるが、スカラ計算に使用されると、参照“Amount”は図３の行３１０のうちの特定の行に格納される“Qty*Price”の値となる。ＤＡＸ、またはこの一部は、スカラ計算の中間結果として使用可能なテーブルとなりうる関数または式を含んでもよいことについても留意されたい。
【００２９】
図４に説明される本実施形態においては、ピボット・テーブル４００は、図３の売上テーブル３００の、「data」列３２０、および「ProdID」列３４０と「CustID」列３３０の組み合わせによって決まる。すなわち、ピボット・テーブル４００は、図３の売上テーブル３００からの「date」と「ProdlD/CustID」のコンテキストに基づいてデータを集計する。例えば、ＤＡＸ４１０“SUM [Amount]”は、ピボット・テーブル４００で受け付けられるが、これは、図３の売上テーブル３００の「date」、「ProdID」、および「CustID」の様々な組み合わせ（つまり、コンテキスト）に対して、ピボット・テーブル４００のセルが、図３の合計列３７０の和集合を含むことを強く示している。従って、ピボット・テーブル４００の第１の例示的セル４１２は、顧客に関係なく２００９年の間に"456Red"という製品を売ることによって得た（売上げの）合計を示し、第２の例示的セル４１４は、２００８年の間の顧客"Jon200"に"789Green"という製品を売ることによって得た（売上げの）合計を示している。すなわち、第１のセル４１２に関連する第１のコンテキストは"Time[Year]=2009; Product[ProdID]='456Red'"であり、第２のセル４１４に関連する第２のコンテキストは"Time[Year]=2008; Product[ProdID]='789Green'; Customer[CustID]='Jon200'"である。
【００３０】
コンテキストは不等号を含んでもよいことに留意されたい。例えば、顧客"Jon200"に購入された２００ドルより高価な製品は、"Customer[CustID]='Jon200'; Product[Price]>200.00"というコンテキストを使用することが決定されるであろう。
【００３１】
ＤＡＸ４１０とは異なるＤＡＸを使用することでも、ピボット・テーブル４００が生成されることに留意されたい。例えば、図３の合計列３７０が存在しないとすると、ＤＡＸ４１０に合計列３７０の式"=Qty*Price"を組み込むことでピボット・テーブル４００は生成されるであろう。例えば、ＤＡＸ４１０は、"SUM[Qty*Price]"、となるであろう。
【００３２】
図４のピボット・テーブル４００の複数のセルは、図４のＤＡＸ４１０を複数回入力しなくとも、図３の売上テーブルに関連するコンテキストに基づいて事前設定されてもよいことを理解されたい。その代わり、図４のＤＡＸ４１０は、図４のピボット・テーブル４００の各セルに関連した異なるコンテキストに基づいて、図４のピボット・テーブル４００の各セルに対して自動的かつ再帰的に再実行されてもよい。静的和集合３８０は、売り上げた製品の全ての合計を示すことができるが、その代わりにＤＡＸ４１０は売り上げた製品の多次元的視点（例えば、製品ごとの合計、年ごとの合計、製品と年の組み合わせごとの合計）を提供することに用いられてもよいことをさらに理解されたい。
【００３３】
図５および図６は、他の実施形態に係る図１のデータ・テーブル１１２（在庫テーブル５００として図示）並びに、図３および図５のデータ・テーブル（例えば、図３の売上テーブル３００および図５の在庫テーブル５００）に基づくピボット・テーブル６００を示している。在庫テーブル５００の行５１０のそれぞれは売ることが可能な製品を表しており、列５２０〜５４０は各製品に関連するデータを表している。例えば、列５２０は各製品の製品識別子（ProdID）を表し、列５３０は各製品の説明を表し、列５４０は各製品について現在いくつの在庫があるかを表す。
【００３４】
在庫テーブル５００の１つまたは複数の列は、ＤＡＸ列定義も含む。例えば、売り上げ個数列５５０は、ＤＡＸ列定義"SUM[Qty]"５６０と関連する。売り上げ個数列５５０の行は、様々な製品について図３の「Qty」列３５０を集計することで事前設定することができる。例えば、セル５５２は、'789Green'のProdIDを持つ行について図３の売上テーブル３００をフィルタリングし、そして残った行の「Qty」列を集計することで、事前設定することができる。セル５５２を事前設定するために、図３の売上テーブル３００と図５の在庫テーブル５００との間のリレーションシップ（例えば、事前にユーザが定義したリレーションシップ）（例えば、図３の「ProdID」列３７０と図５の「ProdID」列５２０とが関連している）が自動的に認定され、スキャンされてもよいことを理解されたい。テーブル（例えば、図３の売上テーブル３００）をフィルタリングすることは、テーブルベースフィルタのみならずブールフィルタを含んでいてもよいことに留意されたい。
【００３５】
ピボット・テーブル６００は、複数のデータ・テーブルの列によって決まる。図６に説明される一実施形態において、ピボット・テーブル６００は、図３のデータ列３２０、および図５の「description」列５３０と図３００の「CustID」列との組み合わせをピボットする。すなわち、ピボット・テーブル６００が１つのテーブル、つまり図３の売上テーブルからデータを集計したとして、その集計は図３の売上テーブル３００と図５の在庫テーブル５００の双方からのコンテキストに基づいたものであってもよい。
【００３６】
ピボット・テーブル６００は図４のＤＡＸ４１０と同様にＤＡＸ６１０"SUM[Amount]"を受信し、ＤＡＸ６１０の値は、ピボット・テーブル６００のセルを設定するために再帰的に計算されてもよい。ピボット・テーブル６００を事前設定することは、図３の売上テーブル３００と図５の在庫テーブルとの間のリレーションシップを認定し、図３の売上テーブルと図５の在庫テーブルの双方からデータを検索することを含んでいてもよい。例えば、図６に説明される一実施形態においては、図３のテーブル３００と図５のテーブル５００との間のリレーションシップが自動的に認定されてもよい。そのリレーションシップは、関連する図３の列３４０と図５の列５２０を含んでおり、これらは双方とも製品識別子（ProdID）列である。一実施形態において、関連する列はインデックス列である。このように、ピボット・テーブル６００の行ヘッダ６１２"Blue Bike"は、認定された図４の売上テーブル３００と図５の在庫テーブル５００との間のリレーションシップに基づいて事前設定されてもよい。ピボット・テーブル６００の第１の例示としてセル６１４は、第１のコンテキスト"Time[Year]=2009; Product[Description]=' ed Bike'"と関連し、ピボット・テーブル６００の第２の例示としてセル６１６は、第２のコンテキスト"Time[Year]=2008; Product[Description]='Green Trike'; Customer[CustID]='Jon200'"と関連している。
【００３７】
このことから分かるように、ＤＡＸｓ（例えば、図５のＤＡＸ５６０と図６のＤＡＸ６１０）によって、複数のテーブルにまたがる多次元データ分析が可能となるであろう。さらに、ピボット・テーブル（例えば、図５のピボット・テーブル６００）のみならず、テーブルそのもの（例えば、図５の列５５０）においても、このような多次元データ分析が生じうることをさらに理解されたい。
【００３８】
図７は、一実施形態に係るＤＡＸｓの受信および処理の方法７００を説明するフロー図である。一例示的形態において、方法７００は、図１のコンピュータ・システム１００によって実行されてもよい。
【００３９】
方法７００は、７０２にて、スプレッドシートのピボット・テーブルにおいてＤＡＸを受信することを含む。例えば、図１において、ＤＡＸ１０４はピボット・テーブル１２２にて受信される。例示として、図４を参照すると、ＤＡＸは、ＤＡＸ"SUM[Amount]"４１０となる。
【００４０】
方法７００は、７０４にて、ＤＡＸを実行することも含む。例えば、図１において、スプレッドシート分析モジュール１２６はＤＡＸ１０４を実行する。ピボット・テーブルの特定のセルに関して、ＤＡＸを実行することは、７０６にてその特定のセルに関連するコンテキストを決定すること、７０８にてそのコンテキストに基づいてＤＡＸの値を計算すること、および７１０にて計算された値をその特定のセルにて出力することを含む。例えば、図１において、コンテキストが決定され、そのコンテキストに基づくデータ１２４が検索され、ＤＡＸ値１３０が計算されてピボット・テーブル１２２の特定のセルにて出力される。例示として、図４を参照すると、特定のセルは図４のセル４１４であり、コンテキストは"Time[Year]=2008; Product[ProdID]='789Green'; Customer[CustID]='Jon200'"であり、ＤＡＸのセル４１４にて出力される算出値は"$1,500"となるであろう。
【００４１】
図８は、他の実施形態に係るＤＡＸｓの受信および処理の方法８００を説明するフロー図である。一例示的形態において、方法８００は、図１のコンピュータ・システム１００または図２のシステム２００によって実行されてもよい。
【００４２】
方法８００は、８０２にてスプレッドシートのピボット・テーブルにてＤＡＸを受信することを含む。ＤＡＸは、スプレッドシートのネイティブ式言語で表現されたユーザ定義式を含む（例えば、ＤＡＸは既存のスプレッドシート関数および既存のスプレッドシート関数に類似の構文を含む）。例えば、図１において、ＤＡＸ１０４はピボット・テーブル１２２にて受信される。
【００４３】
方法８００は、８０４にて、ＤＡＸを実行することも含む。例えば、図１において、スプレッドシート分析モジュール１２６はＤＡＸ１０４を実行する。ピボット・テーブルの特定のセルに関して、ＤＡＸ１０４を実行することは、８０６にてその特定のセルに関連するコンテキストを決定することを含む。このコンテキストを決定することは、その特定のセルに基づいて少なくとも１つのデータ・テーブルをフィルタリングすることを含む。ＤＡＸ１０４を実行することは、さらに、８０８にてそのコンテキストに基づいてＤＡＸ１０４の値を計算すること、および８１０にて計算された値をその特定のセルにて出力することを含む。例えば、図１において、コンテキストが決定され、データ・テーブル１１２はそのコンテキストに基づいてフィルタされる（例えば、コンテキストに合致しない行は一時的に隠蔽されるか無視される）。そして、そのコンテキストに基づくデータ１２４が検索され、ＤＡＸ値１３０が計算されてピボット・テーブル１２２の特定のセルにて出力される。
【００４４】
方法８００は、さらに、８１２にてピボット・テーブルにおける変化に応じてクエリを受信すること、または８１４にて少なくとも１つのデータ・テーブルにおける変化を検出することを含む。例えば、図１において、ピボット・テーブル１２２のピボット操作が発生し、またはデータ・テーブル１１２における変化が検出される。一例示的形態において、図２のロジック２０４に関して本明細書に記載のようにクエリが受信され、図２のロジック２０６に関して本明細書に記載のように少なくとも１つのデータ・テーブルにおける変化が検出される。
【００４５】
方法８００は、８１６にて、８０６に戻ることによって、ＤＡＸ１０４を自動的かつ再帰的に再実行することを含む。例えば、図１において、スプレッドシート分析モジュール１２６は自動的にＤＡＸ１０４を再実行する。一例示的形態において、図２のコマンド２０８およびモジュール２２０に関して本明細書に記載のように、自動的なＤＡＸ１０４の再実行が実行される。
【００４６】
図９は、他の実施形態に係るＤＡＸｓの受信および処理の方法９００を説明するフロー図である。一例示的形態において、方法９００は図１のコンピュータ・システム１００によって実行される。
【００４７】
方法９００は、９０２にて、第１のスプレッドシート・テーブルの特定の列の列定義を含む入力を受信することを含む。この入力は、第１のスプレッドシート・テーブルの少なくとも１つの列に、および第２のスプレッドシート・テーブルの少なくとも１つの列に基づくＤＡＸを含む。例えば、図５を参照すると、ＤＡＸ"SUM[Qty]"５６０は列５５０のための列定義として受信され、ＤＡＸ５６０は、図３の売上テーブル３００および図５の在庫テーブルの双方が該当する。
【００４８】
方法９００は、９０４にて、ＤＡＸに基づいて、第１のスプレッドシート・テーブルと第２のスプレッドシート・テーブルとの間のリレーションシップを決定することをも含む。一実施形態においては、そのリレーションシップは、関連する列、インデックス列、または２つのスプレッドシート・テーブルにおいて異なる名前を持つ列である。例えば、図３の「ProdID」列３４０および図５の「ProdID」列５２０を関連する列として認定するように、図３の売上テーブル３００と図５の在庫テーブルとの間のリレーションシップが認定されうる。
【００４９】
方法９００は、さらに、９０６にてＤＡＸを実行することにより特定の列を事前設定することを含む。第１のスプレッドシート・テーブルの特定の行に対してＤＡＸを実行することは、９０８にてＤＡＸの値を計算すること、および９１０にて計算された値を特定の行および特定の列の要素であるセルで出力することを含む。その値は、第１のスプレッドシート・テーブルの特定の行における第１のデータ、およびその特定の行に関連する行コンテキストに基づいて第２のテーブルから検索される第２のデータに基づいて算出される。例えば、図５を参照すると、行コンテキスト"Product [ProdID] ='789Green'"に合致する売上テーブル３００の行を集計し、その結果の値をセル５５２で出力することで、セル５５２は事前設定される。
【００５０】
方法９００は、９１２にて第１のスプレッドシート・テーブルの行のサブセットの選択を受信すること、および９１４にて、９０８に戻ることによって、選択された行のサブセットのためにＤＡＸを自動的に再実行することを含む。例えば、図５を参照すると、１つまたは複数の行５１０の選択が受信され、ＤＡＸ５６０が選択された行に対して再実行される。
【００５１】
図１０は、本開示による実施形態に係るコンピュータ実装される方法、コンピュータ・プログラム製品、およびシステム・コンポーネントをサポートするように動作可能なコンピューティング・デバイス１０１０を含むコンピューティング環境１０００のブロック図を示す。一例示的形態においては、コンピューティング・デバイス１０１０は、図１のデータ・インタフェース１１０、図１のメモリ１１４、図１のモジュール１１８、１２６、図２のロジック２０４、２０６、または図２のモジュール２２０を含んでいてもよい。図１のデータ・インタフェース１１０、図１のメモリ１１４、図１のモジュール１１８、１２６、図２のロジック２０４、２０６、または図２のモジュール２２０のそれぞれは、コンピューティング・デバイス１０１０またはその一部を含んでいてもよい。
【００５２】
コンピューティング・デバイス１０１０は、少なくとも１つのプロセッサ１０２０およびシステム・メモリ１０３０を含む。構成およびコンピューティング・デバイスの種類によって、システム・メモリ１０３０は、（ランダム・アクセス・メモリまたは"ＲＡＭ"のような）揮発性、（リード・オンリー・メモリまたは"ＲＯＭ"、フラッシュ・メモリ、および電力が供給されない場合さえも記憶されたデータを保持するこれらと同様のメモリ・デバイスのような）不揮発性、またはこれら２種類の組み合わせであってもよい。システム・メモリ１０３０は、一般的には、オペレーティング・システム１０３２、１つまたは複数のアプリケーション・プラットフォーム１０３４、１つまたは複数のアプリケーション（例えば、スプレッドシート・アプリケーション１０３６）を含み、１つまたは複数のアプリケーション（例えば、ＯＬＡＰキューブ・データ構造１０３８）に関連するプログラム・データを含んでいてもよい。一例示的形態においては、スプレッドシート・アプリケーション１０３６は図２のスプレッドシート・アプリケーション２１０であり、ＯＬＡＰキューブ・データ構造１０３８は図１のＯＬＡＰキューブ・データ構造１１６である。一例示的形態においては、本明細書に開示のように、システム・メモリ１０３０は１つまたは複数の論理的コンポーネントまたはモジュールを含んでいてもよい。例えば、システム・メモリ１０３０は、図１の１つまたは複数のモジュール１１８、１２６、図２のロジック２０４、２０６、または図２のモジュール２２０を含んでいてもよい。
【００５３】
コンピューティング・デバイス１０１０は、さらに追加の特徴または機能を有していてもよい。例えば、コンピューティング・デバイス１０１０は、磁気ディスク、光ディスク、記録テープ、および標準サイズまたは小型のフラッシュ・メモリ・カードのようなリムーバブルおよび／または固定式の追加の記憶デバイスを備えていてもよい。そのような追加の記憶デバイスは、図１０では、リムーバブル記憶装置１０４０および固定式記憶装置１０５０として記載されている。コンピュータ記憶媒体は、コンピュータ読取可能な命令、データ構造、プログラム・コンポーネント、または他のデータのような情報を記憶するための任意の方法または技術が実装された揮発性および／または不揮発性の記憶装置、並びにリムーバブルおよび／または固定式の媒体を含んでいてもよい。システム・メモリ１０３０、リムーバブル記憶装置１０４０、および固定式記憶装置１０５０は、コンピュータ記憶媒体の全ての例を網羅するものである。コンピュータ記憶媒体は、これに限定されるものではないが、情報を記憶するために用いることが可能であり、コンピューティング・デバイス１０１０によってアクセス可能な、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ（electrically erasable programmable read-only memory）、フラッシュ・メモリもしくは他のメモリ技術、ＣＤ（compact disks）、ＤＶＤ（digital versatile disks）もしくは他の光学式記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、または任意の他の媒体を含む。このようなコンピュータ記憶媒体はいずれもコンピューティング・デバイス１０１０の一部になりうる。コンピューティング・デバイス１０１０はさらに、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイス、等の入力デバイス１０６０を備えることができる。ディスプレイ、スピーカ、プリンタ、等の出力デバイス１０７０も備えることができる。
【００５４】
コンピューティング・デバイス１０１０は、１つまたは複数の通信接続１０８０も含み、通信接続１０８０によりコンピューティング・デバイス１０１０は他のコンピューティング・デバイス１０９０を有線または有線ネットワークを介して通信を行うことができる。一例示的形態においては、通信接続１０８０は図１のデータ・インタフェース１１０を含み、図１のデータ１０２が、共有ネットワーク記憶デバイスのような他のコンピューティング・デバイス１０９０から受信される。
【００５５】
図１０に図示された、またはさもなければ前の段落にて説明されたコンポーネントまたはデバイスは、本明細書に記載の実施形態をサポートするために、すべてを要するわけではないことを理解されたい。例えば、入力デバイス１０６０および出力デバイス１０７０は任意の構成である。
【００５６】
本明細書に記載された実施形態の説明は、様々な実施形態の構成が一般的に理解されることを意図している。その説明は、本明細書に記載された構成および方法を利用する装置およびシステムのエレメントおよび機能のすべてを完全に説明することを意図しているわけではない。多くの他の実施形態は、本開示をレビューするいわゆる当業者には明らかであろう。本開示の範囲を逸脱しない範囲で構造上の、および論理的な置換物および変形物が成されるように、他の実施形態は、本開示から利用され派生するであろう。よって、本開示および図面は限定的ではなく例示的なものであるとみなされるべきである。
【００５７】
いわゆる当業者であれば、さらに、本明細書に開示の実施形態に関連して記載された様々な例示的論理ブロック、構成、モジュール、および処理または命令ステップは、電子的ハードウェア、コンピュータ・ソフトウェア、またはこれらの組み合わせとして実装できることは理解できるであろう。様々な例示的コンポーネント、ブロック、構成、モジュール、またはステップは、これらの機能に関して一般的に記載されている。このような機能がハードウェアまたはソフトウェアとして実装されるかは、全体的なシステムに課される特定のアプリケーションおよび設計の制約に依存する。習熟した専門家は、記載された機能を様々な方法でそれぞれの特定のアプリケーション用に実装することができるであろう。しかし、そのような実装を行うことは、本発明の開示の範囲から逸脱するものであると解釈されるべきではない。
【００５８】
本明細書に開示の実施形態に関して記載される方法のステップは、ハードウェア、プロセッサによって実行されるソフトウェア・モジュール、またはこれら２つの組み合わせによって、直接的に具体化することができる。ソフトウェア・モジュールは、当技術分野で公知の、ＲＡＭ（random access memory）、フラッシュ・メモリ、ＲＯＭ（read only memory）、レジスタ、ハードディスク、着脱可能なディスク、ＣＤ−ＲＯＭ、または任意の他の形態の記憶媒体のような、コンピュータ読取可能な媒体に記憶することができる。例示的には、記憶媒体は、プロセッサがその記憶媒体から情報を読み出し可能であり、かつその記憶媒体に情報を書き込み可能であるように、プロセッサに接続されている。（is coupled）代替物においては、記憶媒体はプロセッサと一体的となっていてもよく、またはプロセッサおよび記憶媒体は別々コンポーネントとしてコンピューティング・デバイスまたはコンピュータ・システムに存在していてもよい。
【００５９】
本明細書には特定の実施形態が図示され説明されているが、同じまたは同様の目的を達成するために設計されるいかなる後続の装置は、示される特定の実施形態の代替物であることを理解されたい。本開示は、任意のおよびすべての、後に続く改造物または変形物をカバーすることを意図している。
【００６０】
本開示の要約は、特許請求の範囲または意味を解釈または限定するために用いらないという理解のもとに記載される。加えて、前述の詳細な説明においては、本開示を合理化するために、様々な機能はともにまとめられ、または単一の実施形態に記載されている。本開示は、特許請求の実施形態が、それぞれの特許請求において明示的に詳述されているよりもより多くの機能を必要とするという意図を反映しているように解釈されるべきではない。むしろ、以下の特許請求が反映するように、発明の主題は、いずれの開示の実施形態のすべての機能よりも少ないことが示されているであろう。
【００６１】
前述した実施形態の記載は、いわゆる当業者がその実施形態を実現し利用できるように示されている。これらの実施形態に対する様々な変更は、いわゆる当業者にとって容易に明らかであろう。そして、本明細書に定義された一般的原理は、本開示の範囲を逸脱しない範囲で、他の実施形態に適用することが可能であろう。従って、本発明の開示は、本明細書に示された実施形態に限定されることは意図していないが、以下の特許請求に定義されるように、その原理および新規の特徴に一致する範囲で可能な限り広い範囲が与えられることを意図している。
【図１】
0006017309.tif 000002
【図２】
0006017309.tif 000003
【図３】
0006017309.tif 000004
【図４】
0006017309.tif 000005
【図５】
0006017309.tif 000006
【図６】
0006017309.tif 000007
【図７】
0006017309.tif 000008
【図８】
0006017309.tif 000009
【図９】
0006017309.tif 000010
【図１０】
0006017309.tif 000011