計算を使用するのは大変だと感じるかもしれません。リレーションシップを使用するデータ ソースでの計算は、さらに大変だと感じるかもしれません。しかし、リレーションシップでの計算を恐れる必要はありません。

: 関係を使用するデータ ソースの基本的な動作にまだ慣れていない場合は、このトピックに進む前に関係を気軽に使ってみるを参照してください。

計算タイプ

行レベルの計算は、データ内の各レコードに対して計算されるものです。 たとえば、各販売トランザクションには売上額と定価があり、割引率によって次のように調整される可能性があります: Price * (1- ZN([Discount]))。これは、各トランザクションの行ごとに計算されます。計算の結果は、売上高のデータ ソースに新しい列として追加されると考えることができます。

集計計算もあります。 集計計算はビジュアライゼーションの詳細レベルで計算され、その値はビューの構造によって異なります。カウント数は、集計計算の例です。Count([Title]) の値は、書式、著者、または販売日でカウント数を表示するかどうかによって異なります。

計算タイプの詳細については、ブログ(新しいウィンドウでリンクが開く)を参照してください。

テーブルの詳細レベル

Tableau データ ソースの各テーブルは独自の詳細レベルを持つことができるため、計算が関連付けられているテーブルがどれであるかによって影響が大きく異なります。たとえば、以前の Tableau (2020.2 より前のリレーションシップより前) では、定数値 1 を使用して計算を作成し、それを合計することでデータ ソース内のレコード数をカウントしていました。データソースの各行に 1 を割り当てたので、合計すると行数になりました。

ただし、この計算は値 1 になります。定数計算は、データ ソース全体に対するグローバルな詳細レベルではなく、データ ペインの下部にあるまだ割り当てられていない領域にあります。定数計算には独自の詳細レベルがあります。1 の合計は単に 1 です。

前述のように、テーブルと同じ詳細レベルを持つ計算は、通常であればテーブルのフィールドが含まれているため、[データ] ペインのそのテーブルに属します。たとえば、各著者のフルネームを取得するために行う姓と名の連結 (つまり [First Name] + " " + [Last Name]) は、著者テーブルに配置されます。

ただし、1 つの計算で複数のテーブルのフィールドを使用する場合は、計算は [データ] ペインの下部にあるまだ割り当てられていない領域に移ります。これは、テーブル間の行レベル計算と呼ばれます。関連するテーブルの行レベルで結合する必要があるため、パフォーマンスに影響を与える可能性があります。(リレーションシップのパフォーマンス オプションで、正しいカーディナリティが設定されていることを確認してください。)

詳細レベルの割り当て

テーブルの詳細レベルで計算の結果が制御されるため、適切なテーブルで計算を行うことが重要です。FIXED 詳細レベル表現を使用すると、特定のテーブルに計算をプルできます。式が固定されるフィールド (ディメンション宣言(新しいウィンドウでリンクが開く)) によって、結果の詳細レベルが決まります。

例: 著者ブック ツアー

Q: 各著者が参加しているブック ツアー イベントはいくつありますか?

A: この数字は各著者に「属する」ものですので、著者のテーブルに入れる必要があります。

  • 著者ブック ツアー イベント = {FIXED [Author Name] : SUM([Book Tour Events])}
  • (これは、平易な言い方をすると「各著者に関するブック ツアー イベントの合計数」と考えることができます。

Q: ブック ツアーを行っていない著者は何人いますか?

A: 次のような計算を試してみるのもよいでしょう。

  • COUNTD(IF ISNULL([Book Tour Events]) THEN ([Author Name]) END)
  • (これは、平易な言い方をすると「ブック ツアー イベントが空値の場合、著者の名前を返し、一意の著者名を数える」と考えることができます。)

ただし、ブック ツアー イベントはシリーズ テーブルからの値であり、作成者名は作成者テーブルからの値なので、この計算はテーブル間の行レベルの計算になります。また、このようなテーブル間の計算では内部結合が使用され、両方のテーブルに対応する値がない場合、行は結合結果から削除されます。つまり、存在しないものを Tableau に数えさせる必要があります。2 つのフィールドが同じテーブルにある場合は、この方法で行うのも良いでしょう。計算がデータソースの構造とうまく連動していないということ以外は、問題はありません。

代わりに、著者ごとにブック ツアー イベントの有無を示し、その結果を著者テーブルに保持する必要があります。「ブックツアーに参加している」かどうかというフラグが各著者に立てられると、ブックツアーを行っていない人数を数えることができます。

  • ブック ツアーの参加者か? = IF {FIXED [Author Name]: COUNT([Book Tour Events])} = 0 THEN "No" ELSE "Yes" END
  • (これは、平易な言い方をすると「著者ごとにブック ツアー イベントの数を数える」と考えることができます。カウント数がゼロの場合は著者に「いいえ」というラベルを付け、それ以外の場合は「はい」というラベルを付けます。そのフィールドに「ブック ツアーの参加者か?」という名前を付けると、そこにははいといいえが並びます。

ここで、いいえの数を数えると、元の質問に答えることができます。

ブック ツアーを行わない著者 = IF [Book tour participant?]= "No" THEN ([Author Name]) END という計算を行うと、ブック ツアーを行っていない著者のリストが得られます。(これは、「ブック ツアーの参加者か? がいいえである著者について、名前をリストアップする」と考えることができます。

計算が COUNTD(IF [Book tour participant?]= "No" THEN ([Author Name]) END) の場合、データ ペインの下部にある未割り当ての領域に結果が数値で表示されます。なぜでしょうか。それは、この計算は集計されているからです。

ボーナス質問:

ブック ツアーの参加者か? の計算の構造を直接使用して、著者名のリストを返すこともできます。IF {FIXED [Author Name]: COUNT([Book Tour Events])} = 0 THEN ([Author Name]) ENDこの計算はデータ ペインのどこに表示されるでしょうか。なぜでしょうか。Tableau Desktop の独自のコピーで試してみるか、このワークブックをダウンロードして確認してください。 (Tableau Desktop 2020.2 以降が必要です。ワークブックに入ったら、[データ] ペインで計算を右クリックし、[編集] を選択して計算エディターを開き、計算コメントの説明を確認します。)

関連リソース

ちょっと難しいと感じたら、関係を気軽に使ってみるを試してください。

あるいはこのまま続けて、関係を使用して複雑な分析を行う方法を調べたいでしょうか? 高度なリレーションシップを使ってみるを参照してください。

製品管理チームが発信する関係の技術的基盤の詳細については、Tableau のブログのリレーションシップに関する連載を参照してください。

また、「Tableau が関係を発明した理由(新しいウィンドウでリンクが開く)」など、Action Analytics(新しいウィンドウでリンクが開く) からの関係に関するビデオ ポッドキャストも参照してください。詳細については、ライブラリ(新しいウィンドウでリンクが開く)の [ビデオ ポッドキャスト] をクリックしてください。

ありがとうございます!