Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

一般的なテーブル式の使用

公開日: Mar 23, 2026
タスク
Tableau で一般的なテーブル式 (CTE) を使用する方法。
 
ステップ
  1. [Data]> [New Data Source] を選択し、目的のデータソースを選択します。
  2. [サーバー接続] ダイアログボックスで、[Initial SQL] を選択します。
  3. [Initial SQL (初期 SQL)] 項目に CTE を入力します。
    次の例では、「Employees」テーブルの再帰的なセルフ結合を使用して、OrganizationChart という名前の一般的なテーブル式を使用して従業員レポート階層を構築しています。構文はデータソースによって若干異なります。 

    SQL Server では、クエリの最後に SELECT ではなく SELECT INTO [Temp Table Name] を使用してローカル一時テーブルを作成します。 
    WITH OrganizationChart (Id, [Name],  [Level], ManagerID) AS (
    SELECT
    Id、[名前]、0 ([レベル])、ManagerID
    FROM
    [dbo].[Employees] emp
    WHERE
    ManagerID IS NULL
    すべて結合
    SELECT
    emp.ID、 emp.[名前]、[レベル] + 1、 emp.ManagerID
    FROM [dbo].[Employees] emp
    inner JOIN OrganizationChart d ON (内部結合組織グラフ)
    emp.ManagerID = d.Id
    )
    SELECT  [Id], [Name], [Level], [ManagerID] INTO #ctedemo from OrganizationChart


    Teradata では、CREATE VOLATILE TABLE [Temp Table Name] を使用して一時テーブルを作成します。 
    CREATE VOLATILE TABLE ctedemo AS (WITH RECURSIVE OrganizationChart (Id, Name,  Level, ManagerID) AS) (VOLATILE TABLE ctedemo AS (再帰的な組織図 (Id, Name,  Level, ManagerID) AS を使用して) (
    SELECT
    ID、名前、0 (レベル)、ManagerID
    FROM
    TEST.Employees emp
    WHERE
    ManagerID IS NULL
    すべて結合
    SELECT
    emp.ID、 emp.Name、Level + 1、 emp.ManagerID
    FROM TEST.Employees emp
    inner JOIN OrganizationChart d ON (内部結合組織グラフ)
    emp.ManagerID = d.Id
    ) SELECT  Id, Name, Level, ManagerID from OrganizationChart) WITH DATA NO PRIMARY INDEX (プライマリインデックスのない組織図の ID、名前、レベル、マネージャー ID を選択)
    ON COMMIT PRESERVE ROWS


    IBM DB2 の場合:
    コミット時に GLOBAL TemporaryY TABLE SESSION.ctedemo(ID int, Name varchar(50), Level int, ManagerID int) を宣言して、replace が記録されていない行を保持します。
    OrganizationChart (Id, Name,  Level, ManagerID) AS を使用して SESSION.ctedemo(ID, Name, Level, ManagerID) に挿入 (
    SELECT
    ID、名前、0 (レベル)、ManagerID
    FROM
    従業員EMP
    WHERE
    ManagerID IS NULL
    すべて結合
    SELECT
    emp.ID、 emp.Name、Level + 1、 emp.ManagerID
    FROM Employees emp, OrganizationChart d (従業員からEMP、組織図d)
    場所
    emp.ManagerID = d.Id
    )
    SELECT  OrganizationChart の
    ID、名前、レベル、ManagerID
     
  4. レコードを挿入した一時テーブルから選択するカスタム SQL クエリを作成します。 
    たとえば、SQL Server では次のようになります。 
    SELECT * from #ctedemo
    Teradata の場合: 
    Ctedemo から * を選択
    IBM DB2: 
    SELECT * FROM SESSION.ctedemo
     
次のような従業員テーブルがあります。

ID

名前

ManagerID

1

ジョン

NULL

2

ジム

1

3

ジェーン

1

4

トム

3

5

ボブ

4

6

ロブ

3

7

マイク

1

上記のソリューションでは、次のような結果が返されます。 

ID

名前

レベル

ManagerID

1

ジョン

0

NULL

2

ジム

1

1

3

ジェーン

1

1

7

マイク

1

1

4

トム

2

3

6

ロブ

2

3

5

ボブ

3

4

その他のリソース

Tableau がデータソースを照会する場合、カスタム SQL は次のようなクエリで渡されます。

[TableauSQL] として ( [ All your Custom SQL here (すべてのカスタム SQL はこちら)] ) から [TOP 1 * (上位 1 *)] を選択します。
SQL Server と Teradata では、サブクエリでの CTE の使用がサポートされていないため、エラーになります。
初期 SQL はサブクエリでは渡されないため、CTE に使用できます。

この機能を今後の製品リリースに組み込むことに賛成する方は、次のアイデアに投票してください。
CTE と SQL Server (v.10.0)

ナレッジ記事番号

001453743

 
読み込み中
Salesforce Help | Article