結論

Tableauとは、データに接続してドラッグ操作でグラフやダッシュボードを作り、共有するBIツールです。読み方は「タブロー」です。

この記事でわかること

  • 製品7種の違いとCreator月75ドルなどの料金表
  • ドラッグ操作と同じ集計のSQL・Python実行結果12本
  • LOD表現3種・表計算・.twbのXMLの中身

2026年10月22日更新|PostgreSQL 16.15・Hyper API で集計を実行

Tableau は、つないだデータの列を「ディメンション(分ける項目)」と「メジャー(集計する数値)」に分け、ワークシートで1枚ずつグラフを作り、ダッシュボードにまとめて共有します。

flowchart TD
    A[データに接続<br>DB・Excel・CSV・クラウド] --> B[列をディメンションと<br>メジャーに分ける]
    B --> C[ワークシートで<br>グラフを1枚作る]
    C --> D[ダッシュボードに<br>複数のシートを並べる]
    D --> E[Tableau Cloud・Server<br>に公開して共有]

急いでいる人向けに、よく調べられることを先にまとめます。

知りたいこと 答え 詳しい節
読み方・何をするものか タブロー。データを可視化して共有するBI Tableauとは
料金 Creator 75ドル・Viewer 15ドル(月・年契約) 料金
無料で使えるか Desktop の Free Edition と Public Edition 製品の種類
製品の違い 作る=Desktop・Prep、共有=Cloud・Server 製品の種類
使い方の流れ 接続→シート→ダッシュボード→公開 始め方
青と緑のフィールド 青=不連続(見出し)、緑=連続(軸) ディメンションとメジャー
計算の書き方 計算フィールド・LOD 表現・表計算 計算フィールド
Power BI との違い 提供元・料金・作成ツールの対応OS 違い表
最新版 Tableau Desktop 2026.3(2026年10月20日) 製品の種類

確認環境:Ubuntu 24.04.4・PostgreSQL 16.15・Python 3.11.15・pandas 3.0.2・tableauhyperapi 0.0.26963(Hyper のエンジン)・tableaudocumentapi 0.11・tableauserverclient 0.42。自作の注文データ(1,200行)を使い、Tableau のドラッグ操作・計算フィールド・LOD 表現・表計算と同じ集計を PostgreSQL 16(データベース s313db)と pandas で実行して結果が一致することを確かめ、Tableau の Hyper API で抽出ファイル(.hyper)を作って Hyper の SQL で集計しました。.twb・.twbx の構造は Tableau の公式リポジトリ(tableau/document-api-python)のサンプルファイルを Document API と XML で読み、REST API のリクエストは tableauserverclient を自作の擬似サーバーに向けて中身を記録しました。Tableau Desktop の画面と製品の仕様・料金は help.tableau.com と tableau.com の公式ページで、Power BI・Data Studio(旧 Looker Studio)は各公式ページで確かめました(確認日 2026年10月22日)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Tableauとは|使い方・料金・製品の違いとLOD表現を実例で解説」

Tableauとは(読み方・何ができるか)

この節では、Tableau がどんなツールで、どこの会社が出しているかが分かります。

Tableau(タブロー)は、データに接続し、ドラッグ&ドロップでグラフや表を作り、ダッシュボードにまとめて共有する BI(ビジネスインテリジェンス)ツールです。 公式サイトは自社を「ビジュアル分析プラットフォーム」と紹介しています。tableau はフランス語で「絵・表」という意味の言葉です。

公式サイトにある概要は次のとおりです。

項目 内容
始まり 2003年、スタンフォード大学のコンピューターサイエンスのプロジェクト
共同設立者 Chris Stolte・Pat Hanrahan・Christian Chabot
中心の技術 VizQL(ドラッグ操作をデータへの問い合わせに変える技術)
親会社 2019年に Salesforce が買収
コミュニティ 100万人以上、ユーザーグループは世界で500以上
外部の評価 Gartner の「アナリティクスと BI プラットフォーム」のマジック・クアドラント2026年版で、14回目のリーダー(Tableau 公式ページ)
公式サイトで紹介している導入企業 Verizon・Charles Schwab・Honeywell・Lenovo・Lufthansa・HelloFresh など

VizQL が、画面の操作を SQL などの問い合わせに変えているのが Tableau の要です。「地域」を行に、「売上」を列に置くと、裏では「地域ごとに売上を合計する」問い合わせが作られて実行されます。この記事では、その対応を後の節で SQL と Python を実際に動かして見せます。

Tableauでできること

1いろいろなデータにつなぐ

Excel・CSV・PostgreSQL などの DB・Salesforce・Google アナリティクスなど、公式の仕様ページでは「数百」のデータソースに接続できる。

2ドラッグでグラフを作る

列を「行」「列」「色」などに置くと、Tableau が集計してグラフにする。「表示形式」でグラフの種類を選べる。

3ダッシュボードで並べる

複数のグラフを1画面に並べ、フィルターやクリックで連動させる。

4Web で共有する

Tableau Cloud・Tableau Server に公開し、ブラウザやスマホで見せる。更新のスケジュールや通知も設定できる。

TableauとExcelの違い

Excel でもグラフは作れます。違いは「何を中心に作られているか」です。

売上を地域別・月別に見たいとき

Excelセルに集計表を作り、そこからグラフを作る。データが増えたら範囲や数式を直す
→
Tableau元データに接続したまま、列を置き換えるだけで集計の単位が変わる。更新はデータの再読み込み

Excel は計算と表を作る道具、Tableau はデータを見て探り、共有する道具。Excel のファイルは Tableau のデータソースにもなる

観点 Excel Tableau
中心にあるもの セル・数式・シート データソース・ワークシート・ダッシュボード
扱う量の目安 1シート 1,048,576 行まで(Microsoft の仕様) DB に直接つなぐ。抽出は数十億行規模も扱える(公式ヘルプ)
集計の変え方 数式・ピボットテーブルを作り直す 列をシェルフに置き換える
共有 ファイルを送る・共有フォルダ Cloud・Server に公開してブラウザで見る

Tableauの製品の種類(Desktop・Cloud・Server・Public・Prep・Next)

この節では、名前の似た製品が、それぞれ何をするものかが分かります。

作るのは Desktop と Prep、共有するのは Cloud と Server、無料で公開して学ぶのが Public、Salesforce の中で AI と使うのが Next と分けると覚えやすくなります。2026年10月22日時点の製品です。

製品 役割 動く場所
Tableau Desktop グラフ・ダッシュボードを作るアプリ Windows・Mac
Tableau Prep Builder データの結合・クリーニング・集計の流れ(フロー)を作る Windows・Mac
Tableau Cloud 作ったものを公開・共有する(Tableau が運用) SaaS(ブラウザ)
Tableau Server Tableau Cloud と同じ役割を自社で運用する Windows Server・Linux(x86-64)
Tableau Public 誰でも見られる形で無料公開する場所 Web
Tableau Next Salesforce の基盤上の、AI エージェント向けの分析 Salesforce(Slack 連携)
Tableau Pulse 指標(メトリクス)の変化をメール・Slack・Teams で知らせる Tableau Cloud の機能

2026年10月22日時点の Tableau Desktop の最新版は 2026.3(2026年10月20日公開)です。公式のリリースページに載っています。

Tableau Cloud(SaaS)

サーバーの運用・版の更新は Tableau 側

Tableau Pulse・Tableau Agent が使える(エディションによる)

社内のデータにつなぐときは、つなぎ方を別に用意する

Tableau Server(自社運用)

自社のサーバー・プライベートクラウド・パブリッククラウドに入れる

OS は Windows Server か Linux(x86-64。ARM は非対応)

Tableau Agent は 2025.3 以降で、LLM は自分で用意する

Tableau Desktopの3つのエディション(Public・Free・Professional)

Tableau Desktop は、無料の「Public Edition」と「Free Edition」、有料の「Professional Edition」に分かれます。 公式ヘルプの機能比較表を要約しました(2026年10月22日時点)。

項目 Public Edition(無料) Free Edition(無料) Professional
ローカルに保存 できる できる できる
Tableau Public に公開 できる できない できる
Cloud・Server に公開 できない できない できる
接続できるデータ Google ドライブ・Excel・テキストなど一部 ほぼすべて(公開済みデータソースを除く) すべて
データソースの行数 1,500万行まで 無制限 無制限
商用目的 使えない(公式ヘルプに明記) ― 使える

Free Edition は料金ページでも「無料」とされ、有料版との違いは Tableau Cloud・Server に接続できないこと(パブリッシュや共有ができないこと)だけ、と説明されています。Tableau Public に公開したワークブックとデータは、誰でも見てダウンロードできます(公式ヘルプ)。社外に出せないデータは、Public Edition ではローカル保存だけにして公開しない扱いが要ります。

Tableau Prep Builder(データの準備)

Tableau Prep Builder は、グラフを作る前にデータを整える専用のアプリです。 公式ヘルプによると、フローは左から右へ「入力 → クリーニング → 結合・ユニオン → ピボット → 集計 → 出力」のステップで並びます。

