作ってみたかったグラフ-平均寿命、平均余命-

引き続き、オリンピック面白いですね。

まだ気は早いですが、終わったら、こちらのグラフもアップデートする必要がありそうです。

 Tableau Public

 

さて、もうひとつ作ってみたかったグラフがありました。

それは、平均寿命/平均余命のグラフです。

私も大きくなるまでよく分かっていなかったんですよね。「平均寿命」。

平均寿命80歳とか言われると、何となく、自分も80歳位まで生きることになるのかなぁなんて思ってました。そして、それはあながち間違いでもありません。

 

でも、自分自身へのあてはめ方に関して、どうもしっくり来てなかったんです。
数字の意味合いとしては、WIKIにありますが、

平均寿命(へいきんじゅみょう)とは、
0歳時における平均余命

そして、

平均余命(へいきんよめい/へいきんよみょう)とは、ある年齢の人々が、その後何年生きられるかという期待値のことである。

だから毎年発表される「平均寿命」は、その年に生まれた子供たちの平均余命、つまり、何年生きられるかという期待値になります。

 

では、私の残りの人生はあと何年あるのでしょう?

厚生労働省の発表しているデータには、年齢ごとの「平均余命」が出ています。

昨年のデータから、私の該当年齢を見ると、平均余命が38年、つまり82歳まで生存が「期待*1」できることになってます。

ちなみに、昨年度の「平均寿命(男性)」は80.8歳。ですので、既に44歳まで生き残った私は、昨年生まれの子供たちの平均より、1年ちょっと長く生きることが「期待」されます。

前置きが長くなりましたが、作りたかったグラフは、自分が何歳まで生きるのか、20年前の時点と、直近では数字がどれくらい違うのか。ということです。

20年前と比べて、「平均寿命が伸びている」というのは、20年前に生まれた子供たちの20年前の平均余命と、昨年生まれた子供たちの昨年時点での平均余命を比べているので、指標としては意味がありますが、「自分が何歳まで生きるのか。という期待値に変化があったかどうか」は分かりません。

それを比較するグラフを作りたかったのです。

つまり、20年前は私は24歳なので、20年前の24歳での平均余命と、今年の44歳の平均余命を比べたい。というわけです。

 

分かってもらえますかね??

 

で、調べてみました。

 

44歳男性。

f:id:skn_0410:20160812051241p:plain

平均余命だと残りの年数を示すことになるので、自分が何歳まで生きられるかという年齢を「期待寿命」と呼ぶことにします。

 

答えとしては、1996年(入手できた最も古いデータ)の「私」の期待寿命と、昨年時点の「私」の期待寿命とでは、4.1年  延びていました。(TOPのチャート。)

平均寿命の延びとおおよそ歩調を合わせているように見えます。

性別と、2015年時点の年齢を選択すると、各年齢時点での期待寿命が、5ポイントのドットで示されるようにしてみました。

 

次は、子供たち世代を見てみます。

20歳男性。

f:id:skn_0410:20160812072413p:plain

10歳男性。

f:id:skn_0410:20160812072558p:plain

小さいうちは、不慮の事故や病気による影響で、年齢が低いほど期待寿命は下がります。

 

次は、親世代

70歳男性。

f:id:skn_0410:20160812063706p:plain

えらく延びてるように見えます。6.2年。。生き残り(笑)の団塊世代のお世話をするのは、「平均寿命」の80.8歳までではなく、それより5年も長い「期待寿命」の85.6歳ですし、さらに延長傾向です。現役世代のみなさん、一緒にがんばりましょう。。。(震え声)

 

70歳女性。

f:id:skn_0410:20160812064024p:plain

延びは、4.8年。絶対値としては、私が還暦になっても、健在の可能性が高いですね。こちらは、「平均寿命」からのずれは3年程度です。

 

グラフのテクニックとは一切関係ないですが、我々現役世代は認識を新たにする必要があります。団塊の世代は、「平均寿命」よりもかなり長い寿命をお持ちだということを。。。

 

そのほかにもグラフ作成しました

 

加えて、いくつかグラフを並べてみました。

左下は、一般的な「平均寿命」の各調査時点ごとの推移を示したものです。

f:id:skn_0410:20160812060925p:plain

色が調査年度、濃いのが女性、薄いのが男性です。

 

中段は、各年齢時点における男女間の「期待寿命」の差を示しています。

f:id:skn_0410:20160812060947p:plain

 

55歳位までは6年程度の差で、ほとんど変化が見られませんが、70歳まで夫婦健在な場合、差が4年程度に縮まることになります。

 

もうひとつ、ニーズがあるかどうかは分かりませんが、興味があったので。。。

 自分がその年発表された「平均寿命」の年齢だった場合、その年齢の人たちの余命がどれくらいなのかという数字です。平均までたどり着いたけど、残りはどれくらい?という、なさそうでありそうな問いかけに答える試みです。

f:id:skn_0410:20160812062813p:plain

とりあえず、2015年で計算してみると、男性で8.5年、女性で7.2年であることが分かりました。

