在嵌套 JSON 上使用 dc.js 创建条形图
Using dc.js on nested JSON to create bar chart
我正在尝试使用 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
键时,我以某种方式只能使用一个角色而不是所有角色 returns数组到维度。基本思想是在 x 轴下设置 role.role,在 y 轴上设置它们的数量。我该如何实现?
示例输出
你的问题不是真正的嵌套JSON;事实上,您对每个用户都有多个角色。
要获取每个用户的角色,您可以使用 returns 角色名称数组的访问器:
var roleDimension = cf.dimension(d => d.role.map(r => r.role), true);
第二个参数指定你想要一个"tag" or "array" dimension。这是一种特殊模式,其中每一行将被计算多次,对于维度键访问器 returns 的数组中的每个标记一次。
我知道您想将其用于条形图,这很好 - don't use this for any chart which implicitly adds up to 100%! 由于类别不是相互排斥的,因此即使您注意不要暗示 100%,行为也可能会造成混淆。
我正在尝试使用 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
键时,我以某种方式只能使用一个角色而不是所有角色 returns数组到维度。基本思想是在 x 轴下设置 role.role,在 y 轴上设置它们的数量。我该如何实现?
示例输出
你的问题不是真正的嵌套JSON;事实上,您对每个用户都有多个角色。
要获取每个用户的角色,您可以使用 returns 角色名称数组的访问器:
var roleDimension = cf.dimension(d => d.role.map(r => r.role), true);
第二个参数指定你想要一个"tag" or "array" dimension。这是一种特殊模式,其中每一行将被计算多次,对于维度键访问器 returns 的数组中的每个标记一次。
我知道您想将其用于条形图,这很好 - don't use this for any chart which implicitly adds up to 100%! 由于类别不是相互排斥的,因此即使您注意不要暗示 100%,行为也可能会造成混淆。