2013-05-23 8 views
7

Używam funkcji grupowania i wykresu, aby wypróbować i wyświetlić wykres pokazujący wzrost (i spadek) bazy użytkowników w czasie.Szyny: Używanie funkcji grupowania i tworzenia wykresów do utworzenia wykresu zbiorczego użytkownika

stosując następujące działa dobrze na wykresie kolumny, ale idzie bzika na wykresie linia:

sum=0 
User.group_by_day(:created_at).count.map { |x,y| { x => (sum += y)} }.reduce({}, :merge) 

Czy ktoś może wskazać mi w dobrym kierunku? Czy istnieje lepszy sposób, aby to zadziałało?

Odpowiedz

10

Martin odpowiedź była blisko, ale skończyło się na podstawie:

User.group_by_week(:created_at).order("week asc").count.map { |x,y| { x => (sum += y)} }.reduce({}, :merge) 

Aby uzyskać tygodniowo - zauważył kolejności ("tydzień asc") - to co stałe ...

11

Dzieje się tak dlatego, że musisz posortować przed wykonaniem skumulowanej sumy.

Spróbuj tego:

sum=0 
User.group_by_day(:created_at).count.to_a.sort{|x,y| x[0] <=> y[0]}.map { |x,y| { x => (sum += y)} }.reduce({}, :merge) 
+0

Dzięki - faktycznie skończyłem używając User.group_by_week (: created_at) .order ("tydzień asc") count.map {| x, y | {x => (suma = = y)}} .reduce ({},: merge), ponieważ nie potrzebna była ziarnistość dzienna – Les

Powiązane problemy