男性の方が1年以上も長いことをみると、平均よりかなり若くして亡くなる男性が多いことを示しています。乳幼児死亡率の影響なのかも知れません。各年齢のデータを詳しく調べれば答えはあると思いますが、今回は、調査の対象外とします。

 

自分の年齢の数字を調べて、生命保険の検討や老後の計画の参考にでもしてください。

 

それでは、Enjoy Tableau !!

 

*1:ここでいうのは、期待値の「期待」の意味合いに近いです

期待値 - Wikipedia

こんな簡単なビュー作成に100タッチ?!-複数のKPI表示-

オリンピック、盛り上がってきましたね。

ご存知の通り、移民の国アメリカですが、こういうイベント時には「自分の国」という意識が高揚する気がします。

自然、国別メダル獲得数に目がいくのですが、米中2大国の争いがすでに始まってるように見えます。

スポーツで済んでいる間は良いですが、いろんなところで意地の張り合いが起きるのはちょっとヤな感じでもあります。。。

 

それはさておき、今回は、タブロー Community の中でも、もっとも頻繁なFAQのひとつを紹介します。

これは、質問のタイトルを特定するのは難しいのですが、

  • 複数のKPIをひとつの表に表示する    あるいは
  • 複数のMeasureそれぞれに違う色を設定する

その他の質問としても挙がってきます。

求められているVIZの例は下記のようなものです。

f:id:skn_0410:20160810051415p:plain

3つの measure (Sales, Profit, and G.M.%) をKPIに基づいて、別々の色で表示する必要があります。

 

ひとつのMeasureについて、数値を表示した上で、KPIに応じた色を設定するのは簡単です。

例えば、Salesについてのみ、表を作成するのであれば、下記のようにできます。

https://cdn-ak.f.st-hatena.com/images/fotolife/s/skn_0410/20160810/20160810030446.png

 

また、複数のMeasureの数値を、色なしで並列で表示するのも簡単です。

f:id:skn_0410:20160810030746p:plain

しかしながら、3つのMeasureを並列で表示しながら、それぞれに別々の色を設定する  となると、話が違ってきます。

ためしに、KPI(Sales) をColor Shelfに配置すると、3つ全部のFieldの色が同じ色になります。

f:id:skn_0410:20160810031001p:plain

Profit と G.M.% のFieldも SalesのKPI の色を示していることになり、明らかに我々の求めている結果と異なります。

 

繰り返しですが、このニーズそのものは、多くの人が持つものであり、FAQの頻度も非常に高いです。

そして、もちろん解答はあるのです。

しかしながら個人的には、「これが答えです!」と高らかに示せるものではなく、「方法はないことはないですけど。。。」レベルのものだと認識しています。

タブローが、「BIツールとして最も優れたツールである」と言いたいのであれば、これくらいは簡単に作れるようになって欲しいものだと強く思います。

万が一、タブローの開発チームが、「解法(下に示します)が存在するので、これは解決済みだ」と考えるなら、それは大きな勘違いでしょう。

Communityで毎日この類の質問に解答してる、こっちの身にもなってくれよって話です(笑)。

ともかく。

どうやって実現するか

 

この場合、Fieldを設置する、「箱」あるいは「枠」が必要です。英語では Placeholderと言えば通じる気がするのですが、日本語では?「箱」も「枠」も分かりやすい気はしないので、「プレースホルダー」で行きますか。

Calculated Filedを作成します。計算式は「1」を入力するのみです。

これが、プレースホルダーになります。

f:id:skn_0410:20160810033924p:plain

 

このFieldをColumnに配置し、Sumではなく、MinimumをMeasureとして選択します。

そして、2回 コピーして、合計3つのプレースホルダーを設置します。

f:id:skn_0410:20160810034352p:plain

3つの棒グラフができました。

最初の棒グラフ(いちばん左)で、"Sales"をLabelに、"KPI (Sales)" をColorに配置します。

f:id:skn_0410:20160810034656p:plain

次に、Axis(X軸)を編集します。

f:id:skn_0410:20160810034857p:plain

f:id:skn_0410:20160810035118p:plain

 

f:id:skn_0410:20160810035204p:plain

 

さらに、Titleを下部でなく、上部に表示させるため、"Dummy" のFieldを第2軸に配置します。

f:id:skn_0410:20160810035411p:plain

 

f:id:skn_0410:20160810035757p:plain

 

Tableauの自動のグラフタイプ選択は、しばしばとんでもない選択をしますが、あわてず、もとのグラフタイプを棒グラフに、2つ目をテキストに変更します。

2つ目のグラフは、軸のタイトルだけにしか使用しないので、実際にはどのタイプでも問題はありません。分かりやすくするため、1つ目と違うものにしただけです。

f:id:skn_0410:20160810040014p:plain

第2軸の軸を編集します。

f:id:skn_0410:20160810040147p:plain

Titleをタイプします。

f:id:skn_0410:20160810040337p:plain

 

Tick MarksをNoneにします。

f:id:skn_0410:20160810040412p:plain

そして、ColorのTransparencyを「ゼロ」にします。

f:id:skn_0410:20160810040544p:plain

 

棒グラフ側に移って、Label 配置を修正します。

