
Tableau でできる表現をGoogle スプレッドシートでもやってみた その6 ◯データを指定した文字列で区切って抽出
前回の記事(その5)に引き続き、Tableau では簡単にできることをGoogle スプレッドシートでも実現できるのかを試してみます。
一体何のことやらわからん、という方は、このシリーズの最初の記事を読んでみてください。
Ord 1のQ6 の問題を解いてみる
DATA Saber のウェブサイト内の課題、
「1.HandsOn - Fundamental」の「設問」をクリックすると、
Tableau Public で公開されている問題ページを表示します。

画像出所:https://public.tableau.com/app/profile/data.saber/viz/1_HandsOn-Fundamental/1_HandsOn-Fundamental
この問題の中から、いくつかをTableau で解いた後で、Google スプレッドシートでも解いてみる、ということをしてみます。
Tableau で解いてみる

画像出所:https://public.tableau.com/app/profile/data.saber/viz/1_HandsOn-Fundamental/1_HandsOn-Fundamental
ふむふむ。「製品ID」というデータに不具合があるとのこと。指定した文字列「-」(半角のハイフン)でデータを分割できればよいということですね。
ここでは、データを分割するところまでを実現します。
このように問題を理解したうえで、Tableau で解いてみます。
「製品 Id」にマウスカーソルを合わせて
「▶」>「作成」>「計算フィールド」をクリック「計算フィールド」に以下のように入力して「OK」をクリック
フィールド名:製品カテゴリー
計算:SPLIT( [製品 Id], "-", 1 )
※ - で区切られたデータのうち、1番目のかたまりを使用するという意味
完成。

「計算フィールド」を定義して「OK」をクリック
まで、2手をもちまして、Tableau での実装となります。
この操作では「Tableau Cloud」というソフトを使用しているので、SPLIT 関数を使用しての実装となります。
「Tableau Desktop」というソフトを使用すると「カスタム分割」という数式すら必要とせずにもっと簡単に実装できます。
Google スプレッドシートで解いてみる
Tableau ではSPLIT 関数を使用しました。なんということでしょう…Google スプレッドシートにもSPLIT 関数というものが存在します。Google スプレッドシートでもほとんど同じように実現できます。
データの右端の列に「製品カテゴリー」という列を作成
製品カテゴリーの2行目のセルに以下の数式を入力して、入力を確定。
=ARRAYFORMULA(
IF([製品IDの2行目:列全体]<>"",INDEX(SPLIT([製品IDの2行目:列全体],"-"),0,1),""))
完成。

製品カテゴリーの2行目のセルに数式を入力して、入力を確定。
まで、ちょっと複雑な関数を使用しての2手での実装となります。
区切ったデータの何番目のかたまりを使用するか
Google スプレッドシートの標準機能の
「データ」>「テキストを列に分割」
では、データを値として貼り付けてしまうため、元データの値が変更されたときに、分割した値を同時に更新することができないため、関数を使用しての分割を行いました。
SPLIT 関数だけでは、指定した文字列「-」がある分だけ列を増やしてしまうので「-」で区切った最初「1 番目」の値だけを取得するようにINDEX 関数で定義しています。
これは、Tableau で作成した計算フィールドのSPLIT 関数
「SPLIT( [製品 Id], "-", 1 )」
の「1」と同じような書き方ですね。
Googe スプレッドシートで元データのうち、ある列を指定した文字列で区切って使用するのは少し難しいですが、それはTableau Cloud でSPLIT 関数を使用するのと同じくらいの難易度かなと思います。
Ord1 のQ6 については、Tableau もGoogle スプレッドシートも引き分けですね。
引き続き、このシリーズではDATA Saber の課題にGoogle スプレッドシートでも取り組んでみて、Google スプレッドシートでもなんとかなるのか?という挑戦をしていきます。