2013-06-14 1 views
10

Все примеры Crossfilter я нашел использовать плоскую структуру, как это:Требует ли Crossfilter плоской структуры данных?

[ 
    { name: “Rusty”, type: “human”, legs: 2 }, 
    { name: “Alex”, type: “human”, legs: 2 }, 
    ... 
    { name: “Fiona”, type: “plant”, legs: 0 } 
] 

или

"date","open","high","low","close","volume","oi" 11/01/1985,115.48,116.78,115.48,116.28,900900,0 11/04/1985,116.28,117.07,115.82,116.04,753400,0 11/05/1985,116.04,116.57,115.88,116.44,876800,0

У меня есть сотни мегабайт плоских файлов обрабатываю с получением 1- 2MB JSON объект со структурой примерно как:

{ 
    "meta": {"stuff": "here"}, 
    "data": { 
    "accountName": { 
     // rolled up by week 
     "2013-05-20": { 
     // any of several "dimensions" 
     "byDay": { 
      "2013-05-26": { 
      "values": { 
       "thing1": 1, 
       "thing2": 2, 
       "etc": 3 
      } 
      }, 
      "2013-05-27": { 
      "values": { 
       "thing1": 4, 
       "thing2": 5, 
       "etc": 6 
      } 
      } 
      // and so on for day 
     }, 
     "bySource": { 
      "sourceA": { 
      "values": { 
       "thing1": 2, 
       "thing2": 6, 
       "etc": 7 
      } 
      }, 
      "sourceB": { 
      "values": { 
       "thing1": 3, 
       "thing2": 1, 
       "etc": 2 
      } 
      } 
     } 
     } 
    } 
    } 
} 

который я хотел бы, чтобы отобразить в виде таблицы, как:

Group: byDay* || bySource || byWhatever 

      | thing1 | thing2 | etc 
2013-05-26 |  1 |  2 | 2 
2013-05-27 |  4 |  5 | 7 

или:

Group: byDay || bySource* || byWhatever 

      | thing1 | thing2 | etc 
sourceA |  2 |  6 | 6 
sourceB |  3 |  1 | 3 

сплющивание этой структуры JSON будет трудно и дают очень большой объекта.

Я хотел бы воспользоваться замечательными функциями Кроссфильтра, но я не уверен, если это возможно.

Возможно ли определить/объяснить мою нынешнюю структуру Crossfilter? Возможно, есть еще один способ, которым я мог бы подойти к этому? Я с готовностью признаю, что я не очень хорошо разбираюсь в измерениях и многих других концепциях Crossfilter.

ответ

6

Crossfilter работает с массивом записей, причем каждый элемент массива сопоставляется с одним или несколькими значениями через измерения (которые определяются с помощью функций доступа).

Даже если данные содержат агрегированные результаты, вы можете использовать это с Crossfilter, но учтите, что это технически невозможно объединить данные, которые были объединены в различных размерах, например, комбинируя «день» и «источник «данные в вашем примере выше. Вы можете создать Crossfilter для каждого агрегированного измерения, например. один для «по дням», и запускать запросы и группы по этому вопросу, но я не уверен, насколько полезен то, что можно сравнить с тем, что у вас уже есть.

Что касается использования памяти, вы уверены, что сплющивание вашей сплющенной структуры действительно было бы проблематичным? Имейте в виду, что каждая запись (элемент сплющенного массива) может содержать ссылки на строки и другие объекты в вашей вложенной структуре, поэтому вы не обязательно будете использовать всю эту память.

+0

Я отредактировал свой вопрос, чтобы показать некоторые из видов, которые я хотел бы получить из данных. Я не уверен, как бы сгладить структуру данных. Он включает накопительные/суммарные значения (не сырые). Будет ли приведенный выше пример сгладить что-то вроде https://gist.github.com/jfsiii/5786087? Извините за любые уведомления о спаме. Я понимаю, что текстовое поле комментария имеет другое поведение, чем текстовое поле вопроса. – user2487135

+0

Ваши примеры представляют собой просто табличные формы ваших данных. Можете ли вы привести пример видов запросов (групп или фильтров), которые вы хотите показать Crossfilter? –

+0

Я обновил ответ, чтобы ответить на вопрос о объединении агрегатов. –

 Смежные вопросы

  • Нет связанных вопросов^_^