f:id:skn_0410:20160810040845p:plain

 

こちらが、ここ時点のビューです。

f:id:skn_0410:20160810040928p:plain

 

同様の作業が、他の2つのField(Profit、G.M.%)に関して必要になります。

 

終了すると、下記のようなビューを得ます。

f:id:skn_0410:20160810041425p:plain

 

順序は前後しますが、行と行の間の空間が気になるので、棒グラフのサイズを変更します。

f:id:skn_0410:20160810041836p:plain

サイズ変更も、3つの棒グラフそれぞれに対して行うと、ようやく以下のビューを得ます。

 

f:id:skn_0410:20160810041952p:plain

このシンプルなVIZを作成するのに、1回も間違わずに、70ステップ以上が必要でした。数えるのもアホらしいわ、ホンマに。。

途中、「おっと間違えた」も当然あるので(間違えると当然取り消しアクションが必要なので)、ざっくり、100 タッチが必要な訳です。

今のところ、このVIZを作成するのに、これ以上簡単な方法を知りませんし、Communityでも見かけたことはありません。

簡単にしようと思うと、タブロー技術陣の協力が必要です。

Communityには、アイデアを募集するページもあって、以下のものがこの機能に対する要望のように思えます。もちろん、みなさん投票できます。

しかしながら、この要望に関しては、要望を文章/語句にしたときに、人によって違ってしまう気がしており、「この機能が欲しい」って一本化することがそもそも難しいのかも?という気もしています。

 

ただ上にも書いたように、これを初心者に「これがタブローでのやり方です」って言ったら、「何その面倒くささ!それはツールとしてどうよ?!」ってなると思うんですよね。。。

まあ、締まりは悪いですが、以上です。

 

Enjoy Tableau !!!

 

 

チェックボックスひとつで。。-ダッシュボード アクションの怪ー

やりました!!

イチロー選手、3000本安打達成です!!

イチローの1年目から見ており、日本での最終戦をグリーンスタジアムまで見に行って涙した私としては、感慨深いものがありました。

 

といっても、会社の同僚で、そんなことを話題にする人は皆無です(涙)。

彼らの話題を追っかけていると思うのですが、その都市に野球のスタジアムがない限りは、アメリカの地方都市で野球が話題になることは無いのではないかと。。。

ここでは、カレッジフットボールのチームがある程度強いので、秋以降のフットボールシーズンになると、それに関しては、かなりみんな盛り上がります。

 

 またも、「ボタンひとつだけなのに。。。」問題

 

それはともかく、タイトルの件。

ダッシュボードアクションに関して質問を受けました。動きがおかしいと。

彼のダッシュボードは ↓ こんな感じ。

f:id:skn_0410:20160809072522p:plain

3つのシートをダッシュボードでひとつにしています。

まず、このKPI はよく工夫されています。複数のKPIをひとつのテーブルに示す場合、ちょっと工夫が必要です。(別の機会に投稿します。=たぶん)

KPIがDiscreteの場合、そのちょっと面倒くさい工夫が必要なのですが、彼の場合、ContinousのValue (1~3) にすることで、ひとつの表で、複数のKPIを示すことに成功しています。

そして、以下のようにアクションが有効になっています。

f:id:skn_0410:20160809073006p:plain

f:id:skn_0410:20160809073051p:plain

 

問題があったのは、下記のケースです。

このダッシュボードの場合、KPI毎というより、カスタマーごとのフィルターに意味があるので、ユーザーは、"Costomer Name" をクリックします。

しかしながら、KPI そのものをクリックしたときには有効だったダッシュボードアクションが、"Costomer Name" をクリックしたときには動かないのです。

f:id:skn_0410:20160809073211p:plain

 

私が、同様にして作成したダッシュボードだと、期待通りに動いたのに、彼のダッシュボードだけがうまく動きませんでした。

またも、「ボタンひとつだけなのに。。。」問題です。

 

どこに違いあったのか 

 

違いは、"Run on single select only" の チェックボックスにありました。

(これでも発見するのには数時間を要してしまうんですよね。。)

f:id:skn_0410:20160809073648p:plain

 

このボックスの「オフ」により、以下のようなビューを実現できます。

f:id:skn_0410:20160809074616p:plain

これは、多くの場合メリットが大きいですが、もちろんデメリットがあります。それは、ダッシュボードではしばしば嫌われる、スクロールバーが出現せざるを得ないことです。

これはダッシュボードに求められる機能により、オンオフを決めればよいと思います。

一度に示す"Costmer Name"をひとつに絞りたい場合は、チェックを「オン」でよいのですが、このビューにおいて、"Costomer Name"そのものをフィルターとして使用したい場合は、チェックを「オフ」にしておく必要があるのです。

私と彼が気づかなかったのは、

システム的には、"Customer Name"を選択することが、システム的には、「複数セル」の選択と同じ意味になる

ということだった訳です。

 

めちゃめちゃ細かい点ですし、後から見れば「当たり前」的なことなのですが、他の多くの問題と同様、実際には、解決に時間を要してしまいました。

 

こういうのは、ケーススタディの量を稼いでいくしかない気がします。

 

 

