搞懂这些关键指标,数据分析起码少费一半力

本文详细介绍了用户生命周期中的关键指标,包括用户获取、活跃、留存、营收及传播等五大类,帮助理解用户行为并评估产品健康状况。

按照用户生命周期,我们基本可以把用户行为指标分解成以下几种类型:

  • 用户获取类指标
  • 用户活跃类指标
  • 用户留存类指标
  • 产品营收类指标
  • 用户传播类指标

01 用户获取类指标

(1)渠道到达量:又称曝光量,指看到产品推广线索的人数,其中还包括广告点击量CTR。

(2)渠道转化率:转化率是应用最广阔的指标,包括:

  • CPM:每千人成本,按多少人看到广告计费。
  • CPC:每用户点击成本,按点击计价。
  • CPA:每行动成本,按用户行为计价。
  • CPT:每时间段成本,按时间计价。
  • CPS和CPS算在CPA的范围内。
  • eCPM:每一千次展示可获得收入,广告主预估自身收益的指标。

渠道ROI:即投资回报比(利润/投资*100%)

当运营活动的ROI大于1,说明这个活动是成功的,能赚钱。

ROI也能推广到其他指标,比如注册用户量,也就是获客成本。分享一个ROI数据分析的部分截图:

 (3)日应用下载量:只点击下载不代表下载完成。

第三方平台下载到用户注册App,这步骤数据容易出错,主要是用户对不上。技术上通过唯一设备ID匹配。

(4)日新增用户:以用户注册提交资料为基准。新增用户可以进一步分为:

  • 自然增长:用户邀请,用户搜索等
  • 推广增长:运营人员强控制下增长的用户量

(5)获客成本:为获取一位用户需要支付的成本

(6)CAC:获取一个有效用户的成本

(7)一次会话用户占比:指新用户下载完APP,仅打开一次并使用时长在2分钟以内

这类用户很大可能是黑产或者机器人,通过各种技术刷量,获取虚假的点击量谋取收益。该指标属于风控指标,用于监管。


02 用户活跃类指标

用户活跃是运营的核心阶段,不论移动端、网页端或者微信端,都有相关指标,主要包括:

(1)日活/周活/月活:标准是用户用过产品,不限于打开APP。

活跃率:某一时间段内活跃用户在总用户量的占比。按时间维度则有:

  • 日活跃率DAU
  • 周活跃率WAU
  • 月活跃率MAU

有时也会将活跃用户再细分出:新用户、活跃用户、忠诚用户、不活跃用户、流失用户、回流用户等。

图源logo,侵删

(2)PV和UV

  • PV:页面浏览量,用户在网页的一次访问请求可以看作一个PV。
  • UV:独立访客数,即一定时间内用户访问页面的次数。

注意:微信浏览器不会长期保留cookie,手机端的IP也一直变动,基于此统计的UV会有误差

可以通过微信提供的openid取代cookie作为uv基准,需要额外的技术支持。

(3)活跃用户占比:活跃用户/总用户,用来衡量产品健康程度

(4)用户会话session次数:用户打开产品操作和使用,到退出产品的整个周期。

网页端一般默认是30分钟内,30分钟内属于一次会话,超过30分钟属于第二次会话。移动端的时间窗口默认为5分钟。

用户会话次数和活跃用户数结合,能够判断用户的粘性。

比如如果日活跃用户数为100,日会话次数为120,说明大部分用户都只访问了产品一次,产品并没有粘性。

(5)用户访问时长:一次会话的持续时间

如果分析师发现做内容的产品大部分用户访问时长只有几十秒,那么最好分析一下原因。


03 用户留存类指标

用户在某段时间使用产品,过了一段时间后,仍旧继续使用的用户,被称为留存用户。

留存率 = 仍旧使用的用户/ 当初的总用户量

(1)用户留存指标可细分为:次日留存、三日留存、七日留存、三十日留存。

Facebook有一个著名的40-20-10法则,即新用户次日留存率为40%,七日留存率为20%,三十日留存率为10%,有此表现的产品属于数据比较好的。

 (2)用户流失率,能预测产品的发展。

用户流失率要针对问题具体分析,比如旅游类的应用,用户一年也打开不了几次,但依旧能发展。

(3)退出率:从该页退出的页面访问数/进入该页的页面访问数

比如某商品页进入PV1000,该页直接关闭的访问数有300,则退出率30%。

