0

2 つのフィールドを分割した集計フィールドの疑似関数で問題が発生しました。

元の 2 つのフィールドは次のとおりです。

{name: 'purchasers',    type: 'integer',  rowLabelable: false, summarizable: 'sum', displayFunction: function(value){ return accounting.formatNumber(value)}},    
{name: 'spend',    type: 'float',  rowLabelable: false, summarizable: 'sum', displayFunction: function(value){ return accounting.formatMoney(value)}}

擬似関数は次のとおりです。

{
    name: 'spendperpurch', type: 'float', pseudo: true,      
    pseudoFunction: function(row){ return row.spend / row.purchasers },       
    summarizable: 'sum', displayFunction: function(value){ return accounting.formatMoney(value)}    
}

グラヌから直接集約されていないだけです

私がやりたいことは、基本的に、フィルターの代わりに sum(row.spend) / sum(row.purchasers) グループを実行することです

for i in row Σ (row.spend/row.purchasers) 、これが現在起こっていることです。

たとえば、計算フィールドの支出/購入者を含む 100 行がある場合

date, purchasers, spend, spendperpurch
1   , 10        , 100  , 10
2   , 15        , 200  , 13.3

私のテーブルで私だけが欲しいなら

purchasers, spend, spendperpurch

現在のコードは私に与えます:

purchasers, spend, spendperpurch
25        , 300  , 23.3

私が本当に欲しいのは:

purchasers, spend, spendperpurch
25        , 300  , 12

何か案は?どんな助けでも大歓迎です!

4

2 に答える 2

1

最近同じことをする必要があったので、これを調査しました。

pseudoFunctionプロパティは、CSV が読み込まれるときに CSV 行単位でのみ実行されるため、これをサポートしていません。

代わりに、カスタム集計関数を使用します。この例を試してください:

var fields=[
    {name:"purchasers", type:"float", summarizable:"sum"},
    {name:"spend", type:"float" summarizable:"sum"},
    {name:"spendperpurch", type:"float",
     summarizable:true,
     summaryFunction:function(rows,field){
        var totalPurchasers=0, totalSpend=0, i=0;
        for(i=0;i<rows.length;i++){
            totalPurchasers+=rows[i]["purchasers"];
            totalSpend+=rows[i]["spend"];
        }
        if(totalPurchasers==0){return 0; /*or whatever you want*/}
        return totalSpend/totalPurchasers;
     }
    ];

編集:別のユーザーによると(私は自分でテストしていません)、ライブラリの新しいバージョンでは、フィールドプロパティsummaryFunctionが呼び出されるsummarizeFunctionようになったため、上記が機能しない場合は、そのプロパティの名前を変更してみてください

于 2013-02-28T21:21:46.310 に答える
0
{
  name: 'spendperpurch', type: 'float', pseudo: true, summarizable: 'avg',      
  pseudoFunction: function(row)
  { 
     return row.spend / row.purchasers 
  },       
  displayFunction: function(value)
  { 
     return accounting.formatMoney(value)
  }    
}
于 2014-04-01T01:10:37.713 に答える