0

一般的に次のようなスプレッドシートがあります。

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() を構築する最良の方法は何ですか?

ありがとうございました。

4

1 に答える 1