Плавление стола в Rails - PullRequest
       0

Плавление стола в Rails

0 голосов
/ 20 февраля 2020

У меня есть модель в базе данных PG SQL с тремя переменными: D1, D2 и D3. Я хотел бы использовать библиотеку Chartklick для создания многострочного графика со строкой для каждой переменной. Для этого мне нужно растопить таблицу с Date, D1, D2, D3 до Date, Factor, чтобы я мог сгруппировать по типу продукта и получить строку для каждого из факторов (D1, D2 и D3). Есть ли способ сделать это, пожалуйста? ?

От: enter image description here

до этого: enter image description here

Я сделал это до сих пор:

`<%= line_chart [
                       
{name: "df1", data: MyDataset.group('date', 'factor').where(factor: "factor_df1").sum(:value)},
                       
{name: "df2", data: MyDataset.group('date', 'factor').where(factor: "factor_df2").sum(:value)}
    ] %>`

1 Ответ

0 голосов
/ 21 февраля 2020

Итак, я думаю, вы хотите go из некоторых данных:

[
  {date: "2020-02-21", factor_d1: 1, factor_d2: 1, factor_d3: 3},
  ...
]

до:

[
  {date: "2020-02-21", factor: "factor_d1", value: "1"},
  {date: "2020-02-21", factor: "factor_d2", value: "1"},
  {date: "2020-02-21", factor: "factor_d3", value: "3"},
  ...
]

Это можно сделать с помощью flat_map :

def melt(data)
  data.flat_map do |entry|
    [
      {date: entry[:date], factor: "factor_d1", value: entry[:factor_d1]},
      {date: entry[:date], factor: "factor_d2", value: entry[:factor_d2]},
      {date: entry[:date], factor: "factor_d3", value: entry[:factor_d3]},
    ]
  end
end

Если у вас много элементов factor_x, это может быть немного громоздко, и вы можете попробовать другой подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...