【问题标题】:Date Filters in DC.jsDC.js 中的日期过滤器
【发布时间】:2015-05-05 20:08:51
【问题描述】:

我正在使用 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

我可以移动画笔范围,但无法触发过滤。 我试过moveChart.redraw(); dc.redrawAll(); dc.renderAll();,还有其他几个没有运气。我已经看到了仅使用 D3 的示例,并且当我试图了解 DC 中的组对象在 D3 中的含义时,逻辑变得难以理解。我迷路的地方是理解刷事件,尤其是 DC。我找不到任何适用于这种刷子的 DC 样本。有人可以注意到我缺少什么来使这项工作成为 DC 吗?

【问题讨论】:

    标签: d3.js dc.js crossfilter


    【解决方案1】:

    我认为这里的主要问题是您将直接 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();
    

    同时移除多余的、不需要的画笔。

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

    我还要补充一点,这并不是制作范围/焦点图表的正确方法,因此请使用其他示例 - 这主要是如何应用日期范围的示例。

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

    【讨论】:

    • 我刚刚注意到不属于过滤器的其余条形消失了。使用画笔时是否有其他方法代替过滤器?我想保留这些条形,但就像我在大多数此类示例中看到的那样显示为灰色。
    • 您希望图表具有相同的维度。每个维度都观察所有其他维度上的过滤器。通常对于像这样的范围/焦点图表对,它们将在同一维度上。
    猜你喜欢
    • 2014-08-02
    • 2018-01-25
    • 1970-01-01
    • 2022-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 2014-10-20
    相关资源
    最近更新 更多