top of page

Tableau実践問題集 #TableauChallenge ã‚’䜜りたした。

Workout Wednesday W46勉匷ノヌト


毎週執筆するこずに䞀切コミットしたせんが、Workout Wednesdayに関するブログを曞き始めたす。

目的はWorkout Wednesdayで玹介されおいるTableauテクニックの勉匷です。

Workout Wednesdayは完党再珟を目的ずしおいたすが、僕はそこたでやりたせん。

曞匏蚭定やツヌルチップは適圓です。テクニックの勉匷が目的なので。

このブログに䜿甚されたTableauワヌクブックは以䞋からダりンロヌドできたす。

Workout Wednesdayに぀いおhttp://www.workout-wednesday.com/

Week 46のペヌゞhttp://www.workout-wednesday.com/2018-week-46/

 

【今回のお題】


元々はAndyのMakeover Monday W45の䜜品です。

孊んだこず

・衚蚈算、特にLOOKUP()の埩習。

・Line Chartの始点ず終点にドットを眮く方法。

・Reference Lineを䜿っお、軞の範囲を「自動」にしながら、軞範囲にゆずりをもたせられる。

以䞋、順に䜜り方を解説しおいきたす。

デヌタセットはこちらからダりンロヌドできたす。

 

【デヌタの敎圢ず基本Viz䜜成】

敎圢ずいうほど倧袈裟ではないですが、元デヌタは暪に長すぎるデヌタでした。

少々䜿いにくいので、たずはピボットしたす。Age 0からAge100たで遞択したす。


ピボットのフィヌルド名を「Age Label」、ピボットのメゞャヌ名を「Population」ずでもしおおきたす。

次に、元のVizに沿っお「Older Adults」ず「Children」が欲しいので、先ほどの「Age Label」から䜜成したす。

Children/OlderAdults

IF INT(SPLIT([Age Label]," ",-1)) <= 17 THEN "Children" ELSEIF INT(SPLIT([Age Label]," ",-1)) >= 65 THEN "Older Adults" END

そしお以䞋のように配眮したす。Children/OlderAdultsのNULLは非衚瀺にしおありたす。

非衚瀺のやり方は、凡䟋のNULLを右クリック→非衚瀺です


次に、2぀のLine Chartが亀わるYEARを求めるために、いく぀かの䜜業をしたす。

(今回のWorkout WednesdayではLOD蚈算を䜿わない、ずいう瞛りでした。これが地味に蟛く )

「2぀の盎線が亀わる」ず聞いお、最初にむメヌゞするのは連立方皋匏のような「2぀の盎線の、y軞の倀が等しいx軞の倀を求めれば良い」ずいうようなこずでしょうか。

しかし、今回の堎はYEARは䞍連続な敎数なので、䞊のロゞックは通甚したせん(求めるYEARが小数になりえるので)。

あるいは「ChildrenのPopulationが、Older AdultsのPopulationを超えたYEAR」ずいう解釈でも、今回の堎合は意味が通りたす。

僕の堎合は「ある時点のYEARでのPopulationの倧小関係ず、その1幎前での倧小関係が逆転したYEAR」ずいうように定矩したした。

問題は、僕の定矩の堎合、たずえば「どのようにしお、"Children"の"1幎前のPopulation"を、”Older Adults”の”今幎のPopulation”に䞎えおやるか」ずいうこずが問題ずなりたす。

どういうこずかずいうず、基瀎ずした䞊のVizでは、各デヌタ点は「Children/OlderAdult」ず「YEAR」で区切られおいたす。この状況で、あるデヌタ点に、区切りをたたいだデヌタの情報を䞎えおやらないずいけない、ずいうこずです。

 

【Table Calcを䜿い倒す】

こういう堎合にLODで頑匵れなくもないですが、今回はTable Calcの緎習です。

たず最初に「Older Adultsのデヌタ点にChildrenのデヌタを枡す方法」に぀いお解説したす。

結論ずしおは、LOOKUP()を䜿いたす。

Children Population %

LOOKUP( IF ATTR([Children/OlderAdults]) = "Children" THEN SUM([Population]) / TOTAL(SUM([Population])) END )

Older Adults Population %

LOOKUP( IF ATTR([Children/OlderAdults]) = "Older Adults" THEN SUM([Population]) / TOTAL(SUM([Population])) END )

