2015-06-16 1 views
0

Я пытаюсь использовать диаграмму для отображения многострочной линейной диаграммы, которая отслеживает общий объем входящего и исходящего материала по месяцам за последний год.Rails 3.2 Сгруппированный запрос по линейной диаграмме Chartkick не отображается правильно

Запросы должны генерировать что-то похожее на это:

SELECT SUM(ship_total_net_weight) AS sum_ship_total_net_weight, 
    month(ship_date) AS month_ship_date, year(ship_date) 
    AS year_ship_date 
    FROM [Downstream] 
    WHERE is_active = 1 AND from_company_id = 89 
    AND 
    (ship_date BETWEEN '2014-06-15 18:15:26.196' 
    AND '2015-06-15 18:15:26.196') 
    AND (to_company_id <> 89) 
    GROUP BY month(ship_date), year(ship_date) 
    order By year(ship_date), month(ship_date) 

Мой график код пинок следующим образом:

<%= line_chart [ 
       {name: "Inbound", data: Downstream.where(:to_company_id => current_user.company_id, :ship_date => 1.year.ago..Time.now).where('from_company_id <> ?', current_user.company_id).group('month(ship_date), year(ship_date)').sum(:ship_total_net_weight)}, 
       {name: "Outbound", data: Downstream.where(:from_company_id => current_user.company_id, :ship_date => 1.year.ago..Time.now).where('to_company_id <> ?', current_user.company_id).group('month(ship_date), year(ship_date)').sum(:ship_total_net_weight)} 
       ] %> 

В результате я получаю от диаграммы удара представляет собой линию для каждой серии с только две точки данных, одна по 31 декабря 2013 года и одна по 31 декабря 2014 года.

Запуск вышеуказанного SQL по базе данных генерирует 9 результатов в диапазоне от 6/2014 до 2/2015

Почему набор данных отличается? Является ли мой синтаксис неправильным? Нужно ли мне как-то менять запрос?

Спасибо за помощь заранее!

ответ

0

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

<%= line_chart [ 
       {name: "Inbound", data: Downstream.where(:to_company_id => current_user.company_id, :ship_date => 1.year.ago..Time.now).where('from_company_id <> ?', current_user.company_id).group('dateadd(month, datediff(month,1,ship_date),1)').sum(:ship_total_net_weight)}, 
       {name: "Outbound", data: Downstream.where(:from_company_id => current_user.company_id, :ship_date => 1.year.ago..Time.now).where('to_company_id <> ?', current_user.company_id).group('dateadd(month, datediff(month,1,ship_date),1)').sum(:ship_total_net_weight)} 
         ] %> 

Использование DATEADD и DATEDIFF функции в группе позволяет сортировать по месяцу/году поля даты или даты и возвращает полную дату в одном столбце.

-Открыть примечание. Я использую SQLServer, который не поддерживается камнем groupdate, который часто используется при соединении с chartkick.

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