ストアド プロシージャの使用

ストアド プロシージャは、アプリケーションで使用できるサブルーチンであり、リレーショナル データベース システムへアクセスすることができます。Tableau で SAP Sybase ASE、Microsoft SQL Server、Teradata データベースへ接続すると、接続を定義するためにストアド プロシージャを使用することができます。

Oracle の場合、接続を定義する表関数を使用できます。Oracle 表関数はストアド プロシージャと同様に機能し、[データ ソース] ページ上の [ストアド プロシージ] にリストされます。

これらのデータ型のいずれかを使用してデータ ソースを作成している場合、Microsoft SQL Server の例に示したように、使用可能なプロシージャはストアド プロシージャに一覧表示されています。

プロシージャを左側のペインからキャンバスへドラッグするか、一覧表示されているプロシージャのいずれかをダブルクリックします。パラメーターをプロシージャで使用できる場合は、[パラメーター] ダイアログ ボックスが自動的に表示されます。 

値を入力する代わりに、既存の Tableau パラメーターを使用するかまたは新しい Tableau パラメーターを作成することができます。

その後ビュー内の Tableau パラメーターを表示する場合、ユーザーはプロシージャ内のパラメーターの値を対話形式で変更することができます。

ストアド プロシージャはフェデレーション、関連付け、結合に対応していません。これらは論理レイヤーの 1 つの論理テーブルで表され、結合/ユニオン キャンバス (物理レイヤー) を開くことは許可されていません。

ストアド プロシージャに関するメモ

ストアド プロシージャを使用して Tableau のデータ ソースを定義する場合、次の事柄に留意してください。

  • ストアド プロシージャが 1 つ以上の結果セットを返す場合、Tableau は最初の結果を読み取り、それ以外は無視します。

  • ストアド プロシージャが出力パラメーターを持っている場合、Tableauはフィルターしてストアド プロシージャを取り除きます。

  • 非スカラー型のパラメーターを持つストアド プロシージャは除外されます。

  • Tableau 内に一致する型がない結果セット列 (varbinary、geometry、hierarchyid など) は記録されます。すべての結果セット列が不明なデータ型にマッピングされる場合、Tableauに

    「結果セット..に使用可能な列がありません」というメッセージが表示されます。

  • 結果セットなしを返すストアド プロシージャは、[データ ソース] ページにリストされますが、選択する場合は機能しません。

  • ストアド プロシージャが要求するパラメーターに対して値が提供されていない場合、エラーが発生します。Tableau ではパラメーターが必要かどうかを前もって判断できません。

  • Tableau は、ストアド プロシージャのいずれの取引も管理しません。つまり、ストアド プロシージャの作成者は、ストアド プロシージャを呼び出す前の取引の開始またはその後それらのコミットを、Tableau に依存することはできません。

  • 列名は作業するストアド プロシージャで一意である必要があります。同じ名前の列が 2 つある場合、または名前が指定されていない場合、そのプロシージャで次のエラーが表示されます。

  • 1 つのストアド プロシージャに複数のクエリがある場合 (たとえば、別の表から値を読み取る場合、または一時的な組み合わせを保留にする場合)、各クエリは同じ列セットを同じ順番で返す必要があります (同じ名前とデータ型)。クエリ結果で列の順番と名前が一致するには、データ型が正しいことを確認するために明示的に CAST し、確実に正しいデータ型になるようにし (たとえば、 CAST(Username as VARCHAR(20)))、列に明示的に名前を付けます。ストアド プロシージャがこれらのガイドラインに従わない場合、次のエラー メッセージが表示されます。

    "InsertData: 非結合列エラー"

  • 1 つのストアド プロシージャに複数のクエリがあり (たとえば、別の表から値を読み取る場合、または一時的な組み合わせを保留にする場合)、プロシージャによりエラーが生成される場合、プロシージャの一番上に SET NOCOUNT ON の追加を試みます。これにより、Transact-SQL ステートメントにより影響される行数カウントを示すメッセージが、クエリの結果セットの一部として返されるのを防ぎます。

さらに、特定のデータベースに対して次の制限が適用されます。

Teradata データベースに対するストアド プロシージャの制限

Teradata データベースのストアド プロシージャに対して次の制限が適用されます。

  • 値をすべてのパラメーターに対して提供する必要があります。ユーザーが値を 1 つ以上のパラメーターに提供しない場合、ストアド プロシージャに提供される値が少なすぎるという旨の Teradata データベース エラーが表示されます。

SQL Server データベースに対するストアド プロシージャの制限

SQL Server データベースのストアド プロシージャに対して次の制限が適用されます。

  • ストアド プロシージャの結果セットに IMAGE 型や TEXT 型の列が含まれる場合、ストアド プロシージャは失敗し、"不適切な構文"エラー メッセージが表示されます。

  • 結果セットの全幅 (各行のバイト数) が 8,060 を超える場合、ストアド プロシージャは機能しません。これは、非常に幅の広い表 (何百もの列) や大規模なテキスト列のある表が、何千ものテキスト文字を保持しようとすることが原因で生じる可能性があります。

  • Tableau では、"sys" スキーマからのストアド プロシージャは表示されません。

  • ユーザーが、プロシージャが要求する 1 つ以上のパラメーターの値を提供しない場合、Tableau には次のような SQL Server データベース エラーが表示されます。「「プロシージャがパラメーター @x の値を要求しましたが、提供されませんでした。」

  • 複数のクエリを含むストアド プロシージャは、「ストアド プロシージャに関するメモ」(上記) に一覧表示されているガイドラインに従う必要があります。

  • Tableau Desktop では、Microsoft SQL Server の TIME データ型はサポートされていません。この種類のフィールドが Microsoft SQL Server データベースのストアド プロシージャに含まれる場合、Tableau Desktop ではインポートされません。

SAP Sybase ASE データベースに対するストアド プロシージャの制限

次の制約は、SAP Sybase ASE データベース (Windows のみ) でのストアド プロシージャーに適用されます。

  • データベースがリモート サーバーを適切に構成している必要があります。

  • ユーザーが、プロシージャが要求する 1 つ以上のパラメーターの値を提供しない場合、Tableau には次のような Sybase ASE データベース エラーが表示されます。「「プロシージャがパラメーター @x の値を要求しましたが、提供されませんでした。」

ありがとうございます!