📝

Tableau DATASaber チャレンジ振り返り(Ord7 編)

に公開

Tableau DATASaber チャレンジ振り返り(Ord7 編)

はじめに

今回は、 Ord7 を復習しました。
Ord7 は、パフォーマンスに優れた設計を行うための知識を習得すためのセクションですね。

Tableau DATASaber チャレンジ振り返り(Ord1 編)
Tableau DATASaber チャレンジ振り返り(Ord2 編)
Tableau DATASaber チャレンジ振り返り(Ord3 編)
Tableau DATASaber チャレンジ振り返り(Ord4 編)
Tableau DATASaber チャレンジ振り返り(Ord5 編)
Tableau DATASaber チャレンジ振り返り(Ord6 編)
Tableau DATASaber チャレンジ振り返り(Ord7 編)
Tableau DATASaber チャレンジ振り返り(Ord8 編)
Tableau DATASaber チャレンジ振り返り(Ord9 編)


Q1

パフォーマンスが悪いとなぜいけないのですか?

回答選択肢
  • 答えを得るのに時間がかかる
  • フローに乗れない
  • イライラする
  • 本当のTaskを忘れる

解説

パフォーマンスが悪いと、何かと 時間がかかって 、流れにも 乗れずイライラ して、やるべきことを 忘れ ちゃいますよね。
まったくいいことは何もないです。

Q2/Q3

表計算やJOIN(結合)はどこで処理されるかという問題です。

Q2

表計算はどこで処理されますか?

  • データベース
  • Tableau
Q3

JOIN(結合)はどこで処理されますか?

  • データベース
  • Tableau

解説


表計算は、行レベル計算、集計計算と異なり、データベースで処理されるのではなく、 Tableau にて処理 されます。
join(結合)は、 データベースにて処理 されます。

Q4

Tableau Desktopで表示が遅くてもTableau Serverで高速に表示できる

回答選択肢
  • 正しい
  • 誤り

解説

Tableau Desktop で動作が遅い場合、Tableau Server でも、それ以上に速く動作できるわけではありません。
一般的には、ローカル PC よりも、強力な CPU かつ、大量のメモリを搭載したサーバーのほうが動作が速いと思われがちですが、以下の理由でサーバーのほうが動作が遅くなることがあります。

  • 同時に複数のユーザーがサーバーリソースを共有している
  • サーバーがダッシュボードとチャートのレンダリングという追加処理を実行しなければならなくなる

Q5

次の内Tableauのシートで作業する前に件数を減らせるフィルターを選びなさい

回答選択肢
  • ディメンションフィルター
  • 抽出フィルター
  • コンテキストフィルター
  • データソースフィルター

解説

データの絞り込みと可視化を可能にするために 6種類のフィルターが用意されています。

  1. 抽出フィルター
    データ抽出接続時 に、指定した条件に合致するデータのみを抽出
    データ量を削減し、パフォーマンスを改善することができる
  2. データソースフィルター
    データの ライブ接続または、抽出接続時 に、データソース全体に条件を設定
    必要なデータのみを抽出することで、パフォーマンスを改善することができる
  3. コンテキストフィルター
    各シート で最初に適用
    上位/下位 N 件の抽出や、フィルターの適用順序を制御したい場合に利用する
  4. ディメンションフィルター
    各シートのフィルターシェルフ で使用
    カテゴリや属性などのディメンション情報に基づいてデータを絞り込む場合に利用する
  5. メジャーフィルター
    各シートのフィルターシェルフ で使用
    数値指標(メジャー)に対して、しきい値などの条件を設定してデータを抽出する場合に利用する
  6. 表計算フィルター
    表計算の結果 に基づいてデータを抽出
    データをフィルターするのではなく、ビューをフィルターすることが特徴

Q6

データの集計が遅い場合、DBで事前にテーブルを準備してもよい

回答選択肢
  • 正しい
  • 誤り

解説

事前にテーブルを準備しておくことで、パフォーマンスが改善されるなら 問題は無い です。

Q7/Q8

結合方法に関する問題です。

Q7

売上のトランザクションデータと地域マネージャーのマスターデータのテーブルがある。
これらのテーブルは同じスキーマ内に存在している。
一般的に適切と思われる結合方法はどれか?

  • 結合
  • ブレンディング
  • クロスデータベース結合
Q8

売上のトランザクションデータと在庫のトランザクションのテーブルがある。
これらのテーブルは別のデータベースに存在しており、異なる粒度でデータが格納されている。
商品単位での売り上げと在庫とを比較したい場合、一般的に適切と思われる結合方法はどれか?

  • 結合
  • ブレンディング
  • クロスデータベース結合

