修改dc.js

时间:2015-06-08 11:05:06

标签: dc.js crossfilter

我正在尝试添加dc-count-widget,但我需要绕过默认维度/组,即所有data / groupAll。我的数据如下:

`[{"subjId":"subj1", "temp":"37"},
  {"subjId":"subj1", "temp":"38"},
  {"subjId":"subj2", "temp":"36.5"},
  {"subjId":"subj2", "temp":"37.3"},
  {"subjId":"subj3", "temp":"39"}
]`

我想在临时“温度”和直流计数上添加一个尺寸,以反映当我在温度范围内过滤时唯一主题的数量。

EDIT 我试过了:

subjectColumnName = 'subjId'
subjectDim = cfData.dimension(function(d) {return d[subjectColumnName]})
chart.dimension(subjectDim.group())
chart.group(subjectDim.groupAll())

但是在过滤时我得到的重复项不是唯一的主题数。

由于

1 个答案:

答案 0 :(得分:0)

谢谢@Gordon dataCount graph filtered by a dimension中的解决方案可行,但如果其他图表被过滤,则窗口小部件不会更新,因此我必须创建自定义组功能以仅计算唯一主题。

我还不确定reduceRemoveSubj函数是否正确。它看起来像是一个非常有用的解决方案!

这是:

function reduceAddSubj(p, v) {

            if( v[subjectColumnName] in p.subjects){
                p.subjects[v[subjectColumnName]]++
            }
            else {
                p.subjects[v[subjectColumnName]] = 1;
                ++p.count;
            }
            return p;
        }

function reduceRemoveSubj(p, v) {
            p.subjects[v[subjectColumnName]]--;
            if(p.subjects[v[subjectColumnName]] === 0){
                delete p.subjects[v[subjectColumnName]];
                --p.count;
            }
            return p;
        }

function initialSubj() {
            return {subjects: {},
                    count:0
            };
        }

subjectColumnName = 'subjId'
subjectDim = cfData.dimension(function(d) {return d[subjectColumnName]})
uniqueSubjGrp = subjectDim.groupAll().reduce(reduceAddSubj, reduceRemoveSubj, initialSubj)
uniqueSubjGrpM = {value: function() {
                return uniqueSubjGrp.value().count; 
            } };

chart.dimension(subjectDim.group())
chart.group(uniqueSubjGrpM)