ステップ すること
入力 ファイル・DB のテーブル・Tableau 抽出・カスタム SQL に接続
クリーニング フィルター・分割・名前の変更・値のグループ化・NULL の置換・型の変更・計算
結合・ユニオン 複数のデータを横(結合)や縦(ユニオン)につなぐ
ピボット 列と行を入れ替えて形を変える
集計 指定した単位で合計・平均などにまとめる
出力 .hyper・.csv・.xlsx に書き出す、データソースとして公開する

フローの定義は .tfl ファイルに保存されます。

Tableau Next・Tableau Agent(AI の機能)

Tableau Next は、Salesforce のプラットフォーム(Data 360)上で動く、API ファーストの分析の製品です。 公式ページでは、AI を使ったセマンティックレイヤー「Tableau Semantics」、Tableau Agent、Slack 連携、外部の AI エージェントからセマンティクスを使う「Tableau Next MCP」を構成要素に挙げています。従来の Tableau Cloud を置き換えるものではなく、単独でも、Tableau+ バンドルの一部としても販売されています。

Tableau Agent は、自然言語で質問するとグラフを作ったり、計算フィールドを作って説明したりする生成 AI の機能です。 2026年10月22日時点の公式ヘルプの条件は次のとおりです。

項目 内容(2026年10月22日時点)
Tableau Cloud Tableau+ が必要。Creator か Explorer のサイトロール
Tableau Desktop 2025.1 以降。AI を有効にした Cloud か Server にサインイン
Tableau Server 2025.3 以降。LLM のプロバイダーに直接つなぐ(LLM は利用者が用意)
データの扱い Cloud は Einstein Trust Layer 上で動き、送ったデータや会話は LLM に保存されず、モデルの学習にも使われない
クレジット 2025年10月以降、Tableau の AI の使用では Einstein Request クレジットを消費しない(Data 360 の他のサービスは消費する場合がある)
試用 「AI を試す」設定で既存サイトでも60日間試せる(Pulse のヘルプ)

Tableau Agent はデータについての質問に答える機能で、公式ヘルプは汎用のチャットボットではないこと、データモデリングやダッシュボードの組み立てはしないこと、結果は人が確かめる必要があることを挙げています。

Tableauの料金(2026年10月22日時点)

この節では、Tableau の料金がどの単位で決まり、いくらかかるかが分かります。

Tableau の料金は「ユーザー1人あたり・月額・年契約(年単位で請求)」で、使う人の役割(Creator・Explorer・Viewer)とエディションで決まります。 月単位の契約はありません。料金ページの価格です(米ドル、2026年10月22日時点)。

ライセンス できること Standard Enterprise
Creator ワークブック・フローを作る。Desktop と Prep Builder を含む 75ドル 115ドル
Explorer 既存のワークブックを編集・探索。全データのダウンロード 42ドル 70ドル
Viewer ダッシュボードを見て操作。要約データのダウンロード、通知の受信 15ドル 35ドル
1,800円〜Standard の最低価格(1ユーザー・月)円表示はエディションの最低価格だけ。役割ごとの価格は米ドル
1人以上どの導入にも必要な Creator追加のユーザーは Creator・Explorer・Viewer から選ぶ
0円Desktop Free Edition・Public Edition共有(Cloud・Server への公開)はできない

エディションの違いと、その他のプランです(同じく料金ページ、2026年10月22日時点)。

プラン 価格 主な内容
Tableau Standard 15ドル〜(1,800円〜) Web での作成・管理・共同作業、Desktop・Prep Builder、Tableau Pulse。Cloud は3サイトまで
Tableau Enterprise 35ドル〜(4,200円〜) Standard に加えて Advanced Management・Data Management。Cloud は10サイト・eラーニング
Tableau Cloud+ 営業に問い合わせ Enterprise に加えて Tableau Knowledge・Tableau Agent・Premier Success・50サイト
Tableau Server+ 営業に問い合わせ Enterprise に加えて本番以外の環境の追加・Premier Success
Tableau Next 40ドル〜(4,800円〜) Tableau Agent・Tableau Semantics・Slack 連携。ライセンスは Creator と Consumer
Tableau+ Bundle 営業に問い合わせ Cloud+ と Tableau Next

ユーザー単位のほかに、Tableau Cloud は「キャパシティベース」(Creator と Explorer を買い、Viewer はブロック単位)、Tableau Server は「コンピュートベース」(8コア単位で処理能力を買う)の料金もあり、どちらも営業に見積もりを依頼します。

月額の試算

役割ごとの単価で、Creator 1人・Explorer 3人・Viewer 20人の組織を計算しました(年契約、税や割引は含まない)。

エディション 計算 月額 年額
Standard 75×1+42×3+15×20 501ドル 6,012ドル
Enterprise 115×1+70×3+35×20 1,025ドル 12,300ドル

見る人(Viewer)の数が費用の多くを占めます。 この例では Standard の月額のうち、Viewer 20人分の300ドルが約6割です。

  • 1作る人と見るだけの人を分けたかワークブックを作る人だけを Creator にする。編集しない人は Viewer
  • 2Cloud と Server のどちらで共有するか決めたかServer は自社でサーバーを運用する。Cloud はその運用が要らない
  • 3AI(Tableau Agent)が要るかCloud では Tableau+ が条件。Standard・Enterprise だけでは使えない
  • 4まず無料版で試したか一人で分析するだけなら Desktop Free Edition。共有を試すなら Tableau Cloud の試用

Tableauの仕組み(データ接続→ワークシート→ダッシュボード)

この節では、Tableau の画面で出てくる言葉と、作る順番が分かります。

言葉 意味 保存されるファイル
データソース つないだデータと、その設定(計算フィールド・別名など) .tds(設定だけ)・.tdsx(データ込み)
ライブ接続 毎回、元の DB に問い合わせる ―
抽出 データのコピーを Tableau の形式で持つ。速くなり、オフラインでも使える .hyper
ワークシート グラフや表を1つ作る画面 ワークブックの中
ダッシュボード 複数のワークシートを1画面に並べたもの ワークブックの中
ストーリー ワークシートやダッシュボードを順に見せる紙芝居 ワークブックの中
ワークブック シート・ダッシュボード・ストーリーをまとめたファイル .twb(XML)・.twbx(データ込みの圧縮)
シェルフ 列・行・フィルター・マークカード(色・サイズ・ラベル・詳細)などの置き場所 ―

ライブ接続と抽出のどちらにするかは、最初に決めることの1つです。公式ヘルプでは、抽出は元のデータとは別に保存される一部のデータで、元データに直接つないだビューより速く動くことが多く、元データが使えないときもローカルで扱えると説明しています。抽出の更新は、全部入れ替える「完全更新」と、前回以降に増えた行を足す「増分更新」の2つです。

状況 選ぶ目安
DB の最新の値を、見るたびに反映したい ライブ接続
DB が遅い・負荷をかけたくない 抽出(夜間に更新など)
ノートPCでオフラインでも見たい 抽出
データを相手に渡して見てもらう 抽出を入れた .twbx

Tableauの始め方(インストールから最初のダッシュボードまで)

この節では、Tableau Desktop を入れてから、最初のダッシュボードを作るまでの順番が分かります。

Tableau Desktop の動作条件は、公式の仕様ページで次のとおりです(2026年10月22日時点)。

項目 Windows Mac
OS Windows 8/8.1・10(x64)・11 macOS Ventura・Sonoma・Sequoia・Tahoe(Tahoe は 2026.1 以降)
CPU(最小) Intel Core i3・AMD Ryzen 3 以上(SSE4.2・POPCNT 対応) Intel Core i3 以上、または Apple シリコン
メモリ 最小 4GB、推奨 16GB 最小 4GB、推奨 16GB
ディスク 空き 2GB 空き 2GB
1

使う版を選んで入れる

一人で試すなら Tableau Desktop の Free Edition か Public Edition を公式サイトからダウンロードします。共有まで試すなら Tableau Cloud の試用(Tableau Agent・Pulse・Desktop・Prep を含む)に申し込みます。

商用目的なら Public 以外

2

データに接続する

開始画面の「接続」から Excel・テキストファイル・DB などを選びます。練習には、Tableau に付いているサンプル「サンプル - スーパーストア」が使えます。データソースのページで、使う表をキャンバスにドラッグします。

ライブか抽出かもここで選ぶ

3

ワークシートで1枚作る

左のデータペインから、ディメンション(例:地域)を「行」に、メジャー(例:売上)を「列」にドラッグすると棒グラフになります。「表示形式」を開くと、選んだフィールドに合うグラフがオレンジの枠で示されます。

色・ラベルはマークカードへ

4

フィルターと計算を足す

フィールドを「フィルター」シェルフに置いて絞り込み、必要なら「分析」メニューの「計算フィールドの作成」で式を書きます。

式の書き方は後の節

5

ダッシュボードにまとめる

「新しいダッシュボード」を作り、左に並んだワークシートを配置したい場所へドラッグします。フィルターを他のシートにも効かせる設定で、クリックに連動する画面になります。

スマホ用のレイアウトも作れる

6

保存して共有する

.twb か .twbx で保存し、Professional なら Tableau Cloud・Server に、Public Edition なら Tableau Public にパブリッシュします。Free Edition はローカル保存だけです。

