(57)【要約】【課題】  スキーマ化されたクエリできるデータソースとしてレポートを呈示するシステムおよび方法を提供すること。【解決手段】  例示的なコンピューティングアプリケーションは、少なくとも１つのレポート定義に従ってデータを処理する。このアプリケーションは、少なくとも１つのデータ記憶装置および／またはデータソースと協働して、レポート定義に含まれる情報に従ってデータを取り出す。このアプリケーションは、レポート定義を使用して、協働するデータ記憶装置および／またはデータソースの中にみられたデータに作用して所望のレポートを生成する。レポート生成処理の一部として、このアプリケーションは、レポートについてのスキーマを生成する。スキーマは、このアプリケーションが、生成されたレポートに対して１または複数のクエリを実施するのに使用することができる。【選択図】  図９
2005301327.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティング環境において、スキーマ化されたクエリできるデータソースとしてレポートを呈示する方法であって、
データの視覚レイアウトを提供するステップと、
前記レイアウトからクエリできるスキーマを導出して、データソースを生成するステップと
を備えたことを特徴とする方法。
【請求項２】
前記視覚レイアウトを示す情報を含むレポート定義を提供するステップをさらに備えたことを特徴とする請求項１に記載の方法。
【請求項３】
前記データソースを永続的なデータフォーマットに依存しないレンダリングで記憶するステップをさらに備えたことを特徴とする請求項１に記載の方法。
【請求項４】
協働する環境に前記レポートをデータソースとして通信することができるレポート処理エンジンを提供するステップをさらに備えたことを特徴とする請求項２に記載の方法。
【請求項５】
レンダリング特有の環境で使用する永続的なデータフォーマットに依存しないレンダリングを処理することができるレンダリングモジュールを提供するステップをさらに備えたことを特徴とする請求項４に記載の方法。
【請求項６】
レポートを表示およびナビゲートする際に使用するレポートユーザインターフェースを提供するステップをさらに備えたことを特徴とする請求項１に記載の方法。
【請求項７】
前記レポートユーザインターフェースにレポートをマッピングするように動作するマッピングモジュールを提供するステップをさらに備えたことを特徴とする請求項６に記載の方法。
【請求項８】
クエリデータモジュールを提供するステップをさらに備えたことを特徴とする請求項１に記載の方法。
【請求項９】
前記導出するステップは、前記レポートについてのスキーマを識別するステップを含むことを特徴とする請求項１に記載の方法。
【請求項１０】
前記スキーマをデータに適用するステップをさらに備えたことを特徴とする請求項９に記載の方法。
【請求項１１】
請求項１に記載の方法を実施するようコンピュータに命令するためのコンピュータ読取り可能命令を有することを特徴とするコンピュータ可読媒体。
【請求項１２】
スキーマ化されたクエリできるデータソースとしてレポートを呈示するためのシステムであって、
レポート定義と、
前記レポート定義に従ってレポートデータに作用して、スキーマ化されたクエリできるデータソースとして前記レポートデータを呈示するスキーマを有するレポート処理モジュールと
を備えたことを特徴とするシステム。
【請求項１３】
レポートを表示することのできるレポートビューアをさらに備えたことを特徴とする請求項１２に記載のシステム。
【請求項１４】
データ拡張をさらに備えたことを特徴とする請求項１２に記載のシステム。
【請求項１５】
レンダリング拡張をさらに備えたことを特徴とする請求項１２に記載のシステム。
【請求項１６】
外部データソースをさらに備えたことを特徴とする請求項１５に記載のシステム。
【請求項１７】
前記レポート処理モジュールは、レポートサーバを含むことを特徴とする請求項１２に記載のシステム。
【請求項１８】
前記レポートサーバは、コンピューティング環境を含むことを特徴とする請求項１７に記載のシステム。
【請求項１９】
前記レポート処理モジュールと協働して、協働する環境に特有のレンダリング要件に従ってレポートをレンダリングするレンダリングモジュールをさらに備えたことを特徴とする請求項１８に記載のシステム。
【請求項２０】
前記データソースは、永続的なデータフォーマットに依存しないレンダリングを含むことを特徴とする請求項１２に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、レポート生成および管理の分野に関し、より詳細には、協働する様々なコンピューティングアプリケーションおよびコンピューティング環境によって使用可能なスキーマ化されたクエリできるデータソースとしてレポートを定義することに関する。
【背景技術】
【０００２】
レポートの生成および管理は、効果的な知識共有および理解と共に、いたるところで見られる。レポートは、一般的に、１または複数のカテゴリの、関係するおよび／または関連する内容の事前定義された集約である。生成されたレポートを企業全体で使用して、情報分析、すなわち企業運営の成功にとってクリティカルな情報の分析に役立てることができる。大規模な会社から教育研究機関、ホームビジネスまで、レポートの生成および管理は、様々な離散的データをよりよく理解するためのプロセスを助け、より重要なことには、入手可能なデータを処理して企業または組織を改善することを助ける。単純に、レポートの効率的な生成、管理、および利用は、企業または組織の成功と同じくすることができる。
【０００３】
コンピューティングアプリケーションの文脈では、レポートの生成および管理は、より容易に達成される。全体または一部がレポートの生成および管理に専用となるコンピューティングアプリケーションが、多数存在する。これら例示的なコンピューティングアプリケーションを使用して、関与するユーザに、レポートのフィールドを定義する能力（例えば、レポートを埋めることになる内容を制御する能力）、レポートのレイアウト（例えば、フォーマット化、色）を定義する能力、場合によっては、レポートのアクセス権を定義する能力を与える。これらコンピューティングアプリケーションを用いて、関与するユーザが、所望の報告を生成するのに利用および再利用することのできる１または複数のレポートテンプレートを定義することもできる。テンプレートを使用して、これらコンピューティングアプリケーションは、所望の１または複数のレポートの大域的な定義を提供する。これらの定義を、協働するコンピューティングアプリケーションが利用して、レポートデータの処理に役立てることができる。さらに、現在のレポート生成コンピューティングアプリケーションは、生成されたレポートを関与するユーザが記憶および管理するのを補助する機能および動作も提供する。
【０００４】
レポートまたはレポートテンプレートが（例えば、関与するユーザによって）定義されると、コンピューティングアプリケーションは、このような定義を使用して、協働するデータ記憶装置から関連データを取り出し、レポートまたはレポートテンプレートに定義されたフィールドを埋める。場合によっては、協働するデータ記憶装置に記憶されているデータは、企業運営の変化に伴って継続的に変化している。この文脈では、レポートは、これらのデータ記憶装置の中にみられるいくつかのデータフィールドの値の、時間におけるスナップショットとして働く。
【０００５】
さらに、これらのコンピューティングアプリケーションは、レポート定義またはレポートテンプレート定義に従って、データおよびデータレイアウトをフォーマット化することになる。これらのレポートは、埋め込まれフォーマット化されると、個別のファイル型として存在する。個別のファイル型なので、生成されたレポートは、典型的には、このようなファイル型を読み取って処理する能力を有する協働コンピューティングアプリケーションによってのみ、読取り可能であり処理することができる。レポートが個別のファイル型で記憶されることのもう１つの副産物は、協働コンピューティングアプリケーションがレポート定義を再利用することができないことである。
【０００６】
言い換えれば、現在、コンピューティングアプリケーションは、一般的に、単一のレンダリング拡張子（例えば．ｈｔｍｌ、．ｄｏｃ、．ｘｌｓ、．ｘｍｌ）定義を有するデータ（例えば、レポート）を生成するが、このレンダリング拡張子は、通常、そのデータを生成するコンピューティングアプリケーションに固有である。従って、協働アプリケーションがレポートを処理するときは、外部レンダリング拡張子を固有レンダリング拡張子に変換する必要がある。この変換ステップは、場合によっては、エラーを招く恐れがある。すなわち、データレイアウト／フォーマット化誤り、より重要なことにはデータ誤りを招く。さらに、生成されたレポートは、容易にクエリできないので、このような形のデータは、協働アプリケーションにとって有用性が限られている。大抵の場合、関与するユーザは、コンピューティングアプリケーションを使用して、生成済みのレポートを再利用しようとするのではなく、新しいレポート定義を有する新しいデータを生成することになる。
【０００７】
既存のやり方に関するもう１つの欠点は、生成済みのデータに対して時間駆動分析を行うことができない点である。上述したように、コンピューティングアプリケーションは、協働する１または複数のデータ記憶装置に作用することができる。これらのデータ記憶装置は、様々なフィールド定義を有する様々なテーブルを備える。時間の経過につれて、フィールドの値は、そのデータ記憶装置を運営する組織および／または企業における１または複数の変化を反映するように変化する。例えば、データ記憶装置と協働して売上高を記録するコンピューティングアプリケーションを、自動車販売代理店が採用することができる。売上高の値は、より多くの自動車が売れるにつれて変化する。同じ例として、コンピューティングアプリケーションは、自動車販売代理店の販売員ごとの総売上高を示すためのレポートを生成するように動作することができる。このようなコンピューティングアプリケーションは、レポート定義に従って必要なデータを収集し、レポート定義に従ってレポートを生成するように動作する。しかし、このレポートは、それが生成される時点で協働データ記憶装置の中にみられるデータフィールド値のスナップショットとしての働きをする。さらに、現在のコンピュータアプリケーションは、スキーマ化されず、永続的なデータフォーマットで記憶されず、したがって容易にクエリできないデータ構造として、生成されたレポートを呈示する。このため、これらアプリケーションは、体系的なレポートに対する時間次元のクエリをサポートして、１または複数のレポートデータ値に対する時間駆動分析を可能にするということができない。この結果、現在のレポート生成コンピューティングアプリケーションを使用して傾向分析を行うことは、不可能とまではいかないが困難と考えられる。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
以上のことから、永続的なデータフォーマットで存在するスキーマ化されたクエリできるデータソースとしてレポートを提供するシステムおよび方法が必要とされていることが理解される。これらのシステムおよび方法を有することにより、従来の技術が克服される。
【課題を解決するための手段】
【０００９】
本発明は、スキーマ化されたクエリできるデータソースとしてレポートを呈示するシステムおよび方法を提供する。例示的な一実施形態では、スキーマ化されたクエリできるデータソースとして呈示されるレポートを生成するために１または複数のデータ記憶装置および／またはデータソースと協働する、コンピューティング環境で動作するコンピューティングアプリケーションが提供される。この例示的なコンピューティングアプリケーションは、所望のデータを有する少なくとも１つのデータ記憶装置と、所望のレポートのためのデータフィールド定義を有するレポート定義と協働する。レポート定義はとりわけ、レポートレイアウトおよびフォーマット化情報と、レポートパラメータと、レポートフィールド定義とを含む。
【００１０】
動作時、例示的なコンピューティングアプリケーションは、レポート定義を受け取る。レポート定義中に提供された様々な情報を使用して、協働するデータ記憶装置および／または他のデータソースと通信し、レポート定義に従って所望のデータを取り出す。これらを集約すると、例示的なコンピューティングアプリケーションは、データ拡張子を関連付けて、レポートの生成に進む。レポート生成の一部として、コンピューティングアプリケーションは、データをレポート定義の文脈で処理して、レポートについてのスキーマを生成する。このレポートスキーマは、後でコンピューティングアプリケーションがレポートに対してクエリを実施するのに使用することができる。
【００１１】
さらに、企図される実装形態では、生成されたレポートは、コンピューティングアプリケーションによって、永続的なデータフォーマットに依存しないレンダリングで提供される。永続的なデータフォーマットに依存しないレンダリングによって、とりわけ、協働するコンピューティングアプリケーションおよびコンピューティング環境は、スキーマ化されたクエリできるデータソースとして呈示されたレポートに対して、時間無効のクエリおよび時間駆動のクエリを実施することができる。また、より重要なことに、他の協働コンピューティングアプリケーションが、このレポートを他の任意のデータソースとして認識することができる。
【００１２】
本明細書に述べるシステムおよび方法に関するその他の特徴および態様について、以下により詳細に述べる。
【発明を実施するための最良の形態】
【００１３】
（概観）
レポートの生成、管理、および利用は、組織および企業の間で、通常の運営手順の一部として一般的である。レポートは、一般的に、事前定義されたレイアウトおよび事前定義されたフォーマットに従って、提示可能なデータセットの集約として考えることができる。場合によっては、レポート生成には、新しいレポートデータを生成するために、または既存のレポートデータをよりよく構成するためにレポートデータに対して実施する１または複数の操作が含まれる。例えば、自動車販売代理店が、レポートを利用して自動車の売上高を追跡することができる。記憶されたデータは、販売担当者、車両タイプ、日付による各売上高を反映することができる。例示的なレポートの１つは、この自動車販売代理店の総売上高を示すことができる。このレポート生成機構は、すべての売上高を総計して売上総額を生成し記憶するために別個の操作を有するのではなく、レポート生成の一部として総計操作を含むことができる。
【００１４】
コンピューティング技術の出現に伴って、レポートの生成、管理、および利用は非常に容易になった。現在、関与するユーザがレポートを生成、管理、および利用するのを補助するコンピューティングアプリケーションはいくつかある。一般的に、これらのコンピューティングアプリケーションは、データ記憶装置および／またはデータソースと協働して、所望のデータを取り出す。次に、データは、事前定義されたレイアウトおよびフォーマットに従ってフォーマット化され、関与するユーザにレポートとして提示される。場合によっては、レポートを生成するコンピューティングアプリケーションは、データに対して１または複数の中間操作を実施して、レポートについての新しいデータを生成することになる。生成されたレポートは個別のファイルとして存在し、ほとんどの場合、単一のレンダリング定義を有する。言い換えれば、レポートを生成するコンピューティングアプリケーションは、一般的に、他の協働コンピューティングアプリケーション向けにではなく、そのコンピューティングアプリケーション自体に固有のデータフォーマットでレポートを生成する。これにより、異なるコンピューティングアプリケーション間のレポート再利用可能性は困難なものになる。
【００１５】
この文脈において、現在のアプリケーションによって生成されるレポートは、単純な再利用可能性および／または相互運用性に益しない。ほとんどの場合、生成それたレポートを再利用するよりも、レポート定義の変更を含む新しいレポート生成を実行する方が効率的である。複雑さのレベルは、異なるアプリケーションが固有でないレポートの使用を試みるに従って増える。例えば、それ自体の固有のレンダリング拡張子を有する第１のデータベースコンピューティングアプリケーションは、最初に、第２のレンダリング拡張子を有する第２のコンピューティングアプリケーションによって生成されたレポートを変換しなければならない。変換プロセスは、データエラーを含めた様々なエラーを招く恐れがあり、場合によってはレポートが役に立たなくなる可能性がある。
【００１６】
さらに、レポート生成コンピューティングアプリケーションは、レポートをその形で記憶できる永続的なデータフォーマットに依存しないレンダリングを採用しない。むしろ、現在のやり方では、固有のレンダリング拡張子を表すデータフォーマットでレポートを記憶し、レポートデータは持続的ではない（すなわち、データ記憶装置中のデータが変化するのに伴って変化する）。このようにする場合、生成されたレポートに対して実行される時間駆動のクエリは、著しく困難になる。言い換えれば、現在のレポート生成コンピューティングアプリケーションは、時の経過に伴って持続しないレポートを生成する。データ記憶装置に対して実行されるレポートは、レポート生成時におけるデータ記憶装置の中のデータ値を反映するレポートになる。
【００１７】
本発明は、永続的なデータフォーマットに依存しないレンダリングを有するスキーマ化されたクエリできるデータソースとしてレポートを呈示するシステムおよび方法を提供することによって、既存のやり方の欠点を改善することを目的とする。具体的には、レポート定義に従ってデータに作用する例示的なコンピューティングアプリケーションが提供される。レポート定義は、とりわけ、レポートに埋め込まれることになる所望のデータに関係する情報、レイアウト情報、およびフォーマット化情報を含む。例示的なコンピューティングアプリケーションは、協働するデータ記憶装置から、レポート定義に従って所望のレポートを埋め込むためのデータを取り出す。これらを収集した後、例示的なコンピューティングアプリケーションは、レポートデータについてのスキーマを定義し、レポートを中間データフォーマットで記憶する。中間データフォーマットは、永続的なデータフォーマットに依存しないレンダリングである。従って、関連するスキーマを有する、生成されたレポートは、データソースから協働アプリケーションに提供されるすべての利点を備えたデータソースとして呈示される。さらに、永続的なデータフォーマットに依存しないレンダリングとして記憶されるので、現在の再利用可能性の問題が解決され、さらに、本システムおよび方法によれば、生成されたレポートのセットに対する時間駆動のクエリは、より容易に実行可能である。
【００１８】
（Ａ．例示的なコンピューティング環境）
図１に、本発明を実施することができる好適なコンピューティングシステム環境１００の例を示す。コンピューティングシステム環境１００は、好適なコンピューティング環境の一例にすぎず、本発明の使用または機能の範囲についてどのような制限も意味しない。またコンピューティング環境１００は、この例示的な動作環境１００に示すコンポーネントのいずれか１つ、または組合せに関してどのような依存性も要件も有すると解釈すべきではない。
【００１９】
本発明は、その他多くの汎用または専用コンピューティングシステム環境または構成でも動作する。本発明で使用するのに適した周知のコンピューティングシステム、環境、および／または構成の例には、これに限定しないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドデバイスまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な家電品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、これらのシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが含まれる。
【００２０】
本発明は、プログラムモジュールなど、コンピュータによって実行されるコンピュータ実行可能命令の一般的な文脈で述べることができる。一般にプログラムモジュールは、特定のタスクを実施するか特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。本発明は、分散コンピューティング環境で実施することもでき、その場合、タスクは通信ネットワークまたはその他のデータ伝送媒体を介してリンクされたリモート処理デバイスによって実施される。分散コンピューティング環境では、プログラムモジュールおよびその他のデータは、メモリ記憶デバイスを含めたローカルとリモートの両方のコンピュータ記憶媒体に位置することができる。
【００２１】
図１を参照すると、本発明を実施するための例示的なシステムは、コンピュータシステム１１０の形の汎用コンピューティングデバイスを含む。コンピュータ１１０のコンポーネントには、これに限定しないが、処理ユニット１２０と、システムメモリ１３０と、システムメモリを含めた様々なシステムコンポーネントを処理ユニット１２０に結合するシステムバス１２１とを含めることができる。システムバス１２１は、様々なバスアーキテクチャのいずれかを用いた、メモリバスまたはメモリコントローラ、周辺機器バス、ローカルバスを含めて、いくつかのタイプのバス構造のいずれかとすることができる。限定ではなく例として、このようなアーキテクチャには、ＩＳＡ（Industry Standard Architecture）バス、ＭＣＡ（Micro Channel Architecture）バス、ＥＩＳＡ（Enhanced ISA）バス、ＶＥＳＡ（Video Electronics Standards Association）ローカルバス、およびＰＣＩ（Peripheral Component Interconnects）バス（メザニンバスとも呼ばれる）が含まれる。
【００２２】
コンピュータ１１０は、典型的には、様々なコンピュータ読取り可能媒体を備える。コンピュータ読取り可能媒体は、コンピュータ１１０からアクセスできる任意の利用可能な媒体とすることができ、揮発性と不揮発性、取外し可能と取外し不可能の両方の媒体が含まれる。限定ではなく例として、コンピュータ読取り可能媒体には、コンピュータ記憶媒体および通信媒体を含めることができる。コンピュータ記憶媒体には、コンピュータ読取り可能命令、データ構造、プログラムモジュール、その他のデータなどの情報を記憶するための任意の方法または技術で実現された、揮発性と不揮発性、取外し可能と取外し不可能の両方の媒体が含まれる。コンピュータ記憶媒体には、これに限定しないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶デバイスが含まれ、または、所望の情報を記憶するのに使用できコンピュータ１１０からアクセスできるその他の任意の媒体が含まれる。通信媒体は通常、搬送波や他のトランスポート機構などの変調データ信号中に、コンピュータ読取り可能命令、データ構造、プログラムモジュール、またはその他のデータを組み入れたものであり、任意の情報送達媒体が含まれる。「変調データ信号」という語は、情報が信号中に符号化されるように１または複数の特性が設定または変更された信号を意味する。限定ではなく例として、通信媒体には、有線ネットワークや直接配線接続などの有線媒体と、音響、無線周波数、赤外線、他の無線媒体などの無線媒体とが含まれる。以上の任意の組合せもコンピュータ読取り可能媒体の範囲に含めるべきである。
【００２３】
システムメモリ１３０は、ＲＯＭ１３１やＲＡＭ１３２など、揮発性および／または不揮発性メモリの形のコンピュータ記憶媒体を含む。起動中などにコンピュータ１１０内の要素間で情報を転送するのを助ける基本ルーチンを含むＢＩＯＳ（basic input/output system）１３３は、典型的には、ＲＯＭ１３１に記憶されている。ＲＡＭ１３２は、典型的には、処理ユニット１２０がすぐにアクセス可能な、および／または処理ユニット１２０が現在作用している、データおよび／またはプログラムモジュールを含む。限定ではなく例として、図１には、オペレーティングシステム１３４、アプリケーションプログラム１３５、その他のプログラムモジュール１３６、およびプログラムデータ１３７を示す。
【００２４】
コンピュータ１１０は、その他の取外し可能／取外し不可能、揮発性／不揮発性コンピュータ記憶媒体を備えることもできる。例にすぎないが図１には、取外し不可能かつ不揮発性の磁気媒体に対して読み書きするハードディスクドライブ１４１と、取外し可能かつ不揮発性の磁気ディスク１５２に対して読み書きする磁気ディスクドライブ１５１と、ＣＤ−ＲＯＭや他の光媒体など取外し可能かつ不揮発性の光ディスク１５６に対して読み書きする光ディスクドライブ１５５を示す。この例示的な動作環境で使用できるその他の取外し可能／取外し不可能、揮発性／不揮発性コンピュータ記憶媒体には、これに限定しないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、固体ＲＡＭ、固体ＲＯＭなどが含まれる。ハードディスクドライブ１４１は、典型的には、インタフェース１４０などの不揮発性メモリインタフェースを介してシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は通常、インタフェース１５０などの取外し可能メモリインタフェースでシステムバス１２１に接続される。
【００２５】
以上に論じ図１に示した各ドライブおよびそれらに関連するコンピュータ記憶媒体は、コンピュータ読取り可能命令、データ構造、プログラムモジュール、およびその他のデータの記憶域をコンピュータ１１０に提供する。例えば、図１には、ハードディスクドライブ１４１がオペレーティングシステム１４４、アプリケーションプログラム１４５、その他のプログラムモジュール１４６、およびプログラムデータ１４７を記憶しているのが示されている。これらのコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、その他のプログラムモジュール１３６、およびプログラムデータ１３７と同じものとすることもでき、異なるものとすることもできることに留意されたい。ここでは、オペレーティングシステム１４４、アプリケーションプログラム１４５、その他のプログラムモジュール１４６、およびプログラムデータ１４７が少なくとも異なるコピーであることを示すために、異なる番号を付してある。ユーザは、キーボード１６２、マウスやトラックボールやタッチパッドと一般に呼ばれるポインティングデバイス１６１などの入力デバイスを介して、コンピュータ１１０にコマンドおよび情報を入力することができる。その他の入力デバイス（図示せず）には、マイクロホン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、スキャナなどを含めることができる。これらおよび他の入力デバイスは、システムバスに結合されたユーザ入力インタフェース１６０を介して処理ユニット１２０に接続されることが多いが、パラレルポート、ゲームポート、ユニバーサルシリアルバス（「ＵＳＢ」）など、他のインタフェースおよびバス構造で接続されてもよい。モニタ１９１または他のタイプの表示デバイスもまた、ビデオインタフェース１９０などのインタフェースを介してシステムバス１２１に接続される。モニタに加えて、コンピュータは、スピーカ１９７やプリンタ１９６など他の周辺出力デバイスも備えることができ、これらは出力周辺インタフェース１９５を介して接続することができる。
【００２６】
コンピュータ１１０は、リモートコンピュータ１８０など１または複数のリモートコンピュータへの論理接続を用いて、ネットワーク化された環境で動作することができる。リモートコンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、またはその他の一般的なネットワークノードとすることができる。図１にはメモリ記憶デバイス１８１しか示していないが、典型的には、パーソナルコンピュータ１１０に関して上述した要素の多くまたはすべてを備える。図１に示す論理接続は、ローカルエリアネットワーク（ＬＡＮ）１７１およびワイドエリアネットワーク（ＷＡＮ）１７３を含むが、その他のネットワークを含むこともできる。このようなネットワーキング環境は、オフィス、企業全体のコンピュータネットワーク、イントラネット、およびインターネットでよくみられるものである。
【００２７】
コンピュータ１１０は、ＬＡＮネットワーキング環境で使用されるとき、ネットワークインタフェースまたはアダプタ１７０を介してＬＡＮ１７１に接続される。ＷＡＮネットワーキング環境で使用されるとき、コンピュータ１１０は、典型的には、インターネットなどのＷＡＮ１７３を介した通信を確立するためのモデム１７２または他の手段を備える。モデム１７２は内蔵でも外付けでもよく、ユーザ入力インタフェース１６０または他の適切な機構を介してシステムバス１２１に接続することができる。ネットワーク化された環境では、コンピュータ１１０に関して示したプログラムモジュールまたはその一部をリモートのメモリ記憶デバイスに記憶することができる。限定ではなく例として、図１には、リモートアプリケーションプログラム１８５がメモリデバイス１８１上にあるものとして示す。図示のネットワーク接続は例示的なものであり、コンピュータ間に通信リンクを確立する他の手段を使用することもできることは理解されるであろう。
【００２８】
（Ｂ．例示的なネットワーク化コンピューティング環境）
上述のコンピュータ１１０は、コンピュータネットワークの一部として配置することができる。一般に、コンピュータに関する上の記述は、ネットワーク環境に配置されたサーバコンピュータとクライアントコンピュータの両方に当てはまる。図２に、サーバがネットワークを介してクライアントコンピュータと通信する、本発明を採用することのできる例示的なネットワーク環境を示す。図２に示すように、複数のサーバ１０ａ、１０ｂなどが、通信ネットワーク１４（ＬＡＮ、ＷＡＮ、イントラネット、インターネット、またはその他のコンピュータネットワークとすることができる）を介して、複数のクライアントコンピュータ１１０ａ、１１０ｂ、１１０ｃと、または携帯電話機１５、地上線電話機１６、携帯情報端末１７などのコンピューティングデバイスと相互接続されている。例えば、通信ネットワーク１４がインターネットであるネットワーク環境では、サーバ１０はウェブサーバとすることができ、クライアント１１０は、ハイパーテキストトランスファープロトコル（ＨＴＴＰ）やワイヤレスアプリケーションプロトコル（ＷＡＰ）など、任意の数の知られたプロトコルを介してウェブサーバと通信する。各クライアントコンピュータ１１０には、サーバ１０へのアクセスを得るためのブラウザ１８０ａが備わるものとすることができる。同様に、様々なデータを表示および受信するために、携帯情報端末１７にはブラウザ１８０ｂが備わり、携帯電話機１５にはブラウザ１８０ｃが備わるものとすることができる。
【００２９】
動作時、ユーザ（図示せず）は、クライアントコンピューティングデバイス上で稼動するコンピューティングアプリケーションと対話して、スキーマ化されたクエリできるデータソースとしてレポートを呈示することができる。このレポートは、サーバコンピュータ上に記憶し、通信ネットワーク１４およびクライアントコンピューティングデバイスを介して協働ユーザに通信することができる。ユーザは、クライアントアプリケーションデバイス上のコンピューティングアプリケーションとインタフェースすることによって、このようなレポートを生成および管理し、それと対話することができる。これらのトランザクションを、処理および記録するようにクライアントコンピューティングデバイスからサーバコンピュータに通信することができる。サーバコンピュータは、クエリできるスキーマ化されたデータソースとしてレポートを呈示するためのコンピューティングアプリケーションをホストすることができる。
【００３０】
このように本発明は、ネットワークにアクセスしてそれと対話するためのクライアントコンピューティングデバイスと、クライアントコンピュータと対話するためのサーバコンピュータとを有するコンピュータネットワーク環境で利用することができる。ただし、本明細書に述べるシステムおよび方法は、様々なネットワークベースのアーキテクチャで実施することができ、従って図示の例に限定すべきではない。次に、本明細書に述べるシステムおよび方法を、現時点における例示的な一実装形態に関してより詳細に述べる。
【００３１】
（Ｃ．データソースとしてのレポート）
図３に、レポートを呈示する例示的なレポート生成管理システムの説明に役立つ例示的なアーキテクチャのブロック図を示す。図示のように、例示的なアーキテクチャ３００は、レポートサーバ３２０を含む。レポートサーバ３２０は、さらに、レポート処理エンジン３２５、分析サービスエンジン３３０、およびレポート中間フォーマット３３５を備える。レポート中間フォーマット３３５は、さらに、データ３４５およびスキーマ３４０を備える。最後に、この例示的なアーキテクチャ３００は、レポートビューア／ブラウザ３０５と、ＯＬＥＤＢ／ＡＤＯ３１０を含む。動作時、レポートサーバ３２０は、レポートデータ３４５に作用するスキーマ３４０を生成する。レポートサーバ３２０は、永続的なデータフォーマットに依存しないレンダリングを有するスキーマ化されたクエリ可能なデータソースとして、レポート中間フォーマットを生成する。次に、レポートサーバ３２０は、この中間データフォーマットを使用して、生成されたレポートを、３０５を介して表示することができる。この文脈で、レポートサーバ３２０のレポート処理エンジン３２５は、中間フォーマット３３５を処理して、レポートビューア／ブラウザ３０５上にレポートを表示する。また、レポートサーバ３２０は、中間フォーマットを使用して、生成されたレポートを、ＯＬＥＤＢモジュール３１０を使用し分析サービスエンジン３３０を介して協働環境に通信することもできる。
【００３２】
レポートをスキーマ化された中間フォーマットにすることにより、このレポートは、協働環境および協働コンピューティングアプリケーションにとってデータソースのように見え、またデータソースのように働く。
【００３３】
（Ｄ．スキーマ化されたデータソースとしてデータ作業生産物を呈示する）
図４に、スキーマ化されたクエリできるデータソースとしてレポートを呈示するレポートの生成および管理システムの、例示的なコンポーネント間のデータフローの例を示す。図示のように、レポート生成管理システム４００は、スキーマ化されたクエリできるデータソースとしてレポートを呈示する際に使用するための様々なコンポーネントを備える。具体的には、レポート生成管理システム４００は、レポート処理モジュール４２０を備える。図示のように、レポート処理モジュール４２０は、レポート定義４１５と協働し、外部データソース４０５，４１０からのデータを受け入れてレポートを生成し、これを中間フォーマット４２５で記憶する。
【００３４】
動作時、１または複数の協働環境が、生成されたレポートを要求することができる。この文脈で、中間データフォーマットで記憶されたレポートを、イベント処理モジュール４３０に通信する。イベント処理モジュール４３０は、生成されたレポートの全部または一部を要求元の環境に通信するのを調整する。イベント処理モジュール４３０は、要求元環境のレンダリングを決定し、レポートの全部または一部を、要求元環境に固有のレンダリング拡張子で要求元環境に提供する。例えば、ＨＴＭＬレンダリングが必要とされる場合は、ＨＴＭＬレンダリング拡張子４３５を採用する。これと比較して、ＸＭＬレンダリング拡張子が必要とされる場合は、ＸＭＬレンダリング拡張子４４０を採用する。同様に、その他のレンダリング型も、その他のレンダリング拡張子４４５で表される。
【００３５】
図５に、例示的なレポート生成管理システム５００に関する高レベルの展開例を示す。図示のように、レポート生成管理システム５００は、レポート処理モジュール５２５を備える。レポート処理モジュール５２５は、データ拡張５３５およびレンダリング拡張５３０を備える。さらに、レポート処理モジュールは、レポート定義５１０およびデータソース５０５と協働する。動作時、レポートを求める要求を、レポート処理モジュール５２５に提供する。レポート処理モジュール５２５は、レポート定義ファイル５１０から、データソース５０５中にみられるデータに適用するための適切なレポート定義を得る。次に、データ拡張５３５を使用して、レポート処理モジュール５２５によりデータを処理して、データソース５０５からのデータ要素を識別する。次に、レポート処理モジュール５２５は、適切なレポート定義に従ってデータを処理して、スキーマ化されたクエリできるデータソースとして呈示されるレポートを生成する。次に、レポート処理モジュール５２５は、このレポートを、将来に使用されるように中間データフォーマット５２０で記憶する。
【００３６】
レポートを生成することに加えて、レポート生成管理システム５００は、要求元環境に必要とされるレンダリングにかかわらず、生成されたレポートを協働環境に通信することもできる。例えば、レポート生成管理システム５００を利用して、生成されたレポートを協働環境に通信することができる。この文脈で、中間フォーマット５２０で記憶された生成済みレポートを、レポート処理モジュール５２５により取り出し、レンダリング拡張５３０を使用して処理し、要求元環境に受け入れられるレンダリングフォーマットのレポートを生成する。
【００３７】
図６に、永続的なデータフォーマットに依存しないレンダリングを有するスキーマ化されたクエリできるデータソースとしてレポートを呈示することのできる例示的なレポート生成管理システムの詳細な展開例を示す。図示のように、レポート生成管理システム６００は、レポートサーバ６０５を備える。レポートサーバ６０５は、マッピングモジュール６１０、レポート処理モジュール６１５、およびクエリ処理最適化／実行エンジン６２５を備える。レポートサーバ６０５は、様々な協働コンポーネントと協働するが、これらの協働コンポーネントは、これに限定しないが、レポートユーザインタフェース（ＵＩ）６３０、レポート定義６５０、第２のレポートサーバ６３５、分析サービス（ＡＳ）データプロバイダ６４０、およびピボット制御コンポーネント６４５を含む。
【００３８】
レポートを生成するとき、レポートサーバ６０５は、レポート定義６５０と協働して、所望のレポートのための適切なレポート定義を得る。次に、レポート定義を、レポートサーバ６０５のレポート処理モジュール６１５により処理する。レポートサーバ６０５は、適切なレポート定義を使用して、適切なデータを収集し、所望のレポートを表すスキーマ化されたクエリ可能なデータソースを生成する。次に、レポートサーバ６０５は、レポートをレポートＵＩ６３０上に表示することができる。この企図される動作では、レポートサーバ６０５のレポート処理モジュール６１５は、マッピングモジュール６１０と協働して、レポートＵＩ６３０上で閲覧および表示されるようにこの所望のレポートをマッピングする。
【００３９】
動作時、レポート生成管理システム６００は、いくつかの動作および機能をサポートすることができる。例えば、生成された一組のレポートに関する報告を実行することができる。図６に矢印で示すように、レポートに関する報告を求める要求が、レポートサーバ６３５に提供される。レポートサーバ６３５は、レポートに関する報告の要求を処理し、ＡＳデータプロバイダモジュールと協働して、この要求を満たす。ＡＳデータプロバイダ６４０は、クエリ処理最適化／実行エンジン６２５と協働する。このエンジンは、レポート処理モジュール６１５と協働して、レポートに関する報告の要求を満たすのに必要なデータを入手／生成する。同様に、レポートに関するＯＷＣを求める要求を、ピボット制御モジュール６４５に提供することができ、ピボット制御モジュール６４５は、ＡＳデータプロバイダ６４０と協働して、レポートに関するＯＷＣの要求を満たす。
【００４０】
レポート生成管理システム６００の別の使用法は、関与するユーザが、リモート協働環境から発生したレポートをレポートＵＩ６３０上で見ることができるようにする。この文脈で、レポートＵＩ６３０は、レポート処理モジュール６１５と協働する。レポート処理モジュール６１５は、マッピングモジュール６１０と協働する。マッピングモジュール６１０は、データをあるデータフォーマットから別のデータフォーマットに変換するように動作する。従って、これを使用して、データフォーマットに依存しないレンダリングのデータを、要求元環境でレンダリングするデータフォーマットに依存するレンダリングに変換することができる。次に、マッピングモジュール６１０は、クエリ処理最適化／実行エンジン６２５と協働して、１または複数の協働モジュールと通信する。
【００４１】
企図される実装形態におけるレポートサーバ６０５は、コンピューティングハードウェア、コンピューティングソフトウェア、およびコンピューティングハードウェアとコンピューティングソフトウェアの組合せのいずれを含むこともできることを理解されたい。
【００４２】
図７に、スキーマ化されたクエリ可能なデータソースとしてレポートを呈示するために実施される例示的な処理、および呈示されたこのようなレポートを利用する際に実施される後続の処理のフローチャートを示す。図示のように、処理は、ブロック７００で開始してブロック７０５に進み、ここでレポート定義を得る。ブロック７１０で、得られたレポート定義に従って、レポートについてのスキーマを生成する。次に、ブロック７１５においてレポートデータを得て、ブロック７２０において、ブロック７１０で生成されたスキーマをレポートデータに適用する。次にもブロック７２５において、スキーマ化されたレポートを中間フォーマットで記憶する（図８Ａおよび８Ｂで述べる処理に従って）。ここから処理は、ブロック７３０に進み、レポートが要求されているかどうか（例えば、固有の環境または協働環境から要求されているか否か）を決定するためのチェックを行う。提供した各例の文脈では、環境は、任意のコンピューティング環境および部分的なコンピューティング環境を含む。レポートが要求されている場合は、処理はブロック７３５に進んでデータ拡張をレポートに適用し、ブロック７４０でデータ拡張を提供する。企図される例示的な一実装形態では、データ拡張をレポートのデータに適用して、データフィールドの定義を識別する助けとする。上述したように、レンダリング拡張を使用して、レポートを使用する環境のレンダリングフォーマットで使用されるようにレポートを変換する。次に、ブロック７４５において、レポートの要求元である環境で表示されるように、レポートをレンダリングする。処理はブロック７５０で終了する。しかし、ブロック７３０でレポートが要求されていない場合は、処理はブロック７５０に進んで終了する。
【００４３】
（Ｅ．情報の永続性に依存しないレンダリング）
図８Ａに、永続的なデータフォーマットに依存しないレンダリングで呈示されたレポートを提供するために実施される例示的な処理のフローチャートを示す。図示のように、処理はブロック８００で開始し、ブロック８０５に進み、呈示された、スキーマ化されたクエリできるレポートのレポートスキーマを得る。処理は、ブロック８１０に進み、永続的なデータフォーマットに依存しないレンダリングを識別する。例示的な一実装形態では、永続的なデータフォーマットに依存しないレンダリングは、２進数データフォーマットを含む。ブロック８１０の文脈では、提供された例による本明細書に述べる処理は、スキーマの２進数表現を識別することを企図している。提供された例から、処理はブロック８１５に進み、識別された２進数スキーマを所望のレポートに適用して、スキーマ化されたレポートを２進数データフォーマットに変換する。処理はブロック８２０に進み、生成された２進数表現を、呈示されたレポートがその形で存在することのできる中間データフォーマットとして提供する。処理はブロック８２５で終了する。
【００４４】
図８Ｂに、呈示されたレポートの全部または一部を要求元環境で使用するために取り出すよう求める協働環境からの要求を処理するときに実施される、例示的な処理のフローチャートを示す。図示のように、処理は、ブロック８３０で開始してブロック８３５に進み、ここで所望のレポート（全部または一部）が要求され、その中間フォーマット（例えば、永続的なデータフォーマットに依存しないレンダリング）で提供される。ここから処理はブロック８４０に進み、中間フォーマット、フォーマットに依存しないレンダリングを、フォーマットに依存するレンダリング、すなわち要求元環境のレンダリングフォーマットに変換する。例示的な一実装形態では、この変換ステップは、レポートスキーマの２進数変換形から要求元環境の拡張子特有フォーマットへの変換を企図している。ブロック８４５において、スキーマ化されたレポートおよび付随するデータを、要求元環境のレンダリング拡張子で提示されるように抽出する。ブロック８５０において、最終的なレポートを提供する。処理はブロック８５５で終了する。
【００４５】
図９に、生成されたレポートのセットに対して時間ベースのクエリを行うときに実施される例示的な処理のフローチャートを示す。図示のように、処理はブロック９００で開始し、ブロック９０５に進み、ここで、所望のスナップショットビューのパラメータを提供する。ここから処理はステップ９１０に進み、スキーマ化されたクエリできるレポートをデータソースとして処理する。ブロック９１５において、提供されたパラメータに従って、生成された一組のレポートからデータを集約する（例えば、年度１から年度２までのすべての売上高レポート全体で、中西部地域における年度１から年度２までのすべての売上高の値を収集する）。ブロック９２０において、集約されたデータを収集および処理して、所望のスナップショットデータを有する新しいスキーマ化されたクエリできるレポートを提供する。処理はブロック９２５に進んで終了する。
【００４６】
図９に述べた処理は、本明細書に述べるシステムおよび方法の１または複数の特徴を採用している。具体的には、本明細書に述べるシステムおよび方法では、レポートを、永続的なデータフォーマットに依存しないレンダリングを有するスキーマ化されたクエリできるデータソースとして呈示する機構を企図している。レポートがスキーマ化され、クエリ可能であり、永続的であるため、このようなレポートのセットに対する時間ベースのクエリ（例えば、傾向スナップショット）は容易に処理される。というのは、レポートのスキーマから識別される時間値にわたってデータが収集されるからである。レポートは永続的なデータフォーマットで記憶されるので、これらの値には信頼性がある。
【００４７】
（Ｆ．結び）
上述したように、本発明の例示的な実施形態を様々なコンピューティングデバイスおよびネットワークアーキテクチャに関して述べたが、基礎をなす概念は、関連する他の機能を横断および／または実施することが望ましい任意のコンピューティングデバイスまたはシステムに適用することができる。従って、以上に述べたプロセスおよびシステムは、様々なアプリケーションおよびデバイスに適用することができる。本明細書では、様々な選択子の代表として例示的なデータ構造、プログラミング言語、名前、および例を選択したが、これらは限定的なものではない。
【００４８】
本明細書に述べた様々な技法は、ハードウェアまたはソフトウェア、あるいは適切ならば、これらの組合せと共に実施することができる。従って、本発明の方法および装置、またはこれらのいくつかの態様または部分は、フロッピー（登録商標）ディスケット、ＣＤ−ＲＯＭ、ハードドライブ、その他任意の機械読取り可能記憶媒体などのタンジブルな媒体に組み入れた、プログラムコード（すなわち命令）の形をとることができる。プログラムコードがコンピュータなどのマシンにロードされ、マシンによって実行されると、このマシンは本発明を実施するための装置になる。プログラムコードがプログラム可能コンピュータ上で実行される場合、このコンピューティングデバイスは、通常、プロセッサと、プロセッサ読取り可能な記憶媒体（揮発性と不揮発性のメモリ、および／または記憶素子を含む）と、少なくとも１つの入力デバイスと、少なくとも１つの出力デバイスを備える。本発明のデバッグインタフェース態様を例えばデータ処理ＡＰＩなどを用いることによって利用する１または複数のプログラムを、コンピュータシステムと通信するための高水準のプロシージャプログラミング言語またはオブジェクト指向プログラミング言語で実装することが好ましい。ただしプログラムは、望むならアセンブリ言語またはマシン言語で実装してもよい。いずれにしても、言語はコンパイルまたは解釈される言語とすることができ、ハードウェア実装と結合することができる。
【００４９】
本発明の方法および装置はまた、電気配線またはケーブル配線や、光ファイバや、その他任意の形の伝送など、何らかの伝送媒体を介して伝送されるプログラムコードの形で具体化された通信を介して実施することもできる。例示的な実施形態で上述したデバッグ機能を有する、ＥＰＲＯＭ、ゲートアレイ、プログラム可能論理デバイス（ＰＬＤ）、クライアントコンピュータ、ビデオレコーダなどのマシン、または受信マシンでプログラムコードが受信されロードされ実行されると、このマシンは本発明を実施する装置になる。プログラムコードは、汎用プロセッサ上で実施されると、プロセッサと結合して、本発明の機能を呼び出すように動作する固有の装置を形成する。さらに、本発明と共に使用される任意の記憶技法は、どんな場合でもハードウェアとソフトウェアの組合せとすることができる。
【００５０】
現時点で好ましい実施形態に関して本発明を述べたが、同じ本発明の機能を実施するために、本発明を逸脱することなく、その他の類似の実施形態を使用することもでき、また、述べた実施形態に修正および追加を施すこともできることを理解されたい。例えば、本出願に述べた本発明は、有線でも無線でも任意のコンピューティングデバイスまたは環境に適用することができ、また、通信ネットワークを介して接続されネットワークを介して対話する任意の数のこのようなコンピューティングデバイスに適用することができることは、当業者なら理解するであろう。さらに、特に無線ネットワーク化デバイスが急増していることもあり、ハンドヘルドデバイスオペレーティングシステムやその他のアプリケーション特有オペレーティングシステムを含めた様々なコンピュータプラットフォームが企図されることも強調しておく。さらに本発明は、複数の処理チップまたはデバイス中に、またはそれらにまたがって実装することができ、記憶も同様に複数のデバイスにまたがって実施することができる。従って本発明は、どんな単一の実施形態にも限定すべきではなく、添付の特許請求の範囲に従った幅および範囲で考えるべきである。
【図面の簡単な説明】
【００５１】
【図１】本発明に適した例示的なコンピューティング環境の概略図である。
【図２】本発明に適した例示的なコンピューティング環境の概略図であり、例示的なネットワーク化コンピューティング環境を示す図である。
【図３】本明細書に述べるシステムおよび方法による、データソースとしてのレポートの例示的な一実装形態を示すブロック図である。
【図４】本明細書に述べるシステムおよび方法による、レポート処理の流れを示すブロック図である。
【図５】本明細書に述べるシステムおよび方法による、レポート利用の流れを示すブロック図である。
【図６】本明細書に述べるシステムおよび方法による、スキーマ化されたクエリできるレポートを処理するための例示的なコンポーネントの詳細なブロック図である。
【図７】本明細書に述べるシステムおよび方法による、スキーマ化されたクエリ可能なデータソースとしてレポートを呈示するために実施される処理の流れ図である。
【図８Ａ】データソースを情報の永続性に依存しないレンダリングとして呈示するために実施される処理の流れ図である。
【図８Ｂ】情報の永続性に依存しないレンダリングを、スキーマ化されたクエリできるデータソースとして呈示されるレポートとして変換する際に実施される処理の流れ図である。
【図９】スキーマ化されたクエリできるデータソースとして呈示されたデータを処理し、所望のスナップショットを生成する際に実施される処理の流れ図である。
【符号の説明】
【００５２】
３００  例示的なアーキテクチャ
３０５  レポートビューア／ブラウザ
３１０  ＯＬＥＤＢ／ＡＤＯ
３２０  レポートサーバ
３２５  レポート処理エンジン
３３０  分析サービスエンジン
３３５  レポート中間フォーマット
３４０  スキーマ
３４５  データ
４００  レポート生成管理システム
４０５、４１０  外部データソース
４１５、５１０、６５０  レポート定義
４２０  レポート処理モジュール
４２５、５２０  中間フォーマット
４３０  イベント処理モジュール
４３５  ＨＴＭＬレンダリング拡張子
４４０  ＸＭＬレンダリング拡張子
４４５  その他のレンダリング拡張子
５００  レポート生成管理システム
５０５  データソース
５２５、６１５  レポート処理モジュール
５３０  レンダリング拡張
５３５  データ拡張
６００  レポート生成管理システム
６０５  レポートサーバ
６１０  マッピングモジュール
６２５  クエリ処理最適化／実行エンジン
６３０  レポートユーザインタフェース（ＵＩ）
６３５  第２のレポートサーバ
６４０  分析サービス（ＡＳ）データプロバイダ
６４５  ピボット制御コンポーネント
【図１】
2005301327.tif 000003
【図２】
2005301327.tif 000004
【図３】
2005301327.tif 000005
【図４】
2005301327.tif 000006
【図５】
2005301327.tif 000007
【図６】
2005301327.tif 000008
【図７】
2005301327.tif 000009
【図８Ａ】
2005301327.tif 000010
【図８Ｂ】
2005301327.tif 000011
【図９】
2005301327.tif 000012
【外国語明細書】
2005301327000001.pdf