DC.js中的日期过滤器

use*_*096 3 d3.js crossfilter dc.js

我正在使用DC.js,我正在尝试向此jsfiddler添加预设日期过滤器.

            <div id="header" class='row logoSize'>
                <img src="logo-main2.png" />
                <div class="buttons-container"></div>
                <div class="startEnd" id="start">2015-02-12</div>
                <div class="startEnd" id="end">2015-02-17</div>
                <div class="startEnd" id="brushYears">gggg</div>

            </div>
            <div  class='row '>
                <div class="dc-data-count">
                    <h2>

                        Card Activity Report
  <span>
    <span class="filter-count"></span>
     selected out of
    <span class="total-count"></span>
     records
      <span id="titleCount"></span>
    <a class="btn btn-sm btn-success" href="javascript:dc.filterAll(); dc.renderAll();">Reset All</a>

                    </h2>
                </div>
            </div>


            <div class='row'>
                <div class='span12' id='dc-time-chart'>

                    <h4>
                        Activity counts per Day
            <span class="muted pull-right" style="margin-right: 115px; ">From the chart below select a date range to filter by
      <a class="reset btn btn-sm btn-success"
         href="javascript:timeChart.filterAll();dc.redrawAll();"
         style="display: none;">
          reset
      </a>
    </span>
                    </h4>
                </div>

                <div class="clearfix"></div>

            </div>
            <div class="row">

                <div id="daily-move-chart">

                    <div class="clearfix"></div>
                </div>
            </div>
        </div>

            <pre id="data">
                ID,Action,AuditDate,DataProvider,MachineName,UserName,PersonID,Count
Run Code Online (Sandbox Code Playgroud)

我有刷移动范围,但我不能让它触发过滤.我试过了moveChart.redraw(); dc.redrawAll(); dc.renderAll();,还有一些没有运气.我看过使用D3的例子,当我试图理解DC中的组对象在D3中时,逻辑很难理解.我迷路的地方是了解刷机事件,尤其是DC.我找不到像这样使用刷子的任何DC样本.有人可以注意到我缺少什么使这项工作DC吗?

Gor*_*don 6

我认为这里的主要问题是你将直接d3代码与dc.js代码混合在一起.使用dc.js时,您不需要创建自己的画笔对象,因为它已经创建了一个,并且该.filter()方法已经绑定到它使用的画笔.

您也不需要自己过滤数据,因为这正是crossfilter的用途.看起来您正在过滤原始数据数组,因为crossfilter已将其复制到其内部缓冲区中,因此无效.

另一个技巧是dc.filters.RangedFilter在过滤时使用对象,以便dc.js知道范围是有意的,而不是两个离散日期.

所以,而不是你的drawBrush功能的大部分,只是做

timeChart.filter(null);
timeChart.filter(dc.filters.RangedFilter(new Date(st), new Date(end)));
dc.redrawAll();
Run Code Online (Sandbox Code Playgroud)

并删除额外的,不需要的刷子.

你这个小提琴的工作叉:https://jsfiddle.net/gordonwoodhull/mr56bswz/1/

我还补充说,这不是真正做范围/焦点图表的正确方法,所以请使用其他示例 - 这主要是如何应用日期范围的示例.

范围图表过滤本身的奇怪行为,以及在重置后保持过滤,来自焦点图表,使用范围图表中的不同维度 - 通常您希望它们在相同的维度上,因此它们不会相互观察.但这不是这个问题的焦点,已经有几年了,所以我现在不打算解决这个问题.