それでは、Enjoy Tableau !!

 

ガントチャートを進化させてみた!! ー棒グラフと合体っー

また/まだ(?)山火事のようで、風向きによって、もやがかかったような感じにないます。少し煙っぽいにおいもするし。。。

これがなければ、澄み渡った青空で、めちゃめちゃ快適なのですが。。

 

さてここしばらく、どうにかして作りたいと思ってたVIZがあったんです。

折に触れてトライしてみたのですが、なかなか最後の一歩が越えられず、実現できてませんでした。

なぜ出来たのか。。。

やっぱ、アンバサダー軍団  できるわ~。この人達にコンタクトしやすくなったことはやはり大きいですね。まあ、当面アンバサダーの中では、やんちゃキャラでやって行こうと思います。。。

 

ガントチャートはこんな感じですね。

f:id:skn_0410:20160805081912p:plain

そして、サマリーはこんな感じ。

f:id:skn_0410:20160805082211p:plain

ダッシュボードで上下に重ねることは出来るのですが、横軸の時間を完全に同期させるのは面倒です。

ゴールは、上記2つのチャートを、ひとつのシート上で作成するか、ダッシュボードで完全に同期するかです。

 

与えられたデータは、こんな感じ。

f:id:skn_0410:20160805083556p:plain

[End Time - Start Time]

[End Time]-[Start Time]

 

 終了時刻から開始時刻を引き算するCalculated Fieldを作成して、ガントのサイズに配置することでチャートが出来ます。

f:id:skn_0410:20160805083757p:plain

 

さて、このデータ構造だと、サマリーのグラフは描けるでしょうか?

 

答えはノーです。

なぜなら、Continousの横軸を持って、グラフを描こうとすると、Start Time、End Timeのどちらかを持ってくるしかありません。しかしながら、Strat Timeを軸にした場合、最後の End Time は、必ず最後の Start Time より後ろになります。

逆もまたしかり。End Timeを軸にした場合、最初の Start Timeは必ず、最初の End Timeより 前になり、どちらのケースもポイントを表示することができません。

ですので、最初にやるべきことは、きちんと最大、最小をカバーできるようにすることです。

一歩目:データ構造の変更

データピボットを使います。

f:id:skn_0410:20160805085224p:plain

f:id:skn_0410:20160805085250p:plain

f:id:skn_0410:20160805085401p:plain

 

以下のようなデータを得ます。

f:id:skn_0410:20160805085509p:plain

このデータ構造の方が、タブローでは格段に扱いやすいのですが、ひとつ問題がありあす。同じイベントにおける、Start Timeと End Time の関係性が失われてしまいました。イベントIDがあれば良いですが、今回はありません。

 

ガントチャートを描いてみる

 

しかしながら、元のデータがある限り、以下のようにデータソースの関係を構築すれば問題ありません。

f:id:skn_0410:20160805091210p:plain

 

f:id:skn_0410:20160805091248p:plain

 

f:id:skn_0410:20160805091750p:plain

 

これで、同様のガントチャートは完成です。

 

さらに創造性を働かせる

さて、もう一歩進めます。ぶっちゃけ、ガントチャート、扱いにくいです。

他のグラフ足せないんで。。。

そこで、ガントチャート  ライク な グラフにトライしてみます。

以下のClculated Fieldを作成します。

[Data for new Chart]

if [Pivot field names]="Start Time" then 1
elseif [Pivot field names]="End Time" then -1
else 0 end

 

 グラフを作成します。

f:id:skn_0410:20160805092407p:plain

 

Table Calculationiを追加します。

 

f:id:skn_0410:20160805092504p:plain

カテゴリの色づけ

f:id:skn_0410:20160805092645p:plain

 

ここで、ちょっとしたトリックです。

もともと知ってたんで、「隠しボタン」ではありませんが、「ここで使う」のを知らなかったため、大変苦労しておりました。

Show Missing Value を ON にします。

f:id:skn_0410:20160805092935p:plain

そしたら、↓

わーお。

f:id:skn_0410:20160805093014p:plain

 

これで、ガントチャート  ライク なグラフが出来ました。

これが出来れば、サマリーを下段に追加するのは簡単です。

f:id:skn_0410:20160805093308p:plain

 

残りはお化粧。

f:id:skn_0410:20160805093532p:plain

f:id:skn_0410:20160805093617p:plain

 

これが最終形です。

f:id:skn_0410:20160805093731p:plain

 

最後のトリックすっ飛ばしてたせいで、ぜんぜん別のアプローチに取り組むことになり、なが~い放浪の旅となった訳です。

マジで、「知ってる」「知らない」だけの違いです。ボタン一個だけですよ~。

信じられんわ。ホンマに。。

だからこそ、継続的に学ぶことが重要ですね。。。。

今日の私は昨日より賢い!

(覚えた分だけ何か忘れてるけどな!!)

 

 

それでは、Enjoy Tableau !!

 

隠しボタン/隠しコマンド?! その1(いくつ出てくるか分かりません)

天気の良い日が続きます。

