2016-01-14 73 views
0

我已經廣泛查看了代碼示例,並且已經能夠調用crossfilter的.top(Infinity)函數在過濾後輸出更新的數據記錄。我甚至可以撥打d3.csv.format.top(n)以獲得可以下載的字符串CSV輸出。但我有幾個問題。dc.js d3 + crossfilter.top將過濾的數據導出爲CSV

  1. 我打電話頂部和csv.format功能在我的圖表繪製方法如下解釋:

    d3.csv("/data/acuityData.csv", function (data) { 
    
    // format our data 
    var dtgFormat = d3.time.format("%Y-%m"); 
    var dtgFormat2 = d3.time.format("%a %e %b %H:%M"); 
    
    data.forEach(function(d) { 
    d.dtg1=d.dayOfWeek; 
    d.dtg= dtgFormat.parse(d.year+"-"+d.month); 
    d.dtg2=d.year; 
    d.mag= d.acuityInitial; 
    d.depth= d.waitTime; 
    d.dispositions= d.disposition; 
    
    }); 
    
    
    // Run the data through crossfilter and load our 'facts' 
    var facts = crossfilter(data); 
    var all = facts.groupAll(); 
    // for wait time 
    var depthValue = facts.dimension(function (d) { 
        return d.depth; 
    }); 
    var depthValueGroup = depthValue.group(); 
    depthChart.width(930) 
        .height(150) 
        .margins({top: 10, right: 10, bottom: 20, left: 40}) 
        .dimension(depthValue) 
        .group(depthValueGroup) 
        .transitionDuration(500) 
        .centerBar(true)  
        .gap(1) 
        .x(d3.scale.linear().domain([0, 500])) 
        .elasticY(false) 
        .xAxis().tickFormat(function(v) { 
         console.log(d3.csv.format(depthValue.top(500))); 
        return v;}); 
    dc.renderAll(); 
    
    }); 
    

我已刪除了一些圖表,以節省空間。我最重要的問題是關於調用此導出數據調用。現在我只是console.log-輸出,它在我的瀏覽器控制檯中顯示爲一個「好的」CSV數據集。我無法弄清楚如何解決的問題是如何添加能夠調用此方法的Export All鏈接,因爲此代碼區域在d3.csv函數閉包的範圍之外無法訪問。 我該如何解決這個問題?

  • 返回在CSV輸出已複製的行,因爲它是包括在原始的CSV文件,以及用於生成的列,其在可見的句柄中的列的數據data.forEach(function(d){}塊。在CSV輸出中的標題顯示如下:
  • acuityInitial,dayOfWeek,disposition,hour,month,waitTime,year,dtg1,dtg,dtg2,mag,depth,dispositions

    不知道如何解決這個問題。任何幫助表示讚賞。

    回答

    2

    我解決了這個只需使用jQuery的onclick處理程序。我想我只是需要睡在這個問題上。還使用download.js觸發文件使用javascript下載

     depthChart.width(930) 
         .height(150) 
         .margins({top: 10, right: 10, bottom: 20, left: 40}) 
         .dimension(depthValue) 
         .group(depthValueGroup) 
         .transitionDuration(500) 
         .centerBar(true)  
         .gap(1) 
         .x(d3.scale.linear().domain([0, 500])) 
         .elasticY(false) 
         .xAxis().tickFormat(function(v) { 
         //function triggered onClick by element from DOM 
          $("#exportData").unbind().click(function() { 
            download(d3.csv.format(depthValue.top(500))."exportedData.csv") 
           }); 
         return v;}); 
        dc.renderAll(); 
    
        });