Marketing Cloud Next | Decision으로 조건에 따라 이메일 발송 경로 나누기
Decision은 Flow에 들어온 사람마다 속성을 보고 서로 다른 분기(Outcome)로 보내는 요소입니다.
Marketing Cloud Next(MCN)의 세그먼트로 시작하는 Flow에서는 직함·생일 같은 값으로 분기를 나누고, 분기마다 다른 메일을 연결합니다.
이 글에서는 분기 셋과 기본 분기를 가진 Decision을 만들어 실행하고, 분기별 실행 건수를 SQL로 셉니다. 빈 값을 조건에 쓸 때 주의할 점 두 가지도 함께 봅니다.
준비할 것: 게시한 세그먼트(006 세그먼트)로 시작하는 Flow와, 조건에 쓸 필드가 들어 있는 Data Graph입니다. 통합 개인은 004 오브젝트에서 설명합니다.
끝났을 때 확인할 것: Data Cloud Query Editor의 SQL 결과(branch, runs)에서 분기별 실행 건수의 합이 Flow에 들어온 대상 수와 같은지 확인합니다.
Data Graph 선택
Decision 조건에 사람별 속성을 쓰려면 Flow 속성에서 Data Graph를 먼저 고릅니다.
Data Graph는 통합 개인(Unified Individual)을 중심으로 Flow가 읽을 오브젝트와 필드를 미리 묶어 둔 데이터입니다.
Flow Builder 툴바의 톱니 단추(View properties)를 누르면 Edit version properties 창이 열립니다. 이 창의 Data Graph 칸에서 그래프를 고르고 Done을 누릅니다.
그래프를 고르지 않으면 조건 목록에 그래프 오브젝트가 나오지 않습니다. 조건을 만든 뒤 그래프를 비우고 저장하면 InvalidDraft로 저장되고, 오류 목록에 "A data graph is required when using aggregation conditions." 가 뜹니다.

조건에 쓸 필드는 그래프에 미리 넣어 둡니다. 만드는 법은 참고 문서의 Create a Data Graph에 있습니다.
조건 입력
조건은 WHERE로 대상 레코드를 고른 뒤, 그 개수를 Count로 비교하는 순서로 읽습니다.
Data Graph는 한 사람에게 여러 레코드가 연결될 수 있는 구조라서, 조건도 "조건을 만족하는 레코드가 몇 개인가"로 씁니다. 그래서 한 조건은 "그래프의 오브젝트가 1개 이상 있고, 그 오브젝트가 WHERE 조건을 만족한다"는 두 겹으로 보입니다. 화면에서 기본 분기는 Default Outcome으로 표시됩니다.
1. Decision 요소를 넣습니다
캔버스의 + 단추를 누르고 Decision을 검색합니다. 목록 맨 위의 Einstein Decision이 아니라 그 아래의 Decision을 고릅니다.

2. 분기의 조건을 채웁니다
Resource에서 그래프의 오브젝트(예: Unified Link Individual > Individual)를 고르면 Function(Count 등)과 비교 칸이 생깁니다. 그 아래 WHERE 행에서 대상 레코드를 고르는 필드, 연산자, 값을 넣습니다.

연산자는 필드 종류마다 정해져 있습니다. 텍스트는 7개, 날짜는 8개이고, 일반 Flow 문서에 있는 Is Today, Last Number of Days 같은 상대 날짜 연산자는 없습니다.


오늘을 기준으로 비교하려면 Value 칸을 누르고 Global Variables의 Running Flow Interview에서 CurrentDate를 고릅니다. 아래 빈 값 시험은 생일 필드가 CurrentDate보다 이른지를 Less Than으로 비교한 것이며, 오늘이 생일인 사람을 찾는 조건이 아닙니다.
3. 조건을 묶는 방식을 고릅니다
분기 하나에 조건이 둘 이상이면 Condition Requirements to Execute Outcome에서 모두 만족(AND), 하나라도 만족(OR), 직접 쓴 논리(예: (1 OR 2) AND 3) 가운데 하나를 고릅니다.

사용자 정의 논리를 고르면 Condition Logic 칸이 생기고, 조건 번호로 식을 씁니다.

분기 평가 순서
Decision은 분기를 위에서부터 평가하고, 처음 맞는 분기로 보낸 뒤 나머지 분기는 보지 않습니다.
시험 대상 11명은 직함이 _HOT, _COLD, _EXIT, _r11로 끝나는 사람이 1명씩이고 7명은 비어 있습니다. 셋째 분기 "직함에 _ 포함"은 네 명이 만족하지만, 그중 세 명이 앞선 두 분기의 조건에 먼저 해당해서 이 분기로는 한 명만 왔습니다.

이번 실행에서 캔버스의 Total Runs는 Decision마다 11로만 보였고 분기별 실행 건수는 나오지 않았습니다.

넓은 조건은 아래 분기에 둡니다. 이 예는 모든 분기를 다음 Decision으로 이었지만, 실제로는 분기 끝에 메일 요소를 두고, 다음 요소를 두지 않은 분기로 간 사람은 그 자리에서 Flow를 끝냅니다.
빈 값 조건
이번 시험에서 날짜 Less Than은 값이 없는 대상도 만족했으므로, 날짜가 있는 대상만 비교하려면 Is Blank가 False인 조건을 AND로 추가하길 권합니다.
시험 대상 11명 가운데 생일 값이 있는 사람은 1명, 직함이 빈 사람은 7명입니다. 조건을 하나씩 분기에 넣고, 그 조건을 만족한 사람을 셌습니다.
생일 Less Than 조건은 값이 없는 10명을 포함해 11명이 모두 만족했습니다. "값 있음"은 같은 분기에 생일 Is Blank 조건을 하나 더 넣고 값을 False로 둔 것이며, 이 조건을 AND로 묶자 1명만 결과에 포함됐습니다.