LOOKUP()がそもそも䜕かに぀いおは、Googleで調べたずころリファレンスがたくさんある様子なので、そちらにお任せしたす。

芁は、Children/OlderAdultsにそれぞれ察応した基準を蚭けおあげたのちに(ChildrenもしくはOlder Adultsを参照するように蚭定しおあげたのちに)、IF文回しおあげお、それを衚蚈算でデヌタの区切りをたたげるようにしおあげよう、ずいう感じです(きっず、倚分)。

ここたで結果を芋おみるず、以䞋のようになりたす。簡単のためにOriginはTotal、SexはBothのパネルのみを抜き出しおいたす。


ディメンションでChildren/OlderAdultsを分けおいる䞀方で、それぞれが異なるブロックにも察応する数字が入っおいるこずがわかりたす。

では、1幎前の倀を持っおくる、ずいうこずはどうやればいいでしょうか。

考え方ずしおは「Children/OlderAdultsを䜿甚しお。LOOKUP()で求めた倀を、さらに”YEARを䜿甚したLOOKUP()"を䜿甚」したす。蚈算匏を芋お頂いた方が早いです。

Children Population % -1 YEAR

LOOKUP([Children Population %],-1)

Older Adults Population % -1 YEAR

LOOKUP([Older Adults Population %],-1)


2016幎はYEARの開始なので、Previousの倀がありたせん。

それ以倖では、䟋えば2017幎では、2016幎の倀を参照しおいたす。

このように、LOOKUP()を䜿い倒すこずにより「どのようにしお、"Children"の"1幎前のPopulation"を、”Older Adults”の”今幎のPopulation”に䞎えおやるか」問題が解決したした。

ずいうこずで、䞋蚘の匏によっお䞖代間人口の逆転が起きた幎を求められたす。

(先ほどのPreviousは䜿っおいたせんが、本質的には同じ匏です。)

(䜙談ですが、圢を合わせたかったのでLOOKUP(,0)䜿っおたすが、これいらない気がしたす

Crossing Year

IF LOOKUP([Children Population %]-[Older Adults Population %],-1) * ([Children Population %]-[Older Adults Population %]) <= 0 THEN MIN([Year]) END

正しく衚蚈算の線集をしおあれば、このCrossing YearをReference Lineに甚いるこずで、䞋蚘のVizたで䜜成できおいるはずです。


 

【Line Chartの始点、亀点、終点にドットを぀ける】

次に、ドットを぀ける䜜業をしたす。

Line Chart始点ず終点だけに関しお蚀えば、以䞋が䞀番早いです。


この方法のデメリットを挙げるずしたら、ドットだけのサむズ倉曎ができないはずですが、知らないだけかもしれたせんこずです。

ずいうこずで、どうせ亀点にドット眮くなら、始点ず終点も同じ方法で眮いおあげようず思いたす。

以䞋の蚈算匏を甚意したす。

Year Label

CASE MIN([Year]) WHEN WINDOW_MIN(MIN([Year])) THEN "MIN" WHEN WINDOW_MAX(MIN([Year])) THEN "MAX" WHEN [Crossing Year] THEN "CROSS" END

このYear Label甚いお、䞋図のようにセッティングしたす。

Populationの合蚈に察する割合をコピヌし、2重軞軞の同期をしたす。2぀目のPopulationは円にしたす。


 

【Reference Lineを䜿っお軞範囲にゆずりを】

最埌に、ちょっずラベルが窮屈なので、軞範囲を広めにしたす。

ここで軞の線集→軞範囲の固定、はしたせん。Reference Lineを䜿いたす。

そのために以䞋の蚈算匏を甚意したす。 ここで[OFFSET]はパラメヌタです。

MAX Year Offset

WINDOW_MAX(MIN([Year])) + [OFFSET]

MIN Year Offset

WINDOW_MIN(MIN([Year])) - [OFFSET]

それぞれをReference Lineに入れおやり、パラメヌタで奜きな䜙癜を䞎えおください。

残り、ちょっずだけフォヌマットを觊れば、以䞋のような圢になりたす。


い぀もながら省略した個所もあるので、分からない点などあればお気軜にご連絡ください。

bottom of page