使用伪函数的pivot.js摘要

时间:2012-12-13 21:03:30

标签: javascript pivot-table

我遇到了一些麻烦,虽然有一个带有两个字段分区的汇总字段的伪功能。

原来的两个字段是:

{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)}    
}

并且它不是直接从granu聚合

我想做的主要是通过过滤器而不是

进行求和(row.spend)/ sum(row.purchasers)组

for i inrowΣ(row.spend / row.purchasers),这是当前正在发生的事情。

e.g。如果我有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

任何想法?我非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

我研究了这个,因为我最近需要做同样的事情。

pseudoFunction属性不支持此功能,因为它只在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,所以如果上面没有为你工作,尝试更改该属性的名称

答案 1 :(得分:0)

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