公開範囲を必ず確かめる

ディメンションとメジャーとは(青と緑の違い)

この節では、Tableau の操作を理解する土台になる「ディメンション・メジャー」「不連続・連続」の意味が分かります。

ディメンションは「分ける・数える単位」になる項目(地域・カテゴリ・日付)、メジャーは「集計される数値」(売上・利益・数量)です。 公式ヘルプでは、Tableau は接続したときに、データの種類から各フィールドを自動でどちらかに分けます。メジャーはビューに置くと集計され、SUM([売上]) のように集計関数付きで表示されます。

もう1つの軸が色です。

行や列に置いたときにできるもの

青=不連続値ごとに分かれた「見出し(ヘッダー)」ができる。例:1月・2月…12月
→
緑=連続途切れない「軸」ができる。例:2024年1月から2025年12月まで続く時間軸

ディメンション・メジャーの区別とは別の軸。日付は青にも緑にもできる。郵便番号のように計算しない数値はディメンションに変える

ディメンションを足すと、ビューの「詳細レベル」が細かくなり、マーク(点や棒)の数が増えます。公式ヘルプの例では、「区分」を列に置くと3マーク、「地域」を加えると3×4で12マークです。これは SQL の GROUP BY に列を足すことと同じです。次の節で実際に確かめます。

Tableauのドラッグ操作は、この集計になる(SQLで実行)

この節では、Tableau でよく使う操作が、データに対してどんな集計をしているかを、実行結果で確かめられます。

Tableau のワークシートは、「ディメンションで GROUP BY し、メジャーを集計する問い合わせ」を作って実行しています。 手元では Tableau Desktop の代わりに、同じデータを PostgreSQL 16 に入れて、同じ集計の SQL を実行しました。

練習用のデータ(注文1,200行)

Tableau のサンプル「スーパーストア」に似た注文データを Python で作りました。60人の顧客が、それぞれ決まった地域で、ある日から買い始める形です。

"""Tableau の練習用に、スーパーストアに似た注文データ(CSV)を作る。"""
import csv, random, datetime
random.seed(313)
regions = {"関東": 1.3, "関西": 1.0, "中部": 0.8, "九州": 0.6}
cats = {"家具": (20000, 0.06), "家電": (30000, 0.12), "事務用品": (3000, 0.18)}
customers = [f"顧客{n:03d}" for n in range(1, 61)]
home = {c: random.choice(list(regions)) for c in customers}
start = {c: random.randrange(0, 600) for c in customers}  # 顧客ごとの最初に買える日
rows = []
d0 = datetime.date(2024, 1, 1)
for i in range(1, 1201):
    c = random.choice(customers)
    r = home[c]
    cat = random.choices(list(cats), weights=[2, 3, 5])[0]
    base, margin = cats[cat]
    day = d0 + datetime.timedelta(days=random.randrange(start[c], 731))
    qty = random.randint(1, 5)
    sales = round(base * random.uniform(0.3, 1.7) * qty * regions[r] / 10) * 10
    profit = round(sales * random.gauss(margin, 0.15) / 10) * 10
    rows.append([f"O{i:05d}", day.isoformat(), c, r, cat, qty, sales, profit])
with open("orders.csv", "w", newline="", encoding="utf-8") as f:
    w = csv.writer(f)
    w.writerow(["注文ID", "注文日", "顧客名", "地域", "カテゴリ", "数量", "売上", "利益"])
    w.writerows(rows)
print(len(rows), "rows")
CREATE TABLE 注文 (注文ID text PRIMARY KEY, 注文日 date NOT NULL, 顧客名 text NOT NULL, 地域 text NOT NULL,
                   カテゴリ text NOT NULL, 数量 int NOT NULL, 売上 int NOT NULL, 利益 int NOT NULL);
\copy 注文 FROM 'orders.csv' WITH (FORMAT csv, HEADER true)
SELECT count(*), sum(売上), sum(利益) FROM 注文;
COPY 1200
 count |   sum    |   sum   
-------+----------+---------
  1200 | 51058460 | 4882190
(1 row)

Tableau でこの CSV に接続すると、「注文日・顧客名・地域・カテゴリ」がディメンション、「数量・売上・利益」がメジャーに分かれます。

操作1:「地域」を行に、「売上」を列に置く(棒グラフ)

SELECT 地域, SUM(売上) AS "合計(売上)" FROM 注文 GROUP BY 地域 ORDER BY 2 DESC;
 地域 | 合計(売上) 
------+------------
 関東 |   18132560
 関西 |   16709550
 九州 |   10242670
 中部 |    5973680
(4 rows)

4行=棒が4本です。Tableau でツールバーの「降順に並べ替え」を押すのが ORDER BY 2 DESC にあたります。

操作2:「カテゴリ」を色に置く(積み上げ棒グラフ)

SELECT 地域, カテゴリ, SUM(売上) AS "合計(売上)" FROM 注文 GROUP BY 地域, カテゴリ ORDER BY 1, 2;
 地域 | カテゴリ | 合計(売上) 
------+----------+------------
 中部 | 事務用品 |     626850
 中部 | 家具     |    1677310
 中部 | 家電     |    3669520
 九州 | 事務用品 |     955440
 九州 | 家具     |    2608790
 九州 | 家電     |    6678440
 関東 | 事務用品 |    1836340
 関東 | 家具     |    4864180
 関東 | 家電     |   11432040
 関西 | 事務用品 |    1687730
 関西 | 家具     |    4763550
 関西 | 家電     |   10258270
(12 rows)

色に置いたディメンションも GROUP BY に加わり、4地域×3カテゴリ=12マークになりました。 見出しは増えず、棒の中が色で分かれます。

操作3:日付を「月(不連続)」と「月(連続)」で置く

日付フィールドを列に置くと、Tableau は「年」でまとめ、右クリックのメニューで「月」の青(不連続)と緑(連続)を選べます。この2つは集計の単位が違います。

-- 青の「月」:年をまたいで同じ月をまとめる
SELECT EXTRACT(MONTH FROM 注文日)::int AS "月(注文日)", SUM(売上) AS "合計(売上)" FROM 注文 GROUP BY 1 ORDER BY 1 LIMIT 3;
-- 緑の「月」:年月ごとに分ける
SELECT date_trunc('month', 注文日)::date AS "月(注文日)", SUM(売上) AS "合計(売上)" FROM 注文 GROUP BY 1 ORDER BY 1 LIMIT 3;
SELECT count(DISTINCT EXTRACT(MONTH FROM 注文日)) AS 不連続の月の数, count(DISTINCT date_trunc('month', 注文日)) AS 連続の月の数 FROM 注文;
 月(注文日) | 合計(売上) 
------------+------------
          1 |    1766580
          2 |    2096300
          3 |    3308030
(3 rows)

 月(注文日) | 合計(売上) 
------------+------------
 2024-01-01 |     148030
 2024-02-01 |     145050
 2024-03-01 |     243800
(3 rows)

 不連続の月の数 | 連続の月の数 
----------------+--------------
             12 |           24
(1 row)

青の「月」は2024年1月と2025年1月を足して12個、緑の「月」は年月ごとに24個になりました。季節の傾向を比べるなら青、時間の流れを見るなら緑です。

操作4:フィルター(ディメンションとメジャー)

「地域」をフィルターに置いて関東・関西だけにし、「売上」をフィルターに置いて合計135万円以上だけにしました。

SELECT 顧客名, 地域, SUM(売上) AS "合計(売上)" FROM 注文
WHERE 地域 IN ('関東','関西')            -- ディメンションのフィルター
GROUP BY 顧客名, 地域
HAVING SUM(売上) >= 1350000               -- メジャーのフィルター(集計後)
ORDER BY 3 DESC;
 顧客名  | 地域 | 合計(売上) 
---------+------+------------
 顧客020 | 関東 |    1856900
 顧客007 | 関東 |    1713580
 顧客045 | 関東 |    1444800
 顧客042 | 関東 |    1430350
 顧客010 | 関東 |    1400460
 顧客035 | 関西 |    1367790
(6 rows)

公式ヘルプも、ディメンションのフィルターを SQL の WHERE 句、メジャーのフィルターを HAVING 句にたとえています。「上位5顧客」のような上位 N のフィルターは、順位を付けて上から5件を取る形です。

SELECT 顧客名, SUM(売上) AS "合計(売上)", RANK() OVER (ORDER BY SUM(売上) DESC) AS 順位
FROM 注文 GROUP BY 顧客名 ORDER BY 2 DESC LIMIT 5;
 顧客名  | 合計(売上) | 順位 
---------+------------+------
 顧客020 |    1856900 |    1
 顧客007 |    1713580 |    2
 顧客045 |    1444800 |    3
 顧客042 |    1430350 |    4
 顧客010 |    1400460 |    5
(5 rows)

操作と集計の対応表

Tableau の操作 SQL pandas
ディメンションを行・列・色・詳細に置く GROUP BY に列を足す groupby([...])
メジャーを置く(既定は合計) SUM(列) .sum()
集計を「平均」「個別のカウント」に変える AVG(列)・COUNT(DISTINCT 列) .mean()・.nunique()
ディメンションのフィルター WHERE 行の絞り込み df[...]
メジャーのフィルター HAVING 集計後の絞り込み
日付の青い「月」・緑の「月」 EXTRACT(MONTH …)・date_trunc('month', …) .dt.month・resample("MS")
上位 N RANK()・LIMIT .nlargest(N)

