2017-04-03 9 views
0

私は、建物と電力の使用が時間とともに変化するデータセットを持っています。reductio合計の最大数

これらの建物には、期間全体にわたって単純な合計である2つの集計があり、それらは書かれています。彼らは次のようになります:

var reducer = reductio(); 
// How much energy is used in the whole system 
reducer.value("energy").sum(function (d) { 
    return +d.Energy; 
}); 

これらは素晴らしいです。

しかし、3番目の集計は、私にいくつかの問題をもたらしています。私はすべての建物の合計が最大であるという点を見つけ出す必要があります。私は合計の最大値とそれが起こった時間が必要です。 私が書いた:これは必ずしも最大の電力使用ではありません、

reducer.value("power").sum(function (d) { 
    return +d.Power; 
}).max(function (d) { 
    return +d.Power; 
}).aliasProp({ 
    time: function (d, v) { 
     return v.Timestamp; 
    } 
}); 

をしかし。私はこれが、個々の建物が最大のパワーを使用した合計と時間を返すと確信しています。

電力値が1,1,1,5の場合は、値が5,5,5,5の時が異なる場合があります.18の場合は合計20となります。 20は私が必要なものです。

合計の最大値を取得する方法は紛失しています。何かアドバイス?

答えて

1

ちょっとしたこと:時間通りにグループ分けしているので、グループキーは何らかの種類の期間です。あなたが望むのは、電力消費が最大となる期間(グループ)を見つけることです。

私がこれがあなたの望むものであれば、減速機ではなく、グループを並べ替えることでこれを行うことになります。あなたはgroup.orderメソッドを使用してグループを注文することができます。https://github.com/crossfilter/crossfilter/wiki/API-Reference#group_order

// During group setup 
group.order(function(p) { return p.power.sum; }) 

// Later, when you want to grab the top power group 
group.top(1) 

Reductioのmax集約はちょうどあなたのグループ内で発生した最大値を与える必要があります。値が1,1,1,15のグループを指定すると、値15が返されます。それはあなたが望むものではないように思えます。

うまくいけばうまくいきました。そうでない場合は、コメントしてください。おもちゃのデータが公開されていて、あなたが何を見たいのか教えてくれるかの例をまとめておくことができれば、私は助けることができます。

例に基づいて更新:

だから、あなたが望むもの(例の記載に基づいて)選択した期間内に任意の時間のための最大電力使用量を見つけることです。

var timeDim = buildings.dimension(function(d) { return d.Timestamp }) 
var timeGrp = timeDim.group().reduceSum(function(d) { return d.Power }) 
var maxResults = timeGrp.top(1) 

あなたの現在のフィルタのための最大電力使用時間を見つけたいときはいつでも、ちょうどtimeGrp.top(1)を呼び出すと、そのグループのキーは、最大電力との時間になります。だから、次の操作を行います。

注:ディメンションのフィルタがそのディメンションで定義されたグループに適用されないため、timeDimでフィルタリングしないでください。私はグループを使用しない時間帯を設定しhttps://jsfiddle.net/esjewett/1o3robm3/1/

+0

が、私は[フィルタ方法]を使用します(https://github.com:ここ

は、コンソールに最大グループを書き出し更新JSFiddleです/ crossfilter/crossfilter/wiki/API-Reference#dimension_filter)をクロスフィルタのディメンションに追加します。 これはお勧めできないアプローチですか? –

+0

あなたは何をグループ化していますか?申し訳ありませんが、それは私には分かりませんでした。実際の例を分かち合うことができますか?多分助けになるでしょう。 –

+0

私はグループ化していません(むしろ、次元でGroupAll()を使用しています)。私が理解しているように、グループ間で集計は機能しません。 私はデータセットを持っていますが、時間の範囲に基づいてフィルタリングしてから、値を集計します。元の投稿の例として使用されるエネルギーは、フィルタリングされた範囲内のデータセット全体の合計である必要があります。次元をグループ化すると、各グループのエネルギー合計が得られます。これらを手動で集計する必要があります。 私の理解に誤りがありますか? –

関連する問題