从过滤后的数据中检索和计算其他总计的合适地方

时间:2018-08-22 16:39:06

标签: dc.js crossfilter alasql

现在,我正在使用页面上图表之一的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中进行了过滤,但是我无法确定是不是很幸运还是我的行数较少导致了这种行为(在打开代码之前进行过滤)更改执行异步)。

1 个答案:

答案 0 :(得分:0)

crossfilter2具有所需的事件。有空时,我会发布更新的笔。