snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 3s

This commit is contained in:
upstream-mirror
2026-09-17 23:28:13 +05:00
commit e7da97194a
32688 changed files with 4208681 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
---
title: 为到期任务创建日历视图
description: 在日历上直观展示你的任务和截止日期。
---
<img src="/images/user-guide/views/calendar-view-zoom.png" style={{width:'100%'}} />
## 先决条件
你的 Tasks 对象需要一个 **Due Date** 字段(Date 或 Date & Time 类型)。
## 步骤
1. 导航到 **Tasks**
2. 单击视图下拉菜单 → **+ 添加视图**
3. 为视图命名(例如:“任务日历”)
4. 单击 **创建**
5. 单击 **选项**,并选择 **日历** 作为布局
6. 选择 **Due Date** 作为日期字段
7. 单击 **保存**
## 配置日历
### 在事件中显示字段
1. 单击 **选项 → 字段**
2. 单击 **眼睛图标** 以显示/隐藏字段
3. 拖动以重新排序
建议显示的字段:
* **Title** — 任务名称
* **Assignee** — 负责人
* **Status** — 当前进度
### 筛选日历
创建聚焦视图:
* **My Tasks**:按 Assignee = Me 筛选
* **本周**:按到期日期筛选 = 本周
* **逾期**:按到期日期筛选 < 今天,状态 ≠ 已完成
## 其他日历使用场景
| 对象 | 日期字段 | 目的 |
| ----- | ---- | -------- |
| 机会 | 关闭日期 | 跟踪预计关闭时间 |
| 自定义事件 | 事件日期 | 规划活动 |
| 项目 | 截止日期 | 监控项目时间线 |
## 提示
* **每周回顾**:每周开始时先检查您的日历视图
* **与表格视图结合**:使用日历查看概览,用表格查看详细信息
* **设置可见性**:将个人任务日历设为未列出
## 相关内容
* [日历视图](/l/zh/user-guide/views-pipelines/capabilities/calendar-view) — 所有日历功能
* [筛选与排序](/l/zh/user-guide/views-pipelines/capabilities/filters-and-sorting) — 筛选您的日历

View File

@@ -0,0 +1,80 @@
---
title: 为项目创建看板视图
description: 使用可视化看板按阶段跟踪项目。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
使用看板视图将您的项目(或任何具有阶段的对象)可视化为在列间移动的卡片。
<VimeoEmbed videoId="927888627" title="视频演示" />
## 先决条件
您的对象需要一个用作列的 **选择字段**(例如:状态、阶段、环节)。
如果您还没有:
1. 进入 **设置 → 数据模型**
2. 选择你的对象
3. 添加一个包含阶段选项的选择字段
## 步骤
1. 导航到您的对象(例如:项目、任务)
2. 单击视图下拉菜单 → **+ 添加视图**
3. 为视图命名(例如:“项目看板”)
4. 单击 **创建**
5. 单击 **选项**,并选择 **看板** 作为布局
6. 该视图会自动使用您的选择字段作为列
7. 单击 **保存**
## 配置您的看板
### 在卡片上显示关键字段
1. 点击 **选项 → 字段**
2. 在 "隐藏字段" 部分查找字段
3. 单击 **眼睛图标** 以在卡片上显示它们
4. 拖动以重新排序
<img src="/images/user-guide/kanban-views/filter.png" style={{width:'100%'}} />
### 启用紧凑视图
用于高层概览:
1. 单击 **选项**
2. 开启 **紧凑视图**
卡片仅显示记录名称。
<img src="/images/user-guide/kanban-views/compact-view.png" style={{width:'100%'}} />
### 添加聚合
在每列顶部显示计数或总计:
1. 单击列名旁边的数字
2. 选择一种聚合(计数、求和等)
3. 如有需要,选择一个字段
## 移动卡片
在列之间拖放卡片以更新其状态。
<VimeoEmbed videoId="927888627" title="视频演示" />
## 示例:任务看板
| 列(状态) | 卡片 |
| ------- | ------ |
| **待办** | 新任务 |
| **进行中** | 进行中的工作 |
| **审核** | 等待批准 |
| **已完成** | 已完成 |
## 相关内容
* [看板视图](/l/zh/user-guide/views-pipelines/capabilities/kanban-views) — 聚合、紧凑视图、阶段
* [如何设置销售管道](/l/zh/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline) — 用于商机的看板

View File

