【问题标题】:Using dc.js on nested JSON to create bar chart在嵌套 JSON 上使用 dc.js 创建条形图
【发布时间】:2019-04-23 00:55:12
【问题描述】:

我正在尝试使用 dc.js 和交叉过滤器按角色数量创建一个条形图。需要处理嵌套的 JSON。

样本数据集

 [      {  "user":"Mani"
            "age":55,
            "area":"NORTH",
            "role": [
                {
                    "roleId": 15,
                    "role": "Operator",
                    "at": "2018-10-30T07:53:10.433Z",
                    "createdAt": "2018-10-30T07:53:10.449Z"

                },
                {
                    "statusId": 16,
                    "status": "Supervisor",
                    "at": "2018-10-30T07:53:18.359Z",
                    "createdAt": "2018-10-30T07:53:18.359Z"

                },
                {
                    "statusId": 26,
                    "status": "Manager",
                    "at": "2018-10-30T13:01:50.296Z",
                    "createdAt": "2018-10-30T13:01:50.296Z"

                }
                ]
        },  {
            "user":"Kandan"
            "age":65,
             "area":"SOUTH",
            "role": [
                {
                    "roleId": 15,
                    "role": "Operator",
                    "at": "2018-10-30T07:53:10.433Z",
                    "createdAt": "2018-10-30T07:53:10.449Z"

                },
                {
                    "statusId": 16,
                    "status": "Supervisor",
                    "at": "2018-10-30T07:53:18.359Z",
                    "createdAt": "2018-10-30T07:53:18.359Z"

                }
                ]
        }
]

我尝试使用来自每个用户的根级别的值来创建图表,但是当我尝试访问 role 键时,我以某种方式只能使用一个角色而不是所有角色,另一方面它会将数组返回到方面。基本思想是在 x 轴下有 role.role,在 y 轴上有他们的计数。我如何做到这一点?

样本输出

【问题讨论】:

    标签: javascript d3.js dc.js crossfilter


    【解决方案1】:

    您的问题实际上并不在于嵌套的 JSON;事实上,每个用户都有多个角色。

    要获取每个用户的角色,您可以使用返回角色名称数组的访问器:

    var roleDimension = cf.dimension(d => d.role.map(r => r.role), true);
    

    第二个参数指定您需要"tag" or "array" dimension。这是一种特殊模式,其中每一行将被计算多次,对于维度键访问器返回的数组中的每个标记一次。

    我知道您想将其用于条形图,这很好 - don't use this for any chart which implicitly adds up to 100%! 由于类别不是互斥的,即使您小心不要暗示 100%,这种行为也会令人困惑。

    【讨论】:

    • 非常感谢我设法创建了一个条形图。现在发现是过滤器的问题。当条被选中时,它说 point.map 不是一个函数,它过滤某些图表,但不是屏幕上的所有图表。
    • 我认为“标签维度”和此条形图不需要更多步骤。听起来您现在遇到了一个与散点图定义无关的新问题。 (有助于查看错误的来源。)也许散点图的维度/组没有生成大小为 2(点)的数组?请记住,当您的键函数返回多个值时,您只想使用 crossfilter.dimension 的第二个参数 - 您可能不希望它用于散点图维度。
    • 如果您无法弄清楚,请随时提出另一个问题。我认为这个问题已经得到解答。
    • 是的,先生。该问题已解决,我的代码有问题。
    猜你喜欢
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多