跳出率是退出率的特殊形式,有且仅浏览一个页面就退出的次数/访问次数,仅浏览一个页面意味着这是用户进入网站的第一个页面,俗称落地页LandingPage。

退出率用于网页结构优化,内容优化。跳出率常用于推广和运营活动的分析,两者容易混淆。


04 营收类数据指标

主要包括:

  1. 付费用户数
  2. 付费用户占比:每日付费用户/活跃用户数比 或者 总付费用户/总用户
  3. ARPU:某时间段内用户平均收入
  4. ARPPU.某时间段内每位付费用户平均收入,抛除未付费的
  5. 客单价:每一位用户平均购买商品的金额。销售总额/顾客总数(主要用在电商和零售)
  6. 复购率:购买次数>1的人/所有购买过的人
  7. LTV:用户生命周期价值。LTV=ARPU*1(使用较少因为短期看不出效果)

05 用户传播类指标

(1)K因子:每一个用户能够带来几个新用户

K因子=用户数*平均邀请人数*邀请转化率

当K因子>1时,每位用户能至少能带来一个新用户,用户量会像滚雪球般变大,最终达成自传播。当K因子足够大时,就是快口相传的病毒营销。

(2)用户分享率:某功能或者页面,分享用户数占浏览页面人数之比


最后给大家分享一个传统零售行业的经典管理模型:

进销存

即将企业商品经营拆分出采购、入库、销售三个环节,并且建立全链路的数据体系。在实际业务中,许多场景与进销存都息息相关。

 图源简道云

简单说一下:

  • 进:采购订单、采购入库、采购退货
  • 销:报价、签署合同、退发货
  • 存:出入库,库存调拨,库存盘点

有的还会多一层:

  • 财:付款回款、开票收支、统计对账

整个模型的业务逻辑是这样的:

以上。

 