解説

  • 結合
    同じデータベース内 のテーブルを結合する方法

    • Inner Join(内部結合):両方のテーブルに共通するデータだけを取得

    • Left Join(左結合):左のテーブルにあるデータをすべて取得して、右のテーブルに一致しないデータは NULL

    • Right Join(右結合):右のテーブルにあるデータをすべて取得して、左のテーブルに一致しないデータは NULL

    • Full Outer Join(完全外部結合):両方のテーブルのデータをすべて取得して、一致しない部分は NULL

  • ブレンディング
    異なるデータソース (例: 異なるデータベースやファイル形式)を結合する方法
    それぞれのデータソースが独自に集計され、共通のフィールド(キー)を使って論理的に結ぶ

  • クロスデータベース結合
    異なるデータソース間 (例: SQL ServerとExcelなど)で直接結合を行う方法
    SQLのJOINと同じような結合を行うが、データソースが異なる場合でも一つの結合として扱える

Q9

ライブ接続と抽出接続について正しいものを答えなさい

回答選択肢
  • ライブ接続は抽出接続より必ず早い
  • 抽出接続はライブ接続より必ず早い
  • ライブ接続が早いか、抽出接続が早いかはケースバイケースである

解説

一般的には、抽出接続のほうが優れているとされていますが、データソースのクエリをできるだけ効率的かつ、最適に作成することでパフォーマンスを向上させることができます。

Q10

抽出は必要な粒度で集計した状態で作成することができる

回答選択肢
  • 正しい
  • 誤り

解説

抽出には 2 つの目的があります。

  • パフォーマンスの向上
  • 元データでは利用できないまたは、サポートされていない可能性がある機能の利用

抽出はフィルターを適用したり、その他の制限を設定したりすることで、全体のデータ量を削減できます。

Q11

行レベル計算を内包する集計計算を作成するときは

回答選択肢
  • 計算式を分けて記載する
  • 一つの計算式にまとめる

解説

行レベル計算と集計計算は、一つの計算フィールドにまとめることも、分けて記述することもできますが、長期的な可読性 保守性 再利用 を考えると 計算式を分割 することが推奨されています。
ただし、計算式が短く、再利用の必要が無いのであれば、まとめる方法を選んでも問題ありません。

まとめる方法

SUM(if [売上] > 1000 then [売上] / 1000 else 0 end)

分ける方法
行レベル計算(計算フィールド 1)

if [売上] > 1000 then [売上] / 1000 else 0 end

集計計算(計算フィールド 2)

SUM([計算フィールド 1])

Q12

地域項目の中に入っている値「北海道」と「東北地方」を表示上、「北日本」エリアとしてまとめたい。
適切な方法はどれか?

回答選択肢
  • 元データの「北海道」と「東北地方」を「北日本」に置換する
  • グループ化して別名をつける
  • 右のような計算式を作成: IF [地域]="北海道" OR [地域]="東北地方" THEN "北日本" ELSE [地域] END

解説

Tableau の機能を知らないと、計算式でやっちゃいそうですが、グループ化して別名を付ける のが、一番楽だし、計算式でやるよりパフォーマンスも良さそうです。
元データを置換しちゃうのは論外かなと思います。





Q13

最も速く処理できるデータ型を選びなさい
( 一般的なプログラミング言語やシステムについてではなく、Tableauの計算フィールドのパフォーマンスについて回答してください。)

回答選択肢
  • ブール型
  • 整数型
  • 文字列型

解説

ブール型、整数型は処理速度が速く、日付型、文字列型は処理速度が遅くなります。
Tableau では、処理速度の速い順に並べると 整数型 > ブール型 > 文字列型 らしいです。
自分は、1bit で表現できるブール型が 1番処理速度が速くて「ブール型 > 整数型 > 日付型 > 文字列型」の順かなあって思ってました。
あえて、「プログラミング言語やシステムについてではなく」って書いてあるところが 注意点 ですね。

Q14

日付の列に「2019年06月06日」という形式でデータが入っており、文字列として取り込まれた。
日付型に直す方法として最初に試すべきことは?

回答選択肢
  • 計算式を作成する:DATE(LEFT(STR([日付]),4) + “-“ + MID(STR([日付]),5,2) + “-“ + RIGHT(STR([日付]),2))
  • 計算式を作成する: DATEPARSE("yyyy年MM月dd日",[日付])
  • 文字列型になっているデータ型をそのままDate型に変更する