SQL の集計の書き方は関連記事「SQL GROUP BY HAVING 使い方|集計関数一覧とDB比較・実行結果つき」で扱っています。

Tableauのグラフの選び方(判断表)

この節では、見せたいことに合わせて、どのグラフを選び、どのフィールドを置くかが分かります。

グラフは「何を伝えたいか」で決めます。 迷ったら、フィールドを選んで「表示形式」を開くと、Tableau が勧めるグラフがオレンジの枠で示されます。公式ヘルプの例では、日付のディメンションとメジャーを選ぶと折れ線が勧められます。各グラフに必要なフィールドの最小数は、表示形式でグラフにカーソルを合わせると表示されます。

伝えたいこと 選ぶグラフ 置くフィールドの例
項目どうしの大小を比べる 棒グラフ 地域(行)・売上(列)
時間で増えたか減ったか 折れ線グラフ 注文日の緑の「月」(列)・売上(行)
全体の中の内訳 積み上げ棒・円・ツリーマップ 地域・カテゴリ(色)・売上
2つの数値の関係 散布図 売上(列)・利益(行)・顧客名(詳細)
値のばらつき ヒストグラム・箱ひげ図 売上(ビン)
地域ごとの違い 地図 都道府県など地理的役割のあるフィールド・売上
2つの分類の組み合わせ ハイライト表(ヒートマップ) 地域(行)・カテゴリ(列)・売上(色)
正確な数字を見せる テキスト表(クロス集計) 地域・カテゴリ・売上(テキスト)
目標との差 ブレットグラフ 売上・目標値
予定の期間 ガントチャート 開始日・期間・作業名

円グラフは項目が多いと比べにくくなるため、項目が多いときは棒グラフで並べると大小が読み取りやすくなります。

計算フィールドの書き方(関数の早見表と、行レベル・集計の違い)

この節では、計算フィールドの基本の書き方と、結果が変わる「どこで集計するか」の違いが分かります。

計算フィールドは、既存の列から新しい列を式で作る機能です。 「分析」メニューの「計算フィールドの作成」か、データペインの右クリックから作ります。フィールドは [売上] のように角かっこで囲みます。

やりたいこと Tableau の式 SQL で書くと
合計・平均・最大 SUM([売上])・AVG([売上])・MAX([売上]) SUM(売上) など
重複を除いて数える COUNTD([顧客名]) COUNT(DISTINCT 顧客名)
条件で分ける IF [売上] >= 50000 THEN "大口" ELSE "通常" END CASE WHEN 売上 >= 50000 THEN …
1行で条件分岐 IIF([利益] < 0, "赤字", "黒字") CASE WHEN … END
値で分ける CASE [地域] WHEN "関東" THEN "東日本" ELSE "西日本" END CASE 地域 WHEN … END
NULL を0にする ZN([利益]) COALESCE(利益, 0)
NULL を別の値にする IFNULL([担当], "未定") COALESCE(担当, '未定')
日付の差 DATEDIFF('day', [注文日], [出荷日]) 出荷日 - 注文日
月初に切り捨て DATETRUNC('month', [注文日]) date_trunc('month', 注文日)
年や月の数字 DATEPART('year', [注文日]) EXTRACT(YEAR FROM 注文日)
日付を足す DATEADD('day', 7, [注文日]) 注文日 + 7
今日の日付 TODAY() CURRENT_DATE

Tableau の CASE は「値が一致するか」で分ける書き方です。[売上] >= 50000 のような条件で分けるときは IF を使います。

条件で分ける計算フィールドを、SQL で集計しました。

SELECT CASE WHEN 売上 >= 50000 THEN '大口' ELSE '通常' END AS 売上区分, count(*) AS 件数, SUM(売上) AS "合計(売上)"
FROM 注文 GROUP BY 1 ORDER BY 1;
 売上区分 | 件数 | 合計(売上) 
----------+------+------------
 大口     |  347 |   38741770
 通常     |  853 |   12316690
(2 rows)

計算フィールドで作った「売上区分」はディメンションになり、行や色に置けます。

利益率は「SUM(利益)/SUM(売上)」と「利益/売上」で答えが違う

計算フィールドには「行ごとに計算してから集計する式」と「集計してから計算する式」があり、結果が変わります。 地域ごとの利益率を、2つの書き方で求めました。

Tableau の式 意味
SUM([利益]) / SUM([売上]) 地域の利益の合計を、売上の合計で割る(集計してから割る)
[利益] / [売上] をビューで「平均」 注文1行ごとの利益率を、平均する(割ってから集計)
SELECT 地域,
       round(SUM(利益)::numeric / SUM(売上), 4) AS "SUM(利益)/SUM(売上)",
       round(AVG(利益::numeric / 売上), 4)       AS "AVG(利益/売上)"
FROM 注文 GROUP BY 地域 ORDER BY 2 DESC;
 地域 | SUM(利益)/SUM(売上) | AVG(利益/売上) 
------+---------------------+----------------
 関西 |              0.1104 |         0.1418
 中部 |              0.1005 |         0.1316
 九州 |              0.0934 |         0.1232
 関東 |              0.0817 |         0.1327
(4 rows)

関東は「SUM/SUM」では4地域で最も低いのに、「AVG」では2番目に高くなりました。 「AVG」は1,000円の注文も10万円の注文も同じ重さで平均するためです。売上全体に対する利益率を出すなら SUM([利益]) / SUM([売上]) です。

同じ式の中で集計と非集計を混ぜる([利益] / SUM([売上]) など)と、Tableau は「Cannot mix aggregate and non-aggregate arguments with this function」というエラーを出します。両方を集計にそろえるか、後の節の LOD 表現で片方を固定します。

SQL の CASE 式の書き方は関連記事「SQL CASE式の使い方|用途別コピペ集とDB比較・実行結果つき」で扱っています。

LOD表現(FIXED・INCLUDE・EXCLUDE)とは(SQLで確かめる)

この節では、ビューとは別の単位で集計する LOD 表現の3種類が、それぞれどんな集計かを実行結果で確かめられます。

LOD(詳細レベル)表現は、ビューに置いたディメンションとは別の単位で集計する式です。 公式ヘルプの構文は次のとおりです。

{[FIXED | INCLUDE | EXCLUDE] <ディメンションの宣言> : <集計式>}
種類 意味 例 SQL で書くと
FIXED 指定したディメンションだけで集計する。ビューのディメンションの影響を受けない {FIXED [顧客名] : MIN([注文日])} 顧客ごとに集計したサブクエリを結合
INCLUDE ビューのディメンションに、指定したものを足して集計する {INCLUDE [顧客名] : SUM([売上])} 細かく集計してから、外側でもう一度集計
EXCLUDE ビューのディメンションから、指定したものを除いて集計する {EXCLUDE [カテゴリ] : SUM([売上])} SUM(…) OVER (PARTITION BY …)
キーワードなし 表全体で集計する {MIN([注文日])} 全体の集計

FIXED:顧客ごとの初回購入年(コホート)

「顧客が最初に買った年」は、ビューに注文日を置いても変わってはいけない値です。{FIXED [顧客名] : MIN([注文日])} の年を行に、注文日の年を列に置くと、「何年に初めて買った顧客が、各年にいくら買ったか」の表になります。

WITH f AS (SELECT 顧客名, MIN(注文日) AS 初回購入日 FROM 注文 GROUP BY 顧客名)   -- FIXED [顧客名]
SELECT EXTRACT(YEAR FROM f.初回購入日)::int AS "初回購入年",
       EXTRACT(YEAR FROM o.注文日)::int     AS "年(注文日)",
       count(DISTINCT o.顧客名)             AS "個別のカウント(顧客名)",
       SUM(o.売上)                           AS "合計(売上)"
FROM 注文 o JOIN f USING (顧客名) GROUP BY 1, 2 ORDER BY 1, 2;
 初回購入年 | 年(注文日) | 個別のカウント(顧客名) | 合計(売上) 
------------+------------+------------------------+------------
       2024 |       2024 |                     33 |    8546000
       2024 |       2025 |                     33 |   19326080
       2025 |       2025 |                     27 |   23186380
(3 rows)

2024年に初めて買った33人は、2025年も全員が買い続け、売上は2.3倍になりました。2025年の新しい顧客は27人です。

INCLUDE:地域ごとの「顧客1人あたりの売上」

地域を行に置いたビューで「顧客1人あたりの平均売上」を出すには、顧客ごとに合計してから地域で平均します。AVG({INCLUDE [顧客名] : SUM([売上])}) がこの集計です。

SELECT 地域, round(AVG(顧客売上)) AS "平均(顧客ごとの売上)", count(*) AS 顧客数
FROM (SELECT 地域, 顧客名, SUM(売上) AS 顧客売上 FROM 注文 GROUP BY 地域, 顧客名) t   -- INCLUDE [顧客名]
GROUP BY 地域 ORDER BY 2 DESC;
 地域 | 平均(顧客ごとの売上) | 顧客数 
