縦に並んだテーブルを、ある項目をキーとして横方向に展開するには、Cross Tabツールを使います。
しかし、このツールには制限があり、展開する列は1つのみで、列名を自動付与することができません。そのため、2つ以上の列を横展開するには、Cross Tabを複数個用意してからSelectツールで列名を変更してから結合するという、バカらしくも面倒なフローが必要となります。そこで、それらの処理をR Tool一発でできるようなコードを書きました。
困ったときはR Tool、R言語を覚えつつ、最終的にAlteryxはイラナイ!となるのが、コスト・スキル的にベストだと思います。
処理の概要とワークフロー
例として、店舗名と商品ID、Key Performance Indicatorがいくつかまとまった表をソースとして、グラフの描画に使うため、日付ごとに全て横並びにしたい場合。↓
下図ワークフローの、Cross Tabを使う流れの場合、ShopとItemIdを文字列結合してキーとし、Group byにDateId、ヘッダーにShopItemId、値にKPI_1を指定します。値に指定できるのはひとつだけなので、KPI_2はもう一つのCross Tabで処理し、Joinしなければなりません。
しかも、Cross Tab後のデータはKPI_1かKPI_2か項目名では分からなくなるので、それぞれ項目名をリネームする必要があります。私が担当を任された表では、これが10以上あったので、超絶面倒になって、R言語を勉強した方がマシ!と思った次第です。
そもそもAlteryxのグラフツールが、項目を抽出して項目名を付けてくれるとか、横軸のインターバル(間引きして見やすく)とかが柔軟にできていたら、この横展開も必要なかったのに…。結局Excelのグラフを使い、参照するテーブルを更新する形にしました。
R Toolの処理解説
R Toolの中身は↓
--------------------------------------------------------------------------------------
df <- read.Alteryx("#1", mode="data.frame")
sidf <- subset(df, select=c(Shop, ItemId))
ShopItemId <- apply(sidf, 1, paste, collapse = "_")
df <- cbind(df, ShopItemId)
df <- df[ , colnames(df)!="Shop"]
df <- df[ , colnames(df)!="ItemId"]
df <- reshape(df, timevar="ShopItemId", idvar="DateId", direction="wide")
write.Alteryx(df, 1)
--------------------------------------------------------------------------------------
上から説明します。
--------------------------------------------------------------------------------------
df <- read.Alteryx("#1", mode="data.frame")
Alteryxのワークフローからテーブルをデータフレームとして読み込みます。勿論、Text Inputの他、Input DataもDynamic Inputも使えます。
sidf <- subset(df, select=c(Shop, ItemId))
ShopItemId <- apply(sidf, 1, paste, collapse = "_")
df <- cbind(df, ShopItemId)
項目Shop, ItemIdのみのテーブルを作り、applyで行毎に文字列を結合、キー値として最初のテーブルに追加します。
df <- df[ , colnames(df)!="Shop"]
df <- df[ , colnames(df)!="ItemId"]
項目Shop, ItemIdが残っていると、横展開で出てきてしまうので、列削除します。一行で複数列を削除することもできるようですが、暗号みたいな文字列に蕁麻疹が出る人なので…。
df <- reshape(df, timevar="ShopItemId", idvar="DateId", direction="wide")
reshape関数で変換したデータフレームを、元のデータフレームに代入します。別のデータフレームにして、途中経過を出力してもいいでしょう。timevarは横に展開するキーとなる項目、idvarはグルーピングする項目で、その他の項目は全て名前が自動付与されて(例→KPI_1.Sendai-2、間の「.」ドットは変更できないようです)、横に並びます。directionは横展開がwide、縦展開はlongを指定します。
write.Alteryx(df, 1)
データフレームdfを、R Toolの出力足1番に出力します。R Toolには5つ足が付いていますので、処理途中を2番など、デバッグにも使えます。基本的に1入力1出力で使うのが分かりやすいと思います。
0 件のコメント:
コメントを投稿