现在,我正在使用页面上图表之一的renderlet函数来计算已过滤数据的汇总。 在这个笔中 Year Over Year Charts
saleschart.renderlet(function (chart) {
// rotate x-axis labels
chart.selectAll('g.x text')
.attr('transform', 'translate(10,10) rotate(-45)')
.style('font-weight',"bold")
.style('font-size',"12px")
.style('text-anchor',"end")
console.log("renderlet start")
currentData = branchDimension.top(Infinity)
// console.log(currentData)
totals = alasql("select sum(sales) as sales,sum(grossprofit) as gp,sum(variableExp) as varexp,sum(personnelExp) as persexp,sum(semiFixedExp) as sfexp,sum(fixedExpense) as fixedexp, sum(np) as np from ?",[currentData])
console.log(totals[0])
$("#salestotal").html( "<span>Sales :</span><span>"+dollarformat(totals[0].sales)+"</span>")
$("#gptotal").html( "<span>gp :</span><span>"+dollarformat(totals[0].gp)+"</span>")
$("#varexptotal").html( "<span>varExp :</span><span>"+dollarformat(totals[0].varexp)+"</span>")
$("#persexptotal").html( "<span>persExp :</span><span>"+dollarformat(totals[0].persexp)+"</span>")
$("#sfexptotal").html( "<span>sfExp :</span><span>"+dollarformat(totals[0].sfexp)+"</span>")
$("#fixedexptotal").html("<span>fixedExp :</span><span>"+dollarformat(totals[0].fixedexp)+"</span>")
$("#nptotal").html( "<span>Net profit:</span><span>"+dollarformat(totals[0].np)+"</span>")
})
与此类似的东西 Is there a way to attach callback what fires whenever a crossfilter dimension filter changes?
如果我实际上是在未使用的图表上使用过滤功能,那么我认为这是一个更好的选择。
问题是我该如何使用第二种方法避免多次计算我的总数(又不曾在图表上仅过滤掉第一种)
是否有更好的方法可以轻松获得当前过滤的数据(我打算最终重写打字稿)并且只计算一次总数?
我知道我可以使用ALASQL来完成所有这一切,但是我喜欢这样一个事实,我可以将交叉过滤器维附加到下拉列表中,并且数据仅被过滤,而且我不必立即开始构建sql字符串(不是它我很难做到很多次,但是交叉滤镜可以轻松消除其中的一个水平)
所以基本上,真正的问题是何时何地进行这样的事情
currentData = branchDimension.top(Infinity)
,知道我已经过滤了数据。从实验来看,它似乎已经在图表的renderlet函数和下拉列表的onChange中进行了过滤,但是我无法确定是不是很幸运还是我的行数较少导致了这种行为(在打开代码之前进行过滤)更改执行异步)。
答案 0 :(得分:0)
crossfilter2具有所需的事件。有空时,我会发布更新的笔。