解説

以下の方法でデータ型を変更することができます。

  1. 「データソース」ページ内のデータソースを選択
  2. そのフィールドエリアのデータ型アイコンをクリック
  3. プルダウンメニューから変更したいデータ型を選択


Q15

日付のフィルターを作成したい。一番パフォーマンスがいいのは?

回答選択肢
  • 不連続フィルター
  • 連続型の範囲フィルター
  • 相対日付フィルター

解説

日付フィルターには 3 種類あります。

  • 不連続日付フィルター
    具体的な日付をリストとして選択するフィルター
  • 範囲指定日付フィルター
    日付の開始範囲と終了範囲を指定して、その指定範囲内のデータをフィルタリングするフィルター
  • 相対日付フィルター
    「今日」「過去7日間」「過去1ヶ月」など、現在の基準日を基点として動的な範囲を指定するフィルター

相対日付フィルターは、動的かつ、パフォーマンスに優れています。

Q16

フィルターを自由に選べるように表示しておくことにした。パフォーマンスがよいのは?

回答選択肢
  • 複数の値(ドロップダウン)
  • 複数の値(カスタムリスト)

解説

「複数の値(ドロップダウン)」は、 列挙型 のフィルターに分類され、一方、「複数の値(カスタムリスト)」は、 非列挙型 のフィルターに分類されます。

  • 列挙型
    すべての選択肢を表示する
    すべての値を読み込むため、データ量が多い場合にパフォーマンスが低下する可能性がある
  • 非列挙型
    選択肢を絞り込んで表示する
    必要な値のみを読み込むため、パフォーマンスに優れている

Q17

表示されたフィルターの「関連値のみ」オプションを使用すると

回答選択肢
  • 表示項目が減るため早くなる
  • クエリが増えるため表示が遅くなる

解説

「関連値」のみオプションは、他のフィルターと連動してフィルターされるため大変便利ですが、 クエリの数が増加 することがあるので、 適度な使用が推奨 されています。

Q18

クエリパイプラインとして正しいものを選びなさい

回答選択肢
  • 抽出フィルター、データソースフィルター、コンテキストフィルター、FIXED、ディメンションフィルター、EXCLUDE/INCLUDE、メジャーフィルター、表計算フィルター
  • データソースフィルター、抽出フィルター、コンテキストフィルター、ディメンションフィルター、FIXED、EXCLUDE/INCLUDE、メジャーフィルター、表計算フィルター
  • 抽出フィルター、データソースフィルター、コンテキストフィルター、FIXED、ディメンションフィルター、EXCLUDE/INCLUDE、表計算フィルター、メジャーフィルター
  • 抽出フィルター、データソースフィルター、コンテキストフィルター、FIXED、EXCLUDE/INCLUDE、ディメンションフィルター、メジャーフィルター、表計算フィルター

解説

クエリパイプラインの処理順序は以下のとおりです。


Q19

Tableauは表示できるデータ量に制限がないため、数万行のテキストテーブルを表示するのが得意である

回答選択肢
  • 正しい
  • 誤り

解説

テキストテーブルの表示ができないわけでないですが、それを主体として表示させるためのツールではないです。
サイズの大きいクロス集計は、パフォーマンス低下やメモリ不足が起こることもあります。
そもそも、テキストテーブルやクロス集計を表示させたいなら、エクセルとかを使ったほうがよいですね。

Q20

ダッシュボードのサイズは

回答選択肢
  • 表示されるべき形にしっかり固定する
  • ユーザーが好きな大きさで見られるよう、自動にしておく

解説

ダッシュボードサイズを固定することは パフォーマンス向上させるための方法のひとつ となります。

  • レイアウトをひとつ作るだけでよい(レイアウト崩れを防ぐ効果もある)
  • サーバー側でキャッシュを共有できるようになるため、パフォーマンスとスケーラビリティの両方が向上

Q21

パフォーマンスのよいダッシュボードデザインは結果的に人が見たときにもわかりやすいデザインに通じている

回答選択肢
  • 正しい
  • 誤り

解説

まあ、「そうだよね」ってことで。

おわりに

パフォーマンスに優れた設計を行っていくことは重要なことだと理解はしてますが、これがまためっちゃ大変で難しいことなんですよね。
心がけてはいきますけど。
ひとまず。。。

【参考】
ワークブックのパフォーマンスの最適化
パフォーマンスの調整
Tableau ワークブックのパフォーマンス チェックリスト

Discussion