一般的に次のようなスプレッドシートがあります。
Date Families
1/2/2016 3
1/3/2016 4
1/4/2016 5
私がやりたいのは、次の値のクエリが入力されたテーブルを作成することです。
- 総家族数
- 過去 30 日間の家族
- その30日前からの家族
- 年初来の家族。
これを行う私の好ましい方法は、クエリごとに変数を設定し、それらの変数を使用して手動でテーブルを作成することです。
例えば:
var sum1 = value from Query1
var sum2 = value from Query2
var sum3 = value from Query3
var sum4 = value from Query4
var data = new.google.visualization.DataTable({
data.AddColumn('string', 'This Month');
data.AddColumn('string', 'Last Month');
data.AddColumn('string', 'Year to Date');
data.AddColumn('string', 'All Time');
data.AddRow([sum1, sum2, sum3, sum4])
})
var chart = new.google.visualization.Table();
chart.draw(data);
次の表を与えるには:
'This Month' 'Last Month' 'Year to Date' 'All Time'
sum1 sum2 sum3 sum4
ただし、大きな問題は、クエリごとに 1 つのコールバックしか設定できないように見えることです。そのため、このようなものを取得するには、クエリごとにネストされたコールバックが必要になるように思われ、それぞれがデータテーブルに変換され、最後に結合されます。 .
例えば:
var q1 = google.visualization.Query(URL);
q1.setQuery(QueryStatement1);
q1.send(function (r1) {
var data1 = r1.getDataTable();
var q2 = google.visualization.Query(URL);
q2.setQuery(QueryStatement2);
q2.send(function(r2) {
var data2 = r2.getDataTable();
var joinedData = google.visualization.data.join(
data1,
data2,
'full',
[0,0],
[[0,0], [0,0]]
);
}
}
後者の方法はより複雑に見え、おそらく書式設定が困難になる可能性があります。また、同じ URL を何度も呼び出すのは冗長に思えます。
これが続くページは、3 つの異なる列に対して同様のことを行うため、同じスプレッドシートから 12 回クエリを取得することになります。
では、StackOverflow さん、この質問を 2 つの部分に分けてまとめたいと思います。
パート 1: このテーブルを作成する後者の方法を避けることは可能ですか?
パート 2: いいえの場合、望ましい結果を得るために google.visualization.data.join() を構築する最良の方法は何ですか?
ありがとうございました。