Avec les données suivantes :
const now = new Date
const data = [
{ player: 'bob', color: 'blue', date: new Date(+now + 1000) },
{ player: 'bill', color: 'green', date: new Date(+now + 2000) },
{ player: 'bob', color: 'red', date: new Date(+now + 3000) },
{ player: 'barbara', color: 'blue', date: new Date(+now + 4000) },
{ player: 'barbara', color: 'cyan', date: new Date(+now + 8000) },
{ player: 'barbara', color: 'magenta', date: new Date(+now + 10000) },
{ player: 'barbara', color: 'yellow', date: new Date(+now + 20000) },
]
Je veux réduire le nombre sur la dimension de la couleur, mais seulement comptez la première couleur par joueur. (note : la première est par rapport à la dimension de la date qui peut être filtrée). J'ai essayé de faire fonctionner ceci avec reductio en utilisant la fonction exception mais cela n'a pas donné les résultats escomptés :
reducer = reductio()
reducer.exception('player').exceptionCount(true)
reducer(colorGroup)
Les résultats devraient ressembler à ceci :
blue,2 # bob and barbara
cyan,0
green,1 # bill
magenta,0
red,0
yellow,0
Un autre exemple, avec la dimension date filtrée à now+2100
.. now+20000
(c'est-à-dire que la première ligne est filtrée) :
blue,1 # barbara
cyan,0
green,0 # (bill's first color is not counted because it is outside the date range)
magenta,0
red,1 # bob (blue is his first color overall, red is his first in this date range)
yellow,0
Remarque : j'ai d'autres regroupements qui utilisent toutes les lignes, donc je ne peux pas simplement pré-filtrer la liste avant de la charger dans crossfilter.
Y a-t-il un moyen d'utiliser reductio() pour cela ? Ou un exemple de comment faire ce "regroupement sur regroupement" avec crossfilter directement ?
EDIT
Lien vers jsfiddle montrant un résultat inattendu : https://jsfiddle.net/qt5jxjm1/