@@ -0,0 +1,51 @@
---
title: 创建带分组的表格视图
description: 按字段值将记录组织为可折叠的分组。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
使用 Select 字段对表格视图进行分组,将记录组织到可折叠的部分。
<img src="/images/user-guide/table-views/table-group-by.png" style={{width:'100%'}} />
## 步骤
1. 导航到对象(人员、公司等)
2. 单击视图下拉菜单 → **+ 添加视图**
3. 为视图命名(例如:“按类型的公司”)
4. 单击 **创建**
5. 单击 **选项 → 分组**
6. 选择一个 Select 字段进行分组
7. 单击 **保存**
## 配置分组顺序
在 **选项 → 分组 → 排序** 下,选择分组的排序方式:
| 选项 | 描述 |
| --------- | ----------------- |
| **按字母顺序** | A 到 Z |
| **逆字母顺序** | Z 到 A |
| **手动排序** | 在“可见分组”下拖动分组以重新排序 |
单击组旁的 **眼睛图标**,将其从视图中隐藏。
<Note>
**为获得最佳性能,请将可见分组限制在 10-15 个。** 如果需要更多,建议改用仪表板。
</Note>
## 示例:按行业分类的公司
1. 前往 **公司**
2. 创建一个名为“按行业”的新视图
3. 单击 **选项 → 分组**
4. 选择 **行业** 字段
5. 保存
现在,您的公司已按行业组织,便于一次专注于一个细分市场。
## 相关内容
* [表格视图](/l/zh/user-guide/views-pipelines/capabilities/table-views) — 所有表格视图功能
* [筛选和排序](/l/zh/user-guide/views-pipelines/capabilities/filters-and-sorting) — 将分组与筛选结合使用

View File

@@ -0,0 +1,32 @@
---
title: 限制对您的视图的访问
description: 控制谁可以查看你的自定义视图。
---
每个视图(默认的 "All [Object Name]" 视图除外)都有其自己的可见性设置。
## 步骤
1. 打开你想要限制的视图
2. 点击右上角的 **选项**
3. 点击 **可见性**
4. 选择 **未列出**
你的视图现在仅对你可见。
## 可见性选项
| 设置 | 谁可以查看 |
| ------- | ------- |
| **工作区** | 所有工作区成员 |
| **未列出** | 仅你 |
## 备注
* 默认的 "All [Object Name]" 视图无法设为未列出
* 未列出的视图不会出现在其他用户的视图下拉菜单中
* 你可以随时将可见性改回工作区
## 相关
* [视图设置](/l/zh/user-guide/views-pipelines/capabilities/view-settings) — 所有视图配置选项

View File

@@ -0,0 +1,120 @@
---
title: 设置销售管道
description: 配置您的销售管道,以通过各个阶段跟踪机会。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
在 Twenty 中,销售管道是您的机会对象的看板视图,其中每一列代表销售流程中的一个阶段。
## 步骤 1:配置您的阶段
阶段在“机会”对象的 **Stage** 字段中定义。
1. 进入 **设置 → 数据模型**
2. 选择 **机会**
3. 找到并单击 **Stage** 字段
4. 添加、删除或重命名阶段以匹配您的流程
<VimeoEmbed videoId="927890428" title="视频演示" />
### 推荐阶段
| 阶段 | 目的 |
| ------ | -------- |
| **新** | 刚识别出的新机会 |
| **合格** | 已确认契合良好 |
| **会议** | 已展开讨论 |
| **提案** | 已发送提案 |
| **谈判** | 正在协商条款 |
| **赢单** | 交易成功 |
| **丢单** | 交易失败 |
<Note>
**5-7个阶段是最佳的。** 太多的阶段使管道难以扫描;在交易进度中失去可见度太少。
</Note>
## 步骤 2:创建管道视图
1. 前往 **机会**
2. 单击视图下拉菜单 → **+ 添加视图**
3. 将其命名为 "销售管道"
4. 单击 **创建**
5. 打开 **选项**,并选择 **看板** 作为布局
该视图会自动使用 Stage 字段作为列。
## 步骤 3:配置您的视图
### 显示关键字段
1. 单击 **选项 → 字段**
2. 在 "隐藏字段" 部分查找字段
3. 单击 **眼睛图标** 以显示:Company、Amount、Close Date、Owner
### 启用聚合
在每列顶部显示总计:
1. 单击列顶部显示在某个 Stage 名称旁边的数字
2. 选择聚合类型(计数、求和、平均值等)
3. 选择要聚合的字段(例如,Amount)
**示例:** 通过对 Amount 字段进行求和,显示每个阶段的交易总金额。
### 使用紧凑视图(可选)
若需以更少卡片内容获得高层次概览:
1. 单击 **选项**
2. 打开 **紧凑视图** 开关
## 步骤 4:创建个人和团队视图
### "我的管道"
* **筛选**:Owner = Me
* **可见性**:未列出(个人视图)
### "团队管道"
* **筛选**:无(显示全部)
* **可见性**:工作区(共享视图)
### "本月关闭"
* **类型**:表格
* **筛选**:Close Date = This month,Stage ≠ Closed Won,Stage ≠ Closed Lost
* **排序**:Close Date 升序
## 处理机会
### 创建机会
* 在“机会”视图中单击 **+ 新建**
* 或在特定阶段的列中单击 **+**
### 在各阶段间移动
在列之间拖放机会卡片以更新其阶段。
<VimeoEmbed videoId="927888627" title="视频演示" />
## 最佳实践
### 管道卫生
* 随进展每日更新交易
* 及时移动或关闭停滞的交易
* 确保关闭日期切合实际
### 阶段纪律
* 为每个阶段定义清晰的判定标准
* 当满足标准时及时移动交易
* 不要让交易在阶段中停留过久
## 相关内容
* [看板视图](/l/zh/user-guide/views-pipelines/capabilities/kanban-views) — 聚合与紧凑视图
* [筛选与排序](/l/zh/user-guide/views-pipelines/capabilities/filters-and-sorting) — 创建筛选视图

