半空洞男女関係

思ったこととかプログラミングしてるときのメモとか色々かいてます。メールはidそのままgmail

TreasureDataで出力したSpreadSheetでグラフを書く

tl;dr

https://docs.google.com/spreadsheets/d/1y_gnVIvwuAQn2h8M5Gbf15MhCK2uzBjbJXCCbI_gMlw/pubhtml

概要

Treasure DataではQueryの結果をGoogle SpreadSheetに出力できるのだが、出力方式の問題で書き出すたびにシートのIDが変わってしまう。書き出すシートの名前がdataの時、グラフの範囲に=data!A:Aと書くことでdataシートのA列をグラフのソースに指定できるものの、TDのQueryをRunしてシートを書き換えるとグラフが壊れる。

=data!A:Aと書いた値は、SpreadSheet内部ではシートのIDに置き換わっていて、シートのIDが変わった時にグラフが壊れるという仕組みだと思う。

そこで、INDIRECT関数を使ってまるっきり同じシートを作ってやり、グラフはそのシートを参照するようにする。中間シートを作るための関数はこれ。1行目に必要な列分貼り付ければ良い。

=INDIRECT(CONCATENATE("data!", ADDRESS(1, COLUMN(), 4), ":", LEFT(ADDRESS(1, COLUMN(), 4), 1)))

CONCATENATE("data!", ADDRESS(1, COLUMN(), 4), ":", LEFT(ADDRESS(1, COLUMN(), 4), 1))では"data!A:A"といった文字列を生成している。

もっといいやり方があれば教えてください…。