(57)【要約】  コンピュータシステムは、フローペイン、ツールペイン、プロファイルペイン、及びデータペインを含むユーザインターフェースを表示し、フローペインは、データソース、演算、及び出力データセットを識別するノード／リンク流れ図を表示する。ツールペインは、ユーザがデータソースを流れ図に追加できるようにするデータソースセレクタを含み、ユーザがノードを流れ図に挿入できるようにする演算パレットを含む。プロファイルペインは、データフィールドの情報及びデータ値の統計情報を含め、流れ図において選択されたノードに対応するスキーマを表示し、ユーザが個々のデータ要素と対話することによって流れ図を変更できるようにする。データペインは、流れ図において選択されたノードに対応するデータの行を表示し、ユーザが個々のデータ値と対話することにより流れ図を変更できるようにする。【選択図】図１
2020504347.tif 000002
【特許請求の範囲】
【請求項１】
続く分析に向けてデータを準備するコンピュータシステムであって、
１つ又は複数のプロセッサと、
メモリと、
前記メモリに記憶され、前記１つ又は複数のプロセッサによって実行されるように構成される１つ又は複数のプログラムと、
を含み、
前記１つ又は複数のプログラムは、
データフローペイン、ツールペイン、プロファイルペイン、及びデータペインを含むユーザインターフェースを表示する命令
を含み、
前記データフローペインは、データソース、演算、及び出力データセットを識別するノード／リンク流れ図を表示し、
前記ツールペインは、ユーザがデータソースを前記流れ図に追加できるようにするデータソースセレクタを含み、ユーザが、特定の変換演算を実行するためのノードを前記流れ図に挿入できるようにする演算パレット及びユーザが前記流れ図に組み込むことができる他の流れ図のパレットを含み、
前記プロファイルペインは、データフィールドについての情報及び前記データフィールドのデータ値についての統計情報を含め、前記流れ図において選択されたノードに対応するスキーマを表示し、ユーザが、個々のデータ要素と対話することによって前記流れ図を変更できるようにし、
前記データペインは、前記流れ図において選択されたノードに対応するデータの行を表示し、ユーザが、個々のデータ値と対話することにより前記流れ図を変更できるようにする、コンピュータシステム。
【請求項２】
前記プロファイルペインに表示されるデータフィールドについての情報は、第１のデータフィールドのデータ範囲を含む、請求項１に記載のコンピュータシステム。
【請求項３】
前記プロファイルペインにおける前記第１のデータフィールドの第１のデータ範囲への第１のユーザ動作に応答して、データを前記第１のデータ範囲にフィルタリングする新しいノードが、前記流れ図に追加される、請求項２に記載のコンピュータシステム。
【請求項４】
前記プロファイルペインは、ユーザが、前記第１のデータフィールドの前記データ範囲を指定された値にマッピングし、それにより、前記ユーザ指定マッピングを実行する新しいノードを前記流れ図に追加できるようにする、請求項２に記載のコンピュータシステム。
【請求項５】
前記データペインにおける第１のデータ値との第１のユーザ対話に応答して、前記データを前記第１のデータ値にフィルタリングするノードが前記流れ図に追加される、請求項１に記載のコンピュータシステム。
【請求項６】
前記データペインにおける第１のデータフィールドの第１のデータ値のユーザ変更に応答して、前記第１のデータフィールドのデータ値が前記第１のデータ値に等しいデータの各行に対して前記変更を実行する新しいノードが、前記流れ図に追加される、請求項１に記載のコンピュータシステム。
【請求項７】
前記データペインにおける第１のデータフィールドへの第１のユーザ動作に応答して、前記第１のデータフィールドを２つ以上の別個のデータフィールドに分割するノードが、前記流れ図に追加される、請求項１に記載のコンピュータシステム。
【請求項８】
第１のノードを前記ツールペインにドラッグする前記データフローペインでの第１のユーザ動作に応答して、新しい演算が前記演算パレットに追加され、前記新しい演算は前記第１のノードに対応する、請求項１に記載のコンピュータシステム。
【請求項９】
前記プロファイルペイン及び前記データペインは、選択が前記データフローペインにおいてなされる際、非同期で更新するように構成される、請求項１に記載のコンピュータシステム。
【請求項１０】
前記プロファイルペインに表示されるデータフィールドについての前記情報は、データフィールドのデータ値の分布を表示する１つ又は複数のヒストグラムを含む、請求項１に記載のコンピュータシステム。
【請求項１１】
１つ又は複数のプロセッサ、メモリ、及びディスプレイを有するコンピュータシステムによって実行されるように構成される１つ又は複数のプログラムを記憶した非一時的コンピュータ可読記憶媒体であって、前記１つ又は複数のプログラムは、
データフローペイン、ツールペイン、プロファイルペイン、及びデータペインを含むユーザインターフェースを表示する命令
を含み、
前記データフローペインは、データソース、演算、及び出力データセットを識別するノード／リンク流れ図を表示し、
前記ツールペインは、ユーザがデータソースを前記流れ図に追加できるようにするデータソースセレクタを含み、ユーザが、特定の変換演算を実行するためのノードを前記流れ図に挿入できるようにする演算パレット及びユーザが前記流れ図に組み込むことができる他の流れ図のパレットを含み、
前記プロファイルペインは、データフィールドについての情報及び前記データフィールドのデータ値についての統計情報を含め、前記流れ図において選択されたノードに対応するスキーマを表示し、ユーザが、個々のデータ要素と対話することによって前記流れ図を変更できるようにし、
前記データペインは、前記流れ図において選択されたノードに対応するデータの行を表示し、ユーザが、個々のデータ値と対話することにより前記流れ図を変更できるようにする、コンピュータ可読記憶媒体。
【請求項１２】
前記プロファイルペインにおける前記第１のデータフィールドの第１のデータ範囲への第１のユーザ動作に応答して、データを前記第１のデータ範囲にフィルタリングする新しいノードが、前記流れ図に追加される、請求項１１に記載のコンピュータ可読記憶媒体。
【請求項１３】
前記プロファイルペインは、ユーザが、第１のデータフィールドの前記データ範囲を指定された値にマッピングし、それにより、前記ユーザ指定マッピングを実行する新しいノードを前記流れ図に追加できるようにする、請求項１１に記載のコンピュータ可読記憶媒体。
【請求項１４】
前記データペインにおける第１のデータ値との第１のユーザ対話に応答して、前記データを前記第１のデータ値にフィルタリングするノードが前記流れ図に追加される、請求項１１に記載のコンピュータ可読記憶媒体。
【請求項１５】
前記データペインにおける第１のデータフィールドに対する第１のユーザ動作に応答して、前記第１のデータフィールドを２つ以上の別個のデータフィールドに分割するノードが、前記流れ図に追加される、請求項１１に記載のコンピュータ可読記憶媒体。
【請求項１６】
続く分析に向けてデータを準備する方法であって、
ディスプレイ、１つ又は複数のプロセッサ、及び前記１つ又は複数のプロセッサによって実行されるように構成された１つ又は複数のプログラムを記憶するメモリを有するコンピュータシステムにおいて、
データフローペイン、ツールペイン、プロファイルペイン、及びデータペインを含むユーザインターフェースを表示すること
を含み、
前記データフローペインは、データソース、演算、及び出力データセットを識別するノード／リンク流れ図を表示し、
前記ツールペインは、ユーザがデータソースを前記流れ図に追加できるようにするデータソースセレクタを含み、ユーザが、特定の変換演算を実行するためのノードを前記流れ図に挿入できるようにする演算パレット及びユーザが前記流れ図に組み込むことができる他の流れ図のパレットを含み、
前記プロファイルペインは、データフィールドについての情報及び前記データフィールドのデータ値についての統計情報を含め、前記流れ図において選択されたノードに対応するスキーマを表示し、ユーザが、個々のデータ要素と対話することによって前記流れ図を変更できるようにし、
前記データペインは、前記流れ図において選択されたノードに対応するデータの行を表示し、ユーザが、個々のデータ値と対話することにより前記流れ図を変更できるようにする、方法。
【請求項１７】
前記プロファイルペインにおける前記第１のデータフィールドの第１のデータ範囲への第１のユーザ動作に応答して、データを前記第１のデータ範囲にフィルタリングする新しいノードが、前記流れ図に追加される、請求項１６に記載の方法。
【請求項１８】
前記プロファイルペインは、ユーザが、第１のデータフィールドの前記データ範囲を指定された値にマッピングし、それにより、前記ユーザ指定マッピングを実行する新しいノードを前記流れ図に追加できるようにする、請求項１６に記載の方法。
【請求項１９】
前記データペインにおける第１のデータ値との第１のユーザ対話に応答して、前記データを前記第１のデータ値にフィルタリングするノードが前記流れ図に追加される、請求項１６に記載の方法。
【請求項２０】
前記データペインにおける第１のデータフィールドに対する第１のユーザ動作に応答して、前記第１のデータフィールドを２つ以上の別個のデータフィールドに分割するノードが、前記流れ図に追加される、請求項１６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
技術分野
[0001]開示される実施態様は、一般的にはデータ視覚化に関し、より詳細には、データ視覚化アプリケーションによる使用に向けてデータを準備しキュレートするユーザインターフェースに関する。
【背景技術】
【０００２】
背景
[0002]データ視覚化アプリケーションは、分布、トレンド、外れ値、及びビジネス判断を下すのに重要な他のファクタを含め、ユーザがデータセットを視覚的に理解できるようにする。幾つかのデータセットは非常に大きいか、又は複雑であり、多くのデータフィールドを含む。複数のデータ視覚化を有するダッシュボードを含め、様々なツールを使用して、データの理解及び分析を助けることができる。しかしながら、データ視覚化アプリケーションにより容易に使用することができるフォーマットにするために、データを頻繁に操作又は人為的に処理する必要がある。様々なＥＴＬ（抽出／変換／ロード）ツールを使用して、使用可能なデータソースを構築することがある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
[0003]今日、ＥＴＬ及びデータ準備空間には二次元のモデルがある。データフロー式システムは、システムを通してユーザをデータの演算及びフローにフォーカスさせ、ジョブの全体構造の明確化を提供するのに役立ち、ユーザがそれらのステップを制御するのを容易にする。しかしながら、これらのシステムは一般に、ユーザに実際のデータを見せることに関しては仕事が下手であり、ユーザが、データに対して何が行われるか又は何を行う必要があるかを実際に理解するのを難しくすることがある。これらのシステムはまた、ノードの爆発という欠点も有し得る。小さな各演算が図においてそれ自体のノードを得ると、複雑さが控えめなフローであってさえも、ノード及びエッジの込み入ったネズミの巣のようになり得る。
【０００４】
[0004]他方、ろくろ式（Potter’s Wheel style）システムは、ユーザに、実際のデータへの非常に具体的なスプレッドシート式インターフェースを提示し、ユーザが直接動作を通してデータを形作ることを可能にする。ユーザが実際に、これらのシステムでデータフローを創作している間、そのフローは一般に塞がれ、ユーザがジョブの全体構造を理解し制御するのを難しくする。
【課題を解決するための手段】
【０００５】
概要
[0005]開示される実施態様は、データフロー式システム及びろくろ式システムの両方の利点を提供し、更に進んでユーザがデータフローを構築するのを容易にするという特徴を有する。開示されるデータ準備アプリケーションはデータフローを記述するが、ユーザが行いたい高レベルの動作をよりよく表現するより大きなグループにノードを畳む。これらのノードの設計は、あらゆるステップで統計及び関連する視覚化によってガイドされる、実際のデータへの実際の動作を利用する。
【０００６】
[0006]幾つかの実施態様によれば、コンピュータシステムは、分析に向けてデータを準備する。本コンピュータシステムは、１つ又は複数のプロセッサ、メモリ、及びメモリに記憶された１つ又は複数のプログラムを含む。プログラムは、１つ又は複数のプロセッサによって実行されるように構成される。プログラムは、データ準備アプリケーションのユーザインターフェースを表示する。ユーザインターフェースは、データフローペイン、ツールペイン、プロファイルペイン、及びデータペインを含む。データフローペインは、データソース、演算、及び出力データセットを識別するノード／リンク流れ図を表示する。ツールペインは、ユーザがデータソースを流れ図に追加できるようにするデータソースセレクタを含み、ユーザが、特定の変換演算を実行するためのノードを流れ図に挿入できるようにする演算パレット及びユーザが流れ図に組み込むことができる他の流れ図のパレットを含む。プロファイルペインは、データフィールドについての情報及びデータフィールドのデータ値についての統計情報を含め、流れ図において選択されたノードに対応するスキーマを表示し、ユーザが、個々のデータ要素と対話することによって流れ図を変更できるようにする。データペインは、流れ図において選択されたノードに対応するデータの行を表示し、ユーザが、個々のデータ値と対話することにより流れ図を変更できるようにする。
【０００７】
[0007]幾つかの実施態様では、プロファイルペインに表示されるデータフィールドについての情報は、第１のデータフィールドのデータ範囲を含む。
【０００８】
[0008]幾つかの実施態様では、プロファイルペインにおける第１のデータフィールドの第１のデータ範囲への第１のユーザ動作に応答して、データを第１のデータ範囲にフィルタリングする新しいノードが、流れ図に追加される。
【０００９】
[0009]幾つかの実施態様では、プロファイルペインは、ユーザが、第１のデータフィールドのデータ範囲を指定された値にマッピングし、それにより、ユーザ指定マッピングを実行する新しいノードを流れ図に追加できるようにする。
【００１０】
[0010]幾つかの実施態様では、データペインにおける第１のデータ値との第１のユーザ対話に応答して、データを第１のデータ値にフィルタリングするノードが流れ図に追加される。
【００１１】
[0011]幾つかの実施態様では、データペインにおける第１のデータフィールドの第１のデータ値のユーザ変更に応答して、第１のデータフィールドのデータ値が第１のデータ値に等しいデータの各行に対して変更を実行する新しいノードが、流れ図に追加される。
【００１２】
[0012]幾つかの実施態様では、データペインにおける第１のデータフィールドへの第１のユーザ動作に応答して、第１のデータフィールドを２つ以上の別個のデータフィールドに分割するノードが、流れ図に追加される。
【００１３】
[0013]幾つかの実施態様では、第１のノードをツールペインにドラッグする前記データフローペインでの第１のユーザ動作に応答して、新しい演算が演算パレットに追加され、新しい演算は前記第１のノードに対応する。
【００１４】
[0014]幾つかの実施態様では、プロファイルペイン及びデータペインは、選択がデータフローペインにおいてなされる際、非同期で更新するように構成される。
【００１５】
[0015]幾つかの実施態様では、プロファイルペインに表示されるデータフィールドについての情報は、データフィールドのデータ値の分布を表示する１つ又は複数のヒストグラムを含む。
【００１６】
[0016]幾つかの実施態様によれば、プロセスはデータを変換する。プロセスは、ディスプレイ、１つ又は複数のプロセッサ、及び１つ又は複数のプロセッサによって実行されるように構成された１つ又は複数のプログラムを記憶したメモリを有するコンピュータシステムで実行される。プロセスは、データフローペイン及びデータペインを含むユーザインターフェースを表示する。プロセスは、データフローペインにおいてノード／リンクデータ変換流れ図を構築する第１のユーザ入力を受信する。流れ図における各ノードは、データを各データソースから検索する各演算を指定し、データを変換する各演算を指定し、又は各出力データセットを作成する各演算を指定する。流れ図は、データを第１のデータソース及び１つ又は複数の変換演算ノードから検索する１つ又は複数のデータソースノードを有するサブツリーを含む。プロセスは、少なくともサブツリーを実行する第２のユーザ入力を受信する。第２のユーザ入力及びサブツリー内のノードが命令的に実行するように構成されるとの判断に従って、プロセスは、サブツリー内のリンクによって指定されるようにサブツリー内のノードの演算を順次実行し、それにより、データを第１のデータソースから検索し、検索したデータを変換し、第１の中間データセットを形成し、第１の中間データセットをデータペインに表示する。プロセスは、宣言的に実行するようにサブツリー内のノードを構成する第３のユーザ入力を受信し、少なくともサブツリーを実行する第４のユーザ入力を受信する。第４のユーザ入力及びサブツリー内のノードが、宣言的に実行するように構成されているとの判断に従って、プロセスは、サブツリー内のノードによって指定された演算と論理的に等しいデータベースクエリを構築し、データベースクエリを第１のデータソースに送信して、データベースクエリに従って第１のデータソースから第２の中間データセットを検索し、第２の中間データセットをデータペインに表示する。
【００１７】
[0017]幾つかの実施態様では、プロセスは、第１の中間データセット及び第２の中間データセットを記憶することを含む。
【００１８】
[0018]幾つかの実施態様では、サブツリーは流れ図全体である。
【００１９】
[0019]幾つかの実施態様では、変換演算ノードの１つは、１つのノードによって受信されたデータの行をフィルタリングするフィルタ変換演算を指定し、サブツリー内のノードの演算を順次実行することは、コンピュータシステムにおいてフィルタ変換演算を実行して、受信したデータの行をフィルタリングすることを含み、データベースクエリに従って第１のデータソースから第２の中間データセットを検索することは、第１のデータソースをホストするリモートサーバにおいてフィルタ演算を適用することを含む。
【００２０】
[0020]幾つかの実施態様では、変換演算ノードの１つは、第１のデータソースからの２組のデータを結合する結合変換演算を指定し、サブツリー内のノードの演算を順次実行することは、コンピュータシステムにおいて結合変換演算を実行して、２組のデータを結合することを含み、データベースクエリに従って第１のデータソースから第２の中間データセットを検索することは、第１のデータソースをホストするリモートサーバにおいて結合演算を適用することを含む。
【００２１】
[0021]幾つかの実施態様によれば、データベースクエリはＳＱＬで書かれる。
【００２２】
[0022]幾つかの実施態様によれば、流れ図は、サブツリーに含まれない部分を含み、その部分は命令的に実行するように構成され、第４のユーザ入力は、流れ図全体の実行を指定し、流れ図の実行は、その部分におけるリンクによって指定されるように、その部分内のノードの演算を順次実行し、それにより、第２の中間データセットにアクセスし、第２の中間データセットを変換し、最終的なデータセットを形成することを含む。
【００２３】
[0023]幾つかの実施態様によれば、プロセスは、流れ図をリファクタリングする。プロセスは、ディスプレイ、１つ又は複数のプロセッサ、及び１つ又は複数のプロセッサによって実行されるように構成された１つ又は複数のプログラムを記憶したメモリを有するコンピュータシステムで実行される。プロセスは、データフローペイン及びパレットペインを含め、複数のペインを含むユーザインターフェースを表示することを含む。データフローペインは、複数の既存ノードを有する流れ図を含み、各ノードは、各データソースからデータを検索する各演算を指定し、データを変換する各演算を指定し、又は各出力データセットを作成する各演算を指定する。また、パレットペインは、複数のフロー要素テンプレートを含む。プロセスは、流れ図から既存ノード又はパレットペインからフロー要素テンプレートを選択する第１のユーザ入力を受信することと、第１のユーザ入力に応答して、（ｉ）流れ図に配置する新しいノードを表す可動アイコンを表示することであって、新しいノードは、選択された既存ノード又は選択されたフロー要素テンプレートに対応するデータフロー演算を指定する、表示することと、（ｉｉ）新しいノードのデータフロー演算と複数の既存ノードの演算との間の依存性に従って、１つ又は複数のドロップターゲットを流れ図に表示することとを更に含む。プロセスは、可動アイコンを複数のドロップターゲットのうちの第１のドロップターゲットに配置する第２のユーザ入力を受信することと、第２のユーザ入力の検出を停止することとを更に含む。第２のユーザ入力の検出停止に応答して、プロセスは、新しいノードを流れ図内の第１のドロップターゲットに挿入する。新しいノードは、指定されたデータフロー演算を実行する。
【００２４】
[0024]幾つかの実施態様によれば、各既存ノードは、指定された各演算に従って計算される各中間データセットを有し、新しいノードを流れ図の第１のドロップターゲットに挿入することは、指定されたデータフロー演算に従って新しいノードの中間データセットを計算することを含む。
【００２５】
[0025]幾つかの実施態様では、新しいノードは、第１の既存ノードが第１の中間データセットを有した後、流れ図に配置され、新しいノードの中間データセットを計算することは、データフロー演算を第１の中間データセットに適用することを含む。
【００２６】
[0026]幾つかの実施態様によれば、新しいノードは、流れ図に前身を有さず、新しいノードの中間データセットを計算することは、データソースからデータを検索して、中間データセットを形成することを含む。
【００２７】
[0027]幾つかの実施態様によれば、プロセスは、第２のユーザ入力の検出停止に応答して、ユーザインターフェースのデータペインに中間データセットからのデータのサンプリングを表示することを更に含む。データペインは、複数のペインの１つである。
【００２８】
[0028]幾つかの実施態様によれば、データフロー演算は、第１のデータフィールドの値に基づいてデータの行をフィルタリングし、１つ又は複数のドロップターゲットを表示することは、中間データセットが第１のデータフィールドを含む既存のノードの直後に１つ又は複数のドロップターゲットを表示することを含む。
【００２９】
[0029]幾つかの実施態様によれば、第１のユーザ入力は、流れ図から既存ノードを選択し、流れ図の第１のドロップターゲットに新しいノードを挿入することは、既存ノードのコピーを作成する。
【００３０】
[0030]幾つかの実施態様によれば、新しいノードを流れ図の第１のドロップターゲットに挿入することは、既存ノードを流れ図から削除することを更に含む。
【００３１】
[0031]幾つかの実施態様によれば、データフロー演算は、指定された順序で実行される複数の演算を含む。
【００３２】
[0032]幾つかの実施態様によれば、方法は、ディスプレイを有する電子デバイスにおいて実行される。例えば、電子デバイスは、スマートフォン、タブレット、ノートブックコンピュータ、又はデスクトップコンピュータであることができる。方法は、本明細書に記載される任意のコンピュータシステムを実施する。
【００３３】
[0033]幾つかの実施態様では、非一時的コンピュータ可読記憶媒体は、１つ又は複数のプロセッサ、メモリ、及びディスプレイを有するコンピュータシステムにより実行されるように構成された１つ又は複数のプログラムを記憶する。１つ又は複数のプログラムは、本明細書に記載されるように、分析に向けてデータを準備するシステムを実施する命令を含む。
【００３４】
[0034]したがって、ユーザが、データを分析、準備、及びキュレートし、既存のデータフローをリファクタリングできるようにする方法、システム、及びグラフィカルユーザインターフェースが開示される。
【００３５】
図面の簡単な説明
[0035]上記システム、方法、及びグラフィカルユーザインターフェース、並びにデータ視覚化分析及びデータ準備を提供する追加のシステム、方法、及びグラフィカルユーザインターフェースをよりよく理解するために、以下の図面と併せて以下の実施態様の説明を参照すべきであり、図面中、同様の番号は図全体を通して対応する部分を指す。
【図面の簡単な説明】
【００３６】
【図１】[0036]幾つかの実施態様において使用されるグラフィカルユーザインターフェースを示す。
【図２】[0037]幾つかの実施態様による計算デバイスのブロック図である。
【図３Ａ】[0038]幾つかの実施態様によるデータ準備アプリケーションのユーザインターフェースを示す。
【図３Ｂ】[0038]幾つかの実施態様によるデータ準備アプリケーションのユーザインターフェースを示す。
【図３Ｃ】[0039]図３Ａ及び図３Ｂに示されるユーザインターフェースの幾つかの特徴を説明する。
【図３Ｄ】[0040]幾つかの実施態様によるサンプルの流れ図を示す。
【図３Ｅ】[0041]幾つかの実施態様による、一緒に機能するが、異なる頻度で実行される一対のフローを示す。
【図４Ａ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｂ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｃ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｄ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｅ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｆ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｇ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｈ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｉ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｊ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｋ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｌ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｍ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｎ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｏ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｐ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｑ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｒ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｓ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｔ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｕ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図４Ｖ】[0042]幾つかの実施態様による、データ準備アプリケーションを使用して、結合を構築することを示す。
【図５Ａ】[0043]幾つかの実施態様によるログファイルの一部を示す。
【図５Ｂ】[0044]幾つかの実施態様によるルックアップテーブルの一部を示す。
【図６Ａ】[0045]幾つかの実施態様による、フローの幾つかの演算、入力、及び出力を示す。
【図６Ｂ】[0045]幾つかの実施態様による、フローの幾つかの演算、入力、及び出力を示す。
【図６Ｃ】[0045]幾つかの実施態様による、フローの幾つかの演算、入力、及び出力を示す。
【図７Ａ】[0046]幾つかの実施態様によるデータ準備システムの幾つかの構成要素を示す。
【図７Ｂ】[0046]幾つかの実施態様によるデータ準備システムの幾つかの構成要素を示す。
【図７Ｃ】[0047]幾つかの実施態様による分析又は実行のいずれかのフローの評価を示す。
【図７Ｄ】[0048]幾つかのデータ準備実施態様で使用される非同期サブシステムを概略的に表す。
【図８Ａ】[0049]幾つかの実施態様による一連のフロー演算を示す。
【図８Ｂ】[0050]幾つかの実施態様によるタイプシステムの３つの態様を示す。
【図８Ｃ】[0051]幾つかの実施態様によるタイプ環境の属性を示す。
【図８Ｄ】[0052]幾つかの実施態様による、既知の全てのデータ型を有するフローに基づく単純なタイプチェックを示す。
【図８Ｅ】[0053]幾つかの実施態様による、完全に既知のタイプを有する単純なタイプ失敗を示す。
【図８Ｆ】[0054]幾つかの実施態様による部分フローの単純なタイプ環境計算を示す。
【図８Ｇ】[0055]幾つかの実施態様によるパッケージアップコンテナノードのタイプを示す。
【図８Ｈ】[0056]幾つかの実施態様によるより複雑なタイプ環境シナリオを示す。
【図８Ｉ】[0057]幾つかの実施態様によるより複雑なタイプ環境を再使用するシナリオを示す。
【図８Ｊ−１】[0058]幾つかの実施態様による、最も一般に使用される演算の多くの属性を示す。
【図８Ｊ−２】[0058]幾つかの実施態様による、最も一般に使用される演算の多くの属性を示す。
【図８Ｊ−３】[0058]幾つかの実施態様による、最も一般に使用される演算の多くの属性を示す。
【図８Ｋ】[0059]幾つかの実施態様によるフロー及び対応する実行プロセスを示す。
【図８Ｌ】[0059]幾つかの実施態様によるフロー及び対応する実行プロセスを示す。
【図８Ｍ】[0060]幾つかの実施態様による、全体フローの実行が、入力ノード及び出力ノードにおける暗示された物理モデルで開始されることを示す。
【図８Ｎ】[0061]幾つかの実施態様による、部分フローの実行が、結果を有する物理モデルをマテリアライズすることを示す。
【図８Ｏ】[0062]幾つかの実施態様による、前の結果に基づいてフローの部分を実行することを示す。
【図８Ｐ】[0063]幾つかの実施態様によるピン止めノード８６０を有するフローの評価を示す。
【図８Ｑ】[0063]幾つかの実施態様によるピン止めノード８６０を有するフローの評価を示す。
【図９】[0064]幾つかの実施態様による流れ図の一部を示す。
【発明を実施するための形態】
【００３７】
[0065]これより実施態様を参照し、実施態様の例は添付図面に示されている。以下の説明では、本発明の完全な理解を提供するために、多くの具体的な詳細が記載される。しかしながら、これらの具体的な詳細を必要とせずに本発明が実施可能であることが当業者には明かである。
【００３８】
実施態様の説明
[0066]図１は、インタラクティブデータ分析のグラフィカルユーザインターフェース１００を示す。ユーザインターフェース１００は、幾つかの実施態様によるデータタブ１１４及び分析タブ１１６を含む。データタブ１１４が選択されると、ユーザインターフェース１００は、スキーマ情報領域１１０を表示し、スキーマ情報領域１１０はデータペインとも呼ばれる。スキーマ情報領域１１０は、データ視覚の構築に選択され使用し得る名前付きデータ要素（例えば、フィールド名）を提供する。幾つかの実施態様では、フィールド名のリストは、次元グループ（例えば、カテゴリデータ）及び計量グループ（例えば、数量）に分けられる。幾つかの実施態様は、パラメータリストも含む。分析タブ１１６が選択されると、ユーザインターフェースは、データ要素（図示せず）の代わりに分析機能のリストを表示する。
【００３９】
[0067]グラフィカルユーザインターフェース１００は、データ視覚化領域１１２も含む。データ視覚化領域１１２は、列シェルフ領域１２０及び行シェルフ領域１２２等の複数のシェルフ領域を含む。これらは列シェルフ１２０及び行シェルフ１２２とも呼ばれる。ここに示されるように、データ視覚化領域１１２は、視覚的グラフィックを表示する大きなスペースも有する。データ要素はまだ選択されてないため、スペースには最初、視覚的グラフィックがない。幾つかの実施態様では、データ視覚化領域１１２は、シートと呼ばれる複数のレイヤを有する。
【００４０】
[0068]図２は、幾つかの実施態様による、グラフィカルユーザインターフェース１００を表示することができる計算デバイス２００を示すブロック図である。計算デバイスは、データ準備（「データ準備（data prep）」）アプリケーション２５０により使用することもできる。計算デバイス２００の様々な例には、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、並びにディスプレイ及びデータ視覚化アプリケーション２２２を実行可能なプロセッサを有する他の計算デバイスがある。計算デバイス２００は通常、メモリ２１４に記憶されたモジュール、プログラム、及び／又は命令を実行し、それにより、処理演算を実行する１つ又は複数の処理ユニット／コア（ＣＰＵ）２０２と、１つ又は複数のネットワーク又は他の通信インターフェース２０４と、メモリ２１４と、これらの構成要素を相互接続する１つ又は複数の通信バス２１２とを含む。通信バス２１２は、システム構成要素を相互接続し、システム構成要素間の通信を制御する回路を含み得る。
【００４１】
[0069]計算デバイス２００は、表示デバイス２０８及び１つ又は複数の入力デバイス又は機構２１０を含むユーザインターフェース２０６を含む。幾つかの実施態様では、入力デバイス／機構はキーボードを含む。幾つかの実施態様では、入力デバイス／機構は「ソフト」キーボードを含み、「ソフト」キーボードは、必要に応じて表示デバイス２０８に表示され、ディスプレイ２０８に表示された「キー」をユーザが「押下」できるようにする。幾つかの実施態様では、ディスプレイ２０８及び入力デバイス／機構２１０は、タッチスクリーンディスプレイ（タッチセンシティブディスプレイとも呼ばれる）を含む。
【００４２】
[0070]幾つかの実施態様では、メモリ２１４は、ＤＲＡＭ、ＳＲＡＭ、ＤＤＲ  ＲＡＭ、又は他のランダムアクセス固体状態メモリデバイス等の高速ランダムアクセスメモリを含む。幾つかの実施態様では、メモリ２１４は、１つ又は複数の磁気ディスク記憶装置、光ディスク記憶装置、フラッシュメモリデバイス、又は他の不揮発性固体状態記憶装置等の不揮発性メモリを含む。幾つかの実施態様では、メモリ２１４は、ＣＰＵ２０２からリモートに配置された１つ又は複数の記憶装置を含む。メモリ２１４、又は代替としてメモリ２１４内の不揮発性メモリデバイスは、非一時的コンピュータ可読記憶媒体を含む。幾つかの実施態様では、メモリ２１４又はメモリ２１４のコンピュータ可読記憶媒体は、以下のプログラム、モジュール、及びデータ構造、又はそのサブセットを記憶する：
・様々な基本システムサービスを処理し、ハードウェア依存タスクを実行する手順を含むオペレーティングシステム２１６；
・１つ又は複数の通信ネットワークインターフェース２０４（有線又は無線）及びインターネット、他の広域ネットワーク、ローカルエリアネットワーク、大都市圏ネットワーク等の１つ又は複数の通信ネットワークを介して、計算デバイス２００を他のコンピュータ及びデバイスに接続するために使用される通信モジュール２１８；
・ユーザがネットワークを介してリモートコンピュータ又はデバイスと通信できるようにするウェブブラウザ２２０（又はウェブページを表示可能な他のアプリケーション）；
・視覚的グラフィックを構築するためにユーザにグラフィカルユーザインターフェース１００を提供するデータ視覚化アプリケーション２２２。例えば、ユーザは、１つ又は複数のデータソース２４０（計算デバイス２００に記憶されていることもあれば、リモートに記憶されていることもある）を選択し、データソースからデータフィールドを選択し、選択されたフィールドを使用して、視覚的グラフィックを定義する。幾つかの実施態様では、ユーザが提供する情報は、視覚化仕様２２８として記憶される。データ視覚化アプリケーション２２２は、データ視覚化生成モジュール２２６を含み、このモジュールは、ユーザ入力（例えば、視覚化仕様２２８）をとり、対応する視覚化グラフィック（「データ視覚化」又は「データビズ（data viz）」とも呼ばれる）を生成する。データ視覚化アプリケーション２２２は次に、生成された視覚的グラフィックをユーザインターフェース１００に表示する。幾つかの実施態様では、データ視覚化アプリケーション２２２は、スタンドアロンアプリケーション（例えば、デスクトップアプリケーション）として実行される。幾つかの実施態様では、データ視覚化アプリケーション２２２は、ウェブサーバにより提供されるウェブページを使用して、ウェブブラウザ２２０又は別のアプリケーション内で実行される；及び
・データ視覚化アプリケーション２２２により使用されるゼロ以上のデータベース又はデータソース２４０（例えば、第１のデータソース２４０−１及び第２のデータソース２４０−２）。幾つかの実施態様では、データソースは、スプレッドシートファイル、ＣＳＶファイル、ＸＭＬファイル、若しくはフラットファイルとして記憶され、又は関係データベースに記憶される。
【００４３】
[0071]幾つかの場合、計算デバイス２００はデータ準備アプリケーション２５０を記憶し、データ準備アプリケーション２５０は、続く分析（例えば、データ視覚化アプリケーション２２２による）に向けてデータを分析しメッセージングするのに使用することができる。図３Ｂは、データ準備アプリケーション２５０により使用されるユーザインターフェース２５１の一例を示す。データ準備アプリケーション２５０は、より詳細に後述するように、ユーザがフロー３２３を構築できるようにする。
【００４４】
[0072]上記識別した実行可能モジュール、アプリケーション、又は複数の組の手順のそれぞれは、上述したメモリデバイスの１つ又は複数に記憶し得、上述した機能を実行する１組の命令に対応する。上記識別したモジュール又はプログラム（すなわち、命令セット）は、別個のソフトウェアプログラム、手順、又はモジュールとして実装される必要はなく、したがって、様々な実施態様では、これらのモジュールの様々なサブセットは、結合又は他の方法で再編成し得る。幾つかの実施態様では、メモリ２１４は、上記識別されたモジュール及びデータ構造のサブセットを記憶する。さらに、メモリ２１４は、上述されていない追加のモジュール又はデータ構造を記憶し得る。
【００４５】
[0073]図２は計算デバイス２００を示すが、図２は、本明細書に記載された実施態様の構造的概略としてではなく、存在し得る様々な特徴の機能的説明としてより意図される。実際には、当業者には認識されるように、別個に示されている項目は、結合することができ、幾つかの項目は分離することができる。
【００４６】
[0074]図３Ａ及び図３Ｂは、幾つかの実施態様による、データを準備するユーザインターフェースを示す。これらの実施態様では、別個の機能を有する少なくとも５つの領域がある。図３Ａは、メニューバー領域３０１、左側ペイン３０２、フローペイン３０３、プロファイルペイン３０４、及びデータペイン３０５としてこれを概念的に示す。幾つかの実施態様では、プロファイルペイン３０４は、スキーマペインとも呼ばれる。幾つかの実施態様では、「左側ペイン」３０２の機能は、メニューペイン３０１の下又はデータペイン３０５の下等の代替のロケーションにある。
【００４７】
[0075]このインターフェースは、ユーザが何をする必要があるかを見て理解するのに役立つ複数の合理化され調整されたビューをユーザに提供する。この新規のユーザインターフェースは、動作をとるのみならず、どの動作をとる必要があるかを発見するのにも役立つフロー及びデータの複数のビューをユーザに提示する。フローペイン３０３における流れ図は、動作を組み合わせて要約し、フローをより読みやすくし、プロファイルペイン３０４及びデータペイン３０５における実際のデータのビューと調整される。データペイン３０５は、論理フローにおけるあらゆるポイントでのデータの代表サンプルを提供し、プロファイルペインは、データのドメインのヒストグラムを提供する。
【００４８】
[0076]幾つかの実施態様では、メニューバー３０１は、新しいデータフロー仕様を作成し、データフロー仕様を保存し、前に作成されたデータフロー仕様をロードするオプションを有するファイルメニューを有する。幾つかの場合、フロー仕様はフローと呼ばれる。フロー仕様は、１つ又は複数のデータソースからの入力データを操作して、ターゲットデータセットを作成する仕方を記述する。ターゲットデータセットは通常、データ視覚化アプリケーションを使用した続くデータ分析で使用される。
【００４９】
[0077]幾つかの実施態様では、左側ペイン３０２は、最近のデータソース接続のリスト及び新しいデータソースに接続するボタンを含む。
【００５０】
[0078]幾つかの実施態様では、フローペイン３０３は、フロー仕様の視覚的表現（流れ図又はフロー）を含む。幾つかの実施態様では、フローは、データソース、実行される演算、及びフローのターゲット出力を示すノード／リンク図である。
【００５１】
[0079]幾つかの実施態様は、宣言的クエリとしてフローの部分を処理することにより、フローの柔軟な実行を提供する。すなわち、ユーザにあらゆる計算詳細を指定させるのではなく、ユーザは目的（例えば、入力及び出力）を指定する。フローを実行するプロセスは、プランを最適化して、性能を改善する実行戦略を選ぶ。実施態様はまた、実行を制御するために、ユーザがこの挙動を選択的に阻止できるようにもする。
【００５２】
[0080]幾つかの実施態様では、プロファイルペイン３０４は、フローペイン３０３に、選択されたノードのスキーマ及び関連する統計及び／又は視覚化を表示する。幾つかの実施態様は、複数のノードの同時選択をサポートするが、他の実施態様は、一度に１つのみのノードの選択をサポートする。
【００５３】
[0081]幾つかの実施態様では、データペイン３０５は、選択されたノードの行レベルデータをフローペイン３０３に表示する。
【００５４】
[0082]幾つかの実施態様では、ユーザは、メニューバーにおける「ファイル−＞新規フロー」オプションを使用して新しいフローを作成する。ユーザは、データソースをフローに追加することもできる。幾つかの場合、データソースは関係データベースである。幾つかの場合、１つ又は複数のデータソースは、ＣＳＶファイル又はスプレッドシートファイル等のファイルベースである。幾つかの実施態様では、ユーザは、左側ペイン３０２におけるファイル接続アフォーダンスを使用して、ファイルベースのソースをフローに追加する。これにより、ユーザにファイルを選ぶように促すファイルダイアログが開く。幾つかの実施態様では、左側ペイン３０２はまた、データベース接続アフォーダンスも含み、これにより、ユーザは、データベース（例えば、ＳＱＬデータベース）に接続することができる。
【００５５】
[0083]ユーザが、フローペイン３０３においてノード（例えば、テーブル）を選択すると、そのノードのスキーマがプロファイルペイン３０４に表示される。幾つかの実施態様では、プロファイルペイン３０４は、フィールドのデータ値の分布（例えば、ヒストグラム又は円グラフとして）等の統計又は視覚化を含む。フローペイン３０３において複数のノードの選択が可能な実施態様では、選択された各ノードのスキーマがプロファイルペイン３０４に表示される。
【００５６】
[0084]加えて、フローペイン３０３においてノードが選択されると、そのノードのデータがデータペイン３０５に表示される。データペイン３０５は通常、データを行及び列として表示する。
【００５７】
[0085]実施態様は、フローペイン３０３、プロファイルペイン３０４、又はデータペイン３０５を使用してフローの編集を容易にする。例えば、幾つかの実施態様は、これらの３つのペインの任意のペインでノード／テーブルの右クリック動作を可能にし、そのテーブル内の既存の列にわたるスカラー計算に基づいて新しい列を追加できるようにする。例えば、スカラー演算は、３つの数値列の和を計算する数学的演算、文字列である２つの列からの文字列データを連結する文字列演算、又は文字列の列をデータ列に変換する（データがデータソースにおいて文字列として符号化されていた場合）変換演算であることができる。幾つかの実施態様では、右クリックメニュー（フローペイン３０３、プロファイルペイン３０４、又はデータペイン３０５におけるテーブル／ノードからアクセスされる）は、「計算されたフィールドを作成・・・」するオプションを提供する。このオプションを選択すると、計算を作成するダイアログが表示される。幾つかの実施態様では、計算は、スカラー計算（例えば、集計、カスタム詳細レベル計算、及びテーブル計算を除外する）に限定される。新しい列が作成されると、ユーザインターフェースは、計算されたノードをフローペイン３０３に追加し、新しいノードをその前身に接続し、この新しいノードを選択する。幾つかの実施態様では、流れ図におけるノードの数が大きくなるにつれて、フローペイン３０３はスクロールボックスを追加する。幾つかの実施態様では、流れ図におけるノードを一緒にグループ化してラベルを付すことができ、これは階層的に表示される（例えば、上位フローをまず示し、掘り下げて、選択されたノードの詳細を見る）。
【００５８】
[0086]ユーザはまた、フローペイン３０３、プロファイルペイン３０４、又はデータペイン３０５と対話することにより、列を削除することもできる（例えば、列を右クリックし、「列の削除」オプションを選ぶ。列を削除すると、ノードがフローペイン３０３に追加され、新しいノードを適宜接続し、新しいノードを選択することに繋がる。
【００５９】
[0087]フローペイン３０３において、ユーザは、ノードを選択し、「名前を付けて出力（Output As）」を選び、新しい出力データセットを選ぶことができる。幾つかの実施態様では、これは右クリックで実行される。これにより、ユーザにターゲットファイル名及びディレクトリ（又はデータベース及びテーブルの名前）を選択させるファイルダイアログが表示される。これを行うと、新しいノードがフローペイン３０３に追加されるが、実際にターゲットデータセットを作成はしない。幾つかの実施態様では、ターゲットデータセットは、データを含む第１のファイル（Tableauデータ抽出又はＴＤＥ）と、データファイルをポイントする対応するインデックス又はポインタエントリ（Tableauデータソース又はＴＤＳ）とを含む２つの構成要素を有する。
【００６０】
[0088]実際の出力データファイルは、フローが実行されたとき、作成される。幾つかの実施態様では、ユーザは、メニューバー３０１から「ファイル−＞フロー実行」を選ぶことによりフローを実行する。なお、１つのフローは複数の出力データファイルを生成することができる。幾つかの実施態様では、流れ図は、実行する際、視覚的フィードバックを提供する。
【００６１】
[0089]幾つかの実施態様では、メニューバー３０１は、「ファイル」メニューに、ユーザがフローを保存できるようにする「保存」又は「名前を付けて保存」するオプションを含む。幾つかの実施態様では、フローは「.loom」ファイルとして保存される。このファイルは、ロード時、フローを再作成するのに必要なあらゆるものを含む。フローが保存される場合、「ファイル」メニューにおける「ロード」のメニューオプションを使用して、ファイルを後にリロードすることができる。これにより、ユーザに前のフローをロードさせるファイルピッカーダイアログが表示される。
【００６２】
[0090]図３Ｂは、各ペインにおけるユーザインターフェース要素を示す、データを準備するためのユーザインターフェースを示す。メニューバー３１１は、ファイルメニュー及び編集メニュー等の１つ又は複数のメニューを含む。編集メニューが利用可能であるが、フローへのより多くの変更は、フローペイン３１３、プロファイルペイン３１４、又はデータペイン３１５と対話することによって実行される。
【００６３】
[0091]幾つかの実施態様では、左側ペイン３１２は、データを見つけデータに接続するアフォーダンスを含むデータソースパレット／セレクタを含む。コネクタの組は、キューブを含め、抽出のみコネクタを含む。実施態様は、サポートする任意のデータソースにカスタムＳＱＬ式を発行することができる。
【００６４】
[0092]左側ペイン３１２はまた、フローに配置することができる演算を表示する演算パレットも含む。これは、任意の結合（任意のタイプであり、様々な述語を有する）、和結合、ピボット、リネーム、及び列制限、スカラー計算投影、フィルタ、集計、データ型変換、データ解析、合体、統合、分割、集計、値置換、及びサンプリングを含む。幾つかの実施態様はまた、集合の作成（例えば、データフィールドのデータ値を集合に区分）ビニング（例えば、データフィールドの数値データ値を１組の範囲にグループ化）、及びテーブル計算（例えば、行中のデータ値のみならず、テーブル中の他のデータ値にも依存する各行のデータ値（例えば、合計のうちの割合）を計算）の演算もサポートする。
【００６５】
[0093]左側ペイン３１２はまた、現在のフローに全体的又は部分的に組み込むことができる他のフローのパレットも含む。これにより、ユーザは、フローの構成要素を新しいフローの作成に再使用することができる。例えば、１０のステップの組合せを使用して入力の特定のタイプを除去するフローの一部が作成された場合、その１０ステップフロー部分は、同じフロー又は完全に別のフローに保存し再使用することができる。
【００６６】
[0094]フローペイン３１３は、現在のフローの視覚的表現（例えば、ノード／リンク流れ図）３２３を表示する。フローペイン３１３は、プロセスを文書化する役割を果たすフローの全体像を提供する。多くの既存の製品では、フローは過度に複雑であり、理解を妨げる。開示される実施態様は、ノードを合体し、全体フローをより単純且つより簡潔に保つことによって理解を促進する。上述したように、ノードの数が増えるにつれて、実施態様は通常、スクロールボックスを追加する。スクロールバーの必要性は、複数の関連ノードを合体して、コンテナノードとも呼ばれるスーパーノードにすることによって低減する。これにより、ユーザは、フロー全体をより概念的に見ることができ、必要な場合のみ詳細を掘り起こすことができる。幾つかの実施態様では、「スーパーノード」が拡張すると、フローペイン３１３は、スーパーノード内のノードのみを示し、フローペイン３１３は、フローのどの部分が表示されているかを識別する見出しを有する。実施態様は通常、複数の階層レベルを可能にする。複雑なフローは、幾つかのレベルのノードネストを含む傾向がある。
【００６７】
[0095]上述したように、プロファイルペイン３１４は、フローペイン３１３において現在選択されているノード（又は複数のノード）におけるデータについてのスキーマ情報を含む。ここに示されるように、スキーマ情報は、各フィールドのデータ分布のヒストグラム３２４等のデータについての統計情報を提供する。ユーザは、プロファイルペインと直接対話して、フロー３２３を変更することができる（例えば、データフィールドを選択して、そのデータフィールドの値に基づいてデータの行をフィルタリングすることにより）。プロファイルペイン３１４はまた、現在選択されているノード（又は複数のノード）についての関連データ及びユーザの仕事をガイドする視覚化もユーザに提供する。例えば、ヒストグラム３２４は、各列のドメインの分布を示す。幾つかの実施態様は、ブラシを使用して、これらのドメインが互いといかに相互作用するかを示す。
【００６８】
[0096]一例はここで、ユーザがフロー中のデータを直接操作できるようにすることにより、プロセスが典型的な実施態様といかに異なるかを示す。データの特定の行をフィルタリングして除去する２つの代替の方法を考える。この場合、ユーザは、カリフォルニアを考慮から除外したい。典型的なツールを使用する場合、ユーザは、「フィルタ」ノードを選択し、フィルタをフローの特定のロケーションに配置し、次に、ダイアログボックスを表示させて、「state_name<>’CA’」等の計算式を入力する。ここで開示される実施態様では、ユーザはプロファイルペイン３１４（例えば、フィールド値’ＣＡ’及びいくつの行がそのフィールド値を有するかを表示する）及びデータペイン３１５（例えば、state_nameの値として’ＣＡ’を有する個々の行）においてデータ値を見ることができる。幾つかの実施態様では、ユーザは、プロファイルペイン３１４（又はデータペイン３１５）における州名リスト中の「ＣＡ」を右クリックし、ドロップダウンから「除外」を選ぶことができる。ユーザは、データと相互作用するフロー要素ではなく、データ自体と対話する。実施態様は、計算、結合、和結合、集計等にも同様の機能を提供する。本手法の別の利点は、結果が即座であることである。「ＣＡ」がフィルタリングで除外される場合、フィルタは即座に適用される。演算が完了までにいくらかの時間がかかる場合、演算は非同期で実行され、ジョブがバックグラウンドで実行されている間、ユーザは仕事を続けることが可能である。
【００６９】
[0097]データペイン３１５は、フローペイン３１３において選択された１つ又は複数のノードに対応するデータの行を表示する。各列３１５は、データフィールドの１つに対応する。ユーザは、データペイン中のデータと直接対話して、フローペイン３１３中のフロー３２３を変更することができる。ユーザは、データペインと直接対話して、個々のフィールド値を変更することもできる。幾つかの実施態様では、ユーザが１つのフィールド値に変更を行う場合、ユーザインターフェースは、ユーザが直前に変更した値に値（又はパターン）が一致する同列中の他の全ての値に同じ変更を適用する。例えば、ユーザが州データ列中のあるフィールドの「ＷＡ」を「ワシントン」に変更した場合、幾つかの実施態様は、同列中の他の全ての「ＷＡ」値を「ワシントン」に更新する。幾つかの実施態様は更に、列中のあらゆる州の略名を完全な州名で置換する（例えば、「ＯＲ」を「オレゴン」で置換する）ように列を更新する。幾つかの実施態様では、ユーザは、大域的な変更を列全体に適用する前、確認するように促される。幾つかの実施態様では、１つの列中の１つの値への変更は、他の列にも同様に適用することができる（自動的に又は疑似自動的に）。例えば、データソースは、居住地の州及び課金する州の両方を含み得る。その場合、州をフォーマットする変更は、両方に適用することができる。
【００７０】
[0098]データペイン３１５におけるデータのサンプリングは、有価値な情報をユーザに提供するために選択される。例えば、幾つかの実施態様は、データフィールドの全範囲の値（外れ値を含む）を表示する行を選択する。別の例として、ユーザが、２つ以上のデータテーブルを有するノードを選択した場合、幾つかの実施態様は、２つのテーブルの結合を支援する行を選択する。データペイン３１５に表示される行は、２つのテーブル間で一致する行及び一致しない行の両方を表示するように選択される。これは、結合にどのフィールドを使用するかを判断し、且つ／又はどのタイプの結合を使用すべきか（例えば、内部、左外部、右外部、又は完全外部）の判断に有益であることができる。
【００７１】
[0099]図３Ｃは、ユーザインターフェースに示される特徴の幾つか及び特徴により何が示されるかを示す。図３Ｂにおいて前出したように、流れ図３２３は常にフローペイン３１３に表示される。プロファイルペイン３１４及びデータペイン３１５も常に示されるが、これらのペインの内容は、１つ又は複数のどのノードがフローペイン３１３において選択されるかに基づいて変わる。幾つかの場合、フローペイン３１３においてノードを選択すると、１つ又は複数のノード固有ペイン（図３Ａ又は図３Ｂに示されず）が表示される。表示されると、ノード固有ペインは、他のペインに加えて存在する。幾つかの実施態様では、ノード固有ペインは、移動可能な浮動ポップアップとして表示される。幾つかの実施態様では、ノード固有ペインは、ユーザインターフェース内の固定ロケーションに表示される。上述したように、左側ペイン３１２は、データソースを選択又は開くデータソースパレット／チューザーと、流れ図３２３に適用することができる演算を選択するための演算パレットとを含む。幾つかの実施態様はまた、ユーザが別のフローの全て又は部分を現在のフロー３２３にインポートできるようにする「他のフローパレット」も含む。
【００７２】
[00100]流れ図３２３内の異なるノードは、異なるタスクを実行し、したがって、ノード内部情報は異なる。加えて、幾つかの実施態様は、ノードが選択されているか否かに応じて異なる情報を表示する。例えば、選択されていないノードは、単純な説明又はラベルを含み、一方、選択されているノードはより詳しい情報を表示する。幾つかの実施態様は、演算のステータスも表示する。例えば、幾つかの実施態様は、ノードの演算が実行されたか否かに応じて、流れ図３２３内のノードを異なるように表示する。加えて、演算パレット内で、幾つかの実施態様は、現在選択されているノードとの併用に利用可能であるか否かに応じて、演算を異なるように表示する。
【００７３】
[00101]流れ図３２３は、データがいかに処理されているかを理解する容易で視覚的な方法を提供し、ユーザにとって論理的であるように編成された状態にプロセスを保つ。ユーザはフローペイン３１３において流れ図３２３を直接編集することができるが、演算への変更は通常、より即座に行われ、プロファイルペイン３１４又はデータペイン３１５におけるデータ又はスキーマに対して直接動作する（例えば、プロファイルペイン内のデータフィールドについての統計を右クリックして、フローに列を追加又はフローから列を削除する）。
【００７４】
[00102]あらゆる些細な演算についてノードを表示するのではなく、ユーザは、演算を一緒により少数のより有意なノードにグループ化することが可能である。例えば、結合に続き、２つの列を削除することは、３つの別個のノードの代わりに１つのノードで実施することができる。
【００７５】
[00103]フローペイン３１３内で、ユーザは、以下を含め、様々なタスクを実行することができる。
・ノード選択の変更。これは、どのデータがユーザインターフェースの残りの部分に表示されるかを決める。
・フロー演算をピン止め。これにより、ユーザは、フローの何らかの部分が最初に生じなければならず、順序を変えることはできないことを指定することができる。
・分割及び結合演算。ユーザは、何が行われているかの論理モデルに合うように演算を容易に再編成することができる。例えば、ユーザは、多くの演算及び特殊な事例を含むあるノードを「病院コード正規化」と呼びたいことがある。ユーザはまず、個々の演算を作成し、次に、個々の演算を表すノードを合体して、スーパーノード「病院コード正規化」にすることができる。逆に、多くの異なる演算を含むノードを作成した後、ユーザは、演算の１つ又は複数を分割することを選び得る（例えば、より一般的に再使用することができるノードを作成するために）。
【００７６】
[00104]プロファイルペイン３１４は、変換の結果が、ユーザが予期したものであるか否かをユーザが理解する迅速な方法を提供する。外れ値及び不正確な値は通常、ノード内の他の値との比較に基づいて及び他のノード内の値の比較の両方に基づいて、視覚的に「飛び出す」。プロファイルペインは、問題が不正確な変換に起因するか、それとも粗悪データに起因するかに関係なく、ユーザがデータ問題を探し出すのに役立つ。ユーザが不良データを見つけるのに役立つことに加えて、プロファイルペインは、発見された問題を修正する直接対話を可能にもする。幾つかの実施態様では、プロファイルペイン３１４は非同期で更新する。ノードがフローペインにおいて選択されると、ユーザは、時が経るにつれてよりよくなる部分値（例えば、データ値分布ヒストグラム）を投入し始める。幾つかの実施態様では、プロファイルペインは、完了したか否かをユーザに警告するインジケータを含む。非常に大きなデータセットの場合、幾つかの実施態様は、サンプルデータのみに基づいてプロファイルを構築する。
【００７７】
[00105]プロファイルペイン３１４内で、ユーザは以下を含む様々なタスクを実行することができる。
・データの範囲及び相関の調査。ユーザは、プロファイルペイン３１４を使用して、直接ナビゲーションを使用して特定のデータ又は列の関係にフォーカスすることができる。
・データ又はデータ範囲のフィルタリングによる追加／削除。ユーザは、直接対話を通してフロー３２３にフィルタ演算を追加することができる。これにより、フローペイン３１３に新しいノードが作成される。
・データの変換。ユーザは、プロファイルペイン３１４と直接対話して、値をある範囲から別の範囲にマッピングすることができる。これにより、フローペイン３１３に新しいノードが作成される。
【００７８】
[00106]データペイン３１５は、ユーザが、フローから生じる行を見て変更する方法を提供する。通常、データペインは、選択されたノードに対応する行のサンプリング（例えば、数百万の行ではなく、１０行、５０行、又は１００行のサンプル）を選択する。幾つかの実施態様では、行は、様々な特徴を表示するようにサンプリングされる。幾つかの実施態様では、行は、ｎ行目毎等、統計的にサンプリングされる。
【００７９】
[00107]データペイン３１５は通常、ユーザがデータをクリーンアップする場所である（例えば、ソースデータがクリーンではない場合）。プロファイルペインのように、データペインは非同期で更新する。ノードがまず選択されると、データペイン３１５内に行が表示され始め、時が経るにつれてサンプリングはよくなる。大半のデータセットは、ここで利用可能なデータのサブセットのみを有する（データセットが小さい場合を除く）。
【００８０】
[00108]データペイン３１５内で、ユーザは、以下を含む様々なタスクを実行することができる。
・ナビゲーションのためのソート。ユーザは、列に基づいてデータペイン内でデータをソートすることができ、これはフローに影響しない。この目的は、データペインにおけるデータナビゲートを支援することである。
・ナビゲーションのためのフィルタリング。ユーザは、ビュー内にあるデータをフィルタリングすることができ、これはフローにフィルタを追加しない。
・フローへのフィルタの追加。ユーザはまた、フローに適用されるフィルタを作成することもできる。例えば、ユーザは、特定のデータフィールドの個々のデータ値を選択し、次に、その値に従ってデータをフィルタリング（例えば、その値を除外又はその値のみを包含）する行動をとることができる。この場合、ユーザ対話により、データフロー３２３において新しいノードが作成される。幾つかの実施態様では、ユーザは、１つの列中の複数のデータ値を選択し、次に、その組の選択された値に基づいてフィルタ（例えば、その組を除外又はその組のみに制限）を構築することができる。
・行データの変更。ユーザは、行を直接変更することができる。例えば、特定の行中の特定のフィールドのデータ値を３から４に変更する。
・ある値を別の値にマッピング。ユーザは、特定の列のデータ値を変更し、その特定の列でその値を有する全ての行にその変更を伝播させることができる。例えば、州を表す列全体で「Ｎ．Ｙ．」を「ＮＹ」で置換する。
・列の分割。例えば、日付が「１４−Ｎｏｖ−２０１５」のようにフォーマットされていることをユーザが見た場合、ユーザはこのフィールドを日、月、及び年の３つの別個のフィールドに分割することができる。
・列の統合。ユーザは、２つ以上の列を統合して、１つの結合された列を作成することができる。
【００８１】
[00109]ノード固有ペインは、フローにおいて選択されたノードに特定の情報を表示する。ノード固有ペインは大抵、必要ないため、ユーザインターフェースは通常、この使用のみのためのユーザインターフェースを有する領域を指定しない。代わりに、ノード固有ペインは、通常、ユーザインターフェースの他の領域の上を浮動するポップアップを使用して、必要に応じて表示される。例えば、幾つかの実施態様は、ノード固有ペインを使用して、結合、和結合、ピボット、アンピボット、Pythonスクリプトの実行、ログファイルの分析、又は表形態へのＪＳＯＮオブジェクトの変換に特定のユーザインターフェースを提供する。
【００８２】
[00110]データソースパレット／チューザーは、ユーザが、様々なデータソースからデータを持ち込めるようにする。幾つかの実施態様では、データソースパレット／チューザーは、左側ペイン３１２内にある。ユーザは、データソースパレット／チューザーを用いて、以下を含む様々なタスクを実行することができる。
・データソース接続の確立。これにより、ユーザはデータソースからデータを引き込むことができ、データソースは、ＳＱＬデータベース、ＣＳＶ若しくはスプレッドシート等のデータファイル、非関係データベース、ウェブサービス、又は他のデータソースであることができる。
・接続属性の設定。ユーザは、データソースに接続するために必要な信用情報及び他の属性を指定することができる。幾つかのデータソースの場合、属性は、特定のデータ（例えば、データベース内の特定のテーブル又はワークブックファイルからの特定のシート）の選択を含む。
【００８３】
[00111]多くの場合、ユーザは、前出のように、プロファイルペイン３１４及びデータペイン３１５とのユーザ対話に基づいてフローにおけるノードに対する演算を呼び出す。加えて、左側ペイン３１２は、ユーザが特定の演算を呼び出せるようにする演算パレットを提供する。例えば、幾つかの実施態様は、演算パレットに「Pythonスクリプト呼び出し」のオプションを含む。加えて、ユーザは、再使用したいノードを作成する場合、演算パレットで利用可能な演算として保存することができる。演算パレットは、既知の演算（ユーザ定義の演算を含む）のリストを提供し、ユーザが、ユーザインターフェースジェスチャ（例えば、ドラッグアンドドロップ）を使用して演算をフローに組み込めるようにする。
【００８４】
[00112]幾つかの実施態様は、ユーザが構築したフロー又は他の人が構築したフローを容易に再使用できるようにする他のフローパレット／チューザーを提供する。他のフローパレットは、ユーザが開始又は組み込むことができる他のフローのリストを提供する。幾つかの実施態様は、フロー全体の選択に加えて、他のフローの部分の選択をサポートする。ユーザは、ドラッグアンドドロップ等のユーザインターフェースジェスチャを使用して他のフローを組み込むことができる。
【００８５】
[00113]ノード内部は、ノードにおいて何の演算が進行中かを厳密に指定する。ユーザが、フローを「リファクタリング」又はフローをより詳細に理解できるようにするのに十分な情報がある。ユーザは、ノード内に何があるか（例えば、どの演算が実行されるか）を厳密に見ることができ、演算をそのノードから別のノードに移すことができる。
【００８６】
[00114]幾つかの実施態様は、ユーザが複数のフローを一緒に１つの「プロジェクト」又は「ワークブック」にグループ化できるようにするプロジェクトモデルを含む。複雑なフローの場合、ユーザは、全体フローをより理解可能な構成要素に分解し得る。
【００８７】
[00115]幾つかの実施態様では、演算ステータスが左側ペイン３１２に表示される。多くの演算はバックグラウンドにおいて非同期で実行されるため、演算ステータス領域は、どの演算が進行中であるか及び進行ステータス（例えば、１％完了、５０％完了、又は１００％完了）をユーザに示す。演算ステータスは、バックグラウンドでどの演算が進行中であるかを示し、ユーザが演算をキャンセルできるようにし、ユーザがデータをリフレッシュできるようにし、ユーザが部分結果を完了まで実行させられるようにする。
【００８８】
[00116]図３Ｂにおけるフロー３２３等のフローは、元のデータソースからターゲットデータセットへの変換を経て流れる行のパイプラインを表す。例えば、図３Ｄは単純な例のフロー３３８を示す。このフローは、車両が関わる交通事故に基づく。関連データは、ＳＱＬデータベース内のアクシデントテーブル及び車両テーブルに記憶される。このフローでは、第１のノード３４０は、アクシデントテーブルからデータを読み出し、第２のノード３４４は、車両テーブルからデータを読み出す。この例では、アクシデントテーブルは正規化され（３４２）、１つ又は複数のキーフィールドが識別される（３４２）。同様に、車両データの１つ又は複数のキーフィールドも識別される（３４６）。２つのテーブルは、共有キーを使用して結合され（３４８）、その結果はターゲットデータセットに書き込まれる（３５０）。アクシデントテーブル及び車両テーブルが両方とも、同じＳＱＬデータベース内にある場合、代替は、２つのテーブルからのデータを１つのクエリで読み出す１つのノードを作成することである。クエリは、どのフィールドを選択するか及びデータを１つ又は複数のフィルタによって制限すべきか否か（例えば、ＷＨＥＲＥ句）を指定することができる。幾つかの場合、テーブルの結合に使用されるデータを変更する必要があるため、データは、フロー３３８に示されるように検索され、ローカルに結合される。例えば、車両テーブルの主キーは整数データ型を有し得、一方、アクシデントテーブルは、ゼロパディングされた文字フィールドを使用する関与車両を指定し得る。
【００８９】
[00117]図３Ｄに示されるようなフロー要約は、大半のＥＴＬ及びデータ準備製品で一般的である。このフローモデルは、変換への論理制御をユーザに与える。そのようなフローは一般に、命令プログラムとして解釈され、プラットフォームによる変更があるとしてもごくわずかな状態で実行される。すなわち、ユーザは、実行への物理的制御を定義する特定の詳細を提供している。例えば、このフローで機能する典型的なＥＴＬシステムは、指定されたように厳密にデータベースから２つのテーブルをプルダウンし、指定されたようにデータを整形し、ＥＴＬエンジンにおいてテーブルを結合し、次に、結果をターゲットデータセットに書き込む。物理的なプランへの完全制御は有用であることができるが、性能を改善する（例えば、ＳＱＬサーバで先のフローを実行する）ようにプランを変更又は最適化するシステムの能力を排除する。大抵、顧客は、実行詳細の制御を必要とせず、したがって、本明細書における実施態様は、演算を宣言的に表現できるようにする。
【００９０】
[00118]本明細書における幾つかの実施態様は、完全宣言的クエリから命令プログラムまで及ぶ。幾つかの実施態様は、内部分析クエリ言語（ＡＱＬ）及び連合評価器（Federated Evaluator）を利用する。デフォルトにより、フローは、可能な場合は常に、１つの宣言的クエリ仕様として解釈される。この宣言的クエリは、ＡＱＬに変換され、クエリ評価器に渡され、クエリ評価器は最終的に、演算を分割し、分配し、実行する。図３Ｄにおける上記例では、フロー全体は１つのクエリとして投じることができる。両テーブルが同じサーバから来る場合、この演算全体はリモートデータベースにプッシュされ、大きな性能利益を達成する可能性が高い。柔軟性は、フロー実行の最適化及び分配を可能にするのみならず、ライブデータソース（例えば、データウェアハウスのみならず、取引データベースからの）に対するクエリの実行も可能にする。
【００９１】
[00119]ユーザは、フローの実際の実行順序を制御したい（例えば、性能を理由として）場合、演算をピン止めすることができる。ピン止めは、フロー実行モジュールに、プラン内でそのポイントを超えて演算を動かすべきではないことを教える。幾つかの場合、ユーザは、順序への極端な制御を一時的に（例えば、フローの創作又はデバッグ中）実行したいことがある。この場合、全ての演算をピン止めすることができ、フローは、ユーザ指定の厳密な順序で実行される。
【００９２】
[00120]なお、図３Ｅに示されるように、全てのフローが１つのＡＱＬクエリに分解可能であるわけではない。このフローでは、１時間毎に実行される（３６２）１時間毎のドロップ３５２があり、データは、ステージングデータベースに追加される（３５６）前、正規化される（３５４）。次に、毎日（３６４）、ステージングデータベースからのデータは集計され（３５８）、ターゲットデータセットとして書き出される（３６０）。この場合、１時間毎のスケジュール及び１日毎のスケジュールは、別個のままである必要がある。
【００９３】
[00121]図４Ａ〜図４Ｖは、幾つかの実施態様による、フローに結合を追加する幾つかの態様を示す。図４Ａに示されるように、ユーザインターフェースは、左ペイン３１２、フローエリア３１３、プロファイルエリア３１４、及びデータグリッド３１５を含む。図４Ａ〜図４Ｖの例では、ユーザはまず、左ペイン３１２内の接続パレットを使用してＳＱＬデータベースに接続する。この場合、データベースは、全米幹線道路交通安全局（National Highway Traffic Safety Administration）により提供された死傷分析報告システム（ＦＡＲＳ）（Fatality Analysis Reporting System）データを含む。図４Ｂに示されるように、ユーザは、利用可能なテーブルのリスト４０２から「アクシデント」テーブル４０４を選択する。図４Ｃでは、ユーザは、アクシデントテーブルアイコン４０６をフローエリア３１３にドラッグする。テーブルアイコン４０６がフローエリア３１３にドロップされると、図４Ｄに示されるように、テーブルを表すノード４０８が作成される。この時点で、アクシデントテーブルのデータはロードされ、アクシデントテーブルのプロファイル情報が、プロファイルペイン３１４に表示される。
【００９４】
[00122]プロファイルペイン３１４は、図４Ｅに示されるように、州列４１０を含め、各列の分布データを提供する。幾つかの実施態様では、プロファイルペイン内のデータの各列は、データの分布を示すヒストグラムを表示する。例えば、カリフォルニア、フロリダ、及びジョージアでは、多数のアクシデントがあり、一方、デラウェアでは少数のアクシデントがある。プロファイルペインは、各列の上部にあるキーアイコン４１２を使用して、キー又は部分キーである列の識別を容易にする。図４Ｆに示されるように、幾つかの実施態様ユーザは、列がデータベースキーであるか、それともシステムキー４１４であるか、それとも「略」システムキー４１６であるかを指定する３つの異なるアイコン。幾つかの実施態様では、列は、１つ又は複数の他の列と併せた列がシステムキーである場合、略システムキーである。幾つかの実施態様では、列は、列がシステムキーである場合、且つヌル値行が除外されるとき、略システムキーである。彼の例では、「ＳＴケース」及び「ケース番号」の両方が略システムキーである。
【００９５】
[00123]図４Ｇでは、ユーザは、左ペイン３１２において「人物」テーブル４１８を選択した。図４Ｈでは、ユーザは、人物テーブル４１８をフローエリア３１３にドラッグし、人物テーブル４１８は、ドラッグされている間、可動アイコン４１９として表示される。人物テーブルアイコン４１９をフローエリア３１３にドロップした後、図４Ｉに示されるように、人物ノード４２２がフローエリアに作成される。この段階で、アクシデントノード４０８と人物ノード４２２との間に接続はない。この例では、両ノードは選択され、それにより、プロファイルペイン３１４は２つの部分に分割され、第１の部分４２０はアクシデントノード４０８のプロファイル情報を示し、第２の部分４２１は人物ノード４２２のプロファイル情報を示す。
【００９６】
[00124]図４Ｊは、フローペイン３１３及びプロファイルペイン３１４の拡大図を提供する。プロファイルペイン３１４は、結合列候補（すなわち、２つのノードからのデータを結合することが可能なもの）を示すオプション４２４を含む。このオプションを選択した後、結合候補であるデータフィールドは、図４Ｋに示されるようにプロファイルペイン３１４に示される。結合候補はこの時点で表示されているため、プロファイルペイン３１４は、結合列候補を隠すオプション４２６を表示する。この例では、プロファイルペイン３１４は、人物テーブル内の列ＳＴケースが、アクシデントテーブル内のＳＴケースフィールドと結合し得ることを示す（４３０）。プロファイルペインはまた、アクシデントテーブル内に３つの追加の結合候補があることも示し（４２８）、人物テーブル内に２つの追加の結合候補があることも示す（４３２）。図４Ｌでは、ユーザは、ヒントアイコンをクリックし（４３３）、それに応答して、図４Ｍに示されるように、プロファイルペインは２つの候補列を互いに隣接して配置する。アクシデントテーブルのＳＴケース列のヘッダ４３４はここで、人物テーブルのＳＴケース列と結合することができることを示す。
【００９７】
[00125]図４Ｎは、複数のノードのデータを結合する代替の方法を示す。この例では、ユーザは、アクシデントテーブルデータ４０８及び人口テーブルデータ４４１をフローエリア３１３にロードした。単に人口ノード４４１をアクシデントノード４０８の上にドラッグすることにより、結合が自動的に作成され、結合経験ペイン４４２が表示され、結合経験ペイン４４２により、ユーザは、結合をレビュー及び／又は変更することができる。幾つかの実施態様では、結合経験はプロファイルペイン３１４に配置され、他の実施態様では、結合経験はプロファイルペイン３１４を一時的に置換する。結合が作成されると、新しいノード４４０がフローに追加され、新しいノード４４０は、２つのノード４０８と４４１との間の接続の作成をグラフィカルに表示する。
【００９８】
[00126]結合経験４４２は、図４Ｏに示されるように、様々なアイコンを有するツールバーエリア４４８を含む。結合候補アイコン４５０が選択されると、インターフェースは、各テーブル内のどのフィールドが結合候補であるかを識別する。幾つかの実施態様は、「お気に入り」データフィールド（例えば、ユーザにより前に選択されたか、又はユーザにより前に重要として識別されたか、又は前にユーザにより概して選択された）強調表示の表示するお気に入りアイコン４５２を含む。幾つかの実施態様では、お気に入りアイコン４５２を使用して、お気に入りとして特定のデータフィールドを指名する。プロファイルペイン３１４及びデータペイン３１５では列を表示する空間が限られているため、幾つかの実施態様は、お気に入りデータフィールドについての情報を使用して、どの列がデフォルトにより表示されるかを選択する。
【００９９】
[00127]幾つかの実施態様では、「キー表示」アイコン４５４を選択することで、インターフェースに、どのデータ列が、複数のデータフィールドからなるキー又はキーの部分であるかを識別させる。幾つかの実施態様は、データ／メタデータトグルアイコン４５６を含み、このアイコンは、データについての情報を示す表示からメタデータについての情報を示す表示に表示をトグルする。幾つかの実施態様では、データは常に表示され、メタデータアイコン４５６が、データに加えてメタデータが表示されるか否かをトグルする。幾つかの実施態様は、データグリッド３１５の表示をトグルするデータグリッドアイコン４５８を含む。図４Ｏでは、データグリッドは現在、表示されており、したがって、データグリッドアイコン４５８を選択すると、データグリッドは表示されなくなる。実施態様は通常、サーチアイコン４６０も同様に含み、このアイコンはサーチウィンドウを表示させる。デフォルトにより、サーチはデータ及びメタデータの両方（例えば、データフィールド名及びフィールド内のデータ値の両方）に適用される。幾つかの実施態様は、何がサーチされるかをより厳密に指定する高度サーチのオプションを含む。
【０１００】
[00128]結合経験４４２の左側には、結合タイプ４６４の仕様を含む１組の結合制御機構がある。当技術分野で既知のように、結合は通常、左外部結合、内部結合、右外部結合、又は完全外部結合である。これらは、結合アイコン４６４によってグラフィカルに示される。現在の結合タイプは強調表示されるが、ユーザは、異なるアイコンを選択することによって結合のタイプを変更することができる。
【０１０１】
[00129]幾つかの実施態様は、結合句全体像４６６を提供し、結合句全体像４６６は、結合の両側に両方のフィールドの名前及びデータフィールドのデータ値のヒストグラムを結合の両側に表示する。結合に複数のデータフィールドがある場合、幾つかの実施態様は、関連する全てのデータフィールドを表示し、他の実施態様は、結合においてデータフィールドをスクロールするユーザインターフェース制御機構（図示せず）を含む。幾つかの実施態様はまた、全体像制御機構４６８も含み、この機構は、各テーブルからのいくつの行が、結合タイプ条件に基づいて結合されるかを示す。この制御機構内の部分を選択すると、プロファイルペイン３１４及びデータグリッド３１５に表示されるものが決まる。
【０１０２】
[00130]図４Ｐ、図４Ｑ、及び図４Ｒは、結合制御エリア４６２の代替のユーザインターフェースを示す。それぞれの場合で、結合タイプは上部に表示される。それぞれの場合で、結合に含まれるデータフィールドの視覚的表現がある。ここでは、結合に２つのデータフィールドがあり、それらはＳＴケース及び年である。これらの代替のそれぞれでは、結合された各テーブルからの行の一部をグラフィカルに示すセクションもある。図４Ｑの上部は、以下の図４Ｕに出現する。
【０１０３】
[00131]図４Ｒは、２つのテーブルがいかに関連するかを示す下部を含む。分割バー４７２は、アクシデントテーブル内の行を表し、分割バー４７４は人口テーブルを表す。中央の大きなバー４７７は、２つのテーブル間の内部結合によって接続される行を表す。現在選択されている結合タイプは左外部結合であるため、結合結果セット４７５は、人口テーブルのいかなる行にもリンクしないアクシデントテーブルの行を表す部分４７８も含む。下部には別の矩形４８０があり、これは、アクシデントテーブルのいかなる行にもリンクしない人口テーブルの行を表す。現在の結合タイプは左外部結合であるため、部分４８０は結果セット４７６に含まれない（下部矩形４８０内の行は、右外部結合又は完全外部結合に含まれる）。ユーザは、この図の任意の部分を選択することができ、選択された部分は、プロファイルペイン及びデータペインに表示される。例えば、ユーザは、「左外部部分」矩形４７８を選択し、次に、データペイン内の行を見て、それらの行がユーザの分析に関連するか否かを調べることができる。
【０１０４】
[00132]図４Ｓは、結合制御セレクタ４６４を含め、図４Ｒに示される結合制御インターフェース要素を使用した結合経験を示す。ここでは、図４Ｔの拡大図により明確に示されるように、左外部結合アイコン４８２が強調表示されている。この例では、第１のテーブルはアクシデントテーブルであり、第２のテーブルはファクタテーブルである。図４Ｕに示されるように、インターフェースは、結合された行の数４８６及び結合されなかった行の数４８８の両方を示す。この例は、結合されない多数の行を有する。ユーザは、非結合バー４８８を選択して、図４Ｖにおける表示を表示することができる。プロファイルにおけるブラシ及びデータグリッドにおけるフィルタリングを通して、ユーザは、ヌルが、左外部結合及びファクタテーブルが２０１０より前のエントリを有さないことに起因した非一致値であることの結果であることを見ることができる。
【０１０５】
[00133]開示される実施態様は、様々なシナリオを支援する多くの特徴をサポートする。特徴の多くを上述したが、以下のシナリオの幾つかは特徴を示す。
【０１０６】
シナリオ１：イベントログ収集
[00134]アレックスはＩＴで働き、彼の仕事の１つは、基盤における機械からログを収集して準備し、様々なデバッグ及びＩＴ組織での分析に使用される共有データセットを生成することである。
【０１０７】
[00135]機械はWindowsを実行し、アレックスはアプリケーションログを収集する必要がある。毎晩実行され、ログのＣＳＶエクスポートを共有ディレクトリにダンプするエージェントが既に存在し、毎日のデータは別個のディレクトリに出力され、機械名を示すフォーマットを用いて出力される。アプリケーションログからの断片を図５Ａに示す。
【０１０８】
[00136]これは幾つかの興味深い特徴を有する。
・ライン１はヘッダ情報を含む。これは、一般に該当することもあれば、該当しないこともある。
・データの各ラインは６列を有するが、ヘッダは５列を有する。
・ここで、区切り文字は明らかに「，」である。
・最後の列は、引用符付きのマルチライン文字列を使用した可能性がある。ライン３〜９が１行の全ての部分であることに留意する。また、このフィールドが、文字通り解釈すべき引用を示すために、二重二重引用符を使用することにも留意する。
【０１０９】
[00137]アレックスは、所与のディレクトリにＣＳＶファイルの全てで読み取るフローを作成し、不揃いの和結合（jagged union）を実行する（例えば、ＣＳＶファイルの少なくとも１つに存在する場合、データフィールドを作成するが、同じデータフィールドがＣＳＶファイルの２つ以上に存在する場合、そのデータフィールドの１つのみのインスタンスを作成する）。ＣＳＶ入力ルーチンは、５列での読み取りではかなりいい仕事をするが、６列目では引用で詰まり、引用を幾つかの列として読み取る。
【０１１０】
[00138]アレックスは次に、
・データペインにおいて列を選択し、それらの列を再び一緒に統合する。
・ファイル名からとった由来元の機械名を追加する。データの例において機械名を選択し、「新しい列として抽出」を選ぶことによりこれを行う。システムは、この動作からパターンを推測する。
・右クリックし、「識別子を追加」を選ぶことにより、各行に一意の識別子を生成する。
・データペインにおいて正しい列の名前及びタイプを編集する。
【０１１１】
[00139]これの全ては、データペイン３１５におけるデータへの直接動作を通して達成されるが、その結果、論理がフローペイン３１３におけるフローに挿入される。
【０１１２】
[00140]アレックスは次に、ターゲットデータリポジトリをフローペインにドラッグし、出力を結び付け（wire up）、彼のログの完全なレコードを含むことになるキャッシュにこれらのレコードを追加する。
【０１１３】
[00141]最後に、アレックスのフローは、このターゲットデータセットを照会して、前日報告した機械の組を見つけ、これを今日の機械と比較し、報告しなかった予期される機械のリストと共にアレックスに警告を出力する。
【０１１４】
[00142]なお、アレックスは、同じ結果を異なる方法で達成することができた。例えば、
・アレックスは２つの別個のフローを作成することができた：取り込みを実行するフロー及び各日の機械を前日の機械と比較し、結果を用いてアレックスに警告するフロー。
・アレックスは、１段階で取り込みを実行するフローを作成することができた。それが完了すると、アレックスは、データベースに照会して、各日を前日と比較し、アレックスに警告する第２のフローを実行することができた。
・アレックスは、入力及び出力の両方としてターゲットを有するフローを作成することができた。このフローは、取り込みを実行し、データベースへの書き込み、更に集計を実行して、その日の機械を見つけるであろう。また、ターゲットに照会して、前日の結果を取得し、比較を実行し、警告を発するであろう。
【０１１５】
[00143]アレックスは、機械が夜間、報告するはずであることを知っており、したがって、毎朝アレックスが最初にすることは、彼のフローを実行することである。次に、アレックスは、朝の残りの時間で、報告しなかった機械をチェックする。
【０１１６】
シナリオ２：ＦＡＲＳの収集及び統合
[00144]ボニーは保険会社で働いており、死傷分析報告システム（ＦＡＲＳ）データを分析の構成要素として集めたい。ＦＡＲＳデータは、ＦＴＰを介して入手可能であり、ボニーは、それを取得し全貌を知る方法を見つけ出す必要がある。ボニーは、データ準備アプリケーション２５０を使用してこれを行うと決定する。
【０１１７】
[00145]ボニーは、ＦＡＲＳが公開するフォーマットの組を見て、ＤＢＦファイルを使用すると決定する。これらのＤＢＦファイルは、ＦＴＰサイトに拡散しており、圧縮ＺＩＰアーカイブでのみ利用可能である。ボニーは、ツリービューを探索し、ダウンロードしたいファイルを選択する。データがダウンロードされているとき、ボニーはフローでの次のステップを開始する。ボニーはファイルの集まりを選択し、「抽出」を選び、これにより、ファイルを圧縮解除して、年によってラベルされた別個のディレクトリにするステップを追加する。
【０１１８】
[00146]データが来始めると、ボニーは問題を見始める：
・初年は、３つのラベル：アクシデント、人物、及び車両に対応する３つのファイルを有する。これらは後の年に存在するが、はるかに多くのテーブルも同様に存在する。
・ファイルは統一された名前を持たない。例えば、アクシデントファイルは、１９７５年〜１９８２年及び１９９４年〜２０１４年は「ａｃｃｉｄｅｎｔ．ｄｂｆ」という名前であるが、中間の年では「ａｃｃＹＹＹＹ．ｄｂｆ」（ここで、ＹＹＹＹは４桁の年である）という名前である。
・テーブル名が同じである場合であっても、それらの構造は、時間の経過に伴って幾らか変わる。新しいテーブルほど、前のデータには存在しない追加の列を含んでいる。
【０１１９】
[00147]ボニーは、全ての年に存在するアクシデントテーブルから開始する。ファイルを選び、右クリックし、「和結合」を選び、「和結合」は、不揃いな結合を実行し、列を保存する。全ての年に存在する他の３つのテーブルに対してこれを繰り返し、次に、残りのテーブルに対して繰り返す。終了すると、フローの最後の段階で、１９の別個のテーブルが生成される。
【０１２０】
[00148]ボニーがこれを有すると、データの全貌を見ようと試みる。共通結合キーは、ＳＴ＿ＣＡＳＥと呼ばれる列であるべきであるように見えるが、アクシデントテーブルのプロファイルペインを見るだけで、ボニーは、これがどの場所でもキー列であるわけではないことを見分けることができる。ＳＴ＿ＣＡＳＥはキーではなく、年をクリックすることにより、１年毎に１つのみのＳＴ＿ＣＡＳＥしかないことを容易に理解することができる。年及びＳＴ＿ＣＡＳＥは一緒に、良好な結合キーであるように見える。
【０１２１】
[00149]ボニーは人物テーブルで開始する。ボニーは、これに対して結合を実行する前、各テーブル内に年が必要であり、年が各テーブル内にない。しかし、ファイルパスは年を有するため、データペインにおいてこのデータを選択し、「新しい列として抽出」を選ぶことができる。システムは、これの正確なパターンを推測し、各行の年を抽出する。次に、フロー内の両テーブルを選択し、年列及びＳＴ＿ＣＡＳＥ列を一度に選択し、それらの列を他のテーブルにドラッグし、結合を作成する。
【０１２２】
[00150]ここで、ボニーはキーを有し、ＦＡＲＳデータをフラットにする結合を作成し続ける。終了すると、彼女のチームが使用できるように、データをＴＤＥ（Tableauデータ抽出）としてTableauサーバに公開する。
【０１２３】
シナリオ３：ＦＡＲＳクリーンアップ
[00151]コリンは、ボニーと同じ部門の別の従業員である。幾人かの人々は、ボニーのフローが生成したデータを使用しようとしているが、それには多くの不可解な値が含まれている。ボニーが他企業に転職したことが分かり、彼らはコリンに頼る。
【０１２４】
[00152]フローを見て、コリンは、全体論理を容易に見ることができるとともに、不可解な符号化データも見る。不可解なコードのルックアップテーブル（ＬＵＴ）を含む２００ページのＰＤＦマニュアルを見つけたとき、プロセスは大変であるように見える。ＰＤＦでの一例のルックアップテーブルを図５Ｂに示す。より単純なものもあれば、かなり複雑なものもある。
【０１２５】
[00153]コリンは、より重要なテーブルの幾つかから開始する。コリンは、ＰＤＦファイルにおいてテーブルを選択し、それをフローペイン３１３にペーストできることを発見する。幾つかの場合、テーブル中のデータは、全体的に正しいわけではないが、妥当な仕事をしており、コリンはデータペイン３１５において結果を手動で修正し、彼のかなりの時間を節約することができる。コリンは、作業する際、結果を即時に見る。テーブルが整列しない場合、コリンはそれを即座に見る。
【０１２６】
[00154]最終的に、コリンは、彼のチームが実行する分析に特に関連するように見える１２のＬＵＴを取得し、チームがデータを使用できるように結果を公開する。人々が特定の列についてのより多くの情報を求める場合、コリンは、追加のＬＵＴを取得するようにフローを更に改善することができる。
【０１２７】
シナリオ４：データエラーの発見
[00155]ダニエルは、メジャーなソフトウェア企業の開発者であり、ビルド時間を表すデータを見ている。ダニエルはデータのフォーマットに対して大きな制御権を有し、洗練された消費可能なＣＳＶフォーマットでデータを生成したが、彼女が作成したデータベースにそれを簡便にロードし、追加したい。
【０１２８】
[00156]データをロードする際、彼女はプロファイルビュー３１４に目を通す。何かが即座に奇妙に見えた：負の時間を有するビルドが少数ある。明らかにここに何か間違いがあり、問題をデバッグしたいが、分析のためにデータの全貌も見たい。
【０１２９】
[00157]ダニエルは、プロファイルビューにおいて負の時間を選択し、「これのみを保持（Keep only）」をクリックして、誤りのある行のみを保持する。これらをファイルにフローするターゲットを追加する。それらの生の行の使用に進み、デバッグをガイドする。
【０１３０】
[00158]フローに戻り、彼女はフィルタの直前に別の分岐を追加する。再び負の値（例えば、プロファイルペイン３１４又はデータペイン３１５において）を選択し、次に単に「削除」を押下する。これは値をヌルで置換し、ヌルは、実際の値が単に既知ではないことの良好なインジケータである。ダニエルは単純なフローの残りの部分を進め、ビルドデータをデータベースに追加し、負の値を後に調べる。
【０１３１】
シナリオ５：車両部品の追跡
[00159]アールは車の製造業者で働き、工場内の各車両及び主要部品の現在のステータスを示すデータセットの維持を受け持っている。データは、少数の運営店に報告されるが、これらの運営店は極めて大きい。何十万もの部品があり、オートメーション化された設備として、車両又は部品が工場を通って進むにつれて、各車両又は各部品で何千ものレコードが機械的に作成される。これらの運営店は、部品ステータスに何の関係もないが、他のオペレーション情報に関係する多くの記録（例えば、「弁１３４における圧力は５００ｋＰａである」）も含む。各部品の迅速で簡潔なレコードへのビジネスニーズがある。
【０１３２】
[00160]アールは、３つの関係運営店のそれぞれのテーブルをフローペイン３１３にドラッグする。それらの２つは、ログレコードを含む１つのテーブルとしてデータを記憶する。第３のテーブルは、ドラッグアンドドロップして、結合を作成することにより、アールが素早くフラット化する小さなスタースキーマを有する。
【０１３３】
[00161]次に、追加のドラッグアンドドロップを通して、アールは、テーブルの不揃いな和結合を素早く実行することが可能である。結果において、アールは列を一緒にドラッグアンドドロップすることができ、インターフェースはアールに向けて結果を合体する。
【０１３４】
[00162]部品識別番号には少し問題がある：あるシステムは値中にハイフンを有する。アールは、データペイン３１５における値の１つをとり、ハイフンを選択し、削除を押下する。インターフェースは、この列からハイフンを削除するルールを推測し、その列中の全データでハイフンを削除するルールをフローに挿入する。
【０１３５】
[00163]アールはステータスコードの大半を欲せず、その理由は、それらが彼の現在のプロジェクトに関連しないためである。アールはただ、部品に関連するステータスコードのみを欲する。ステータスコードについての情報を有するテーブルを集め、それをフローの最新ノードにドロップし、その結果、ステータスコードへの新しい結合が生成される。ここで、「ターゲットタイプ」が「部品」に等しい行のみを選択し、「これのみを保持」を選んで、他の値をフィルタリングして除外する。このフィルタリングは、プロファイルペイン３１４又はデータペイン３１５において行われる。
【０１３６】
[00164]最後に、アールは、各部品の最新の値のみを欲する。直接ジェスチャを通して、アールは、データペインにおいて日付によりデータを並べ、部品番号によってグループ化し、「トップｎ」テーブル計算を追加して、各部品の最新の更新のみをとる。
【０１３７】
[00165]アールはフローを実行し、実行に４時間かかることを発見する。しかし、アールはこれをいかにスピードアップさせることができるかを知っている。彼は、フローを実行した最後の時間を記録し、各後続実行で新しいレコードのみを組み込むことができる。しかしながら、これを行うために、累積セット内で既存の行を更新する必要があり、新しい部品を表す場合のみ行を追加する。アールは「統合」演算を必要とする。
【０１３８】
[00166]アールは部品番号を使用して、一致を識別し、一致が生じた又は生じなかったときの動作を供給する。更新論理を用いる場合、アールのフローは、実行にわずか１５分しかかからない。時間の節約により、企業は、部品が倉庫内のどこにあるか及び部品のステータスが何であるかをはるかに厳しく追跡する。
【０１３９】
[00167]次に、アールはこのジョブをサーバにプッシュし、それにより、中央でスケジュールし実行することができる。彼はまた、コマンドラインインターフェースを使用してフローを実行するデスクトップ機でスケジュールされたタスクを作成することもできる。
【０１４０】
シナリオ６：投資ブローカー
[00168]ガストンは、投資ブローカーで、ＩＴによって生成されたデータをとり、顧客と共に働く様々なチームによって使用可能なようにデータを消化することを受け持つチームで働いている。ＩＴは、顧客のポートフォリオの部分を示す様々なデータセット−債権ポジション、エクイティポジション等−を生成するが、それぞれ単独では、ガストンの消費者が必要とするものではない。
【０１４１】
[00169]ヘルミーネが率いる１つのチームは、チームが電話したとき、顧客が有する質問に答えられるように、顧客の全ポジションデータの全貌を見る必要がある。データの準備はそれほど複雑ではない。
【０１４２】
[00170]ガストンは、ＩＴが生成する毎夜のデータベースドロップの何らかのメッセージングを行い、それらを一緒に和結合し、幾つかの単純なチェックを行い、データが満足のいくように見えることを確認する。次に、ヘルミーネのチームが必要とするものだけにフィルタリングし、ヘルミーネのチームが使用するＴＤＥを作成する。
【０１４３】
[00171]従来のツールを用いる場合、ガストンは、毎朝、出社してフローを実行することを覚えておく必要があった。しかし、新しいデータ準備アプリケーション２５０を用いる場合、このフローは宣言的に処理することができる。ガストンは、ヘルミーネのチームが使用するＴＤＳをヘルミーネに送信し、それにより、ヘルミーネのチームが行うあらゆるデータ視覚化は、直接、データベースに対して実行する。これは、ガストンがデータのリフレッシュについて心配する必要がなく、素早く実行されることを意味する。
【０１４４】
[00172]イアンが率いる別のチームは、同様のデータを使用して、顧客の口座のパフォーマンスレビューを行う。このデータを生成するために、ガストンはヘルミーネに対して行った仕事を再使用するが、イアンのチームの口座にデータをフィルタリングし、次に、イアンのチームが分析を実行することができるように、様々なインデックス及びパフォーマンスインジケータとデータとを結合する追加のフローを実行する。この作業は高価であり、ライブであまり良好に実行されるように見えない。フローを実行する場合、完了までに数時間かかる−しかし、イアンのチームはこれを月に１度だけ必要とする。ガストンは、サーバで、これを毎月１回実行する反復カレンダーアイテムをセットアップする。
【０１４５】
シナリオ７：顧客データのスクラブ
[00173]カールは、メジャーなソフトウェア企業の戦略的アカウントマネージャである。彼はTableauを使用して、産業会議の参加者、参加者が働く相手、代表者が誰であるか、アクティブな顧客又は見込み客であるか否か、企業が小さいか、それとも大きいか等についての情報を視覚化しようとしている。
【０１４６】
[00174]カールは、会議参加者のリストを有するが、以前、これを掘り下げたことがある。このポジションにいた最後のとき、リストのクリーンアップに８時間かかり、彼が行った後、視覚化の構築に１５分かかった。今回、データ準備アプリケーション２５０を使用して、プロセスをスピードアップし自動化している。
【０１４７】
[00175]カールはまず、企業名をクリーンアップしたい。データを見て、彼が予期したものを見た：同企業が複数の異なるフォーマットで列挙されることが多く、それらの幾つかにはスペルミスがある。彼は、演算パレットに提供されるファジー重複排除ルーチンを呼び出して、潜在的な重複を識別する。結果をレビューし、アルゴリズムが熱心すぎた２つのケースを修正した。彼はまた、アルゴリズムがミスした少数のケースを見つけ、したがって、それらをグループ化する。これにより、正規の企業名を有する顧客リストが生成される。
【０１４８】
[00176]次に、Tableauサーバのデータソースに保持されていた企業のリストと彼のデータを結合しようとする。カールは、各企業が複数のリストを有することを発見する。複数の異なる企業は、同じ名前を有し得、１つの企業が、地域に基づいて複数の口座を有し得る。
【０１４９】
[00177]これを整理するために、カールは、彼が見つけたLinkedIn（商標）のＲＥＳＴコネクタを使用し、データ内の電子メールアドレスのそれぞれに渡して、各人物の国及び州を検索する。この手順は、カールが有する情報（例えば、人物の氏名、人物の企業、及び人物のポジション）をとり、LinkedInのサーチ機能を使用して、各エントリに最良の結果を用意する。彼は次に、企業及びロケーションデータをサーバ内のデータと結合して、正確な口座を見つける。
【０１５０】
[00178]カールは、彼の結合が常に機能するわけではないことを発見した。彼が拾った正規企業名は、彼の口座データベースにあるものに常に一致するわけではない。彼は結合をファジー結合に変換し、ファジー一致をレビューし、結果を手動で更に修正する。
【０１５１】
[00179]今やカールはデータをクリーンアップし、Tableauで開いてデータ視覚化を作成する。
【０１５２】
[00180]フローの一般に使用される特徴は以下を含む。
・ユーザが演算の論理順に精密な制御を有する必要がある複数のレベルの和結合、結合、及び集計。
・理解を改善するようにユーザによって配置され注釈付けられたレイアウト。
・フローを通して進む際のデータ構造への明確性の必要性。
・２つの異なる出力を生成するフローの部分の再使用。
・時には別個のチームでの２人以上の他のユーザに向けた創作者によるデータの準備。
・自動的に実行するフローのスケジューリング。
【０１５３】
[00181]データ準備アプリケーションは、ＥＴＬ（抽出、変換、及びロード）システムとして分類されることがある。３つのフェーズのそれぞれは、異なるタイプのタスクを実行する。
【０１５４】
[00182]抽出フェーズでは、ユーザは、１つ又は複数の利用可能なデータソースからデータをプルする。一般に、ユーザはこれらのタスクを実行する：
・単にファイルを移動する。例えば、ユーザは、他の処理の前、ＦＴＰソースからファイルを検索し得る。
・構造（例えば、関係、半構造化、又は非構造化）、フォーマット（例えば、構造化ストレージ、ＣＳＶファイル、又はＪＳＯＮファイル）、及びソース（例えば、ファイルシステムから又は正式データベースから）が広く異なるデータの取り込み。
・ソース全体を読み出し、又はその一部を選択する。部分読み出しは、最後の取り込みよりも新しい若しくは最後の取り込みから変更されたデータをプルするため又は性能の理由でチャンクをサンプリング若しくはプルするための両方で一般的である。
【０１５５】
[00183]変換フェーズでは、ユーザは、データを多種多様な方法で変換する。一般に、変換はこれらのタスクを含む：
・データをクリーニングして、エラーを修正し、欠けた値又は重複値を処理し、同じであるべき異形の値を一致させ、規格に値を準拠させる等。
・スカラー及びテーブル計算、集計、行及び列のフィルタリング、（アン）ピボット、又は外部データの組み込み（例えば、ジオコーディングを通した）を通したデータの強化又は補強。
・和結合又は結合（ファジー結合を含む）を通して複数のソースを組み合わせる。
・別個に処理するために、一緒にされた（行又は列のいずれかにおいて）複数のタイプのデータをデインタリーブする。
・データをよりよく理解するために、データのプロファイル又はデータについてのメトリックを抽出する。
【０１５６】
[00184]ロードフェーズでは、ユーザは、結果を分析することができるように結果を記憶する。これは、以下を含む。
・データをTableauデータ抽出（ＴＤＥ）、フォーマットされたファイル（例えば、ＣＳＶ若しくはExcel）、又は外部データベースに書き込む。
・スケジュールでスナップショットを作成する。
・新しい若しくは変更された結果を追加又は新しい若しくは変更された結果でデータを更新する。
【０１５７】
[00185]ユーザがデータを準備するフローを構築すると、ユーザは多くの場合、以下を行う必要がある。
・指定された時間又は他のフローと協調して実行されるようにフローをスケジューリングする。
・フローの結果を他者と共有する。
・フロー自体を他者と共有し、それにより、他者は、フローを調べ、変更し、クローニングし、又は管理し得る。これは、ＩＴがフロー又はデータを改善し管理することができるように、ＩＴとのフロー又はデータの共有を含む。
【０１５８】
[00186]開示されるシステム２５０は、制御をユーザに与える。多くの場合、データ準備アプリケーションは、ユーザに対して知的な選択をするが、ユーザは常に、制御を行使することが可能である。制御は多くの場合、２つの異なる面を有する：結果が正確であり、ユーザの望むセマンティックに一致することを保証するために使用される演算の論理順への制御及び性能の保証に大抵は使用される物理的制御。
【０１５９】
[00187]開示されるデータ準備アプリケーション２５０は自由も提供する。ユーザは、データ生成構成要素を組み立て、組み立て直すことができるが、必要とするデータの形状を達成するために、望む。
【０１６０】
[00188]開示されるデータ準備アプリケーション２５０は、増分的対話及び即時フィードバックを提供する。ユーザが動作をとると、システムは、ユーザのデータのサンプルでの即時結果を通して及び視覚的フィードバックを通してフィードバックを提供する。
【０１６１】
[00189]通常、ＥＴＬツールは命令的セマンティックを使用する。すなわち、ユーザは、あらゆる演算の詳細及び演算を実行する順序を指定する。これはユーザに完全な制御権を与える。逆に、ＳＱＬデータベースエンジンは、宣言的クエリを評価し、クエリによって要求されるデータに基づいて最適な実行プランを選択することが可能である。
【０１６２】
[00190]開示される実施態様は、命令的演算及び宣言的演算の両方をサポートし、ユーザは、様々な粒度レベルでこれらの２つの実行オプションを選択することができる。例えば、ユーザは、新しいデータセットについて学びながら、最初、フローの完全な制御を行使したいことがある。後に、ユーザは、結果に満足したとき、実行速度を最適化するために、制御の全て又は部分をデータ準備アプリケーションに譲り得る。幾つかの実施態様では、ユーザは、各フローのデフォルト挙動（命令的又は宣言的）を指定し、個々のノードでデフォルト挙動をオーバーライドすることができる。
【０１６３】
[00191]開示される実施態様は、ＴＤＥ、ＳＱＬサーバ、Oracle、Redshift、フラットファイル等を含め、データを多くの異なるターゲットデータベースに書き込むことができる。幾つかの場合、フローは、ターゲットシステムにおいて新しいデータセットを作成する。他の場合、フローは、新しい行を追加し、既存の行を更新し、行を挿入し、又は行を削除することによって既存のデータセットを変更する。
【０１６４】
[00192]フロー実行中、エラーが生じ得る。エラーは、遷移システム問題、ユーザが是正動作を符号化し得るデータにおける潜在的な既知のエラー状況、及び創作者が考慮しなかった暗黙的な制約を含むことができる。開示される実施態様は一般に、可能な場合、これらのエラー状況を自動的に処理する。例えば、過去、同じエラー状況に直面した場合、幾つかの実施態様は、既知の解決策を再適用する。
【０１６５】
[00193]フローは基本的にデータ変換であるが、実施態様は、ユーザが、宣言的モデリング情報で出力に注釈付けて、出力をいかに使用、閲覧、検証、又は組み合わせることができるかを説明することができるようにする。例には以下がある：
・デフォルト配色又はフォーマット等の値がTableauにいかに表示されるかに影響する注釈。
・単位又は系統を示すフィールドについての注釈。
・エイリアス及びグループの作成。
・テーブル間の主キー及び外部キー等の機能制約。
・フィールドが正である必要がある等のドメイン制約。
【０１６６】
[00194]開示される実施態様は一般に、これらの構成要素を含む：
・ユーザがフローを閲覧、構築、編集、及び実行するために対話するフロントエンドエリア。
・抽象フロー言語（ＡＦＬ）。これは、ソースへの接続、計算、及び他の変換、モデリング演算、及びフローの結果である行を用いて何が行われるかを含め、フローにおける全ての論理を表現する内部言語である。
・実行エンジン。エンジンは、ＡＦＬプログラムを解釈し実行する。幾つかの実施態様では、エンジンはローカルに実行する。クエリは、リモートサーバにプッシュし得るが、結果及び更なる処理は、ローカルリソースを使用して行われる。サーバ環境では、サーバは、フローの共有分散実行環境を提供する。このサーバは、多くのユーザからのフローをスケジュールし実行することができ、ＡＦＬフローを自動的に分析しスケーリングすることができる。
・フローを他者に向けて公開できるようにするカタログサーバ。
【０１６７】
[00195]幾つかのデータ視覚化アプリケーションは、データ準備フローを実行することが可能であり、ＴＤＥ又は他の作成されたデータベースを使用して、データ視覚化を構築することができる。
【０１６８】
[00196]開示される実施態様はまた、他のアプリケーションによって作成（例えば、ＥＴＬツールにおいて作成）された幾つかのデータフローをインポートすることもできる。
【０１６９】
[00197]実施態様は、ユーザが以下を行えるようにする：
・図６Ｂに示されるように、データソースに接続し、データソースから読み出す。
・サポートされる演算（図６Ａ参照）を任意の順序及び任意の組合せで組み合わせるフローを構築する。
・フローの各ステップにおいてデータがいかに変換されるかの妥当なサンプルを見る（例えば、プロファイルペイン及びデータペインにおいて）。
・フローのあらゆるステップにおいてデータの視覚化を作り上げる。
・完成したフローをローカルで実行して、ＴＤＥ又はＣＳＶ出力等の出力を生成する（図６Ｃ参照）。
・パイプライン又はＴＤＥ結果をカタログサーバに公開する。
・データ準備において作成されたＴＤＳ（Tableauデータソース）を明示フローとしてインポートする。
【０１７０】
[00198]構成されたサーバへのアクセスを有する場合、ユーザは、以下を行うことができる。
・ＴＤＥを他者と共有する。
・データ準備パイプライン（フロー）を適切なセキュリティで他のユーザと共有する。
・サーバ環境でデータ準備パイプラインを実行して、ＴＤＥを手動で又はスケジュール通りに生成する。
【０１７１】
[00199]ノードの出力は、２つ以上の後続ノードに向けることができる。ここでは２つの基本事例がある。第１の事例では、フローは分岐し、再び一緒にならない。フローが収束しない場合、フローからの複数の出力がある。この場合、各分岐は実際に、ツリー内の全ての前身からなる別個のクエリである。可能な場合、実施態様は、フローの共有部分が１回を超えて実行されないようにこれを最適化する。
【０１７２】
[00200]第２の事例では、フローは収束する。意味論的に、これは、行が両パスを通って流れることを意味する。ここでも、フローの実行は一般に、祖先を２回実行しない。なお、１つのフローはこれらの事例の両方を有することができる。
【０１７３】
[00201]ユーザインターフェースは：
・ユーザがフローにおいて分岐路を作成できるようにする。新しいノードが追加されるとき、ユーザは、新しいノードが選択されたノードに分岐路を作成するか、それとも既存の演算シーケンスにおける中間ノードとして挿入されるかを指定することができる。例えば、現在、ノードＡからノードＢへのパスがあり、ユーザが新しいノードをＡに挿入することを選ぶ場合、ユーザは、新しいノードへの第２のパスを作成するか、又は新しいノードをＡとＢとの間に挿入するかいずれかを選択することができる。
・ユーザが、フロー全体ではなくフローの個々の出力を実行できるようにする。
【０１７４】
[00202]ユーザは、任意の複雑性のフローにフィルタを追加することができる。例えば、ユーザは、フロー内のあるポイントをクリックしてフィルタを追加し、次に、述語として機能する計算を入力することができる。幾つかの実施態様では、計算表現はスカラー関数に制限される。しかしながら、幾つかの実施態様では、集計、テーブル計算、又は詳細レベル表現等のより複雑な表現が可能である。
【０１７５】
[00203]ユーザは、システムにより推測された場合であっても、任意のフィルタを編集することができる。特に、全てのフィルタは表現として表現される。
【０１７６】
[00204]プロファイルペイン３１４及びデータペイン３１５は、フィルタを作成する容易な方法を提供する。例えば、幾つかの実施態様は、ユーザが、データペインにおける列の１つ又は複数のデータ値を選択し、次に右クリックし、「これのみを保持」又は「除外」を選べるようにする。これは、フィルタをフローの現在選択されているノードに挿入する。システムは、フィルタを実施する表現を推測し、表現は保存される。ユーザがフィルタを後に変更する必要がある場合、後の時間が直後であっても、それとも１年後であっても関係なく、そうするのは容易である。
【０１７７】
[00205]プロファイルペイン３１４において、ユーザは、データフィールドの値の範囲を指定するバケツを選択することができる。例えば、カテゴリフィールドを用いる場合、範囲は通常、値のリストとして指定される。数値フィールドの場合、範囲は通常、上限又は下限を有する連続範囲として指定される。ユーザは、バケツを選択し、フィールドの値が範囲内にある全ての行を選択（又は除外）するフィルタを容易に作成することができる。
【０１７８】
[00206]ユーザが、１列中の複数の値又は１列の複数のバケツに基づいてフィルタを作成する場合、フィルタ表現はＯＲを使用する。すなわち、行は、値又は範囲のいずれか１つに一致する場合、表現に一致する。
【０１７９】
[00207]ユーザはまた、データペインにおける１行中の複数のデータ値に基づいてフィルタを作成することもできる。この場合、フィルタ表現はＡＮＤを使用する。すなわち、指定された値の全てに一致する行のみが表現に一致する。これは、プロファイルペインにおけるバケツにも同様に適用することができる。この場合、行は、選択されたバケツ範囲のそれぞれで一致しなければならない。
【０１８０】
[00208]幾つかの実施態様では、２つ以上の行及び２つ以上の列を含む複数のデータ値に基づいてフィルタを作成することもできる。この場合、作成される表現は選言標準形であり、各選言は、選択されたデータ値を有する行の１つに対応する。幾つかの実施態様は、同じ技法をプロファイルウィンドウにおける範囲選択にも同様に適用する。
【０１８１】
[00209]なお、これらの各事例で、ユーザはデータ値又はバケツを視覚的に選択し、次に、単純なジェスチャ（例えば、メニュー選択を右クリック）を用いて、行を選択された値のみに制限するか、又は選択された値を除外するフィルタを作成する。ユーザは、正確なブール論理での表現の書き方を理解する必要がない。
【０１８２】
[00210]図４Ａ〜図４Ｖに関して前出のように、ユーザは結合を作成することができる。宣言的実行が可能であるか否かに応じて、結合は、以下、図９に示されるように、実行のためにリモートサーバにプッシュし得る。
【０１８３】
[00211]幾つかの実施態様は、ノード及び注釈としてフローの簡易化又は凝縮バージョンを提供する。幾つかの実施態様では、ユーザは、フルビューと凝縮ビューとをトグルすることができ、又は個々のノードをトグルして、ノード内の詳細を隠す又は露出することができる。例えば、１つのノードは、特定のソースファイルにクリーンアップを実行する１２の演算を含み得る。クリーンアップステップを用いた実験を数回繰り返した後、演算は上手く機能しており、ユーザは一般に、詳細を見たいと思わない。詳細はなおそこにあるが、ユーザは、ただノードの凝縮バージョンを見ることにより、クラッターを隠すことが可能である。
【０１８４】
[00212]幾つかの実施態様では、展開しない演算ノードは、ノード上の注釈に一緒に折り畳まれる。結合及び分割等の演算は、追加のノードを用いてフローを分断する。幾つかの実施態様では、凝縮ビューのレイアウトは自動である。幾つかの実施態様では、ユーザは、凝縮ビューにおいてノードを再配置することができる。
【０１８５】
[00213]プロファイルペイン及びデータペインの両方は、フローペインにおいて現在選択されているノードに関連付けられた行の組についての有用な情報を提供する。例えば、プロファイルペインは、データ内の様々なデータ値（例えば、いくつの行が各データ値を有するかを示すヒストグラム）の候補を示す。複数のデータフィールドでの値の分布が示される。プロファイルペインに示されるデータ量により、データの検索は通常、非同期で実行される。
【０１８６】
[00214]幾つかの実施態様では、ユーザは、プロファイルペインにおけるデータ値をクリックし、他の項目の潜在的なブラシを見ることができる。ユーザが特定のデータ値を選択すると、ユーザインターフェースは：
・選択を示す。
・プロポーションブラシ（proportional brushing）を使用して、そのテーブル内の他の列との相関を示す。
・関連付けられたデータペインをフィルタリング又は強調表示して、選択に一致する値の行のみを示す。（これは、データペインに表示されたデータをフィルタリングし、フローペインにフィルタノードを作成しない）。
・プロファイルペインに選択された複数の値がある場合、選択された全ての値が示され、データペインはそれに従ってフィルタリングされる（すなわち、複数の値のいずれか１つに一致する行にフィルタリングされる）。
【０１８７】
[00215]幾つかの実施態様では、行は、ユーザにより特に要求される場合を除き、データペインに表示されない。幾つかの実施態様では、データペインは常に、自動的に埋められ、プロセスは非同期に進められる。幾つかの実施態様は、選択されたノードの行の濃度に基づいて異なる標準を適用する。例えば、幾つかの実施態様は、濃度が閾値未満である場合、行を表示し、濃度が閾値を超える場合、行を表示しないか、又は非同期に進む。幾つかの実施態様は、１組の行を小、大、又は超大として示す２つの閾値を指定する。幾つかの実施態様では、インターフェースは、小濃度の場合、行を表示し、大濃度の場合、行を非同期で表示することに進み、超大濃度の場合、結果を表示しない。当然ながら、データペインは、少数の行しか表示することができず、それらの行は通常、サンプリング（例えば、ｎ行毎）によって選択される。幾つかの実施態様では、データペインは、無限スクロールを実施して、未知量のデータを収容する。
【０１８８】
[00216]開示されるデータ準備アプリケーションは、ユーザインターフェースをネイティブに読み出し、変更し、動作する文書モデルを提供する。このモデルは、ＵＩの形式論を提供しながら、フローをユーザに対して説明する。モデルは、実行にＡＱＬ及び連合評価器を使用するTableauモデルに翻訳することができる。モデルはまた、中間結果の信頼性の高いキャッシュ及び再使用も可能にする。
【０１８９】
[00217]図７Ａに示されるように、データモデルは３つのサブモデルを含み、各サブモデルは、評価の適切な段階におけるフローを記述する。第１のサブモデルは「Loom Doc」７０２である。（幾つかの実施態様は、データ準備アプリケーションを「Loom」と呼ぶ。）
【０１９０】
[00218]Loom doc702は、ユーザが見て、直接対話するフローを記述するモデルである。Loom doc702は、全てのＥＴＬ演算及びタイプチェックの実行に必要な全情報を含む。通常、Loom doc702は、純粋にフローのレンダリング又は編集に必要な情報を含まない。Loom doc702は、フローとして構築される。各演算は、以下を有する：
・演算をいかに実行するかを記述する１組の属性。
・演算をどのデータに対して実行すべきかを記述する０以上の入力。
・この演算から生成されるデータを記述する０以上の出力。
【０１９１】
[00219]４つの主要なタイプの演算がある：入力演算、変換演算、出力演算、及びコンテナ演算。
【０１９２】
[00220]入力演算は、ＥＴＬの「抽出」部分を実行する。フローをデータソースにバインドし、そのソースからデータをプルし、そのデータをフローに露出するように構成される。入力演算は、ＣＳＶファイルのロード又はＳＱＬデータベースへの接続を含む。入力演算のノードは通常、ゼロ入力及び少なくとも１つの出力を有する。
【０１９３】
[00221]変換演算は、ＥＴＬの「変換」部分を実行する。変換演算は、データストリームにわたり「機能」演算を提供し、それを変換する。変換演算の例には、「’[HospitalName]-[Year]’としての計算の作成」、「hospitalId=’HarbourView’を有する行をフィルタリング」等がある。変換ノードは、少なくとも１つの入力及び少なくとも１つの出力を有する。
【０１９４】
[00222]出力演算はＥＴＬの「ロード」部分を提供する。出力演算は、入力されたデータストリームを用いて下流データソースを実際に更新することの副作用と共に動作する。これらのノードは、１つの入力を有し、出力を有さない（フローにおける後続ノードへの「出力」がない）。
【０１９５】
[00223]コンテナ演算は、他の演算を論理グループにグループ化する。これらは、フローを文書化するのを容易にするのに役立つ。コンテナ演算は、フローペインにおける「ノード」としてユーザに露出される。各コンテナノードは、他のフロー要素（例えば、通常ノードのシーケンス）及び文書化のためのフィールドを含む。コンテナノードは、任意の数の入力及び任意の数の出力を有することができる。
【０１９６】
[00224]データストリームは、あるノードから別のノードにフローにわたって移動するデータの実際の行を表す。論理的に、これらは行としてみることができるが、演算的には、データストリームは任意の数の方法で実施することができる。例えば、幾つかのフローは単に、ＡＱＬ（分析クエリ言語）にコンパイルされる。
【０１９７】
[00225]拡張可能な演算とは、データ準備アプリケーションが評価の仕方を直接は知らず、したがって、第三者のプロセス又はコードを呼び出す演算である。これらは、連合評価器の一環として実行されない演算である。
【０１９８】
[00226]論理モデル７０４とは、エンティティ、フィールド、関係、及び制約の全てを含むモデルである。論理モデル７０４は、フローにわたり実行することによって構築され、フローにおける任意の部分で構築されるモデルを定義する。論理モデル内のフィールドは、結果における列である。論理モデルにおけるエンティティは、結果におけるテーブルを表すが、幾つかのエンティティは他のエンティティで構成される。例えば、和結合は、他のエンティティの結果であるエンティティを有する。論理モデルにおける制約は、フィルタ等の追加の制約を表す。論理モデルにおける関係は、エンティティにわたる関係を表し、エンティティを組み合わせるのに十分な情報を提供する。
【０１９９】
[00227]物理モデル７０６は第３のサブモデルである。物理モデルは、フローを再実行する必要があるか否か及びフローの結果データベースに直接照会する方法を識別する情報を含め、キャッシュするメタデータを含む。メタデータは以下を含む：
・この時点での論理モデルのハッシュ。
・各ルートデータソース及びそれが最後に照会されたときのタイムスタンプ。
・結果データがどこにあるかを記述したパス又はＵＲＩ。
【０２００】
[00228]このデータは、フローの最適化及び結果のより高速なナビゲーションを可能にするのに使用される。
【０２０１】
[00229]物理モデルは、この物理モデルの作成に使用された論理モデルへの参照（例えば、ファイル又はデータストアへのポインタ）を含む。物理モデル７０６はTableauデータソース（ＴＤＳ）も含み、ＴＤＳは、モデルの評価に使用されるデータソースを識別する。通常、これは論理モデル７０４から生成される。
【０２０２】
[00230]物理モデルは、指定されたデータソースからデータを抽出するのに使用されるＡＱＬ（分析クエリ言語）クエリも含む。
【０２０３】
[00231]図７Ａに示されるように、loom doc702はコンパイルされて（７２２）、論理モデル７０４を形成し、論理モデル７０４は評価されて（７２４）、物理モデルを形成する。
【０２０４】
[00232]図７Ｂは、幾つかの実施態様により使用されるファイルフォーマット７１０を示す。ファイルフォーマット７１０は、ローカル実行及びリモート実行の両方で使用される。なお、ファイルフォーマットはデータ及びフローの両方を含む。幾つかの場合、フローは、コピー／ペーストを行うことによりデータを作成し得る。これらの場合、データはフローの一部になる。ファイルフォーマットは、土台をなすフローから別個にＵＩ状態を保持する。表示の幾つかは、アプリケーションと共に保存される。レイアウトの他の部分は、ユーザ固有であり、アプリケーション外部に記憶される。ファイルフォーマットはバージョニングすることができる。
【０２０５】
[00233]ファイルフォーマットは、複数の文書フォーマットを有する。幾つかの実施態様では、ファイルフォーマットは、図７Ｂに示されるように、３つの主要部を有する。幾つかの実施態様では、ファイルフォーマット７１０は編集情報７１２を含む。このセクションは、編集経験をデバイス及び編集セッションにわたり継続させることを受け持つ。このセクションは、フローを評価するには必要ないが、ユーザに対してＵＩを再構築するのに必要なあらゆるデータを記憶する。編集情報７１２はアンドゥ履歴を含み、アンドゥ履歴は、編集セッションが閉じられ、再び開けられた後、ユーザが演算をアンドゥできるようにする永続的なアンドゥバッファを含む。編集情報は、どのペインが見えているか、フローノードのｘ／ｙ座標、フローがいかに実行されるかにどれが反映されていないか等のＵＩ状態も含む。ユーザは、ＵＩを再び開くと、前にそこで何が行われたのかを理解し、仕事の再開をより容易にする。
【０２０６】
[00234]ファイルフォーマット７１０は、図７Ａに関して上述したように、Loom Doc702を含む。これは、必要とされるファイルフォーマットの唯一のセクションである。このセクションはフローを含む。
【０２０７】
[00235]ファイルフォーマット７１０はローカルデータ７１４も含み、ローカルデータ７１４は、フローの実行に必要な任意のテーブル又はローカルデータを含む。このデータは、ＨＴＭＬテーブルをデータ準備アプリケーションに渡す等のユーザ対話を通して、又はフローが、評価のためにサーバにアップロードする必要があるローカルＣＳＶファイルを使用する場合、作成することができる。
【０２０８】
[00236]評価サブシステムを図７Ｃに示す。評価サブシステムは、フローを評価する信頼性の高い方法を提供する。評価サブシステムは、先の実行の結果に対して演算する又はフローの演算の上部に演算をレイヤ化する容易な方法も提供する。加えて、評価サブシステムは、フローの後の部分を実行するとき、フローのある部分からの結果を再使用する自然な方法を提供する。評価サブシステムは、キャッシュされた結果に対して実行する高速の方法も提供する。
【０２０９】
[00237]図７Ｃに示されるように、フローを評価する２つの基本的なコンテキストがある。フローを実行する（７４０）とき、プロセスは、フローを評価し、結果を出力ノードに入れる。デバッグモードで実行する場合、プロセスは、ナビゲーション、分析、及び部分フローの高速実行に使用することができる一時的なデータベースに結果を書き出す。
【０２１０】
[00238]ナビゲーション及び分析（７３０）において、ユーザはデータセットを調査している。これは、データ分布を見る、ダーティデータを探す等を含むことができる。これらのシナリオでは、評価器は一般に、フロー全体を実行することを回避し、代わりに、前のフローの実行から前に作成された一時的なデータベースに対する直接的でより高速のクエリを実行する。
【０２１１】
[00239]これらのプロセスは、スマートキャッシュ判断が可能なことを確実にするために、キャッシュ前後の良好なメタデータを利用する。
【０２１２】
[00240]幾つかの実施態様は、図７Ｄに示されるように、非同期サブシステムを含む。非同期サブシステムは、非ブロック挙動をユーザに提供する。ユーザは、行を戻す必要がない多くの演算を行っている場合、行を取得することをブロックされない。非同期サブシステムは増分的結果を提供する。多くの場合、ユーザは、検証を開始するために又は結果を理解するために、フルセットのデータを必要としない。これらの場合、非同期サブシステムは、結果が来たまま最良の結果を与える。非同期サブシステムは、進行中のクエリに対して信頼性の高い「キャンセル」演算も提供する。
【０２１３】
[00241]幾つかの実施態様では、非同期モデルは４つの主要構成要素を含む：
・ブラウザレイヤ。このレイヤはＵＵＩＤ及び開始する非同期タスクからの更新バージョンを取得する。このレイヤは次に、更新の取得にＵＵＩＤを使用する。
・ＲＥＳＴ  ＡＰＩ。このレイヤは、スレッドプールにおいてタスクを開始する。スレッドプールにおけるタスクは、更新を受ける際、ステータスサービスを更新する。ブラウザレイヤは、更新があるか否かを知りたい場合、ＲＥＳＴ  ＡＰＩ手順を呼び出して最新ステータスを取得する。
・ＡｑｌＡＰＩ。このレイヤは、まるでコールバックを有する同期コールであるかのように呼び出される。コールは、土台をなす要求が終了する場合のみ終了する。しかしながら、コールバックにより、既に処理された行を有するステータスサービスへの更新が可能である。これにより、増分的進行をユーザに提供することが可能である。
・連合評価器。ＡｑｌＡｐｉは連合評価器を呼び出し、連合評価器は、新しいプロセスとして実行するため、別の非同期レイヤを提供する。
【０２１４】
[00242]キャンセル演算の実施は、キャンセルが生じる場所に依存する。ブラウザレイヤでは、キャンセル要求を送信し、次に結果のポーリングを停止させることは容易である。ＲＥＳＴ  ＡＰＩでは、キャンセルイベントを実行中のスレッドに送信することは容易である。
【０２１５】
[00243]幾つかの実施態様は、フローが既に生成された後、フローを「リファクタリング」することを安全且つ容易にする。現在、ＥＴＬツールにより、まず、かなり単純に見えるが、大きくなるにつれて変更が不可能になるフローを作成することができる。これは、変更がフローにいかに影響するかを理解するのが難しいためであり、且つビジネス要件に関連する個々の挙動に挙動のチャンクを分割することが難しいためである。このうちの大半は、ユーザインターフェースに起因するが、土台をなす言語は、ＵＩが必要とする情報を提供する必要がある。
【０２１６】
[00244]開示される実施態様は、ユーザが、容易にリファクタリングできるフローを作成できるようにする。これが意味することは、ユーザが演算又はノードをとり、容易に以下を行うことが可能であることである：
・演算を方々移動させ、論理的に並べ替える。実施態様は、これらの演算がエラーを生じさせるか否かについて直接的なフィードバックを提供する。例えば、ユーザがADD_COLUMN->FILTERを有するフローを有すると考える。ユーザは、FILTERが、追加された列を使用する場合を除き、ADD_COLUMNノードの前にFILTERノードをドラッグすることができる。ＦＩＬＴＥＲが新しい列を使用する場合、インターフェースはエラーを即座に掲げ、ユーザに問題を教える。
・幾つかの演算及びノードを１つの新しいノード（再使用することができる）に畳む。この新しいノードは、許容する「タイプ」及び返す「タイプ」を有する。例えば、ユーザが、JOIN_TABLES->ALTER_COLUMN->ALTER_COLUMN->ALTER_COLUMNを含むフローの断片を有すると考える。実施態様は、ユーザが、これらの４つのステップを組み合わせて１つのノードにし、そのノードに「FIXUP_CODES」等の有意味な名前を割り当てられるようにする。新しいコードは、入力として２つのテーブルをとり、１つのテーブルを返す。入力テーブルのタイプは、結合された列と、ALTER_COLUMNで使用されることになった任意の列とを含むであろう。出力テーブルのタイプは、演算から生じるタイプである。
・ノードから演算を分割する。これは、ユーザが、即時演算中、ノードに組織的に追加された演算を再編成することができる場合である。例えば、ユーザが、２０の演算を有する巨大ノードを有し、ユーザが、病院コードをそれ自体のノードに整えることに関連する１０の演算に分割したいと考える。ユーザは、それらのノードを選択し、引き出すことができる。削除中の演算に依存する他の演算がノードにある場合、システムはエラーを示し、FixupHospitalCodesノード後に新しいノードを作成するという解決策を示唆する。
・演算を既存ノードにインライン化する。ユーザが幾らかのクリーニングを行った後、フローの別の部分に属する何らかの仕事があり得る。例えば、ユーザは、保険コードをクリーンアップする際、病院コードに伴う幾つかの問題を見つけ、それをクリーンアップする。次に、ユーザは、病院コードクリーンアップをFixupHospitalCodesノードに移動させたい。これは、容易なドラッグ／ドロップ動作を使用して達成される。ユーザが、フローの、依存する演算の前のロケーションに演算をドロップしようとする場合、インターフェースは、提案されたドロップロケーションが機能しないことの即時視覚的フィードバックを提供する。
・タイプを変更し、それがフローの部分を即座に分断するか否かを見つけ出す。ユーザはフローを使用し、次に、列の１つのタイプの変更を決定し得る。フローを実行する前、実施態様は任意の問題について即座にユーザに通知する。
【０２１７】
[00245]幾つかの実施態様では、ユーザがフローをリファクタリングしているとき、システムは、ドロップターゲットを識別することによって支援する。例えば、ユーザがノードを選択し、そのノードをフローペイン内にドラッグし始める場合、幾つかの実施態様は、ノードを移動させることができるロケーションを表示する（例えば、強調表示により）。
【０２１８】
[00246]開示されるデータ準備アプリケーションは、３つの側面を有する言語を使用する：
・表現言語。これは、ユーザが計算をいかに定義するかである。
・データフロー言語。これは、ユーザがフローの入力、変換、関係、及び出力をいかに定義するかである。これらの演算は、データモデルを直接変える。この言語におけるタイプは、個々の列のみではなくエンティティ（テーブル）及び関係である。ユーザは、この言語を直接的には見ず、ＵＩにおいてノード及び演算を作成することを通して間接的に使用する。例には、テーブルの結合及び列の削除がある。
・制御フロー言語。これらは、データフローの周囲で生じ得るが、実際にはデータフローではない演算である。例には、ファイルシェアからｚｉｐをコピーし、次に圧縮解除すること、書き出されたＴＤＥをとり、次にそれをシェアにコピーすること、又は任意のデータソースリストに対してデータフローを実行することがある。
【０２１９】
[00247]これらの言語は別個であるが、互いの上に重なる。表現言語は、フロー言語により使用され、そしてフロー言語は制御フロー言語により使用することができる。
【０２２０】
[00248]言語は、図８Ａに示されるように、論理的に左から右に行く演算のフローを記述する。しかしながら、フローが評価される方法により、実際の実施は、よりよい性能に向けて演算を再配置することができる。例えば、データが抽出されるときにリモートデータベースに対するフィルタを移動させることは、全体実行速度を大きく改善することができる。
【０２２１】
[00249]データフロー言語は、ＥＴＬに直接影響するフロー及び関係を記述するため、大半の人々がデータ準備アプリケーションと共に関わる言語である。言語のこの部分は、２つの主要構成要素を有する：モデル及びノード／演算。これは標準ＥＴＬツールと異なる。フローがデータに直接演算する（例えば、実際の行を「フィルタ」演算から「フィールド追加」演算に流す）代わりに、開示されるフローは、作成したいものを指定する論理モデルと、論理モデルをいかにマテリアライズしたいかを定義する物理モデルとを定義する。この抽象化は、最適化に関してより多くの余裕を提供する。
【０２２２】
[00250]モデルは基本名詞である。モデルは、演算が行われているデータのスキーマ及び関係を記述する。上述したように、論理モデル及び別個の物理モデルがある。論理モデルは、所与のポイントでのフローの基本「タイプ」を提供する。論理モデルは、変換中のデータを記述するフィールド、エンティティ、及び関係を記述する。このモデルは、セット及びグループ等の物を含む。論理モデルは、何が望ましいかを指定するが、いかなるマテリアライゼーションも指定しない。このモデルのコア部分は以下である：
・フィールド：これらは、出力においてデータフィールドに入れられる（又はそれを行う計算を支援する）実際のフィールドである。各フィールドには、エンティティ及び表現が関連付けられる。フィールドは必ずしも全て可視である必要はない。３つのタイプのフィールドがある：物理フィールド、計算済みフィールド、及び一時的フィールド。物理フィールドは、生成されたデータセットにマテリアライズされる。これらは適切なフィールド又は計算であることができる。計算済みフィールドは、生成されるＴＤＳに計算済みフィールドとして書き込まれ、したがって、決してマテリアライズされない。一時的フィールドは、物理フィールドの計算をよりよくファクタリングするために書き込まれる。一時的フィールドは決して書き出されない。一時的フィールドが計算済みフィールドにより参照される場合、言語は警告を発し、このフィールドを計算済みフィールドとして扱う。
・エンティティ：これらは、論理モデルの名前空間を記述するオブジェクトである。エンティティは、入力されるテーブルのスキーマにより作成され、又は関係により一緒に関連付けられたエンティティの集まりで構成することができる。
・関係：これらは、異なるエンティティがいかに互いに関連するかを記述するオブジェクトである。関係は、複数のエンティティを組み合わせて新しい複合エンティティにするのに使用することができる。
・制約：これらは、エンティティに追加された制約を記述する。制約は、エンティティの結果を実際に制限するフィルタを含む。幾つかの制約は強制される。強制される制約は、一意の制約又は非ヌル制約等の上流ソースから保証される。幾つかの制約は行使される。これらは、真であると信じられる制約である。データがこの制約に違反していることが見つかった場合は常に、ユーザに何らかの方法で通知される。
【０２２３】
[00251]フローは、論理モデルに１つ又は複数の分岐路を含むことができる。フローの分岐路は、各分岐路で同じ論理モデルを使用する。しかしながら、分岐路の各側に紛れて新しいエンティティがある。これらのエンティティは基本的に、列が投影されるか、又は削除される場合を除き、元のエンティティに渡される。
【０２２４】
[00252]新しいエンティティを作成する１つの理由は、エンティティにわたる任意の関係を追跡することである。これらの関係は、フィールドがいずれも変わらない場合、有効であり続ける。しかしながら、フィールドが変更される場合、新しいエンティティでの新しいフィールドになり、したがって、関係がもはや機能しないことが分かることになる。
【０２２５】
[00253]幾つかの実施態様では、ノード又は演算のピン止めが可能である。フローは、１組の演算の論理順序を記述するが、システムは、物理的な順序を異なるようにすることにより処理を自由に最適化することができる。しかしながら、ユーザは、論理順序及び物理順序が全く同じであることを確実にしたいことがある。これらの場合、ユーザはノードを「ピン止め」することができる。ノードがピン止めされる場合、システムは、ピンの前の演算が、ピンの後の演算の前に物理的に発生することを保証する。幾つかの場合、これにより、何らかの形態のマテリアライゼーションが生じる。しかしながら、可能な場合は常に、システムはこれを通して流れる。
【０２２６】
[00254]物理モデルは、特定のポイントでの論理モデルのマテリアライゼーションを記述する。各物理モデルは、その物理モデルの生成に使用された論理モデルへの参照を有する。物理モデルは、キャッシュ、増分的フロー実行、及びロード演算に重要である。物理モデルは、このポイントまでの論理モデルを記述する一意のハッシュであるフローの結果を含む任意のファイルへの参照を含む。物理モデルは、実行のために生成されたＴＤＳ（Tableauデータソース）及びＡＱＬ（分析クエリ言語）も指定する。
【０２２７】
[00255]ノード及び演算は基本動詞である。モデル内のノードは、データがいかに整形、計算、及びフィルタリングされるかを定義する演算を含む。ＵＩ言語と一貫した状態を保つために、「演算」という用語は、何かを行うフロー内の「ノード」の１つを指す。ノードは、演算を含み、ＵＩのフローペインにおいてユーザが見るものにマッピングされるコンテナを指すのに使用される。各専用ノード／演算には、いかに演算するかを記述する属性が関連付けられる。
【０２２８】
[00256]４つの基本的なタイプのノードがある：入力演算、変換演算、出力演算、及びコンテナノード。入力演算は、何らかの外部ソースから論理モデルを作成する。例には、ＣＳＶをインポートする演算がある。入力演算は、ＥＴＬにおけるＥ（抽出）を表す。変換演算は論理モデルを新しい論理モデルに変換する。変換演算は、論理モデルを取り入れ、新しい論理モデルを返す。変換ノードはＥＴＬにおけるＴ（変換）を表す。一例は、列を既存の論理モデルに追加する投影演算である。出力演算は、論理モデルを取り入れ、論理モデルをマテリアライズして何らかの他のデータストアにする。例えば、論理モデルをとり、その結果をマテリアライズしてＴＤＥにする演算。これらの演算は、ＥＴＬにおけるＬ（ロード）を表す。コンテナノードは、フローにわたり複合が概ねいかに行われるかの基本抽象化であり、ノードがＵＩにおいて示される際、何が示されるべきかの抽象化も提供する。
【０２２９】
[00257]図８Ｂに示されるように、タイプシステムは３つの主要概念からなる：
・演算は原子動作であり、各演算は入力及び出力並びに必要とされる１組のフィールドを有する。
・必要とされるフィールドは、演算により必要とされるフィールドである。必要とされるフィールドは、空のタイプ環境を用いて演算を評価し、次に、「仮定」された任意のフィールドを収集することによって決定することができる。
・タイプ環境は、フローの所与のポイントでタイプをいかに調べるかを決めるコンストラクトである。フローグラフにおける各「エッジ」はタイプ環境を表す。
【０２３０】
[00258]タイプチェックは、２つのフェーズで実行される。タイプ環境作成フェーズでは、システムは、フローの方向においてフローを通して実行する。システムは、何のタイプが各ノードにより必要とされるか及び各ノードがどのタイプ環境を出力するかを理解する。フローが抽象である（例えば、実際にいかなる入力ノードにも接続しない）場合、空のタイプ環境が使用される。タイプ改善は第２のフェーズである。このフェーズでは、システムは、第１のフェーズからのタイプ環境をとり、それらを「逆方向」に流して、タイプ環境作成において発生した任意のタイプナローイングがタイプ競合を生み出したか否かを調べる。このフェーズでは、システムは、サブフロー全体で必要とされる１組のフィールドも作成する。
【０２３１】
[00259]各演算には、タイプ環境が関連付けられる。この環境は、アクセス可能である全てのフィールド及びタイプを含む。図８Ｃに示されるように、タイプ環境は５つの属性を有する。
【０２３２】
[00260]環境は「オープン」又は「クローズド」のいずれかであることができる。環境がオープンである場合、環境が知らないフィールドがあり得ると仮定する。この場合、分からない任意のフィールドは、任意のタイプであると仮定される。これらのフィールドは、AssumedTypeフィールドに追加される。環境がクローズドである場合、環境が全てのフィールドを知っていると仮定し、したがって、未知のあらゆるフィールドは失敗である。
【０２３３】
[00261]全ての既知のタイプは、タイプメンバ内にある。これは、フィールド名からタイプへのマッピングである。タイプは、別のタイプ環境であり得、又はフィールドであることができる。フィールドは最も基本的なタイプである。
【０２３４】
[00262]各フィールドは２つの部分で構成される。basicTypesは、フィールドに可能なタイプの組を記述する１組のタイプである。この組が１つの要素しか有さない場合、そのタイプが何であるかは分かる。組が空の場合、タイプエラーがあった。組が２つ以上の要素を有する場合、幾つかの可能なタイプがある。システムは、必要な場合、解決し、更なるタイプナローイングを行うことができる。derivedFromは、この１つの導出に繋がるフィールドへの参照である。
【０２３５】
[00263]スコープ内の各フィールドは、潜在的な１組のタイプを有する。各タイプは、ブール、文字列、整数、デシマル、日付、日時、ダブル、ジオメトリ、及び持続時間の任意の組合せであることができる。「Any（任意）」タイプもあり、これは、何であることもできるタイプの簡潔表現である。
【０２３６】
[00264]オープンタイプ環境の場合、存在しないことが分かっているフィールドの場合があり得る。例えば、「フィールド削除」演算後、システムは、タイプ環境におけるフィールドを全ては知らないことがある（タイプ環境がオープンであるため）が、システムは、直前に削除したフィールドがそこにないことを知る。タイプ環境属性「NotPresent(存在せず)」は、そのようなフィールドの識別に使用される。
【０２３７】
[00265]AssumedTypes(仮定タイプ）属性は、定義されるのではなく参照されるため、追加されたタイプのリストである。例えば、オープンタイプ環境で評価される表現［Ａ］＋［Ｂ］がある場合、システムは、２つのフィールド：Ａ及びＢがあると仮定する。AssumedTypes属性は、何がこのように追加されたかをシステムが追跡できるようにする。これらのフィールドは、更なるタイプ選別及びコンテナに必要とされるフィールドを特定可能にするために、ロールアップすることができる。
【０２３８】
[00266]「Previous（前）」タイプ環境属性は、導出元のタイプ環境への参照である。タイプ不一致を探してフローを遡る間、タイプ改善段階で使用される。
【０２３９】
[00267]タイプ環境は創作することもできる。これは、複数の入力をとる演算で発生する。タイプ環境が統合される場合、各タイプ環境をそのタイプの集まり内の値にマッピングする。更なるタイプ解決が次に、個々のタイプ環境にデリゲートされる。次に、多くの場合、何らかの方法でタイプ環境を「フラット化」して、タイプとしてフィールドのみを有する新しいタイプ環境を作成することにより、このタイプ環境を出力タイプ環境に変換するのは、演算子次第である。
【０２４０】
[00268]これは、各自の表現に異なる環境からの全てのフィールドを厳密に使用し、環境を出力タイプ環境にマッピングする方法を有するために、結合及び和結合演算子により使用される。
【０２４１】
[00269]入力ノードにより作成されるタイプ環境は、読み出し中のデータソースによって返されるスキーマである。ＳＱＬデータベースの場合、これは、抽出中のテーブル、クエリ、記憶された手順、又はビューのスキーマである。ＣＳＶファイルの場合、これは、ユーザが列に関連付けられたタイプが何であれ、そのタイプを有するファイルからプルされるスキーマである。各列及びそのタイプは、フィールド／タイプマッピングになる。加えて、タイプ環境はクローズドと記される。
【０２４２】
[00270]変換ノードのタイプ環境は、その入力の環境である。複数の入力を有する場合、統合されて、演算のタイプ環境を作成する。出力は、演算子に基づく１つのタイプ環境である。図８Ｊ−１〜図８Ｊ−３は演算の多くを列挙する。
【０２４３】
[00271]コンテナノードは複数の入力を有し得、したがって、そのタイプ環境は、適切な子タイプ環境を適切な出力ノードにルーティングする複合タイプ環境である。コンテナが再使用のためにプルアウトされる場合、各入力の空のタイプ環境を用いて解決されて、依存性を特定する。
【０２４４】
[00272]幾つかの実施態様では、コンテナノードは、２つ以上の出力を有することが可能な唯一のタイプである。この場合、コンテナノードは複数の出力タイプ環境を有し得る。これは、任意のノードで生じることができる出力の分岐と混同されるべきではない。しかしながら、出力の分岐の場合、各出力エッジは同じタイプ環境を有する。
【０２４５】
[00273]システムがフィールドの競合要件を発見する場合、タイプエラーがフラグされる少数の場合がある。未解決フィールドはこの段階でエラーとして扱われず、その理由は、この段階は、非制限入力がある状態でフローにおいて生じ得るためである。しかしながら、ユーザがフローを実行しようとする場合、未解決変数は、報告される問題である。
【０２４６】
[00274]入力の多くは、特定の定義のタイプを有する。例えば、特定の定義は、ＶＡＲＣＨＡＲ（２０００）の代わりにＣＨＡＲ（１０）を使用する、フィールドがどの照合を使用するか、又はデシマル型が有するスケール及び精度を含む。幾つかの実施態様は、タイプシステムの一環としてこれらを追跡しないが、ランタイム情報の一環として追跡する。
【０２４７】
[00275]ＵＩ及び中間階層は、ランタイムタイプを取得することが可能である。この情報は、通常のコールバックを通して流れることが可能であるとともに、ｔｅｍｐｄｂのタイプに埋め込むことが可能である（例えば、システムがキャッシュされた実行から埋められる場合）。ＵＩは、より特定の既知のタイプをユーザに示すが、それらに基づいてタイプチェックしない。これにより、システムの残りにより単純化されたタイプを使用させながら、より特定のタイプを使用する出力ノードを作成することができる。
【０２４８】
[00276]図８Ｄは、全てのデータ型が既知のフローに基づく単純なタイプチェックを示す。図８Ｅは、タイプが完全に既知の単純なタイプ失敗を示す。図８Ｆは、部分フローの単純なタイプ環境計算を示す。図８Ｇは、パッケージされたコンテナノードのタイプを示す。図８Ｈは、より複雑なタイプ環境シナリオを示す。図８Ｉは、より複雑なタイプ環境シナリオの再使用を示す。
【０２４９】
[00277]幾つかの実施態様は、データ型を推測し、推測されたデータ型を使用して、データフローを最適化又は検証する。これは、ＸＬＳ又はＣＳＶファイル等のテキストベースのデータソースに特に有用である。データ要素がフローにおいて後にいかに使用されるかに基づいて、データ型は推測できることがあり、推測されたデータ型は、フローの初期に使用することができる。幾つかの実施態様では、文字列として受信したデータ要素は、データソースから検索した直後、適切なデータ型としてキャストすることができる。幾つかの場合、データ型の推測は再帰的である。すなわち、あるデータ要素のデータ型を推測することにより、システムは、１つ又は複数の追加のデータ要素のデータ型を推測することが可能である。幾つかの場合、データ型推測は、厳密なデータ型を決定せずに、１つ又は複数のデータ型を除外することが可能である（例えば、データ要素が数値であると決定するが、整数であるか、それとも浮動小数点数であるかを決定することができない）。
【０２５０】
[00278]タイプエラーの大半は、タイプチェック段階において見つけられる。これは、初期タイプ環境の計算直後であり、各タイプについて分かっていることに基づいてスコープを改善する。
【０２５１】
[00279]このフェーズは、全ての終末タイプ環境で開始される。タイプ環境毎に、システムはその前の環境に引き返す。プロセスは、クローズド環境又は前の環境がない環境に達するまで引き返す。次にプロセスは、各環境においてタイプをチェックして、任意のフィールドでタイプが異なるか否かを判断する。タイプが異なり、それらの交点がヌルである場合、プロセスはタイプエラーを発生させる。任意のフィールドでタイプが異なり、交点がヌルではない場合、プロセスは、そのタイプを交点に設定し、それらのタイプ環境を有する、影響されるあらゆるノードは再計算される。加えて、「仮定」されるあらゆるタイプは、前のタイプ環境に追加され、タイプ環境は再計算される。
【０２５２】
[00280]追跡される少数の機微がある。まず、フィールド名はそれ自体、必ずしも一意である必要はなく、その理由は、ユーザは、異なるタイプを有する何かでフィールドを上書きすることができるためである。その結果、プロセスは、あるタイプから、その生成に使用されたタイプへのポインタを使用し、それにより、グラフにおける異なる部分で同じ名前に解決される非関連のことにより騙されることを回避する。例えば、フィールドＡがタイプ［int,decimal］を有するが、Ａを文字列にする投影を行うノードがあると考える。Ａの先のバージョンに戻ることはエラーであり、タイプは機能していないと言えるであろう。その代わり、このポイントでのバックトラックは、addFIELD演算を超えてＡをバックトラックしない。
【０２５３】
[00281]タイプチェックは、一度に１つの変数をナローイングする。上記ステップでは、タイプチェックは、既知の変数を再計算する前、１つのみの変数に適用される。これは、関数１（string,int）及び関数１（int,string）等の複数のシグネチャで関数に過負荷がかかる場合、安全であるためである。これが関数１（［Ａ］，「Ｂ」）と呼ばれると考える。プロセスは、タイプがＡ：［String,int]及びＢ：［String,,int］であると決定する。しかしながら、タイプをＡ：［String］及びＢ：「String」と解決するのは無効であり、その理由は、ＡがStringである場合、Ｂはintである必要があるためである。幾つかの実施態様は、各タイプナローイング後にタイプ環境計算を再実行することにより、この種の依存性に対応する。
【０２５４】
[00282]幾つかの実施態様は、ナローイングされた変数を含む必要とされるフィールドを実際に有するノードに対してのみ仕事をすることにより、何の仕事をすべきかを最適化する。Ａのナローイングは、Ｂも同様にナローイングさせることになり得るという意味で、ここにはわずかな機微がある。上記例の関数１を取り上げる。これらの場合、システムは、Ｂが変更されたときを知り、そのナローイングも同様にチェックする必要がある。
【０２５５】
[00283]演算子がいかに作用するかを見た場合、ここでは、「オープンであるか（Is Open）」、「マルチ入力（Multi-Input）」、「入力タイプ（Input Type）」、及び「結果タイプ（Resulting Type）」として識別される４つの主要属性に関して演算子を考えるのが最良である。
【０２５６】
[00284]演算は、列を通って流れる場合、オープンとして示される。例えば、「フィルタ」は、入力にある任意の列は出力にもあるため、オープン演算である。Ｇｒｏｕｐ  ｂｙは、集計又はグループ化されない任意の列は結果型にないため、オープンではない。
【０２５７】
[00285]「マルチ入力」属性は、この演算が複数の入力エンティティをとるか否かを指定する。例えば、結合は、２つのエンティティをとり、それらを１つにするため、マルチ入力である。和結合は、マルチ入力である別の演算である。
【０２５８】
[00286]「入力タイプ」属性は、ノードが必要とするタイプを指定する。マルチ入力演算の場合、これは、各入力がそれ自体のタイプを含む複合タイプである。
【０２５９】
[00287]「結果タイプ」属性は、この演算から生じる出力タイプを指定する。
【０２６０】
[00288]図８Ｊ−１、図８Ｊ−２、及び図８Ｊ−３における表は、最も一般に使用される演算子の多くの属性を示す。
【０２６１】
[00289]多くの場合、フローは、ニーズが変わるにつれて、時間の経過に伴って作成される。フローが、生物進化によって成長する場合、大きく且つ複雑になることができる。ユーザは時に、変化しつつあるニーズに応えるため又は理解がより容易なようにフローを再編成するために、フローを変更する必要がある。フローのそのようなリファクタリングは、多くのＥＴＬツールでは困難であるか、又は不可能である。
【０２６２】
[00290]本明細書での実施態様は、リファクタリングを可能にするのみならず、ユーザがリファクタリングするのを支援もする。技術レベルで、システムは、任意のノード（又は一連のノード）の必要フィールドを取得し、次にそれを収容することができるタイプ環境を有する任意のポイントにおけるドロップターゲットをライトアップすることができる。
【０２６３】
[00291]別のシナリオは、フローにおいて既存のノードを再使用することを含む。例えば、ユーザが演算の文字列をとり、カスタムノードを作成したいと考える。カスタムノードは、「保険コードを正規化する」ように働く。ユーザは、幾つかの演算を内部に有するコンテナノードを作成することができる。システムは次に、それに必要なフィールドを計算することができる。ユーザは、保存コマンドを使用するか、又はコンテナノードを左側ペイン３１２にドラッグすることにより、将来使用するためにノードを保存することができる。ここで、ユーザが左側ペインにおけるパレットからそのノードを選択すると、システムはフローにおけるドロップターゲットをライトアップし、ユーザはノードをドロップターゲットの１つにドロップすることができる（例えば、前出のリファクタリング例と全く同様に）。
【０２６４】
[00292]ＥＴＬは煩雑になり得るため、ここでの実施態様は、様々なシステム拡張を可能にする。拡張には以下がある。
・ユーザ定義のフロー演算。ユーザは、入力演算、出力演算、及び変換演算を用いてデータフローを拡張することができる。これらの演算は、カスタム論理又は分析を使用して、行の内容を変更することができる。
・制御フロースクリプト。ユーザは、シェアからのファイルのダウンロード、ファイルの圧縮解除、ディレクトリ内のあらゆるファイルでのフローの実行等の非データフロー演算を行うスクリプトで構築することができる。
・コマンドラインスクリプト。ユーザは、コマンドラインからフローを実行することができる。
【０２６５】
[00293]ここでの実施態様は、人々が提供された拡張性をいかに使用するかに関して、言語に依存しない手法をとる。
【０２６６】
[00294]第１の拡張により、ユーザは、フローに合ったカスタムノードを構築することができる。拡張ノードを作成する以下の２つの部分がある。
・出力のタイプを定義する。例えば、「入力されるあらゆる物及び新しい列’ｆｏｏ’」。
・変換を実際に実行するスクリプト又は実行可能プログラム（executable）を提供する。
【０２６７】
[00295]幾つかの実施態様は、ユーザ定義の拡張を可能にする２つのノードタイプを定義する。「ScriptNode」は、ユーザが、行を操作し、行を返すスクリプトを書くことができるノードである。システムはＡＰＩ関数を提供する。ユーザは次に、変換（又は入力又は出力）ノードをスクリプトとして書く（例えば、Python又はJavascriptで）ことができる。「ShellNode」は、ユーザが実行する実行可能プログラムを定義し、行を実行可能プログラムにパイピングすることができるノードである。実行可能プログラムは次に、結果をstdoutに書き出し、エラーをstderrに書き込み、それを終えると終了する。
【０２６８】
[00296]ユーザがフローの拡張を作成する場合、内部処理はより複雑である。１つのＡＱＬステートメントまでのあらゆる物をコンパイルする代わりに、プロセスは、カスタムノードの前後で評価を２つに分割し、最初の評価からの結果をノードに向ける。これは図８Ｋ及び図８Ｌに示され、これらの図では、ユーザ定義ノード８５０はフローを２つの部分に分割する。フロー評価中、ユーザ定義スクリプトノード８５２は、フローの最初の部分からデータを受信し、フローの次の部分に出力を提供する。
【０２６９】
[00297]流れるデータを何らかの方法で変更するカスタマイズに加えて、ユーザは、フローがいかに実行されるかを制御するスクリプトを書くことができる。例えば、ユーザが、スプレッドシートを毎日公開させるシェアからデータをプルする必要があると考える。定義されたフローは、ＣＳＶ又はExcelファイルの対処の仕方を既に知っている。ユーザは、リモートシェアにわたって反復し、関連ファイルをプルダウンし、それらのファイルにわたり実行する制御スクリプトを書くことができる。
【０２７０】
[00298]ユーザがデータフローノードに追加することができる、パターン和結合等の多くの一般的な演算がある。しかしながら、技術が進化し続けるにつれて、システム定義データフローノードによって収容されないデータを取得又は記憶する方法が常に存在することになる。これらは、制御フロースクリプトが妥当な場合である。これらのスクリプトは、フローの一環として実行される。
【０２７１】
[00299]上述したように、フローはコマンドラインから呼び出すこともできる。これにより、他のプロセス又は夜間ジョブにおけるスクリプトに分岐路を埋め込むことができる。
【０２７２】
[00300]実施態様は、多くの有用な特徴を提供するフロー評価プロセスを有する。これらの特徴は以下を含む。
・フローを最初から最後まで実行する。
・順序又は「ピン止め」演算を保証するためにフローを分断する。
・第三者コードを実行させることができるようにフローを分断する。
・フローを実行するが、上流データソースまで行く代わりに、前に実行したフローの出力を除いて実行する。
・ローカルキャッシュを埋めるために、フローの幾つかの部分を事前実行する。
【０２７３】
[00301]評価プロセスは、論理モデルと物理モデルとの間の相互作用に基づいて機能する。任意のマテリアライズされた物理モデルは、フローの開始点であることができる。しかしながら、言語ランタイムは、フローのどのサブセクションを実行するかを定義する抽象化を提供する。一般に、ランタイムは、フルフローに対してサブフローをいつ実行するかを決定しない。それは他の構成要素によって決定される。
【０２７４】
[00302]図８Ｍは、フロー全体の実行が入力ノード及び出力ノードに暗示された物理モデルで開始されることを示す。図８Ｎは、部分フローの実行が、結果を有する物理モデルをマテリアライズすることを示す。図８Ｏは、前の結果に基づくフローの部分実行を示す。
【０２７５】
[00303]物理モデルは、処理を最適化するように順序替えすることができるが、論理モデルは、これらの詳細は一般に関連しないため、これらの詳細をユーザから隠す。フロー評価器は、ノードがフローに示される順序で評価されるように見えさせる。ノードがピン止めされる場合、実際にそこでフローをマテリアライズさせ、左側が、右側の前に評価することを保証する。分岐路を有するフローでは、共通の事前フローが１回のみ実行される。プロセスは等羃であり、失敗に起因して入力演算子を再び呼び出し、失敗しないことができることを意味する。なお、戻ってきたデータが、最初と全く同じである要件はない（すなわち、上流データソースのデータが、第１の試行と第２の試行との間で変化した場合）。
【０２７６】
[00304]変換演算子の実行は副作用を有さない。他方、抽出演算子は通常、副作用を有する。フロー内の前のデータソースを変更する任意の演算は、フローの次の実行まで見られない。ロード演算子は一般に、副作用を有さないが、例外がある。実際には、幾つかのロード演算子は副作用を必要とする。例えば、シェアからファイルをプルして圧縮解凍することは、副作用と見なされる。
【０２７７】
[00305]幾つかの実施態様は、列名に関して大文字及び小文字を区別するが、幾つかの実施態様は区別しない。幾つかの実施態様は、列名が大文字及び小文字を区別するか否かを指定するユーザ構成可能なパラメータを提供する。
【０２７８】
[00306]一般に、キャッシュされたオブジェクトのビューは常に、時間的に「前に」進む。
【０２７９】
[00307]図８Ｐ及び図８Ｑは、ピン止めノード８６０を有するフローの評価を示す。フロー評価中、ピン前のノードがまず実行されて、ユーザノード結果８６２を作成し、ユーザノード結果８６２は、フローの後の部分で使用される。なお、ピン止めは、各部分内の実行の再配置を妨げない。ピン止めノードは実際には、論理的なチェックポイントである。
【０２８０】
[00308]ユーザによりピン止めされたノードに加えて、幾つかのノードは、実行する演算に基づいて本質的にピン止めされる。例えば、ノードがカスタムコード（例えば、Javaプロセス）をコールアウトする場合、論理演算はノードにわたり移動させることができない。カスタムコードは「ブラックボックス」であるため、その入力及び出力は明確に定義されなければならない。
【０２８１】
[00309]幾つかの場合では、演算を方々移動させることは、性能を改善することができるが、一貫性が下がるという副作用を生み出す。幾つかの場合、ユーザは、一貫性を保証する方法としてピン止めを使用することができるが、性能を犠牲にする。
【０２８２】
[00310]上述したように、ユーザは、データグリッド３１５においてデータ値を直接編集することができる。幾つかの場合、システムは、ユーザの編集に基づいて一般ルールを推測する。例えば、ユーザは、文字列「１９」をデータ値「７５」に追加して、「１９７５」を作成し得る。データ及びユーザ編集に基づいて、システムは、ユーザが、文字列を記入して、世紀が欠けている２文字の年に４文字年を形成したいというルールを推測し得る。幾つかの場合、推測は、単に変更自体（例えば、先頭に「１９」を追加する）に基づくが、他の場合、システムはまた、列中のデータを推測のベースにもする（例えば、その列は範囲「７４」〜「９９」の値を有する）。幾つかの実施態様では、ユーザは、ルールを列中の他のデータ値に適用する前、ルールを確認するように促される。幾つかの実施態様では、ユーザはまた、同じルールを他の列に適用することを選ぶこともできる。
【０２８３】
[00311]データ値へのユーザ編集は、今述べたように現在のデータ値への追加、文字列の一部の削除、特定の部分文字列の別の部分文字列での置換、又はこれらの任意の組合せを含むことができる。例えば、電話番号は、（ＸＸＸ）ＹＹＹ−ＺＺＺＺ等の様々なフォーマットで指定し得る。ユーザは、括弧及びダッシュを削除し、ドットを追加して、ＸＸＸ．ＹＹＹ．ＺＺＺＺを作成するように１つの特定のデータ値を編集し得る。システムは、データ値の編集の一事例に基づいてルールを推測し、ルールを列全体に適用することができる。
【０２８４】
[00312]別の例として、数値フィールドも同様に推測されたルールを有することができる。例えば、ユーザが負の値をゼロで置換する場合、システムは、全ての負の値をゼロにすべきであると推測し得る。
【０２８５】
[00313]幾つかの実施態様では、２つ以上のデータ値が、共有ルールに従ってデータグリッド３１５の１列で編集された場合、ルールが推測される。
【０２８６】
[00314]図９は、演算が命令的と示されるか、それとも宣言的と示されるかに応じて、論理フロー３２３を異なる方法でいかに実行することができるかを示す。このフローでは、２つの入力データセット：データセットＡ９０２及びデータセットＢ９０４がある。このフローでは、これらのデータセットはデータソースから直接検索される。フローに従って、２つのデータセット９０２及び９０４は、結合演算９０６を使用して組み合わせられて、中間データセットを生成する。結合演算後、フロー３２３はフィルタ９０８を適用し、フィルタ９０８は、結合演算９０６により作成された第１の中間データセットよりも少数の行を有する別の中間データセットを作成する。
【０２８７】
[00315]このフローの全てのノードが命令的と示される場合、フローの実行は、厳密にノードが指定するものである：データセット９０２及び９０４はデータソースから検索され、これらのデータセットはローカルに組み合わせられ、次に、フィルタによって行数を低減する。
【０２８８】
[00316]このフロー内のノードが宣言的実行を有すると示される（これが一般にデフォルトである）場合、実行最適化器は物理フローを認識することができる。第１のシナリオでは、データセット９０２及び９０４が別個のデータソースから来たものであり、フィルタ９０８がデータセットＡ９０２内のフィールドのみに適用されると考える。この場合、フィルタは、データセットＡ９０２を検索したクエリに押し返すことができ、したがって、検索され処理されるデータ量を低減することができる。これは、データセットＡ９０２がリモートサーバから検索され、且つ／又はフィルタが相当数の行をなくす場合、特に有用であることができる。
【０２８９】
[00317]第２のシナリオでは、宣言的実行を再び仮定するが、データセットＡ９０２及びデータセットＢ９０２が両方とも同じデータソースから検索される（例えば、これらのデータセットはそれぞれ、同じデータベースサーバの同じデータベース内のテーブルに対応する）と考える。この場合、フロー最適化器は、実行全体をリモートサーバに押し返し、２つのテーブルを結合し、フィルタノード９０８によって指定されたフィルタ演算を適用するＷＨＥＲＥ句を含む１つのＳＱＬクエリを構築し得る。この実行柔軟性は、全体の実行時間を大幅に短縮することができる。
【０２９０】
[00318]ユーザはデータフローを構築し、時間の経過に伴って変更し、したがって、幾つかの実施態様は増分的なフロー実行を提供する。各ノードの中間結果は保存され、必要な場合のみ再計算される。
【０２９１】
[00319]ノードを再計算する必要があるか否かを判断するために、幾つかの実施態様は、フローハッシュ及びベクトルクロックを使用する。フロー３２３内の各ノードは、それ自体のフローハッシュ及びベクトルクロックを有する。
【０２９２】
[00320]所与のノードのフローハッシュは、所与のノードまでの、所与のノードを含むフロー内の全ての演算を識別するハッシュ値である。フロー定義の任意の態様が変更された（例えば、ノードの追加、ノードの削除、又は任意のノードでの演算の変更）場合、ハッシュは異なることになる。なお、フローハッシュはフロー定義のみを追跡し、土台をなすデータは見ない。
【０２９３】
[00321]ベクトルクロックは、ノードにより使用されるデータのバージョニングを追跡する。所与のノードは複数のソースからのデータを使用し得るため、ベクトルである。データソースは、所与のノードまでの、所与のノードを含む任意のノードによってアクセスされる任意のデータソースを含む。ベクトルは、各データソースに、単調に増大するバージョン値を含む。幾つかの場合、単調に増大する値はデータソースからのタイムスタンプである。なお、データがフロー内のいかなるノードによっても処理されなかった場合、値はデータソースに対応する。幾つかの場合、データソースは、単調に増大するバージョン値を提供することができる（例えば、データソースは編集タイムスタンプを有する）。データソースがこのようなバージョン番号を提供することができない場合、データ準備アプリケーション２５０は、サロゲート値を計算する（例えば、クエリがデータソースに送信されたとき又はデータソースから検索されたとき）。一般に、データ準備アプリケーションがデータを最後に照会したときを示す値の代わりに、データが最後に変更されたときを示すバージョン値を有することが好ましい。
【０２９４】
[00322]フローハッシュ及びベクトルクロックを使用することにより、データ準備アプリケーション２５０は、再計算する必要があるノード数を制限する。
【０２９５】
[00323]本明細書における本発明の説明に使用される用語は、特定の実施形態を説明することのみを目的とし、本発明の限定を意図しない。本発明の説明及び添付の特許請求の範囲で使用される場合、単数形「a」、「an」、及び「the」は、状況が明確に別段のことを示す場合を除き、複数形も同様に含むことが意図される。本明細書で使用される場合、「及び／又は」という用語が、関連付けられ列挙された項目の１つ又は複数のありとあらゆる可能な組合せを指し、包含することも理解される。「含む（comprises）」及び／又は「含み（comprising）」という用語が、本明細書で使用される場合、述べられた特徴、ステップ、演算、要素、及び／又は構成要素の存在を指定するが、１つ又は複数の他の特徴、ステップ、演算、要素、構成要素、及び／又はそのグループの存在又は追加を除外しないことが更に理解される。
【０２９６】
[00324]上記説明は、説明を目的としたものであり、特定の実施態様を参照して説明された。しかしながら、上記の例示的な考察は、網羅的又は開示される厳密な形態に本発明を限定する意図はない。上記教示に鑑みて多くの変更及び変形が可能である。実施態様は、本発明の原理及びその実際の適用を最良に説明し、それにより、当業者が、意図される特定の用途に合った様々な変更を行って本発明及び様々な実施態様を最良に利用できるようにするために選ばれ説明された。
【図１】
2020504347.tif 000003
【図２】
2020504347.tif 000004
【図３Ａ】
2020504347.tif 000005
【図３Ｂ】
2020504347.tif 000006
【図３Ｃ】
2020504347.tif 000007
【図３Ｄ】
2020504347.tif 000008
【図３Ｅ】
2020504347.tif 000009
【図４Ａ】
2020504347.tif 000010
【図４Ｂ】
2020504347.tif 000011
【図４Ｃ】
2020504347.tif 000012
【図４Ｄ】
2020504347.tif 000013
【図４Ｅ】
2020504347.tif 000014
【図４Ｆ】
2020504347.tif 000015
【図４Ｇ】
2020504347.tif 000016
【図４Ｈ】
2020504347.tif 000017
【図４Ｉ】
2020504347.tif 000018
【図４Ｊ】
2020504347.tif 000019
【図４Ｋ】
2020504347.tif 000020
【図４Ｌ】
2020504347.tif 000021
【図４Ｍ】
2020504347.tif 000022
【図４Ｎ】
2020504347.tif 000023
【図４Ｏ】
2020504347.tif 000024
【図４Ｐ】
2020504347.tif 000025
【図４Ｑ】
2020504347.tif 000026
【図４Ｒ】
2020504347.tif 000027
【図４Ｓ】
2020504347.tif 000028
【図４Ｔ】
2020504347.tif 000029
【図４Ｕ】
2020504347.tif 000030
【図４Ｖ】
2020504347.tif 000031
【図５Ａ】
2020504347.tif 000032
【図５Ｂ】
2020504347.tif 000033
【図６Ａ】
2020504347.tif 000034
【図６Ｂ】
2020504347.tif 000035
【図６Ｃ】
2020504347.tif 000036
【図７Ａ】
2020504347.tif 000037
【図７Ｂ】
2020504347.tif 000038
【図７Ｃ】
2020504347.tif 000039
【図７Ｄ】
2020504347.tif 000040
【図８Ａ】
2020504347.tif 000041
【図８Ｂ】
2020504347.tif 000042
【図８Ｃ】
2020504347.tif 000043
【図８Ｄ】
2020504347.tif 000044
【図８Ｅ】
2020504347.tif 000045
【図８Ｆ】
2020504347.tif 000046
【図８Ｇ】
2020504347.tif 000047
【図８Ｈ】
2020504347.tif 000048
【図８Ｉ】
2020504347.tif 000049
【図８Ｊ−１】
2020504347.tif 000050
【図８Ｊ−２】
2020504347.tif 000051
【図８Ｊ−３】
2020504347.tif 000052
【図８Ｋ】
2020504347.tif 000053
【図８Ｌ】
2020504347.tif 000054
【図８Ｍ】
2020504347.tif 000055
【図８Ｎ】
2020504347.tif 000056
【図８Ｏ】
2020504347.tif 000057
【図８Ｐ】
2020504347.tif 000058
【図８Ｑ】
2020504347.tif 000059
【図９】
2020504347.tif 000060
【国際調査報告】
2020504347.tif 000061
2020504347.tif 000062
2020504347.tif 000063