2012-07-20 9 views
5

¿Hay alguna forma de crear una dimensión en un atributo que tenga uno o más valores? Por ejemploFiltro discreto para D3 Filtro cruzado Dimensiones

{quantity: 2, total: 190, tip: 100, items: ["apple","sandwich"], 
{quantity: 2, total: 190, tip: 100, items: ["ice-cream"]}, 
{quantity: 1, total: 300, tip: 200, items: ["apple", "coffee"]} 

Mi objetivo es crear un filtro cruzado que pueda filtrar las entradas a lo largo de una dimensión que tenga valores ordinales. ¿Hay alguna manera de escribir un filtro/dimensión que me permita decir "Quiero todas las entradas que tienen el elemento 'apple'"?

La única solución que se me ocurre es crear una dimensión para cada elemento. De esta manera:

var paymentsByApple = payments.dimension(function(d) { return $.inArray("apple", d.items); }); 
var paymentsByCoffee = payments.dimension(function(d) { return $.inArray("coffee", d.items); }); 
// and one for every possible item 

El problema principal es que no quiero enumerar y codificar todos los objetos diferentes. Además, puedo terminar teniendo muchos artículos diferentes posibles. ¿Hay alguna forma más inteligente de hacer esto?

¡Gracias de antemano!

Respuesta

2

¿Qué hay de cambiar su modelo de datos? Creo que el uso de:

[{id: 1, quantity: 1, total: 100, tip: 50, item: "apple"}, 
{id: 1, quantity: 1, total: 90, tip: 50, item: "sandwich"}, 
{id: 2, quantity: 1, total: 190, tip: 100, item: "ice-cream"}, 
{id: 3, quantity: 1, total: 300, tip: 100, item: "apple"}, 
{id: 3, quantity: 1, total: 300, tip: 100, item: "coffee"}] 

Tal vez usted puede calcular los totales de Identificación del uso de reduceSum

3

frente al mismo problema aquí y no ve una solución fácil con las características lib actuales, ver this.

El problema con el cambio del modelo de datos para adaptarse a una sola dimensión de valor como lo propone Pablo Navaro es que necesita asegurarse de que las estadísticas calculadas para otras dimensiones no estén distorsionadas (doble conteo, medios de corrección, ....)

Espero ver un filtro trabajando en múltiples dimensiones de valor, o tener algo más de tiempo para profundizar en la base de código para proponer uno ...