------+----------------------+--------
 関東 |              1133285 |     16
 関西 |               982915 |     17
 中部 |               663742 |      9
 九州 |               569037 |     18
(4 rows)

九州は顧客数が18人で最も多いのに、1人あたりの売上は最も小さいことが分かります。ビューの AVG([売上]) は「注文1件あたり」なので、この値にはなりません。

EXCLUDE:地域の中でのカテゴリの構成比

地域とカテゴリを置いたビューで、SUM([売上]) / SUM({EXCLUDE [カテゴリ] : SUM([売上])}) は「その地域の売上のうち、そのカテゴリが何%か」です。

SELECT 地域, カテゴリ, SUM(売上) AS 売上,
       SUM(SUM(売上)) OVER (PARTITION BY 地域) AS "地域の売上(EXCLUDE)",
       round(100.0 * SUM(売上) / SUM(SUM(売上)) OVER (PARTITION BY 地域), 1) AS "構成比%"
FROM 注文 WHERE 地域 IN ('関東','九州') GROUP BY 地域, カテゴリ ORDER BY 1, 2;
 地域 | カテゴリ |   売上   | 地域の売上(EXCLUDE) | 構成比% 
------+----------+----------+---------------------+---------
 九州 | 事務用品 |   955440 |            10242670 |     9.3
 九州 | 家具     |  2608790 |            10242670 |    25.5
 九州 | 家電     |  6678440 |            10242670 |    65.2
 関東 | 事務用品 |  1836340 |            18132560 |    10.1
 関東 | 家具     |  4864180 |            18132560 |    26.8
 関東 | 家電     | 11432040 |            18132560 |    63.0
(6 rows)

公式ヘルプでは、EXCLUDE はビューより粗い単位の値になるので、同じ値が各行に繰り返し(複製され)表示されます。上の「地域の売上(EXCLUDE)」列が、同じ地域の3行で同じ値になっているのがそれです。

FIXEDはフィルターより先に計算される(コンテキストフィルター)

FIXED は、普通のディメンションのフィルターより先に計算されます。 「カテゴリ=家具」でフィルターしたビューに、{FIXED [顧客名] : SUM([売上])} を置くと、FIXED の値は家具以外も含んだ合計のままです。家具だけで計算したいときは、そのフィルターを「コンテキストに追加」します。両方を SQL で再現しました。

-- (a) 普通のフィルター:FIXED はフィルターの前に計算される
SELECT o.顧客名, SUM(o.売上) AS "合計(売上)", MAX(f.fixed売上) AS "FIXED 顧客の売上"
FROM 注文 o JOIN (SELECT 顧客名, SUM(売上) AS fixed売上 FROM 注文 GROUP BY 顧客名) f USING (顧客名)
WHERE o.カテゴリ = '家具' GROUP BY o.顧客名 ORDER BY 1 LIMIT 3;
-- (b) コンテキストフィルター:FIXED の前に絞る
SELECT o.顧客名, SUM(o.売上) AS "合計(売上)", MAX(f.fixed売上) AS "FIXED 顧客の売上"
FROM 注文 o JOIN (SELECT 顧客名, SUM(売上) AS fixed売上 FROM 注文 WHERE カテゴリ = '家具' GROUP BY 顧客名) f USING (顧客名)
WHERE o.カテゴリ = '家具' GROUP BY o.顧客名 ORDER BY 1 LIMIT 3;
 顧客名  | 合計(売上) | FIXED 顧客の売上 
---------+------------+------------------
 顧客001 |     273400 |          1036420
 顧客002 |      89390 |           401040
 顧客003 |      59330 |           564040
(3 rows)

 顧客名  | 合計(売上) | FIXED 顧客の売上 
---------+------------+------------------
 顧客001 |     273400 |           273400
 顧客002 |      89390 |            89390
 顧客003 |      59330 |            59330
(3 rows)

公式ヘルプから読み取れる、フィルターと計算の順番は次のとおりです。

flowchart TD
    A[データソースフィルター] --> B[コンテキストフィルター]
    B --> C[FIXED の LOD 表現]
    C --> D[ディメンションのフィルター]
    D --> E[INCLUDE・EXCLUDE の LOD 表現]
    E --> F[表計算と表計算フィルター]

公式ヘルプの説明では、コンテキストフィルターはワークシートの他のフィルターより先に実行され、FIXED はディメンションのフィルターより前、INCLUDE と EXCLUDE はディメンションのフィルターの後に計算されます。表計算はディメンションのフィルターの後に実行され、表計算のフィルターは計算の後にマークを隠すだけです。

LOD 表現の制限として、公式ヘルプは次を挙げています。

  • 集計式には集計が必要で、ATTR は使えない。
  • 集計式の中で表計算は使えない。
  • EXCLUDE は、除外するディメンションの無い行レベルの式では使えない。

表計算(累計・合計に対する割合・前年比)

この節では、ビューに出た集計結果に対して計算する「表計算」が、どんな計算かが分かります。

表計算は、集計し終わった表の上で、行をまたいで計算する機能です。 「簡易表計算」から「累計」「合計に対する割合」「前年比成長率」などを選べます。SQL ではウィンドウ関数にあたります。

簡易表計算 Tableau の関数 SQL
累計 RUNNING_SUM(SUM([売上])) SUM(SUM(売上)) OVER (ORDER BY …)
合計に対する割合 SUM([売上]) / TOTAL(SUM([売上])) SUM(売上) / SUM(SUM(売上)) OVER ()
前の値との差・比 LOOKUP(SUM([売上]), -1) LAG(SUM(売上))
順位 RANK(SUM([売上])) RANK() OVER (ORDER BY …)
移動平均 WINDOW_AVG(SUM([売上]), -2, 0) AVG(…) OVER (ROWS 2 PRECEDING)

月ごとの売上に、年ごとの累計と前年同月比を付けました(2025年9〜12月)。

WITH m AS (SELECT date_trunc('month', 注文日)::date AS 月, SUM(売上) AS 売上 FROM 注文 GROUP BY 1)
SELECT 月, 売上,
       SUM(売上) OVER (PARTITION BY EXTRACT(YEAR FROM 月) ORDER BY 月) AS "累計(年ごと)",
       round(100.0 * (売上 - LAG(売上, 12) OVER (ORDER BY 月)) / LAG(売上, 12) OVER (ORDER BY 月), 1) AS "前年同月比%"
FROM m ORDER BY 月 OFFSET 20;
     月     |  売上   | 累計(年ごと) | 前年同月比% 
------------+---------+--------------+-------------
 2025-09-01 | 3935360 |     29635050 |       268.0
 2025-10-01 | 3401190 |     33036240 |       134.9
 2025-11-01 | 3839810 |     36876050 |       102.1
 2025-12-01 | 5636410 |     42512460 |       458.8
(4 rows)

地域ごとの「合計に対する割合」です。

 地域 |   売上   | 合計に対する割合% 
------+----------+-------------------
 関東 | 18132560 |              35.5
 関西 | 16709550 |              32.7
 九州 | 10242670 |              20.1
 中部 |  5973680 |              11.7
(4 rows)

表計算は「どの方向に計算するか」(表の横・下・ペインなど)で結果が変わります。 年ごとに累計をやり直す「PARTITION BY 年」は、Tableau では「次を使用して計算」で年を区切りに指定することにあたります。表計算はビューに出ている行だけで計算するので、フィルターで行を減らすと割合の分母も変わります。分母を変えたくないときは、FIXED の LOD 表現で分母を作ります。

SQL のウィンドウ関数は関連記事「SQLウィンドウ関数の使い方|累計・前月比・上位N件を実行結果で解説」で扱っています。

Pythonのpandasで同じ集計を出す

この節では、Tableau で作った数字を Python で検算する書き方が分かります。

同じ CSV を pandas 3.0.2 で読み、ここまでの集計を書きました。

import pandas as pd
df = pd.read_csv("orders.csv", parse_dates=["注文日"])
# 地域を行・売上を列(合計)
print(df.groupby("地域")["売上"].sum().sort_values(ascending=False).to_string(), "\n")
# 利益率:集計してから割る と 行ごとに割ってから平均
g = df.groupby("地域")
print(pd.DataFrame({"SUM/SUM": (g["利益"].sum() / g["売上"].sum()).round(4),
                    "AVG(行ごと)": (df["利益"] / df["売上"]).groupby(df["地域"]).mean().round(4)}).to_string(), "\n")
# FIXED:{FIXED [顧客名] : MIN([注文日])}
df["初回購入年"] = df.groupby("顧客名")["注文日"].transform("min").dt.year
print(df.groupby(["初回購入年", df["注文日"].dt.year.rename("年(注文日)")])
        .agg(顧客数=("顧客名", "nunique"), 売上=("売上", "sum")).to_string(), "\n")
