</td>
{data[0].data.slice(1).map((retention, i) => {
- const average = data.reduce((sum, cohort, k) => cohort.data[i + 1] ? sum + (cohort.data[i + 1].percent - sum)/(k + 1) : sum, 0);
+ const average = data.reduce((sum, cohort, k) => cohort.data[i + 1] ? sum + (cohort.data[i + 1].rate - sum)/(k + 1) : sum, 0);
return (
<td key={retention.date}>
{cohort.data.slice(1).map(retention => (
<td key={retention.date}>
- <div className={classNames('retention__table__box', `retention__table__box--${roundTo10(retention.percent * 100)}`)}>
- <FormattedNumber value={retention.percent} style='percent' />
+ <div className={classNames('retention__table__box', `retention__table__box--${roundTo10(retention.rate * 100)}`)}>
+ <FormattedNumber value={retention.rate} style='percent' />
</div>
</td>
))}
end
class CohortData < ActiveModelSerializers::Model
- attributes :date, :percent, :value
+ attributes :date, :rate, :value
end
def initialize(start_at, end_at, frequency)
current_cohort.data << CohortData.new(
date: row['retention_period'],
- percent: rate.to_f,
+ rate: rate.to_f,
value: value.to_s
)
end
attributes :period, :frequency
class CohortDataSerializer < ActiveModel::Serializer
- attributes :date, :percent, :value
+ attributes :date, :rate, :value
def date
object.date.iso8601