Использование dc.js на вложенном JSON для создания гистограммы - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь создать гистограмму для ролей по их количеству, используя 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Я так или иначе могу использовать только одну роль, не все роли, с другой стороны, он возвращает массив в измерение.Основная идея состоит в том, чтобы иметь role.role под осью X и их счет на оси Y.Как мне этого добиться?

Пример вывода

enter image description here

1 Ответ

0 голосов
/ 26 ноября 2018

Ваша проблема - не вложенный JSON;это факт, что у вас есть несколько ролей для каждого пользователя.

Чтобы получить роли для каждого пользователя, вы можете использовать средство доступа, которое возвращает массив имен ролей:

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

ВторойПараметр указывает, что вы хотите измерение «тег» или «массив» .Это специальный режим, в котором каждая строка будет подсчитываться несколько раз, по одному разу для каждого тега в массиве, который возвращает средство доступа к ключу измерения.

Я вижу, вы хотите использовать это для гистограммы, что хорошо - не используйте это для любого графика, который неявно добавляет до 100%! Поскольку категории не взаимноисключительное, поведение может сбивать с толку, даже если вы стараетесь не подразумевать 100%.

...