# INCLUDE:AVG({INCLUDE [顧客名] : SUM([売上])})
per_cust = df.groupby(["地域", "顧客名"])["売上"].sum()
print(per_cust.groupby("地域").mean().round().sort_values(ascending=False).to_string(), "\n")
# EXCLUDE:SUM([売上]) / SUM({EXCLUDE [カテゴリ] : SUM([売上])})
rc = df.groupby(["地域", "カテゴリ"])["売上"].sum().reset_index()
rc["構成比%"] = (100 * rc["売上"] / rc.groupby("地域")["売上"].transform("sum")).round(1)
print(rc[rc["地域"].isin(["関東", "九州"])].to_string(index=False), "\n")
# 表計算:RUNNING_SUM(SUM([売上]))(年ごと)
m = df.set_index("注文日")["売上"].resample("MS").sum().to_frame()
m["累計(年ごと)"] = m.groupby(m.index.year)["売上"].cumsum()
print(m.tail(4).to_string())
地域
関東    18132560
関西    16709550
九州    10242670
中部     5973680 

    SUM/SUM  AVG(行ごと)
地域                   
中部   0.1005    0.1316
九州   0.0934    0.1232
関東   0.0817    0.1327
関西   0.1104    0.1418 

              顧客数        売上
初回購入年 年(注文日)               
2024  2024     33   8546000
      2025     33  19326080
2025  2025     27  23186380 

地域
関東    1133285.0
関西     982915.0
中部     663742.0
九州     569037.0 

地域 カテゴリ       売上  構成比%
九州 事務用品   955440   9.3
九州   家具  2608790  25.5
九州   家電  6678440  65.2
関東 事務用品  1836340  10.1
関東   家具  4864180  26.8
関東   家電 11432040  63.0 

                 売上   累計(年ごと)
注文日                          
2025-09-01  3935360  29635050
2025-10-01  3401190  33036240
2025-11-01  3839810  36876050
2025-12-01  5636410  42512460

SQL の結果とすべて一致しました。 FIXED は groupby(...).transform(...)(元の行数のまま、グループの値を各行に付ける)、INCLUDE は「2段階の groupby」、EXCLUDE は「外側の単位での transform」と覚えると対応が取れます。

pandas の書き方は関連記事「pandasの使い方 逆引き81選|pandas 3.0の実行結果つき」で扱っています。

抽出ファイル(.hyper)をPythonで作る(Hyper API)

この節では、Tableau の抽出ファイル .hyper を、Tableau Desktop を使わずにプログラムで作る方法が分かります。

Hyper は Tableau の SQL エンジンで、Tableau の分析や Tableau Prep の変換を動かしています。 公式の Hyper API(Python・C++・Java。Windows・macOS・Linux)を使うと、.hyper ファイルを作り、データを入れ、SQL で問い合わせできます。作ったファイルは Tableau Desktop で開いたり、Tableau Cloud に上げたりできます。

pip install tableauhyperapi
"""orders.csv から Tableau の抽出ファイル(.hyper)を作り、Hyper で集計する。"""
from tableauhyperapi import (HyperProcess, Telemetry, Connection, CreateMode,
                             TableDefinition, SqlType, TableName, escape_string_literal)
table = TableDefinition(TableName("Extract", "Extract"), [
    TableDefinition.Column("注文ID", SqlType.text()),
    TableDefinition.Column("注文日", SqlType.date()),
    TableDefinition.Column("顧客名", SqlType.text()),
    TableDefinition.Column("地域", SqlType.text()),
    TableDefinition.Column("カテゴリ", SqlType.text()),
    TableDefinition.Column("数量", SqlType.int()),
    TableDefinition.Column("売上", SqlType.big_int()),
    TableDefinition.Column("利益", SqlType.big_int()),
])
with HyperProcess(Telemetry.DO_NOT_SEND_USAGE_DATA_TO_TABLEAU) as hyper:
    with Connection(hyper.endpoint, "orders.hyper", CreateMode.CREATE_AND_REPLACE) as con:
        con.catalog.create_schema("Extract")
        con.catalog.create_table(table)
        n = con.execute_command(f"COPY {table.table_name} FROM {escape_string_literal('orders.csv')} "
                                "WITH (format csv, NULL '', delimiter ',', header)")
        print("copied rows:", n)
        print(con.execute_scalar_query("SELECT version()"))
        for row in con.execute_list_query('SELECT "地域", SUM("売上") FROM "Extract"."Extract" GROUP BY 1 ORDER BY 2 DESC'):
            print(row)
        q = '''SELECT EXTRACT(YEAR FROM f."初回") AS y, COUNT(*) FROM
               (SELECT "顧客名", MIN("注文日") AS "初回" FROM "Extract"."Extract" GROUP BY 1) f GROUP BY 1 ORDER BY 1'''
        print("FIXED 初回購入年ごとの顧客数:", con.execute_list_query(q))
        print("tables:", con.catalog.get_table_names("Extract"))
copied rows: 1200
Hyper 9.1.0 emulation, hyper version main.0.0.26963.r84171622
['関東', 18132560]
['関西', 16709550]
['九州', 10242670]
['中部', 5973680]
FIXED 初回購入年ごとの顧客数: [[2024, 33], [2025, 27]]
tables: [TableName('Extract', 'Extract')]
-rw-r--r-- 1 root root  70675 Oct 22 20:28 orders.csv
-rw-r----- 1 root root 131072 Oct 22 20:29 orders.hyper

Hyper の SQL は PostgreSQL とほぼ同じ書き方で、集計結果も PostgreSQL・pandas と一致しました。Telemetry.DO_NOT_SEND_USAGE_DATA_TO_TABLEAU は、Tableau に利用データを送らない指定です。CSV や Parquet を SQL で集計する別の方法は、関連記事「DuckDB入門|CSV・Parquet・JSONをSQLで集計」で扱っています。

.twb・.twbxの中身(XMLの構造)

この節では、Tableau のファイルの種類と、ワークブック .twb の中で「行に地域、列に売上」がどう保存されているかが分かります。

公式ヘルプのファイルの種類です。

拡張子 名前 中身
.twb ワークブック シート・ダッシュボード・ストーリーの定義(XML)。データは入らない
.twbx パッケージドワークブック .twb と、ローカルのデータ・抽出・背景画像をまとめた圧縮ファイル
.tds データソース 接続情報と、計算フィールド・グループなどの設定。データは入らない
.tdsx パッケージドデータソース .tds と抽出・ローカルのデータをまとめた圧縮ファイル
.hyper 抽出 データのコピー(前の節で作ったもの)
.tbm ブックマーク ワークシート1枚
.tfl Prep のフロー Tableau Prep Builder のフローの定義

Tableau の公式リポジトリ(tableau/document-api-python)にあるサンプルのワークブックを開くと、.twb は XML でした。Tableau 2021.1.2 で保存されたファイルの、最上位の要素です。

workbook {'source-build': '2021.1.2 (20211.21.0511.0935)', 'version': '18.1'}
   document-format-change-manifest
   repository-location
   preferences
   style
   datasources   {'datasource': 1}
   actions
   worksheets    {'worksheet': 2}
   dashboards    {'dashboard': 1}
   windows       {'window': 3}
   thumbnails    {'thumbnail': 3}

同じリポジトリの、スーパーストアに接続したサンプル(sample-superstore.twb)のワークシート部分です(一部を省略)。

<worksheet name='Sheet 1'>
  <table>
    <view>
      <datasource-dependencies datasource='sqlserver.187oiqw1ls5tey1df9op71phda18'>
        <column datatype='string' name='[Market]' role='dimension' type='nominal' />
        <column datatype='real' name='[Sales]' role='measure' type='quantitative' />
        <column-instance column='[Market]' derivation='None' name='[none:Market:nk]' pivot='key' type='nominal' />
        <column-instance column='[Sales]' derivation='Sum' name='[sum:Sales:qk]' pivot='key' type='quantitative' />
      </datasource-dependencies>
      <sort class='computed' column='[sqlserver.187oiqw1ls5tey1df9op71phda18].[none:Market:nk]' direction='DESC'
            using='[sqlserver.187oiqw1ls5tey1df9op71phda18].[sum:Sales:qk]' />
      <aggregation value='true' />
    </view>
    <rows>[sqlserver.187oiqw1ls5tey1df9op71phda18].[none:Market:nk]</rows>
    <cols>[sqlserver.187oiqw1ls5tey1df9op71phda18].[sum:Sales:qk]</cols>
  </table>
</worksheet>

「行に Market、列に SUM(Sales)、売上の降順」が、そのまま XML に書かれています。

XML 意味 Tableau の画面では
role='dimension'・role='measure' ディメンションかメジャーか データペインの上下
type='nominal'・type='quantitative' 不連続か連続か 青と緑
derivation='Sum' 集計の種類 SUM(Sales)
[none:Market:nk]・[sum:Sales:qk] 集計:フィールド名:種類 の組 シェルフに置いた1つ
<rows>・<cols> 行シェルフ・列シェルフ 行・列
<sort … direction='DESC'> 並べ替え 降順ボタン

計算フィールドは、データソースの <column> の中に <calculation> として保存されていました(filtering.twb より)。

<column caption='SHOW' datatype='string' name='[Calculation_88946136969252864]' role='dimension' type='nominal'>
  <calculation class='tableau' formula='IF [BurstoutSet] THEN &quot;Selected&quot; ELSE &quot;Not Selected&quot; END' />
