2013-06-14 13 views
10

Wszystkie przykłady Crossfilter jakie znalazły zastosowanie płaską strukturę tak:Czy Crossfilter wymaga płaskiej struktury danych?

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

lub

"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

mam setki MB plików płaskich przetwarzać, uzyskując 1- 2MB obiekt JSON o strukturze mniej więcej tak:

{ 
    "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 
      } 
      } 
     } 
     } 
    } 
    } 
} 

które chciałbym wyświetlać w postaci tabeli, takich jak:

Group: byDay* || bySource || byWhatever 

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

czyli

Group: byDay || bySource* || byWhatever 

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

rozpłaszczenia tej struktury JSON byłoby trudne i otrzymując duże obiektu.

Chciałbym skorzystać z cudownych funkcji Crossfiltra, ale nie jestem pewien, czy to możliwe.

Czy mogę zdefiniować/wyjaśnić moją obecną strukturę Crossfiltrem? Być może jest inny sposób, w jaki mogę się do tego zbliżyć? Przyznaję, że nie mam dobrego zrozumienia wymiarów i wielu innych kluczowych koncepcji Crossfiltra.

Odpowiedz

6

Filtr poprzeczny działa na tablicy rekordów, przy czym każdy element tablicy jest odwzorowywany na jedną lub więcej wartości za pośrednictwem wymiarów (które są zdefiniowane za pomocą funkcji akcesora).

Nawet jeśli dane zawierają zagregowane wyniki, można użyć tego z Crossfilter, ale należy pamiętać, że jest to technicznie niemożliwe połączyć dane, które zostały zagregowane w różnych wymiarach, takich jak łączenie „dzień” i „według źródła "dane w powyższym przykładzie. Możesz utworzyć filtr Crossfilter dla każdego zagregowanego wymiaru, np. jeden dla "za dnia", i uruchamiać kwerendy i grupy na tym, ale nie jestem pewien, jak użyteczne byłoby to w porównaniu z tym, co już masz.

Jeśli chodzi o użycie pamięci, czy na pewno spłaszczenie spłaszczonej struktury byłoby naprawdę problematyczne? Należy pamiętać, że każdy rekord (element spłaszczonej tablicy) może zawierać referencje do ciągów i innych obiektów w strukturze zagnieżdżonej, więc niekoniecznie zużyjesz tyle pamięci.

+0

Zmieniłem moje pytanie, aby wyświetlić niektóre widoki, które chciałbym uzyskać z danych. Nie jestem pewien, w jaki sposób spłaszczyłabym strukturę danych. Obejmuje wartości zbiorcze/sumowane (nie surowe). Czy powyższy przykład spłaszczy się do czegoś podobnego do https://gist.github.com/jfsiii/5786087? Przepraszamy za spam związany z powiadomieniem. Dowiaduję się, że pole tekstowe komentarza ma inne zachowanie niż pole tekstowe pytania. – user2487135

+0

Twoje przykładowe widoki to po prostu tabelaryczne formy danych. Czy możesz podać przykład rodzajów zapytań (grup lub filtrów), które ma wyświetlać Crossfilter? –

+0

Zaktualizowałem odpowiedź, aby odpowiedzieć na twoje pytanie dotyczące łączenia agregatów. –

Powiązane problemy