【问题标题】:Mixing custom function with predefined ones in reductio for crossfilter将自定义函数与预定义函数混合以减少交叉过滤器
【发布时间】:2023-03-07 06:45:01
【问题描述】:

我正在尝试同时使用 reductio 库中的 .std().custom() 函数。

我的reduction部分代码如下:

dims.theme1 = myCrossfilter.dimension(function(d) {return(d.theme1);});
groups.theme1 = dims.theme1.group();

var reducer = reductio()
    .custom({initial:reduceInit,add:reduceAdd,remove:reduceRemove})
    .std("pl");
reducer(groups.theme1);

我的自定义函数代码是:

reduceAdd = function(p,v) {
    if (!p.fundsData.hasOwnProperty(v.AdyneAccount)) {
        p.fundsData[v.AdyneAccount]=0;
    }
    if (!p.stratsData.hasOwnProperty(v.Strategy)) {
        p.stratsData[v.Strategy]=0;
    }
    p.fundsData[v.AdyneAccount]+=+v.plfund;
    p.stratsData[v.Strategy]+=+v.plstrat;
    p.value+=+v.pl;
    return(p);
};
reduceRemove = function(p,v) {
    p.fundsData[v.AdyneAccount]-=+v.plfund;
    p.stratsData[v.Strategy]-=+v.plstrat;
    p.value-=+v.pl;
    return(p);
};
reduceInit = function(p,v) {
    return({
        value:0,
        fundsData:{},
        stratsData:{}
    });
};

我希望我的结果(通过执行groups.theme1.all()[0])如下所示(对于本示例,我输入的值是随机的):

{
    "key": "theTheme",
    "value": {
        "value": 10,
        "fundsData": {
            "a": 10,
            "b": 5,
            "c": 4
        },
        "stratsData": {
            "somename": 8
        },
        "count": null,
        "sum": null,
        "sumOfSq": null,
        "std": 0
    }
}

确实如此,但它不会产生countsumsumOfSq 的值(当然std 也不会)。

当我在完全相同的记录集上单独运行 .std("pl") 而没有我的自定义函数时,它会按预期工作。我不明白为什么添加自定义函数会阻止.std("pl") 部分的正确计算。

欢迎大家帮忙!

【问题讨论】:

    标签: javascript dc.js crossfilter reductio


    【解决方案1】:

    在我看来这是 Reductio 中的一个错误。测试名称表明这不应该干扰减速器的其他方面,但测试的内容清楚地表明它确实消除了它们。

    https://github.com/crossfilter/reductio/blob/cd99f5043990a838b7e04ea86dbae3c1a1203119/test/custom.spec.js#L48

    我创建了an issue for this。不知道什么时候我能得到它。您可能只想为此实现一个普通的 Crossfilter 自定义减速器,直到我可以修复它或有人发送拉取请求。

    【讨论】:

    • 好的,谢谢您的回答。那么以“正常”方式定义我的自定义reducer并将reducio对象添加到该组?还是只创建 2 个不同的维度和组?
    • 目前您必须创建 2 个不同的维度,或者将您在 Reductio 减速器中的任何内容添加到“普通”自定义减速器中。对此感到抱歉:(
    • 完全不用担心! reductio 非常好,我已经不得不求助于二维技巧来让 dc.js 图形正常运行。
    猜你喜欢
    • 1970-01-01
    • 2021-11-04
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多