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. 뷰의 이름을 지정하세요(예: "Tasks Calendar")
4. **Create**를 클릭하세요
5. **Options**를 클릭한 다음 레이아웃으로 **Calendar**를 선택하세요
6. 날짜 필드로 **Due Date**를 선택하세요
7. **저장** 클릭
## 캘린더 구성
### 이벤트에 표시할 필드
1. **Options → Fields**를 클릭하세요
2. **눈 아이콘**을 클릭하여 필드를 표시/숨기세요
3. 드래그하여 순서를 변경합니다
표시할 권장 필드:
* **Title** — 작업 이름
* **Assignee** — 담당자
* **Status** — 현재 진행 상태
### 캘린더 필터링
집중된 보기 만들기:
* **My Tasks**: Assignee = Me로 필터링
* **This Week**: Due Date = This week으로 필터링
* **기한 초과**: 마감일 < 오늘, 상태 ≠ 완료로 필터링
## 기타 캘린더 사용 사례
| 객체 | 날짜 필드 | 목적 |
| ---------- | ------ | ------------- |
| 기회 | 마감일 | 예상 마감일을 추적 |
| 사용자 지정 이벤트 | 이벤트 날짜 | 활동을 계획하기 |
| 프로젝트 | 마감일 | 프로젝트 일정을 모니터링 |
## 팁
* **주간 검토**: 매주 캘린더 뷰를 확인하는 것으로 시작하세요
* **테이블 뷰와 함께 사용**: 개요는 캘린더, 세부 정보는 테이블을 사용하세요
* **가시성 설정**: 개인 작업 캘린더는 Unlisted로 유지하세요
## 관련 항목
* [캘린더 뷰](/l/ko/user-guide/views-pipelines/capabilities/calendar-view) — 모든 캘린더 기능
* [필터 및 정렬](/l/ko/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="동영상 시연" />
## 사전 준비
열로 사용할 **Select 필드**가 객체에 필요합니다(예: Status, Stage, Phase).
없다면:
1. **설정 → 데이터 모델**로 이동
2. 객체를 선택하세요
3. 단계 옵션이 있는 Select 필드를 추가하세요
## 단계
1. 객체로 이동하세요(예: 프로젝트, 작업)
2. 뷰 드롭다운에서 → **+ 뷰 추가**를 클릭하세요
3. 뷰의 이름을 지정하세요(예: "Project Board")
4. **Create**를 클릭하세요
5. **Options**를 클릭한 다음 레이아웃으로 **Kanban**을 선택하세요
6. 뷰는 Select 필드를 열로 자동으로 사용합니다
7. **저장** 클릭
## 보드 구성
### 카드에 주요 필드 표시
1. **Options → Fields**를 클릭합니다
2. "Hidden Fields" 섹션에서 필드를 찾으세요
3. **눈 아이콘**을 클릭하여 카드에 표시합니다
4. 드래그하여 순서를 변경합니다
<img src="/images/user-guide/kanban-views/filter.png" style={{width:'100%'}} />
### 컴팩트 보기 활성화
상위 수준에서 확인하려면:
1. **Options**를 클릭하세요
2. **Compact view** 토글을 켜세요
카드에는 레코드 이름만 표시됩니다.
<img src="/images/user-guide/kanban-views/compact-view.png" style={{width:'100%'}} />
### 집계 추가
각 열 상단에 개수 또는 합계를 표시합니다:
1. 열 이름 옆의 숫자를 클릭하세요
2. 집계(Count, Sum 등)를 선택하세요
3. 필요하면 필드를 선택하세요
## 카드 이동
열 사이로 카드를 드래그 앤 드롭하여 상태를 업데이트하세요.
<VimeoEmbed videoId="927888627" title="동영상 시연" />
## 예시: 작업 보드
| 열(상태) | 카드 |
| -------- | -------- |
| **할 일** | 새 작업 |
| **진행 중** | 진행 중인 작업 |
| **검토** | 승인 대기 중 |
| **완료** | 완료됨 |
## 관련 항목
* [칸반 보기](/l/ko/user-guide/views-pipelines/capabilities/kanban-views) — 집계, 컴팩트 보기, 단계
* [영업 파이프라인 설정 방법](/l/ko/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/ko/user-guide/views-pipelines/capabilities/table-views) — 모든 테이블 뷰 기능
* [필터 및 정렬](/l/ko/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/ko/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. **Opportunities**를 선택하세요
3. **Stage** 필드를 찾아 클릭하세요
4. 프로세스에 맞게 단계를 추가, 제거 또는 이름 변경하세요
<VimeoEmbed videoId="927890428" title="동영상 시연" />
### 권장 단계
| 단계 | 목적 |
| --------------- | ------------ |
| **New** | 방금 식별된 신규 기회 |
| **Qualified** | 적합한 것으로 확인됨 |
| **Meeting** | 논의 진행 중 |
| **Proposal** | 제안서 발송됨 |
| **Negotiation** | 조건 협의 중 |
| **Closed Won** | 거래 성사 |
| **Closed Lost** | 거래 실패 |
<Note>
**5-7개 단계가 최적입니다.** 단계가 너무 많으면 파이프라인을 한눈에 파악하기 어렵고, 너무 적으면 거래 진행 상황의 가시성이 떨어집니다.
</Note>
## 2단계: 파이프라인 보기 만들기
1. **Opportunities**로 이동
2. 뷰 드롭다운에서 → **+ 뷰 추가**를 클릭하세요
3. "Sales Pipeline"으로 이름을 지정하세요
4. **Create**를 클릭하세요
5. **Options**을 열고 레이아웃으로 **Kanban**을 선택하세요
해당 보기는 열로 Stage 필드를 자동으로 사용합니다.
## 3단계: 보기 구성
### 핵심 필드 표시
1. **Options → Fields**를 클릭하세요
2. "Hidden Fields" 섹션에서 필드를 찾으세요
3. 눈 모양 아이콘을 클릭하여 다음을 표시하세요: Company, Amount, Close Date, Owner
### 집계 사용
각 열 상단에 합계를 표시합니다:
1. 열 상단의 Stage 이름 옆에 표시된 숫자를 클릭하세요
2. 집계 유형(Count, Sum, Average 등)을 선택하세요
3. 집계할 필드(예: Amount)를 선택하세요
**예시:** Amount를 Sum으로 집계하여 단계별 총 거래 금액을 표시합니다.
### Compact View 사용(선택 사항)
카드 내용을 최소화하고 한눈에 개요를 보려면:
1. **Options**를 클릭하세요
2. **Compact view** 토글을 켜세요
## 4단계: 개인 및 팀 보기 만들기
### "My Pipeline"
* **Filter**: Owner = Me
* **Visibility**: Unlisted (개인용 보기)
### "Team Pipeline"
* **Filter**: None (모두 표시)
* **Visibility**: Workspace (공유 보기)
### "Closing This Month"
* **Type**: Table
* **Filter**: Close Date = This month, Stage ≠ Closed Won, Stage ≠ Closed Lost
* **Sort**: Close Date ascending
## 기회 다루기
### 기회 만들기
* Opportunities 보기에서 **+ New**를 클릭하세요
* 또는 특정 단계 열에서 \*\*+\*\*를 클릭하세요
### 단계 진행
열 사이로 기회 카드를 드래그 앤 드롭하여 단계를 업데이트하세요.
<VimeoEmbed videoId="927888627" title="동영상 시연" />
## 모범 사례
### 파이프라인 위생 관리
* 거래 진행 상황을 매일 업데이트하세요
* 오래된 거래는 신속히 이동하거나 종료하세요
* 종결일을 현실적으로 유지하세요
### 단계 규율
* 각 단계에 대한 명확한 기준을 정의하세요
* 기준이 충족되면 거래를 신속히 이동하세요
* 거래가 단계에 너무 오래 머물지 않도록 하세요
## 관련 항목
* [칸반 보기](/l/ko/user-guide/views-pipelines/capabilities/kanban-views) — 집계 및 컴팩트 보기
* [필터 및 정렬](/l/ko/user-guide/views-pipelines/capabilities/filters-and-sorting) — 필터된 보기 만들기

View File

@@ -0,0 +1,149 @@
---
title: 파이프라인에서 예상 금액 표시하기
description: 단계별 확률을 기준으로 거래 금액에 가중치를 적용하여 계산하고 표시합니다.
---
예상 금액은 계산된 값입니다: **Amount × Probability**. 이는 거래의 성사 가능성에 따른 가중치를 적용해 매출을 예측하는 데 도움이 됩니다.
<Tip>
이는 워크플로를 사용하여 [수식 필드](/l/ko/user-guide/workflows/how-tos/crm-automations/formula-fields)를 만드는 예시입니다.
</Tip>
이 가이드는 파이프라인에서 예상 금액을 계산하고 표시하는 데 필요한 사용자 정의 필드와 워크플로를 설정하는 방법을 안내합니다.
## 1단계: 사용자 정의 필드 생성
Opportunities 객체에 사용자 정의 필드 두 개가 필요합니다.
### Probability 필드 만들기
1. **Settings → Data Model → Opportunities**로 이동합니다.
2. **+ 필드 추가**를 클릭합니다.
3. 구성:
* **이름**: Probability
* **유형**: 숫자
* **설명**: 단계 기반 확률(0~100%)
4. **저장** 클릭
### Expected Amount 필드 만들기
1. **+ 필드 추가**를 클릭합니다.
2. 구성:
* **이름**: Expected Amount
* **유형**: 통화
* **설명**: 계산식: Amount × Probability
3. **저장** 클릭
### 선택 사항: 사용자에 대해 필드를 읽기 전용으로 설정
사용자가 이러한 계산된 필드를 수동으로 편집하지 못하게 하려면:
1. **설정 → 구성원 → 역할**로 이동하세요
2. 구성할 역할을 선택합니다.
3. Opportunities 객체를 찾습니다.
4. **Probability** 및 **Expected Amount** 필드를 읽기 전용으로 설정합니다.
이렇게 하면 워크플로만 이러한 값을 업데이트할 수 있습니다.
## 2단계: 워크플로 #1 만들기 — 단계 변경 시 Probability 업데이트
이 워크플로는 Opportunities 레코드가 새 단계로 이동할 때 Probability를 자동으로 설정합니다.
### 워크플로 만들기
1. **Workflows**로 이동합니다.
2. **+ New Workflow**를 클릭합니다.
3. 이름을 "Update Probability on Stage Change"로 지정합니다.
### 트리거 구성
1. **Record Created or Updated** 트리거를 추가합니다.
2. 객체로 **Opportunities**를 선택합니다.
3. 다음으로 필터링: **Stage** 필드가 업데이트됨
### 각 단계별 분기 추가
각 단계에 해당 확률로 분기를 만듭니다:
| 단계 | 확률 |
| ----------- | ---- |
| 새로운 | 10% |
| Qualified | 25% |
| Meeting | 40% |
| Proposal | 60% |
| Negotiation | 80% |
| Closed Won | 100% |
| Closed Lost | 0% |
<Note>
새 분기를 만들려면 워크플로 캔버스를 마우스 오른쪽 버튼으로 클릭하고 **New action**을 클릭합니다. 그런 다음 이전 노드에서 이 새 액션으로 화살표를 드래그하여 이전 노드와 연결합니다.
</Note>
각 단계에 대해:
1. **Filter** 노드를 추가합니다: Stage = [단계 이름]
2. **Update Record** 액션을 추가합니다:
* 레코드: 트리거된 Opportunity
* 필드: Probability
* 값: [해당 단계의 확률]
### Expected Amount 계산
분기가 다시 합쳐진 후:
1. **Filter** 노드를 추가합니다: Amount가 비어 있지 않음
2. **Update Record** 액션을 추가합니다:
* 레코드: 트리거된 Opportunity
* 필드: Expected Amount
* 값: Amount × Probability
## 3단계: 워크플로 #2 만들기 — Amount 변경 시 재계산
이 워크플로는 거래의 Amount가 변경될 때 Expected Amount를 업데이트합니다.
### 워크플로 만들기
1. **Workflows**로 이동합니다.
2. **+ New Workflow**를 클릭합니다.
3. 이름을 "Recalculate Expected Amount on Amount Change"로 지정합니다.
### 트리거 구성
1. **Record Created or Updated** 트리거를 추가합니다.
2. 객체로 **Opportunities**를 선택합니다.
3. 다음으로 필터링: **Amount** 필드가 업데이트됨
### 로직 추가
1. **Filter** 노드를 추가합니다: Amount가 비어 있지 않음
2. **Update Record** 액션을 추가합니다:
* 레코드: 트리거된 Opportunity
* 필드: Expected Amount
* 값: Amount × Probability
## 4단계: 파이프라인에 표시
이제 칸반 보기에서 Expected Amount 합계를 표시합니다:
1. Sales Pipeline 칸반 보기를 엽니다.
2. 열 상단의 Stage 이름 옆 숫자를 클릭합니다.
3. **Sum**을 선택합니다.
4. Expected Amount를 선택합니다.
이제 각 열에는 해당 단계의 가중 파이프라인 총액이 표시됩니다.
## 요약
| 구성 요소 | 용도 |
| ---------------------- | ------------------------------------------------------------- |
| **Probability 필드** | 단계 기반 성공 확률을 저장합니다. |
| **Expected Amount 필드** | Amount × Probability 값을 저장합니다. |
| **워크플로 #1** | Stage가 변경되면 Probability를 업데이트하고, 이어서 Expected Amount를 재계산합니다. |
| **워크플로 #2** | Amount가 변경되면 Expected Amount를 재계산합니다. |
| **집계** | 단계별 Expected Amount의 합계를 표시합니다. |
## 관련 항목
* [수식 필드](/l/ko/user-guide/workflows/how-tos/crm-automations/formula-fields) — 워크플로를 사용하여 계산된 필드를 생성
* [칸반 보기](/l/ko/user-guide/views-pipelines/capabilities/kanban-views) — 열 집계
* [사용자 정의 필드 만드는 방법](/l/ko/user-guide/data-model/how-tos/create-custom-fields) — 필드 구성

View File

@@ -0,0 +1,231 @@
---
title: 각 단계에서 영업 기회가 머무는 기간 추적
description: 영업 기회가 각 단계에 진입한 시점을 추적하여 거래 속도를 모니터링하세요.
---
<Tip>
이는 워크플로를 사용해 [수식 필드](/l/ko/user-guide/workflows/how-tos/crm-automations/formula-fields)를 만드는 예시로, 특히 날짜 계산에 관한 내용입니다.
</Tip>
영업 기회가 각 단계에 진입한 시점을 추적하면 병목을 파악하고 거래 속도를 측정할 수 있습니다.
이 가이드는 사용자 정의 필드와 워크플로를 구성하여 영업 기회가 각 단계로 이동한 시점을 자동으로 기록하고, 이전 단계에서 보낸 일수를 계산하는 방법을 안내합니다.
## 1단계: 사용자 정의 필드 생성
각 단계마다 두 가지 유형의 필드가 필요합니다:
* **날짜 및 시간 필드**: 영업 기회가 각 단계에 진입한 시점을 기록
* **숫자 필드**: 영업 기회가 각 단계에서 보낸 일수 저장
### "Last Entered" 필드 생성
1. **설정 → 데이터 모델 → Opportunities**로 이동
2. 각 단계에서 **+ Add Field**를 클릭하고 다음을 구성합니다:
* **Name**: Last Entered [단계 이름] (예: "Last Entered New", "Last Entered Qualified")
* **Type**: Date & Time
* **Description**: 이 단계에 영업 기회가 진입한 시각의 타임스탬프
3. **저장** 클릭
다음 필드를 생성합니다:
* Last Entered New
* Last Entered Qualified
* Last Entered Meeting
* Last Entered Proposal
* Last Entered Negotiation
* Last Entered Closed Won
* Last Entered Closed Lost
### "Days in Stage" 필드 생성
1. 각 단계에서 **+ Add Field**를 클릭하고 다음을 구성합니다:
* **Name**: Days in [단계 이름] (예: "Days in New", "Days in Qualified")
* **Type**: Number
* **Description**: 이 단계에서 보낸 일수
2. **저장** 클릭
다음 필드를 생성합니다:
* Days in New
* Days in Qualified
* Days in Meeting
* Days in Proposal
* Days in Negotiation
<Note>
"Closed Won"과 "Closed Lost"는 마지막 단계이므로 "Days in" 필드는 필요하지 않습니다.
</Note>
### 선택 사항: 필드를 읽기 전용으로 설정
사용자가 이 계산된 필드를 수동으로 편집하지 못하게 하려면:
1. **설정 → 구성원 → 역할**로 이동하세요
2. 구성할 역할을 선택합니다
3. Opportunities 오브젝트를 찾습니다
4. "Last Entered" 및 "Days in" 필드를 읽기 전용으로 설정합니다
## 2단계: 워크플로 생성
이 단일 워크플로가 두 가지 작업을 모두 처리합니다:
* 새 단계에 진입한 시각의 타임스탬프를 기록
* 이전 단계에서 보낸 일수를 계산
### 워크플로 생성
1. **Workflows**로 이동
2. **+ New Workflow**를 클릭
3. "Track Stage Time"으로 이름 지정
### 트리거 구성
1. **Record Updated** 트리거를 추가
2. 오브젝트로 **Opportunities**를 선택
3. 필터: **Stage** 필드가 업데이트됨
### 각 단계에 대한 브랜치 추가
<Note>
새 브랜치를 만들려면 워크플로 캔버스에서 마우스 오른쪽 버튼을 클릭하고 **New action**을 클릭합니다. 그런 다음 이전 노드에서 이 새 액션으로 화살표를 끌어 이전 노드와 이 액션을 연결합니다.
</Note>
---
**브랜치 1: Stage = New(첫 번째 단계)**
첫 번째 단계이므로 이전 단계가 없어 계산할 수 없으므로 진입 타임스탬프만 기록됩니다.
1. **Filter** 노드를 추가: Stage = New
2. **Code** 액션 추가:
```javascript
export const main = async (): Promise<object> => {
return { now: new Date().toISOString() };
};
```
3. **Update Record** 액션 추가:
* Record: 트리거된 Opportunity
* Field: Last Entered New
* Value: Code 노드의 `now`
---
**브랜치 2: Stage = Qualified**
Qualified로 이동할 때 진입 시각을 기록하고 New에서 보낸 일수를 계산합니다.
1. **Filter** 노드 추가: Stage = Qualified
2. **Code** 액션 추가:
```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. Code 노드 입력 구성: `lastEnteredPreviousStage`를 **Last Entered New** 필드에 매핑
4. **Update Record** 액션 추가:
* Record: 트리거된 Opportunity
* 업데이트할 필드:
* Last Entered Qualified = `now`
* Days in New = `daysInPreviousStage`
---
**브랜치 3: Stage = Meeting**
Meeting으로 이동할 때 진입 시각을 기록하고 Qualified에서 보낸 일수를 계산합니다.
1. **Filter** 노드 추가: Stage = Meeting
2. **Code** 액션 추가:
```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. Code 노드 입력 구성: `lastEnteredPreviousStage`를 **Last Entered Qualified** 필드에 매핑
4. **Update Record** 액션 추가:
* Record: 트리거된 Opportunity
* 업데이트할 필드:
* Last Entered Meeting = `now`
* Days in Qualified = `daysInPreviousStage`
---
**나머지 단계 계속:**
| 단계 | 기록 | 계산 |
| ----------- | ------------------------ | ------------------- |
| Proposal | Last Entered Proposal | Days in Meeting |
| Negotiation | Last Entered Negotiation | Days in Proposal |
| Closed Won | Last Entered Closed Won | Days in Negotiation |
| Closed Lost | Last Entered Closed Lost | Days in Negotiation |
브랜치는 다시 합칠 필요가 없습니다. 각 브랜치는 해당 단계 조건이 충족되면 독립적으로 실행됩니다.
## 3단계: 단계 체류 시간 분석
타임스탬프와 일수 기록을 바탕으로 이제 거래 속도를 분석할 수 있습니다.
### "Slow Deals" 보기 만들기
1. Opportunities의 테이블 보기 생성
2. 다음 열을 추가: Name, Stage, Days in [이전 단계], Amount
3. "Days in" 필드로 정렬(내림차순)
4. Stage로 필터링하여 한 번에 한 단계에 집중
상단의 거래가 이전 단계에서 보낸 시간이 가장 깁니다.
### 집계 사용
파이프라인 칸반 보기에서:
1. Stage 이름 옆의 숫자를 클릭합니다
2. **Average**를 선택합니다
3. "Days in" 필드를 선택합니다
그러면 거래가 각 단계에서 보낸 평균 시간이 표시됩니다.
## 요약
| 구성 요소 | 용도 |
| ------------------- | ---------------------------- |
| **Last Entered 필드** | 영업 기회가 각 단계에 진입한 시점을 저장 |
| **Days in 필드** | 각 단계에서 보낸 일수를 저장 |
| **워크플로** | 한 번의 실행으로 타임스탬프를 기록하고 일수를 계산 |
| **보기 및 집계** | 거래 속도를 분석하고 병목을 식별 |
## 관련
* [워크플로](/l/ko/user-guide/workflows/overview) — 자동화 기본
* [사용자 정의 필드 생성 방법](/l/ko/user-guide/data-model/how-tos/create-custom-fields) — 필드 구성
* [칸반 보기](/l/ko/user-guide/views-pipelines/capabilities/kanban-views) — 집계