직함이 빈 문자열로 들어온 사람은 Is Null 조건을 만족하지 않았고 Is Blank 조건을 만족했습니다. 그래서 "값 없음" 조건에는 Is Null이 아니라 Is Blank를 권합니다.
앞서 같은 구성으로 시험했을 때는 생일 Greater Than 조건을 값이 없는 사람이 만족하지 않았고, Does Not Equal 조건은 값이 없는 사람이 모두 만족했습니다.
텍스트 비교는 일반 Flow 문서에 적힌 대로 대소문자를 구분하지 않습니다. 소문자 _hot으로 Ends With 조건을 입력해도 대문자로 저장된 값을 가진 1명이 결과에 포함됐습니다.
분기별 실행 건수
분기별 실행 건수는 Data Cloud 실행 기록에서 Decision 요소의 레코드를 OutcomePathId로 묶어 세고, 기본 분기는 NULL로 나옵니다.
1. Flow Id를 찾습니다
SQL은 Data Cloud의 Query Editor에서 실행합니다. 먼저 Flow 이름(라벨)으로 Flow DMO를 조회합니다.
SELECT ssot__Id__c
FROM ssot__Flow__dlm
WHERE ssot__Name__c = '<Flow 이름>'
2. 분기별 실행 건수를 셉니다
SELECT o.ssot__Name__c AS branch,
COUNT(*) AS runs
FROM ssot__FlowElementRun__dlm d
JOIN ssot__FlowElement__dlm e
ON d.ssot__FlowElementId__c
= e.ssot__Id__c
LEFT JOIN ssot__FlowElement__dlm o
ON d.ssot__OutcomePathId__c
= o.ssot__Id__c
WHERE e.ssot__Name__c
= 'branch_title'
AND d.ssot__FlowRunId__c IN (
SELECT r.ssot__Id__c
FROM ssot__FlowRun__dlm r
JOIN ssot__FlowVersion__dlm v
ON r.ssot__FlowVersionId__c
= v.ssot__Id__c
WHERE v.ssot__FlowId__c
= '<Flow Id>')
GROUP BY o.ssot__Name__c
이 쿼리는 해당 Flow의 모든 버전에 기록된 실행 기록을 분기별로 세므로, 결과는 인원수가 아니라 실행 건수입니다. 이번 시험에서는 사람마다 한 번씩 실행됐고 조인으로 중복되지도 않아 실행 건수가 인원수와 같았습니다.
같은 사람이 반복 실행됐거나 Flow 버전이 여럿이면 합계가 인원수보다 커질 수 있습니다. 쿼리에는 시간이나 특정 실행을 제한하는 조건이 없으므로, 그때는 FlowVersionId나 FlowRunId 조건을 더해 조회 범위를 제한합니다.
branch_title 자리에 Decision의 API 이름을 넣습니다. 결과의 branch 열은 분기의 Outcome API Name입니다.
branch runs
NULL 7
out_or 2
out_hot 1
out_any 1
실행이 끝나고 약 3~4분 뒤에 Data Cloud에서 실행 기록이 보였습니다. Flow 버전을 저장한 뒤에는 약 19분이 지나서야 분기 정의 레코드(FlowElement)와 버전 레코드(FlowVersion)가 보였습니다. 위 SQL은 두 레코드가 모두 있어야 하므로, 그 전에는 결과가 나오지 않습니다.
앞서 같은 구성으로 시험했을 때 CRM의 요소별 실행 수(FlowRecordElementOccurrence)는 분기에 해당하는 요소의 Entries 값이 비어 있어서 분기별 실행 건수를 셀 수 없었습니다.

실행 기록은 아래 DMO에 남습니다.
| DMO | 레코드 하나의 뜻 | 쓰는 열 |
|---|---|---|
| FlowRun | 한 사람의 실행 | FlowVersionId, FlowRunStatus |
| FlowElementRun | 요소 하나의 실행 | FlowElementId, OutcomePathId, OutcomeId |
| FlowElement | 요소·분기 정의 | Id, Name |
| FlowVersion | Flow 버전 | Id, FlowId |
OutcomePathId는 간 분기의 Id, OutcomeId는 그 분기 다음 요소의 Id입니다. 다음 요소가 없는 분기로 간 사람도 OutcomePathId로 구별됩니다. Flow Id 하나 아래에 모든 버전의 실행이 모이므로, 버전을 나눠 보려면 FlowVersionId로 묶습니다.

참고 문서
'Salesforce > Marketing Cloud' 카테고리의 다른 글
| Marketing Cloud Next | Consent Imports로 이메일 수신 동의 데이터 가져오기 (0) | 2026.10.12 |
|---|---|
| Marketing Cloud Next | Segment Builder로 이메일 발송 대상 선정 (0) | 2026.10.08 |
| Marketing Cloud Next | 오브젝트 구조와 Unified Individual의 역할 (0) | 2026.10.08 |
| Marketing Cloud Next | 발송을 위한 초기 설정 (0) | 2026.10.07 |
| Marketing Cloud Next | 탭 구성과 Marketing Cloud Engagement와의 차이 (0) | 2026.10.06 |