前回、気温のグラフを掲載しましたが、私の住んでいる地域は、本当に乾燥しています。6月~9月まで、ほとんど雨は降りません。オープンカーも屋根つけないまま駐車してあります。

気温が高い日でも、日陰にいくと常に涼しい、時には肌寒いくらいです。ただ、直射日光を浴びると、刺さるように痛いです。皮膚がんの発生率も高いんですよね。

夏の日差しはきつい、冬はときどきすっげぇ寒いとはいえ、まあ気候に関しては、概ね快適です。

 

さて、小ネタになりますが、ふたつほど。

  • ひとつめ。隠しボタン?

既に知ってる人には何でもない情報ですが、私の周りの人も知らない人が多かったボタン。

同じデータを使用して、いろんなリクエストを受けるうちにシートがいっぱい出来てきて左右にスクロールしないと全部見れなくなってきた。そこに新たな依頼がやってきて、新しいシートを作ったら、元のシートがどこに行ったか分からない。。。。

 

こんな感じです。↓

f:id:skn_0410:20160804034234p:plain

右も左も、スクロールしないといけない状態。シートを追加すると。。

f:id:skn_0410:20160804034419p:plain

いちばん、右側に追加されます。で、元のシートどこよ?

マウスをシート名の上にホーバーすると、イメージがが出てきますが、まどろっこしいです。

f:id:skn_0410:20160804034557p:plain

こういう時、パワーポイントのスライド一覧表示みたいなのが欲しいです。

で、実はあるんです。すでに。

f:id:skn_0410:20160804035010p:plain

f:id:skn_0410:20160804035428p:plain

 

グレイアウトされて使えないようにも見えますが、ちゃんと機能します。

3つのうちの左端のアイコンをクリックします。

f:id:skn_0410:20160804035601p:plain

あるんじゃ~ん。早く言ってよ~。

ここで、シートの並べ替えが、ドラッグ&ドロップで簡単に行えます。

f:id:skn_0410:20160804035746p:plain

パワーポイントと同じです。

もうちょっと分かりやすくしてもバチはあたらないと思うのですが。。

 

  • ふたつめ。隠しコマンド?

もうひとつ。キーボードのショートカットは、下記のようなリンクにありますが、

Keyboard Shortcuts

ここに載ってなかったのをひとつ。

Calculated Fieldを作成するときのWindow。

f:id:skn_0410:20160804040727p:plain

ちょっとフォントが小さいと思ってたのですが、

「CTRL」+「+」で拡大できました。

f:id:skn_0410:20160804040837p:plain

「CTRL」+「-」で縮小です。

f:id:skn_0410:20160804040917p:plain

 

で、いろいろ触ってるうちに、

CTRL+マウスころころ(ホイルっていうみたいですが)でも拡大縮小できました。

f:id:skn_0410:20160804041114p:plain

 

そして、さらに!

グラフのエリア上で、CTRL+マウスのホイルをころころやると。。。

f:id:skn_0410:20160804041349p:plain

 

f:id:skn_0410:20160804041417p:plain

Y軸の、スケールが変わります!!

f:id:skn_0410:20160804041602p:plain

軸のEditの「Fixed」って、0以外は、手打ちするの面倒だなと思っていたのですが、マウスころころで、ビジュアルで直接調整できることが分かりました!!

 

他にも、隠してあることあるんじゃないの?

 

ということで、探検の興味はつきませんね。

 

それでは、Enjoy Tableau !!

 

 

 

案外いいかも?!最高、最低気温のグラフ-こんなに違った東京と「砂漠」-

もう、8月です!

前にも書きましたが、アメリカの内陸部は非常に乾燥していて、夏も過しやすいです。

小学生並みの知見によって、海水より陸の方が熱しやすく冷めやすいので、その分早めに気温のピークがくるんだと思ってます。

そして、昼間は暑くても、夜は涼しいです。そう、それは砂漠です!

ラクダがいて、砂のいっぱいあるのだけが砂漠(Desert)ではなくて、西部劇に出てくるような「荒野」も英語では「Desert」といいます。

ということで、東京の気温と比較してみました。

 

f:id:skn_0410:20160803103306p:plain

着色部の下限が平均最低気温、上限が平均最高気温です。

えんじ色のアメリカ中西部は、ピークが8月ではなく7月である点、それに何より、この最高気温と最低気温との温度差!!

こうしてみるとすごい。。

夜は窓開けて寝ると風邪引きます。早朝とか寒いんで。。

さて、上記のようなグラフの書き方を投稿してみようと思います。

 

ベースにあるのは棒グラフです。そこに一工夫加えると、レンジを表すグラフに出来ます。

 

最高気温を主軸に、

 

f:id:skn_0410:20160803104219p:plain

 

最低気温を第2軸においてみます。

f:id:skn_0410:20160803104317p:plain

色が勝手に変更されたことはひとまずおいておき、同期します。

f:id:skn_0410:20160803104358p:plain

すでになんとなくそれっぽい!

2軸目の色を変更します。

f:id:skn_0410:20160803104530p:plain

 

f:id:skn_0410:20160803104550p:plain

さらに、

f:id:skn_0410:20160803104629p:plain