View File

@@ -0,0 +1,149 @@
---
title: 在您的销售管道中显示预期金额
description: 根据阶段概率计算并显示加权交易金额。
---
预期金额是一个计算值:**Amount × Probability**。 这有助于根据成交可能性为交易加权,从而预测收入。
<Tip>
这是使用工作流创建[公式字段](/l/zh/user-guide/workflows/how-tos/crm-automations/formula-fields)的示例。
</Tip>
本指南将引导您设置在管道中计算并显示预期金额所需的自定义字段和工作流。
## 步骤 1:创建自定义字段
您需要在商机对象上创建两个自定义字段。
### 创建 Probability 字段
1. 前往 **设置 → 数据模型 → 商机**
2. 点击 **+ 添加字段**
3. 配置:
* **名称**:Probability
* **类型**:数字
* **描述**:基于阶段的概率(0–100%)
4. 单击 **保存**
### 创建 Expected Amount 字段
1. 点击 **+ 添加字段**
2. 配置:
* **名称**:Expected Amount
* **类型**:货币
* **描述**:计算值:Amount × Probability
3. 单击 **保存**
### 可选:将字段设置为对用户只读
如果您不希望用户手动编辑这些计算字段:
1. 转到 **设置 → 成员 → 角色**
2. 选择要配置的角色
3. 找到商机对象
4. 将 **Probability** 和 **Expected Amount** 字段设为只读
这可确保只有工作流可以更新这些值。
## 步骤 2:创建工作流 #1 — 阶段变更时更新 Probability
当商机进入新阶段时,此工作流会自动设置 Probability。
### 创建工作流
1. 前往 **工作流**
2. 点击 **+ 新建工作流**
3. 将其命名为 "Update Probability on Stage Change"
### 配置触发器
1. 添加一个 **Record Created or Updated** 触发器
2. 选择 **Opportunities** 作为对象
3. 筛选条件:**Stage** 字段已更新
### 为每个阶段添加分支
为每个阶段创建一个分支,并设置相应的概率:
| 阶段 | 概率 |
| ------- | ---- |
| 新 | 10% |
| 合格 | 25% |
| 会议 | 40% |
| 提案 | 60% |
| 谈判 | 80% |
| 已成交(赢单) | 100% |
| 已关闭(丢单) | 0% |
<Note>
要创建新分支,在工作流画布上单击右键,然后点击 **新建操作**。 然后,从上一个节点拖动箭头到此新操作,将其与前一个节点连接。
</Note>
对于每个阶段:
1. 添加一个 **筛选** 节点:Stage = [阶段名称]
2. 添加一个 **更新记录** 操作:
* 记录:触发的商机
* 字段:Probability
* 值:[该阶段的概率]
### 计算 Expected Amount
在分支汇合之后:
1. 添加一个 **筛选** 节点:Amount 不为空
2. 添加一个 **更新记录** 操作:
* 记录:触发的商机
* 字段:Expected Amount
* 值:Amount × Probability
## 步骤 3:创建工作流 #2 — 当 Amount 发生变化时重新计算
当交易的 Amount 更改时,此工作流会更新 Expected Amount。
### 创建工作流
1. 前往 **工作流**
2. 点击 **+ 新建工作流**
3. 将其命名为 "Recalculate Expected Amount on Amount Change"
### 配置触发器
1. 添加一个 **Record Created or Updated** 触发器
2. 选择 **Opportunities** 作为对象
3. 筛选条件:**Amount** 字段已更新
### 添加逻辑
1. 添加一个 **筛选** 节点:Amount 不为空
2. 添加一个 **更新记录** 操作:
* 记录:触发的商机
* 字段:Expected Amount
* 值:Amount × Probability
## 步骤 4:在您的管道中显示
现在在看板视图中显示 Expected Amount 的总计:
1. 打开您的 **销售管道** 看板视图
2. 点击列顶部任一阶段名称旁的**数字**
3. 选择 **求和**
4. 选择 **Expected Amount**
现在,每列都会显示该阶段的加权管道总值。
## 摘要
| 组件 | 用途 |
| ---------------------- | ------------------------------------------------ |
| **Probability 字段** | 存储基于阶段的赢单概率 |
| **Expected Amount 字段** | 存储 Amount × Probability |
| **工作流 #1** | 当 Stage 变化时更新 Probability,然后重新计算 Expected Amount |
| **工作流 #2** | 当 Amount 变化时重新计算 Expected Amount |
| **聚合** | 按阶段显示 Expected Amount 的求和 |
## 相关内容
* [公式字段](/l/zh/user-guide/workflows/how-tos/crm-automations/formula-fields) — 使用工作流创建计算字段
* [看板视图](/l/zh/user-guide/views-pipelines/capabilities/kanban-views) — 列聚合
* [如何创建自定义字段](/l/zh/user-guide/data-model/how-tos/create-custom-fields) — 字段配置