</column>

画面に出る名前(caption)は「SHOW」で、内部の名前は Calculation_ で始まる番号です。ダッシュボードは <dashboards> の中で、シートの位置を <zone name='Sheet 1' x=… y=… w=… h=…> の形で持っていました。

.twbx は ZIP 形式です。同じリポジトリのサンプル(geocoding.twbx)を unzip -l で見た中身です(一部を省略)。

Archive:  geocoding.twbx
  Length      Date    Time    Name
---------  ---------- -----   ----
   770467  2020-10-22 15:04   SuperstoreWithCustomGeocoding.twb
     1792  2020-10-22 11:42   Data/Superstore/Sales Commission.csv
   113406  2020-10-22 11:42   Data/Superstore/Sales Target (US).xlsx
  3384320  2020-10-22 11:42   Data/Superstore/Sample - Superstore.xls
183566336  2020-10-22 11:40   Local Data/GeocodingData.hyper
    15877  2020-10-22 15:04   Local Data/Airport.tds
---------                     -------
188027321                     21 files

.twbx は、.twb と、使っているデータファイル・抽出(.hyper)を1つにまとめた ZIP でした。.twb だけを渡すと、相手の環境に同じデータが無いと開けません。

Tableau の Document API(Python)で、このワークブックのデータソースとフィールドを読みました。

from tableaudocumentapi import Workbook
wb = Workbook("sample-superstore.twb")
print("worksheets:", wb.worksheets)
for ds in wb.datasources:
    print("datasource:", ds.caption, "/ connections:", [(c.dbclass, c.server, c.dbname) for c in ds.connections])
    for name, f in list(ds.fields.items())[:6]:
        print(f"  {f.name:<22} role={f.role or '-':<9} type={f.type or '-':<12} datatype={f.datatype or '-':<8} default_agg={f.default_aggregation}")
worksheets: ['Sheet 1']
datasource: Orders (sample_superstore) / connections: [('sqlserver', 'superstore.sample.db', 'sample_superstore')]
  [City]                 role=dimension type=nominal      datatype=string   default_agg=Count
  [Country]              role=dimension type=nominal      datatype=string   default_agg=Count
  [Number of Records]    role=measure   type=quantitative datatype=integer  default_agg=None
  [Postal Code]          role=dimension type=ordinal      datatype=real     default_agg=Sum
  [Row ID]               role=dimension type=ordinal      datatype=real     default_agg=Sum
  [State]                role=dimension type=nominal      datatype=string   default_agg=Count

Document API の公式ページは、このライブラリを「サポート対象外(unsupported)」の方法と書いています。できるのは接続情報(サーバー名・ユーザー名・DB 名)の読み書きと、フィールドの一覧の取得で、ワークブックを一から作ること、抽出を追加すること、.hyper を扱うことはできません(.hyper は Hyper API)。接続先のサーバー名を、開発用から本番用へ一括で書き換えるような用途に使われます。

Tableau Cloud・ServerのREST API(Pythonから操作する)

この節では、Tableau Cloud・Server をプログラムから操作するときに、どんなリクエストが送られるかが分かります。

Tableau Cloud・Server には REST API があり、サインイン・ワークブックの一覧・パブリッシュ・ユーザー管理などを HTTP で行えます。 公式のバージョン表では、Tableau 2026.1 が REST API 3.28、2026.2 が 3.29、2026.3 が 3.30 です。Python からは公式のライブラリ tableauserverclient(TSC)を使えます。

個人用アクセストークン(PAT)でサインインして、ワークブックの一覧を取るコードです。送り先は自作の擬似サーバー(届いたリクエストを表示して、最小の XML を返すもの)にしました。

import tableauserverclient as TSC
auth = TSC.PersonalAccessTokenAuth("rjc-demo-token", "dummy-token-secret", site_id="rjcdemo")
server = TSC.Server("http://127.0.0.1:31300", use_server_version=False)
server.version = "3.30"
with server.auth.sign_in(auth):
    workbooks, page = server.workbooks.get()
    for wb in workbooks:
        print("workbook:", wb.name, wb.id, "project:", wb.project_name)

擬似サーバーに届いたリクエストです(トークンは仮の値です)。

POST /api/3.30/auth/signin
  Content-Type: text/xml
  User-Agent: Tableau Server Client/0.42
  BODY: <tsRequest><credentials personalAccessTokenName="rjc-demo-token" personalAccessTokenSecret="dummy-token-secret"><site contentUrl="rjcdemo" /></credentials></tsRequest>
GET /api/3.30/sites/site-0001/workbooks
  X-Tableau-Auth: dummy-session-token
  User-Agent: Tableau Server Client/0.42
POST /api/3.30/auth/signout
  Content-Type: text/xml
  X-Tableau-Auth: dummy-session-token
  User-Agent: Tableau Server Client/0.42
workbook: 売上分析 wb-0001 project: 既定

サインインで XML を送り、返ってきたトークンを、以降のリクエストの X-Tableau-Auth ヘッダーに付けて呼ぶ流れでした。URL の site-0001 は、サインインの応答で返ったサイトの ID です。with を抜けると、自動でサインアウトのリクエストが送られています。PAT のシークレットはパスワードと同じ扱いで、コードに直接書かずに環境変数などから読みます。

Power BI・Data Studio(旧Looker Studio)との違い

この節では、よく比べられる BI ツールとの違いを、事実で比べられます。

Google の Looker Studio は、2026年4月に「Data Studio」へ名前が戻りました。 Google Cloud の製品ページも Data Studio の名前になっています。以下は各社の公式ページの内容です(2026年10月22日時点)。

項目 Tableau Power BI Data Studio(旧 Looker Studio)
提供元 Salesforce(Tableau) Microsoft Google
作成ツール Tableau Desktop(Windows・Mac)、ブラウザでの作成 Power BI Desktop(無料。Windows 10 以降) ブラウザ
無料で使える範囲 Desktop の Free・Public Edition(共有は不可・Public は公開) 無料アカウントで Desktop の作成。共有は Pro 以上 作成者・閲覧者とも無料
有料の価格 Creator 75ドル・Viewer 15ドル(ユーザー・月、年契約) Pro 2,098円・Premium Per User 3,598円(ユーザー・月相当、年払い、税別) Pro は1ユーザー・1プロジェクトあたり月9ドル
自社運用 Tableau Server Power BI Report Server(コア単位のライセンス) ―

計算の書き方も違います。Tableau は計算フィールド(LOD 表現・表計算を含む)、Power BI は DAX という式とデータ整形の Power Query、Data Studio は計算フィールドで書きます。

状況 候補になりやすいもの(目安)
Mac でもデスクトップのアプリで作りたい Tableau Desktop
Microsoft 365・Teams・Excel を中心に使っている Power BI(Microsoft 365 E5 には Pro が含まれる)
Google アナリティクス・BigQuery のレポートを無料で作りたい Data Studio
自社のサーバーで運用したい Tableau Server・Power BI Report Server
Salesforce のデータと AI エージェントで分析したい Tableau Next

社内の画面を Python だけで作る方法は、関連記事「Streamlit入門|データアプリのコード全文と再実行の仕組み」で扱っています。

Tableauでよくあるつまずきと直し方

この節では、Tableau を使い始めたときによく起きる「思った数字にならない」原因と直し方を引けます。

症状・エラー 原因 直し方
Cannot mix aggregate and non-aggregate arguments with this function 1つの式に SUM([売上]) と [利益] のような集計と非集計が混ざっている 両方を集計にそろえる(SUM([利益]) / SUM([売上]))か、LOD 表現で固定する
利益率が思ったより高い・低い 行ごとに割って平均している SUM([利益]) / SUM([売上]) で集計してから割る(利益率の節)
数値なのに見出しになる・集計される 郵便番号や ID がメジャー、またはディメンションの扱いが逆 データペインで「ディメンションに変換」「メジャーに変換」
月ごとの折れ線が12点しか出ない 日付が青(不連続)の「月」になっている 緑(連続)の「月」に変える(操作3)
フィルターしたのに FIXED の値が変わらない FIXED はディメンションのフィルターより先に計算される フィルターを「コンテキストに追加」する
割合の分母がフィルターで変わってしまう 表計算はビューに残った行だけで計算する 分母を {FIXED : SUM([売上])} で作る
同じ値が何行にも出る EXCLUDE などビューより粗い LOD の値が複製されている 集計を ATTR・MAX にする、ビューのディメンションを見直す
ダッシュボードが遅い ライブ接続の DB が遅い、マークが多すぎる 抽出に切り替える、フィルターでマークを減らす
共有した相手がデータを開けない .twb だけを渡した 抽出を含む .twbx で渡すか、Cloud・Server に公開する
Free Edition で公開できない Free Edition は Cloud・Server・Public に公開できない Creator のライセンス、または Public Edition(公開してよいデータだけ)

よくある質問

Q. Tableauの読み方は? A. 「タブロー」です。フランス語で「絵・表」を意味する言葉です。

Q. Tableauとは簡単に言うと何ですか? A. データに接続し、ドラッグ操作でグラフやダッシュボードを作って共有する BI ツールです。2003年にスタンフォード大学のプロジェクトから生まれ、2019年に Salesforce が買収しました。