第2軸の色を「白」に変えて、さらに、主軸から Measure Nameを取り除きます。

f:id:skn_0410:20160803104727p:plain

こうなりました。

f:id:skn_0410:20160803104845p:plain

 

できた!!

 

ように見えて、実は欠陥があります。分かりますか?

  

最初のグラフ

f:id:skn_0410:20160803103306p:plain

最低気温の零下部分が色づけされていません。

これだとNGですね。

アプローチを変えます。

ところで、このグラフ、どっかで見たことあるタイプだと思われた方もあると思います。

 

そうです。いわゆるガントチャートですね。

ガントチャートを縦向きにして、棒グラフ風に描画するのです。

ガントチャートの基本は、「始点」と「長さ」です。タイムテーブルで使うことが多いですが、その場合も開始時刻と継続時間で表現します。

 

この場合は、

「最高気温=最低気温+温度差」という公式(笑)を使います。

先ほどのグラフから、

 

2軸目のチャートタイプを「ガント」にします。

f:id:skn_0410:20160803105823p:plain

 

で、温度差フィールドを、「サイズ」に配置します。

f:id:skn_0410:20160803110947p:plain

 

色付けが反対になっているので、ガントを色づけ、棒グラフを白に変更します。

f:id:skn_0410:20160803111142p:plain

 

出来ました!!

f:id:skn_0410:20160803111227p:plain

あとは、Labelを配置します。

最高気温を棒グラフ側に、最低気温をガント側に、それぞれ配置します。

f:id:skn_0410:20160803111333p:plain

最低気温ラベルの配置が悪いので、変更します。

f:id:skn_0410:20160803111456p:plain

 

できました~。

やたら同じようなグラフばっかり並べてしまいました。

気温を表すのにこのタイプを使うのは、さっき、思いついたばかりなのですが、案外いいかも知れないです。お気に召せば使ってみてください。

 

では、Enjoy Tableau!! 

 

 

エクセルなら簡単なのに・・・ちょっとややこしい入出庫管理

先日、こんな肩書きを頂戴しました。

www.tableau.com

もちろん、嬉しいのは嬉しいのですが、周りの人達の知識・スキルがものすごいので、ちょっとついてけるかどうか不安です。

下手な解法書いて、別のアンバサダーの人あるいは一般のメンバーから「それは違うと思いま~す」とかダメ出しされるとヘコみそうです。でも頑張ります。

 

今回は、私が最初にコミュニティで答えを教えてもらった案件を再現します。

初期のころは、何も知らずに一人でハマりまくっていました。何時間かけたことでしょう。。。『タブローって、案外使えんなぁ。結局エクセル頼みかよ~』とか思ってたのですが、使えないのは自分だった訳ですね。

 

その案件というのは、以下のようなものです。

データ例

f:id:skn_0410:20160729085244p:plain

日付とSupply、Orderがありまして、計算したいのは、SupplyからOrderを差し引いた残り在庫。

ただし、当たり前ですが、Orderの方が、在庫を上回ってしまうと出庫できないので、そのときはマイナスでなく、「0」を計上する必要があります。

 

  • エクセルだと、どうしたか

エクセルでグラフを書くとこんな感じです。

f:id:skn_0410:20160729085520p:plain

グレーの棒グラフが、その月単月のプラマイを示していて、青色が、単純な累計。

黄色が、望まれる計算を織り込んだ在庫となります。具体的な計算式は、下記のようになりますね。

f:id:skn_0410:20160729090125p:plain

タブローの話の前に、エクセルの計算式を、「=IF(F2+B3-C3>0,F2+B3-C3,0)」このようにしている方は、時間を大きく損してますからね!!
IF は面倒くさいので避けてください。0以上とか0以下とかで判定が必要な場合は、Max、Minを使いましょうね。

  • タブローだと、どうするか

さて、

最初にトライしたのは、running_sum です。Table Calculationから計算式を起こせるので、それをコピーして借りてきて、0 以下を0にしました。

こうです。

まず、Supply-Orderを計算させた上で、

[Supply - Order]

[Supply]-[Order]

 

累計が、マイナスの時に、0 を返すようにしました。

[Cum_total (Exclude Negative) Trial]

max(0, running_sum(sum([Supply - Order]) ))

これだとうまくいきません。

こうなります(紫)。

f:id:skn_0410:20160729092432p:plain

 

一瞬、できたかと思うんですけど、普通の累計(茶色)の、マイナス部分が「0」に置き換わっただけです。

 

f:id:skn_0410:20160729092716p:plain

 

過去の Order をさかのぼって満たすことはできないため、実現したいのは下の赤のラインです。

 

f:id:skn_0410:20160729092842p:plain

 

再度、エクセルの計算式を見てみると、

 

f:id:skn_0410:20160729093042p:plain

計算に、3つのセルを使用しています。ここで、B3とC3は、タブローで参照するのは簡単です。

問題は、F2 です。

タブローの「lookup」 も 思いつきますが、前の値を参照したいのは、入力しようとしているField そのものなので、うまくいきません。

エクセルは、セルそのものを参照できるので、必要に応じて、あっちこっちのセルが参照でき、汎用性が非常に高いです。

