我遇到了一些麻烦,虽然有一个带有两个字段分区的汇总字段的伪功能。
原来的两个字段是:
{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
任何想法?我非常感谢任何帮助!
答案 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)
}
}