Q. Tableauは無料で使えますか? A. Tableau Desktop の Free Edition(ローカル保存だけ、行数無制限)と Public Edition(Tableau Public に公開、1,500万行まで、商用目的では使えない)が無料です。Tableau Cloud・Server での共有は有料です(2026年10月22日時点)。

Q. Tableauの料金はいくらですか? A. Standard で Creator が1ユーザー月75ドル、Explorer が42ドル、Viewer が15ドル、Enterprise ではそれぞれ115ドル・70ドル・35ドルです。年契約・年単位の請求で、どの導入にも Creator が1人以上必要です(2026年10月22日時点)。

Q. Tableau Desktop・Cloud・Server・Publicの違いは? A. Desktop は作るアプリ、Cloud は Tableau が運用する共有の場所(SaaS)、Server は同じ役割を自社で運用するもの、Public は誰でも見られる形で無料公開する場所です。「Tableauの製品の種類」の節に表があります。

Q. ディメンションとメジャーの違いは? A. ディメンションは分ける単位になる項目(地域・日付など)、メジャーは集計される数値(売上など)です。SQL では、ディメンションが GROUP BY の列、メジャーが SUM などで集計する列にあたります。

Q. LOD表現のFIXED・INCLUDE・EXCLUDEの違いは? A. FIXED は指定したディメンションだけで、INCLUDE はビューのディメンションに足して、EXCLUDE はビューのディメンションから除いて集計します。FIXED だけはディメンションのフィルターより先に計算されます。

Q. TableauとPower BIの違いは? A. 提供元(Salesforce と Microsoft)、作成ツールの対応 OS(Tableau Desktop は Windows・Mac、Power BI Desktop は Windows)、料金、計算の書き方(Tableau は計算フィールド、Power BI は DAX)が違います。「Power BI・Data Studio(旧Looker Studio)との違い」の節に表があります。

Q. Tableauに資格はありますか? A. あります。公式ページには Salesforce Certified Tableau Desktop Foundations・Tableau Data Analyst・Tableau Server Administrator・Tableau Consultant・Tableau Architect が載っています。試験の詳細は Trailhead Academy で案内されています(2026年10月22日時点)。

Q. TableauはMacで使えますか? A. 使えます。Tableau Desktop と Tableau Prep Builder は macOS Ventura・Sonoma・Sequoia・Tahoe(Tahoe は 2026.1 以降)に対応し、Apple シリコンでも動きます(2026年10月22日時点の公式の仕様)。

Q. TableauでAIは使えますか? A. Tableau Agent で、自然言語で質問してグラフや計算フィールドを作れます。Tableau Cloud では Tableau+ が条件です。Cloud では Einstein Trust Layer 上で動き、送ったデータは LLM に保存されず学習にも使われないと公式ヘルプにあります(2026年10月22日時点)。

Q. .twbと.twbxの違いは? A. .twb はワークブックの定義だけの XML で、データは入りません。.twbx は .twb とデータファイル・抽出(.hyper)をまとめた ZIP で、データを持たない相手にもそのまま渡せます。

まとめ

  • Tableau(タブロー)は、データに接続し、ドラッグ操作でグラフ・ダッシュボードを作って共有する BI ツール。2019年から Salesforce の製品。
  • 作るのは Desktop(最新 2026.3)と Prep Builder、共有は Cloud と Server、無料公開は Public。Desktop には無料の Free Edition と Public Edition がある。
  • 料金は1ユーザー・月・年契約。Standard で Creator 75ドル・Explorer 42ドル・Viewer 15ドル(2026年10月22日時点)。
  • ディメンションは GROUP BY の列、メジャーは集計する列。青は見出し、緑は軸。日付の青い「月」は12個、緑の「月」は年月ごと。
  • 利益率は SUM([利益]) / SUM([売上])。行ごとに割って平均すると順位まで変わる。
  • LOD 表現は、FIXED=指定した単位だけ、INCLUDE=足して細かく、EXCLUDE=除いて粗く。FIXED はフィルターの前なので、絞るならコンテキストフィルター。
  • .twb は XML、.twbx はデータ込みの ZIP、.hyper は Hyper API で作れる。

参考・出典

確認日はいずれも 2026年10月22日です。

  • Tableau「Tableau とは?」:https://www.tableau.com/ja-jp/why-tableau/what-is-tableau
  • Tableau「製品」:https://www.tableau.com/ja-jp/products
  • Tableau「Pricing(Teams & Orgs)」:https://www.tableau.com/pricing/teams-orgs
  • Tableau「Tableau Cloud Pricing」:https://www.tableau.com/pricing/cloud
  • Tableau「Tableau Server Pricing」:https://www.tableau.com/pricing/server
  • Tableau「Product release and download」:https://www.tableau.com/support/releases
  • Tableau「Technical Specifications」:https://www.tableau.com/products/techspecs
  • Tableau「Free Trial」:https://www.tableau.com/products/trial
  • Tableau「Tableau Next」:https://www.tableau.com/ja-jp/products/tableau-next
  • Tableau「2026 Gartner Magic Quadrant for Analytics and Business Intelligence Platforms」:https://www.tableau.com/gartner-magic-quadrant-pre-release-2017
  • Tableau「Certification」:https://www.tableau.com/learn/certification
  • Tableau ヘルプ「Tableau Desktop Public Edition、Free Edition、Professional Edition の機能比較」:https://help.tableau.com/current/pro/desktop/ja-jp/desktop_comparison.htm
  • Tableau ヘルプ「ディメンションとメジャー、青と緑」:https://help.tableau.com/current/pro/desktop/ja-jp/datafields_typesandroles.htm
  • Tableau ヘルプ「表示形式を使用したビューの開始」:https://help.tableau.com/current/pro/desktop/ja-jp/buildauto_showme.htm
  • Tableau ヘルプ「Tableau での詳細レベル表現の作成」:https://help.tableau.com/current/pro/desktop/ja-jp/calculations_calculatedfields_lod.htm
  • Tableau Help「How Level of Detail Expressions Work in Tableau」:https://help.tableau.com/current/pro/desktop/en-us/calculations_calculatedfields_lod_overview.htm
  • Tableau ヘルプ「Tableau での操作の順序」:https://help.tableau.com/current/pro/desktop/ja-jp/order_of_operations.htm
  • Tableau ヘルプ「日付関数」:https://help.tableau.com/current/pro/desktop/ja-jp/functions_functions_date.htm
  • Tableau ヘルプ「論理関数」:https://help.tableau.com/current/pro/desktop/ja-jp/functions_functions_logical.htm
  • Tableau ヘルプ「データの抽出」:https://help.tableau.com/current/pro/desktop/ja-jp/extracting_data.htm
  • Tableau ヘルプ「Tableau のファイルの種類とフォルダー」:https://help.tableau.com/current/pro/desktop/ja-jp/environ_filesandfolders.htm
  • Tableau ヘルプ「Tableau Public へのパブリッシュ」:https://help.tableau.com/current/pro/desktop/ja-jp/publish_workbooks_tableaupublic.htm
  • Tableau ヘルプ「Tableau Prep について」:https://help.tableau.com/current/prep/ja-jp/prep_about.htm
  • Tableau ヘルプ「Tableau Pulse」:https://help.tableau.com/current/online/ja-jp/pulse_intro.htm
  • Tableau ヘルプ「Tableau Agent」:https://help.tableau.com/current/online/ja-jp/web_author_einstein.htm
  • Tableau REST API「API and Schema Versions」:https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm
  • Tableau Hyper API ドキュメント:https://tableau.github.io/hyper-db/docs/
  • Tableau Document API(Python):https://tableau.github.io/document-api-python/
  • tableau/document-api-python(サンプルのワークブック、GitHub):https://github.com/tableau/document-api-python
  • tableauserverclient(PyPI):https://pypi.org/project/tableauserverclient/
  • The Information Lab「Fixing Tableau Errors: Cannot mix aggregate and non-aggregate arguments」:https://www.theinformationlab.co.uk/community/blog/fixing-tableau-errors-cannot-mix-aggregate-and-non-aggregate-arguments
  • Microsoft「Power BI の価格」:https://www.microsoft.com/ja-jp/power-platform/products/power-bi/pricing
  • Microsoft Learn「Power BI Desktop の取得」:https://learn.microsoft.com/ja-jp/power-bi/fundamentals/desktop-get-the-desktop
  • Microsoft Learn「Power BI Report Server の概要」:https://learn.microsoft.com/ja-jp/power-bi/report-server/get-started
  • Microsoft サポート「Excel specifications and limits」:https://support.microsoft.com/en-us/office/excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3
  • Google Cloud「Data Studio」:https://cloud.google.com/looker-studio
  • PPC Land「Data Studio is back: Google kills Looker Studio name for good」:https://ppc.land/data-studio-is-back-google-kills-looker-studio-name-for-good/
  • PostgreSQL 16 ドキュメント「Window Functions」:https://www.postgresql.org/docs/16/functions-window.html

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Tableauとは|使い方・料金・製品の違いとLOD表現を実例で解説」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?