Rails NPS 净推荐值计算方法(非 SQL直接查询)

首先可以看一下什么是 NPS 净推荐值

企业微信20201111-103014.png

NPS的得分就等于(推荐者数量-贬损者数量)/总样本数量。

直接上代码:

# 设置为八月一号是因为我调查是从这个月开始的,
s = Time.parse('2020-08-01 00:00:00 +0800')

# 不统计当前月,因为当前月还没过完,数据不完整,统计了也没用
f = Time.now.beginning_of_month
n = s

# 统计出小于 7 分的总数
data1 = UserFeedback.effective.where('created_at < ?', f).where("score < ?", 7).group_by_month(:created_at).count

# 统计出大于 8 分的总数
data2 = UserFeedback.effective.where('created_at < ?', f).where("score > ?", 8).group_by_month(:created_at).count

# 总数
data3 = UserFeedback.effective.where('created_at < ?', f).group_by_month(:created_at).count

# 最后存放数据的变量
data4 = {}

# 循环,当 n 小于 本月时,可循环,n 是要计算的那一个月
while n < f
  idx = n.beginning_of_month.to_date

  # 有可能某个月某个数据为空,那么我们需要给它赋 0
  v1 = data1[idx].presence || 0
  v2 = data2[idx].presence || 0
  v3 = data3[idx].presence || 0
  data4[idx] = ((v2 - v1).fdiv(v3 || 1)).round(2) * 100
  n = n.next_month
end

然后直接通过 line_chart 转换为图表

= line_chart data4, height: '200px'
posted @ 2020-11-12 10:12  Mr-Ran  阅读(430)  评论(0编辑  收藏  举报