размер перекрестного фильтра на 2 поля - PullRequest
1 голос
/ 28 июня 2019

Мои данные выглядят так

field1,field2,value1,value2
a,b,1,1
b,a,2,2
c,a,3,5
b,c,6,7
d,a,6,7

У меня нет хорошего способа перегруппировать эти данные, поэтому давайте предположим, что данные должны оставаться такими.

Я хочу создать измерение для field1 и field2 вместе: одно измерение, которое будет принимать объединение всех значений в field1 и field2 (в моем примере значения должны быть [a,b,c,d])

В качестве функции уменьшения можно предположить, например, reduceSum на value2 (на данный момент разрешен двойной счет).

(помечены dc.js и reductio, потому что это может быть полезно для пользователей этих библиотек)

1 Ответ

0 голосов
/ 28 июня 2019

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

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

Тем не менее, «размер тега» идеально подходит для того, что вы пытаетесь сделать.

Объявление измерения может быть простым:

var tagDimension = cf.dimension(function(d) { return [d.field1,d.field2]; }, true);

Теперь каждая строка будет учитываться дважды - это измерение и связанные с ним группы будут действовать точно так же, как если бы каждая из строк была продублирована: одна копия проиндексирована field1, а другая - field2.

Если вы сделали гистограмму с этим, скажем, общее количество будет 2N минус число строк, где field1 === field2. Если вы нажмете на полосу «b», все строки, которые имеют «b» в обоих полях, будут выделены. Это влияет только на группы, построенные на этом измерении, поэтому любые другие диаграммы будут видеть только одну копию каждой строки.

...