対してタブローは、グラフ作りに特化しているため、「セル」という考え方はなく、あくまでFieldどうしの関係性で新たな数値を計算します。「計算」そのものは、はっきり言うと、超苦手です。(その代わり、グラフ性能はエクセル、メじゃないから!!)

それを補うために、Table CalculationやLODなどの関数が備えられており、ちょっと覚えて使いこなせるようになれば、かなりの要求は満たせるようになります。

とは言うものの、(これはエクセルでも同じですが)技を「知っている」か「知っていないか」で同じ仕事を完了するのにかかる時間が、「2秒」と「2日」 とかの差になってしまうのも事実です。

ということで、そういう困った時は、コミュニティーを使います。

Yahoo 知恵袋に エクセルの質問するみたいな感じで、タブローコミュニティに質問すれば、無料、早い、丁寧  で答えが返ってきます。

私がPost したときのやり取りが下のリンクになりますが、それでもそのときは時間がかかりました。でも、何人もが親切に考えてくれて、最終的には答えに辿り着き、このコミュニティ、すげえ となった訳です。

Question regarding running total |Tableau Support Community

ちなみに日本語での質問は、Japan の コミュニティで 運用されてます。

Group: Japan |Tableau Support Community

でもグローバルサイトに日本語で質問しても、別に問題はありません。

community.tableau.com

 

なんか取りとめもなく、長くなってきたので、答えを。。

使うのは、たぶん使用頻度がめっちゃ少ない関数である、「previous_value」です。

この関数は、入力しているFieldそのもののテーブル内での位置を判定し、その field自身の前や後ろの数値を参照できるものです。普段はあまり使いませんが、今回のように、結果次第で判定が必要な場合には、この関数が必要です。

 

[Cum_total (Exclude Negative)]

max(0,(previous_value(1)+ sum([Supply]) - sum([Order])))

 

previous_value(1)は同じFieldのひとつ前の数字です。

結果的には、エクセルの計算式に近いものになりますが、セルを相対参照するのではなく、Fieldの関係性を意識することになります。

 

Table Calculationは、いくつかシリーズにしないと難しそうなので、ちょっと考えて見ます。

それでは、Enjoy Tableau!

 

 

試してみた!データのピボット。ー何列まで可能なの?ー

 ポケモン GO! 大人気ですね。

うちの近くの公園でも、若者グループがスマホを片手に、入れ替わり同じあたりをうろうろしてるので、恐らくポケモン GO!をプレイ中なのだと思います。

ところで、ポケモンは、アメリカの子供たちにも大人気で、子供たちには、「アメリカで製作されたアニメ」だと思われています。うちの子供が小学校で「日本のアニメだ」といったら、「うそつけ!」と言われたと言ってました。

 

さて今回は、タブローの便利機能のひとつ、データのピボットについてです。

機能の詳細は、こちらのリンクで↓

 

ピボット データ ([列] から [行])

 

で、私が何をしたいかというと、めっちゃ横に長い元データがあったとして、何列目までピボット可能なの?という調査です。

何列でしょう?

10、25、50、100、250、500、1000、2500、5000

くらいまでデータを準備してやってみました。

さて、データベースに詳しい方は、おおよそ予想がついてしまうように思いますが、答えを知る前に、予想してみてください。

使用したVersionは 9.2 です。

 

100列のとき

f:id:skn_0410:20160726064056p:plain

問題ありません。

 

250列のとき

f:id:skn_0410:20160726063826p:plain

問題ありません。

 

500列のとき

f:id:skn_0410:20160726064252p:plain

255列 までしか表示されません。

255 って、どこかで見たことある数字ですね。

エクセルとか、アクセスとかに限らずいろんなアプリケーションの制限になってます。

 

f:id:skn_0410:20160726064512p:plain

 

私自身、あまりシステムやデータベースの仕様には詳しくないですが、計算速度やシステム容量のバランスの問題から、2^8(2の8乗) とういうのが最大値になることは珍しくないようです。

ということで、列の制限は 255列なのですが、256でなくて、255 ということは。。。

 

Headerの数を増やして調査してみます。

 

Header 8列 + データ255列の場合

f:id:skn_0410:20160726065535p:plain

248 が最大でした。

やはり、Header 列+データ列の合計で制限がかかります。

 

行の制限

行の数も増やして10000 程度まで試してみましたが、こちらは、機能的には制限がなさそうです。

ただし、列x行でデータ自身の数が増えていくと、反応スピードは落ちてきます。

 

ということで、答えは、

Header 列+データ列の合計が 256列まで可能です。

 

それでは、Enjoy Tableau!

 

出でよゼロ! -Nullをゼロに置き換える- その2(全部で2)

冒頭に、「まくら」がないことに淋しさを感じたので。足してみます。コラムの内容とは全く関係ないですが。。

私の暮らすアメリカの内陸部は、まあ非常に乾燥していて、夏は気持ちがいいのですが、乾燥している分、山火事が多いです。2週間ほど前にも大きなのがあったところなのに、昨日その近くで、また山火事がありました。山火事専門の消防士さんたちがいるのですが、大きな危険を伴う彼らのお仕事に感謝です。

 