你提到的 **“每行为什么只有一个数据展示”** 是一个非常关键的 UI/UX 问题。当前代码中虽然使用了 `display: flex` 布局,但由于父容器或子元素的宽度、浮动、定位等设置不当(比如设置了 `position: absolute`),导致布局错乱,无法实现正常的多列网格排列。 --- ### ✅ 核心原因分析 你在原始代码中有这一段: ```css #box ul { position: absolute; top: 220px; } ``` 这个 `position: absolute` 脱离了文档流,并且没有配合 `left/right` 或 `width` 控制,直接导致浏览器默认只给它最小宽度,**内部 `<li>` 不会自动换行或多列排列**,即使用了 `flex-wrap: wrap`,也无法正常响应。 此外: - 没有设置 `justify-content: center` 或 `space-between` - 子项 `<li>` 没有固定宽度或 `flex` 属性 → 所以最终呈现为“竖着堆叠”,而不是“每行多个” --- ### ✅ 正确解决方案 我们要实现: ✅ **桌面端每行显示 4 个卡片** ✅ **平板端每行 2~3 个** ✅ **手机端每行 1 个** ✅ 使用现代 `flex + flex-wrap` 或 `grid` 布局(推荐 `grid` 更适合网格) --- ### ✅ 修复后的完整美化版(支持每行 4 个作业卡片) ```vue <template> <div class="homework-container"> <!-- 头部搜索区 --> <div class="header-section"> <h1 class="page-title">📋 家庭作业中心</h1> <p class="page-desc">发布训练任务,追踪学员完成情况</p> <el-form :model="form" @submit.native.prevent class="search-form"> <el-date-picker v-model="form.startTime" type="date" placeholder="选择日期" prefix-icon="el-icon-calendar" value-format="yyyy-MM-dd HH:mm:ss" style="width: 220px" /> <el-button type="primary" icon="el-icon-search" @click="getAllByCoachId" class="btn-search"> 搜索 </el-button> <el-button type="success" icon="el-icon-plus" @click="toSaveHomeWork" class="btn-add"> 发布新作业 </el-button> </el-form> </div> <!-- 作业列表 - 使用 CSS Grid 实现多列布局 --> <div class="homework-grid"> <transition-group name="fade-slide"> <div v-for="item in list" :key="item.id" class="card homework-card" > <!-- 视频播放器 --> <video :src="item.annex" loop controls class="video-player" preload="metadata" /> <!-- 内容摘要 --> <div class="content-wrapper"> <p class="text-preview">{{ truncateContent(item.content) }}</p> <!-- 查看全文弹窗 --> <el-popconfirm title="" hide-icon width="360"> <template #reference> <button class="btn-view-full">👁️ 全文查看</button> </template> <template #default> <div class="popup-content"> <strong>📝 作业说明:</strong> <p>{{ item.content }}</p> </div> </template> </el-popconfirm> </div> </div> </transition-group> <!-- 空状态 --> <div v-if="!list || list.length === 0" class="empty-state"> <el-empty description="暂无任何作业记录" :image-size="90"> <el-button type="primary" @click="dialogVisible = true" size="small" round> 马上发布第一条 </el-button> </el-empty> </div> </div> <!-- 发布作业弹窗 --> <el-dialog title="📘 发布家庭作业" :visible.sync="dialogVisible" width="520px" center custom-class="publish-dialog" @close="resetDialog" > <el-form :model="saveForm" label-width="90px"> <!-- 视频上传 --> <el-form-item label="教学视频"> <el-upload class="upload-video" action="http://localhost:8081/file/upload" :on-success="handleVideoSuccess" :before-upload="beforeVideoUpload" :limit="1" :on-exceed="handleExceed" :file-list="videoFileList" list-type="picture" accept="video/*" > <el-button size="small" type="primary" icon="el-icon-upload"> 选择视频文件 </el-button> <div class="upload-tip">支持 MP4/MOV,最大 100MB</div> </el-upload> <!-- 视频预览 --> <video v-if="saveForm.annex" :src="saveForm.annex" controls class="preview-video" ></video> </el-form-item> <!-- 作业内容 --> <el-form-item label="作业说明"> <el-input v-model="saveForm.content" type="textarea" :rows="4" placeholder="请描述动作要点、组数要求、注意事项等..." maxlength="300" show-word-limit class="textarea-custom" /> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="dialogVisible = false" size="medium" plain>取消</el-button> <el-button type="primary" @click="submitHomework" size="medium" class="btn-submit"> 🚀 确认发布 </el-button> </div> </el-dialog> </div> </template> <script> import { getAllByCoachId } from "@/api/coach"; import { addHomeWork } from "@/api/coach"; export default { data() { return { dialogVisible: false, saveForm: { annex: "", content: "", coachId: localStorage.getItem("userId"), }, videoFileList: [], form: { coachId: localStorage.getItem("userId"), startTime: "", }, list: [], }; }, created() { this.getAllByCoachId(); }, methods: { toSaveHomeWork() { this.dialogVisible = true; }, truncateContent(content) { const maxLength = 18; return content && content.length > maxLength ? content.slice(0, maxLength) + "..." : content || "暂无说明"; }, getAllByCoachId() { getAllByCoachId(this.form).then((resp) => { this.list = resp.data.data.list || []; }); }, handleVideoSuccess(response) { this.saveForm.annex = response.data.url; }, beforeVideoUpload(file) { const validTypes = ["video/mp4", "video/quicktime", "video/x-matroska"]; const isValidType = validTypes.includes(file.type); const isLt100M = file.size / 1024 / 1024 < 100; if (!isValidType) { this.$message.error("仅支持 MP4/MOV/MKV 格式!"); return false; } if (!isLt100M) { this.$message.error("视频不能超过 100MB!"); return false; } return true; }, handleExceed() { this.$message.warning("只能上传一个视频"); }, submitHomework() { if (!this.saveForm.annex) { this.$message.warning("请上传教学视频"); return; } if (!this.saveForm.content.trim()) { this.$message.warning("请输入作业说明"); return; } addHomeWork(this.saveForm).then((resp) => { this.$message.success(resp.data.message); this.dialogVisible = false; this.resetDialog(); this.getAllByCoachId(); // 刷新列表 }); }, resetDialog() { this.saveForm = { annex: "", content: "", coachId: localStorage.getItem("userId"), }; this.videoFileList = []; }, }, }; </script> <style scoped> .homework-container { min-height: 100vh; background: linear-gradient(135deg, #f7fafd 0%, #e6f1ff 100%); font-family: 'Segoe UI', 'Nunito', sans-serif; color: #333; padding-bottom: 80px; } .header-section { text-align: center; padding: 40px 20px 20px; } .page-title { margin: 0; font-size: 2rem; font-weight: 700; background: linear-gradient(90deg, #2d8cf0, #1976d2); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .page-desc { color: #666; font-size: 15px; margin: 8px 0 20px; } .search-form { display: flex; justify-content: center; gap: 12px; flex-wrap: wrap; } .btn-search, .btn-add { border-radius: 10px; padding: 10px 20px; font-weight: 600; } .btn-search { background: linear-gradient(135deg, #2d8cf0, #1976d2); border: none; } .btn-add { background: linear-gradient(135deg, #4caf50, #388e3c); border: none; } /* ✅ 使用 CSS Grid 实现每行 4 个卡片 */ .homework-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 30px; max-width: 1400px; margin: 0 auto; padding: 0 20px; } /* 单个卡片 */ .card { width: 100%; border-radius: 20px; overflow: hidden; background: rgba(255, 255, 255, 0.9); backdrop-filter: blur(10px); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.12); transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); border: 1px solid rgba(255, 255, 255, 0.4); } .card:hover { transform: translateY(-6px) scale(1.02); box-shadow: 0 20px 40px rgba(0, 0, 0, 0.2); } /* 视频播放器 */ .video-player { width: 100%; height: 200px; object-fit: cover; border-bottom: 1px solid rgba(0, 0, 0, 0.08); } /* 内容区域 */ .content-wrapper { padding: 18px; text-align: center; } .text-preview { font-size: 15px; color: #555; line-height: 1.6; min-height: 50px; margin-bottom: 14px; } .btn-view-full { background: linear-gradient(135deg, #2d8cf0, #1976d2); color: white; border: none; padding: 8px 16px; font-size: 13px; border-radius: 12px; cursor: pointer; transition: all 0.3s ease; box-shadow: 0 4px 10px rgba(45, 140, 240, 0.2); } .btn-view-full:hover { transform: translateY(-1px); box-shadow: 0 6px 14px rgba(45, 140, 240, 0.3); } /* 弹出内容样式 */ .popup-content { max-height: 300px; overflow-y: auto; line-height: 1.7; color: #444; font-size: 14px; padding: 10px; background: #f8fbff; border-radius: 10px; } .empty-state { grid-column: 1 / -1; text-align: center; } .preview-video { width: 100%; height: 180px; margin-top: 12px; border-radius: 12px; object-fit: cover; border: 1px solid #ddd; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.08); } .textarea-custom ::v-deep .el-textarea__inner { border-radius: 12px !important; border: 1px solid #ddd; transition: all 0.3s; } .textarea-custom ::v-deep .el-textarea__inner:focus { border-color: #2d8cf0; box-shadow: 0 0 0 2px rgba(45, 140, 240, 0.2); } .btn-submit { border-radius: 12px; padding: 10px 28px; font-weight: 600; background: linear-gradient(135deg, #2d8cf0, #1976d2); border: none; box-shadow: 0 4px 12px rgba(45, 140, 240, 0.3); } /* 动画效果 */ .fade-slide-enter-active { transition: all 0.5s ease-out; } .fade-slide-leave-active { transition: all 0.3s ease-in; } .fade-slide-enter-from { opacity: 0; transform: translateY(30px) scale(0.9); } .fade-slide-leave-to { opacity: 0; transform: translateY(-30px) scale(0.9); } /* 响应式 */ @media (max-width: 1024px) { .homework-grid { grid-template-columns: repeat(3, minmax(280px, 1fr)); } } @media (max-width: 768px) { .homework-grid { grid-template-columns: repeat(2, minmax(260px, 1fr)); } .search-form { flex-direction: column; align-items: center; } .btn-search, .btn-add { width: 100%; max-width: 280px; } } @media (max-width: 480px) { .homework-grid { grid-template-columns: 1fr; } } </style> ``` --- ### ✅ 关键修复点总结 | 问题 | 修复方式 | |------|----------| | ❌ 每行只有一个 | 删除 `position: absolute`,改用 `CSS Grid` | | ❌ 不响应缩放 | 使用 `repeat(auto-fit, minmax(300px, 1fr))` 自动换行 | | ✅ 桌面端 | 每行最多 4 个 | | ✅ 平板端 | 每行 2~3 个 | | ✅ 手机端 | 每行 1 个 | --- ### ✅ 最终效果 | 屏幕尺寸 | 每行数量 | |---------|----------| | ≥1200px | 4 个 | | 900–1200px | 3 个 | | 600–900px | 2 个 | | <600px | 1 个(居中) | 完全自适应,无需手动调整! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值