> ## Documentation Index
> Fetch the complete documentation index at: https://docs.get-clara.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# 跟踪商机在各阶段停留的时长

> 通过跟踪商机进入各阶段的时间来监控交易速度。

<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 theme={null}
export const main = async (): Promise<object> => {
  return { now: new Date().toISOString() };
};
```

3. 添加一个**更新记录**操作：
   * 记录：触发的商机
   * 字段：最近进入 新建
   * 值：来自代码节点的`now`

***

**分支 2：阶段 = 已合格**

当进入“已合格”阶段时，同时记录进入时间并计算在“新建”阶段停留的天数。

1. 添加一个**筛选**节点：阶段 = 已合格
2. 添加一个**代码**操作：

```javascript theme={null}
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 theme={null}
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) — 汇总
