0

ローカル データベースからの時系列データから初期の dc.js 積み上げ面折れ線グラフを作成しました。すべての計算はデータベース サーバーによって処理され、データは時間間隔 (数分から数時間) で取得されます。使用されるクロスフィルター ディメンションは日付 (ミリ秒のエポック時間で指定) であり、1 つのグラフにまとめてグラフ化される 2 つのグループが含まれます。これら 2 つのグループの値は、選択した時間間隔で平均化されます。これも db サーバーによって行われます。データ セット全体をスクリプトにロードすることは避けたいと思います。

最初のグラフはレンダリングされ、問題なく動作しますが、私のchart.on('zoomed', function(c, f) {..})では、データベースを再度解析して、新しいより正確なデータ セットを取得します。

つまり、グラフを拡大すると短い時間間隔のデータが選択され、縮小すると長い時間間隔のデータが選択されます。

古いデータをクロスフィルターから削除し、新しいデータをクロスフィルターに追加する必要があることを理解しています。ソースはこのスレッドからです。ただし、それをchart.on('zoomed', function(c,f) {..})に実装すると、最初のズーム後にTypeError: group is undefined が返されます。

このエラーの原因がわかりません。chart.group(..)は、ページが最初に読み込まれたときに定義されます。ここに私の機能があります、

    .on('zoomed', function(chart, filter) {
        var nextLower = stackedLine.x().domain()[0];
        var nextUpper = stackedLine.x().domain()[1];
        $.getJSON('/_try_db', {
            lower : Date.parse(nextLower),
            upper : Date.parse(nextUpper)
            }, function(data) {
            stackedLine.expireCache()
                .stack()
                .x(d3.time.scale().domain([Date.parse(nextLower), Date.parse(nextUpper)]))
            ;
            var new_arr = [];
            $.each(data.result, function() {
            new_arr.push({
                "timestamp" : ($.parseJSON(this)).timestamp,
                "running" : ($.parseJSON(this)).running,
                "waiting" : ($.parseJSON(this)).waiting
                });
            });

            dd.filter(null);
            ndx.remove();
            ndx.add(new_arr);

            dc.redrawAll();
        });
4

1 に答える 1