View File

@@ -0,0 +1,231 @@
---
title: 跟踪商机在各阶段停留的时长
description: 通过跟踪商机进入各阶段的时间来监控交易速度。
---
<Tip>
这是一个使用工作流创建[公式字段](/l/zh/user-guide/workflows/how-tos/crm-automations/formula-fields)的示例——具体为日期计算。
</Tip>
跟踪商机进入各阶段的时间有助于识别瓶颈并衡量交易速度。
本指南将引导你设置自定义字段和一个工作流,以自动记录商机进入各阶段的时间,并计算其在上一个阶段停留的天数。
## 步骤 1:创建自定义字段
每个阶段需要两种字段:
* **日期与时间字段**:记录商机进入各阶段的时间
* **数字字段**:存储商机在各阶段停留的天数
### 创建“最近进入”字段
1. 进入 **设置 → 数据模型 → 商机**
2. 针对每个阶段,点击 **+ 添加字段** 并进行配置:
* **名称**:最近进入[阶段名称](例如:"最近进入 新建"、"最近进入 已合格")
* **类型**:日期与时间
* **描述**:商机进入此阶段的时间戳
3. 单击 **保存**
创建以下字段:
* 最近进入 新建
* 最近进入 已合格
* 最近进入 会面
* 最近进入 提案
* 最近进入 谈判
* 最近进入 赢单
* 最近进入 输单
### 创建“阶段停留天数”字段
1. 针对每个阶段,点击 **+ 添加字段** 并进行配置:
* **名称**:[阶段名称]停留天数(例如:"新建停留天数"、"已合格停留天数")
* **类型**:数字
* **描述**:在此阶段停留的天数
2. 单击 **保存**
创建以下字段:
* 新建停留天数
* 已合格停留天数
* 会面停留天数
* 提案停留天数
* 谈判停留天数
<Note>
赢单和输单为最终阶段,因此无需创建“停留天数”字段。
</Note>
### 可选:将字段设为只读
如果不希望用户手动编辑这些计算字段:
1. 转到 **设置 → 成员 → 角色**
2. 选择要配置的角色
3. 找到商机对象
4. 将“最近进入”和“停留天数”字段设置为只读
## 步骤 2:创建工作流
此单个工作流同时处理两项任务:
* 记录进入新阶段的时间戳
* 计算在上一个阶段停留的天数
### 创建工作流
1. 进入 **工作流**
2. 点击 **+ 新建工作流**
3. 命名为"跟踪阶段时长"
### 配置触发器
1. 添加一个**记录已更新**触发器
2. 将对象选择为**商机**
3. 筛选条件:**阶段**字段已更新
### 为每个阶段添加分支
<Note>
要创建新分支,在工作流画布上右键点击并选择 **新建操作**。 然后,从上一个节点拖动箭头到此新操作,将其与上一个节点连接。
</Note>
---
**分支 1:阶段 = 新建(第一阶段)**
由于这是第一个阶段,只会记录进入时间戳——没有前一个阶段可用于计算。
1. 添加一个**筛选**节点:阶段 = 新建
2. 添加一个**代码**操作:
```javascript
export const main = async (): Promise<object> => {
return { now: new Date().toISOString() };
};
```
3. 添加一个**更新记录**操作:
* 记录:触发的商机
* 字段:最近进入 新建
* 值:来自代码节点的`now`
---
**分支 2:阶段 = 已合格**
当进入“已合格”阶段时,同时记录进入时间并计算在“新建”阶段停留的天数。
1. 添加一个**筛选**节点:阶段 = 已合格
2. 添加一个**代码**操作:
```javascript
export const main = async (params: {
lastEnteredPreviousStage: Date;
}): Promise<object> => {
const { lastEnteredPreviousStage } = params;
const now = new Date();
const entryDate = new Date(lastEnteredPreviousStage);
const diffTime = Math.abs(now.getTime() - entryDate.getTime());
const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
return {
now: now.toISOString(),
daysInPreviousStage: daysInPreviousStage
};
};
```
3. 配置代码节点输入:将`lastEnteredPreviousStage`映射到**最近进入 新建**字段
4. 添加一个**更新记录**操作:
* 记录:触发的商机
* 要更新的字段:
* 最近进入 已合格 = `now`
* 新建停留天数 = `daysInPreviousStage`
---
**分支 3:阶段 = 会面**
当进入“会面”阶段时,同时记录进入时间并计算在“已合格”阶段停留的天数。
1. 添加一个**筛选**节点:阶段 = 会面
2. 添加一个**代码**操作:
```javascript
export const main = async (params: {
lastEnteredPreviousStage: Date;
}): Promise<object> => {
const { lastEnteredPreviousStage } = params;
const now = new Date();
const entryDate = new Date(lastEnteredPreviousStage);
const diffTime = Math.abs(now.getTime() - entryDate.getTime());
const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
return {
now: now.toISOString(),
daysInPreviousStage: daysInPreviousStage
};
};
```
3. 配置代码节点输入:将`lastEnteredPreviousStage`映射到**最近进入 已合格**字段
4. 添加一个**更新记录**操作:
* 记录:触发的商机
* 要更新的字段:
* 最近进入 会面 = `now`
* 已合格停留天数 = `daysInPreviousStage`
---
**对剩余阶段继续如下操作:**
| 阶段 | 记录 | 计算 |
| -- | ------- | ------ |
| 提案 | 最近进入 提案 | 会面停留天数 |
| 谈判 | 最近进入 谈判 | 提案停留天数 |
| 赢单 | 最近进入 赢单 | 谈判停留天数 |
| 输单 | 最近进入 输单 | 谈判停留天数 |
各分支无需合并——当满足其阶段条件时,各自独立运行。
## 步骤 3:分析阶段时长
在记录了时间戳和天数后,你现在可以分析交易速度。
### 创建“慢速交易”视图
1. 创建商机的表格视图
2. 添加列:名称、阶段、[上一阶段]停留天数、金额
3. 按“停留天数”字段排序(降序)
4. 按阶段筛选,以便一次专注一个阶段
位于顶部的交易在上一阶段停留时间最长。
### 使用汇总
在你的销售管道看板视图中:
1. 点击阶段名称旁的数字
2. 选择**平均值**
3. 选择一个“停留天数”字段
即可显示交易在各阶段的平均停留时间。
## 摘要
| 组件 | 用途 |
| ------------ | ------------- |
| **“最近进入”字段** | 存储商机进入各阶段的时间 |
| **“停留天数”字段** | 存储在各阶段停留的天数 |
| **工作流** | 一次性记录时间戳并计算天数 |
| **视图与汇总** | 分析交易速度并识别瓶颈 |
## 相关内容
* [工作流](/l/zh/user-guide/workflows/overview) — 自动化基础
* [如何创建自定义字段](/l/zh/user-guide/data-model/how-tos/create-custom-fields) — 字段配置
* [看板视图](/l/zh/user-guide/views-pipelines/capabilities/kanban-views) — 汇总