今回は、前回より少し複雑なケースです。

前回のオプション1からスタートです。

f:id:skn_0410:20160720220626p:plain

上記の各日付に、Customer Segment を追加してみます。

f:id:skn_0410:20160720220843p:plain

↑ 問題なしです。

さらに、Colorに、"Product Container"を追加してみます。↓

f:id:skn_0410:20160720221034p:plain

最下段のグラフでおかしな線が表示されています。↓

f:id:skn_0410:20160720221207p:plain

 

Measure の ピルを "sales(ZN)" に変えても同様です。↓

f:id:skn_0410:20160720221355p:plain

バックグラウンドを知るために、クロスタブでチェックしてみます。

グラフをクロスタブにするのは、下記のようにシートを複製することで簡単に実現できます。

f:id:skn_0410:20160720222018p:plain

多くの空白、つまり"Null" が見られます。↓

f:id:skn_0410:20160720222331p:plain

ゼロと空白が混在しているのは、簡単に言うと、下記のような状況に依存します。↓

f:id:skn_0410:20160720222736p:plain

同じ、Consumer x Medium Box の枠ですが、Furnitureは、Null、Office Supplyはゼロが入っています。

横方向にテーブルを見渡したとき、Office Supplyのこのカテゴリにはどこかに数字があるのですが、Furnitureにはどこにもないという状況になっています。

 

さて、どうすれば良いかというと。。。

Calculated FieldのFormulaを別のものに変更します。

[Sales (ZN,lookup)]

zn(lookup(sum([Sales]),0))

 

znとlookup を両方使います。

lookupは Table Calculationで、表のFormatに依存して答えを返す関数です。

「0」のところが、例えば「2」であれば、2つ右、あるいは2つ下。

「-2」であれば、2つ左、あるいは2つ上のセルの内容を返します。

この場合、あえて「0」を用いることで、便宜的に、同じセルの内容を一旦計算させて返してくるというアプローチを用いています。

f:id:skn_0410:20160720224408p:plain

うまくいきました!!

クロスタブで確認すると、全ての欄に「ゼロ」が入っています。

f:id:skn_0410:20160720223841p:plain

 

ただし、注意点があります。

Table Calculationには限界があり、これ以上複雑になると、つまりDimensioinが増え、それがColumnとRowに両方入ってくると、対応できなくなります。(例) ↓

f:id:skn_0410:20160720224607p:plain

 

 

 それでは、Enjoy Tableau !!

 

出でよゼロ! -Nullをゼロに置き換える- その1(全部で2、たぶん)

今回は、Nullの扱い方について。

このようなデータのとき、空白のところにはデータ自身が存在しません。

「ゼロ」とは明らかに違う訳です。

f:id:skn_0410:20160719215302p:plain

が、場合によっては、Nullをゼロ同様に扱いたいこともあります。

 

具体的にいきましょう。

まずは、棒グラフを書いてみます。

f:id:skn_0410:20160719215539p:plain

問題ありません。次に、エリアチャートを書いてみます。

f:id:skn_0410:20160719215649p:plain

ちょっと期待してたのと違います。

中段はよいとして、上段下段は問題です。中段は、もとのテーブルを見ても、もともとNullの項目がありません。ですので、Nullが含まれているときにチャートが分断されているのが分かります。

 

これを見栄えよくします。

エリアグラフで面を接続する-1

一つ目の方法は、Missing Dataを繋ぐ方法です。

まず、Formatを選択します。Windowを表示させるだけなので、選択は何でもよいです。

f:id:skn_0410:20160719220241p:plain

Side Barに Formatが表示されます。

Fieldから、[sum(sales)]を選択

f:id:skn_0410:20160719220405p:plain

いちばん下の、Marksをドロップダウンから選択します。

f:id:skn_0410:20160719220556p:plain

Hide(Connect Lines)を選択してみると、

f:id:skn_0410:20160719220737p:plain

こうなりました。繋がったのですが、何か違います。

この選択だと、Null値を飛び越えて、データのあるポイント同士を繋げています。

このパターンが必要なケースはこれでよいですが、今回は、Nullをゼロで表示させることが目標です。

 

別のオプションを選択します。

f:id:skn_0410:20160719221144p:plain

これだと。。。

f:id:skn_0410:20160719221120p:plain

期待通りにできました!!

 

エリアグラフで面を接続する-2

もうひとつの方法を挙げます。

先ほどは、グラフの表示設定で対応しましたが、セルの中身そのものを、「Null」から「ゼロ」に置き換える方法です。

[Sales (ZN)]
zn(sum([Sales]))

ZNは、Nullのときはゼロを返すという関数です。そのままですね。ただし、

zn([Sales])

 のような使い方はできません。それだと、NullはNullのままです。

これをグラフにしてみましょう。

f:id:skn_0410:20160719222725p:plain

できました~。

 

シンプルなケースは上記の対応でOKです。

しか~し、上記2つのやり方で、問題が出るケースもあるので~す。

 

それについては、次回。。

それでは、Enjoy Tableau!!