위치:
flatten Transformation
평면화 변환은 계층적 데이터를 평면화합니다. 예를 들어, Salesforce 역할 계층을 평면화하여 역할 계층을 기반으로 데이터 집합에 행 수준 보안을 구현할 수 있습니다.
평면화 변환을 구성하여 계층을 평면화하려면 계층의 모든 노드를 포함하는 필드와 계층에 기반하는 해당 상위 노드를 포함하는 필드를 지정합니다. 평면화 변환에서는 각 계층 노드에 대해 셀프 ID라고 하는 하나의 레코드를 생성합니다. 각 레코드에 셀프 ID 노드 각각에 대한 계층을 저장하는 두 개의 생성된 열이 포함됩니다. 하나의 열에 계층에 있는 각 노드에 대한 모든 최상위 항목의 쉼표로 구분된 목록이 포함되고, 나머지 하나의 열에 계층 경로가 포함됩니다.
최상위 항목이 저장되는 방식을 확인하려면 다음 평면화된 데이터 집합에서 역할 및 역할 경로 열을 검토하십시오.
| 역할 ID(셀프 ID) | 역할 이름 | 상위 역할 ID | 역할 | 역할 경로 |
|---|---|---|---|---|
| 1 | 판매 담당자 1 | 10 | 10, 20, 30 | \10\20\30 |
| 2 | 판매 담당자 2 | 10 | 10, 20, 30 | \10\20\30 |
| 3 | 판매 담당자 3 | 11 | 11, 20, 30 | \11\20\30 |
| 10 | 지역 관리자 1 | 20 | 20, 30 | \20\30 |
| 11 | 지역 관리자 2 | 20 | 20, 30 | \20\30 |
| 20 | 부사장 1 | 30 | 30 | 30 |
| 21 | 부사장 2 | 30 | 30 | 30 |
| 30 | CEO | 해당 없음 | 해당 없음 | 해당 없음 |
또한 생성된 계층 열에 셀프 ID 노드를 포함하도록 평면화 변환을 구성할 수 있습니다. 다음 데이터 집합에서 셀프 ID가 굵게 표시되어 있습니다.
| 역할 ID(셀프 ID) | 역할 이름 | 상위 역할 ID | 역할 | 역할 경로 |
|---|---|---|---|---|
| 1 | 판매 담당자 1 | 10 | 1, 10, 20, 30 | \1\10\20\30 |
| 2 | 판매 담당자 2 | 10 | 2, 10, 20, 30 | \2\10\20\30 |
| 3 | 판매 담당자 3 | 11 | 3, 11, 20, 30 | \3\11\20\30 |
| 10 | 지역 관리자 1 | 20 | 10, 20, 30 | \10\20\30 |
| 11 | 지역 관리자 2 | 20 | 11, 20, 30 | \11\20\30 |
| 20 | 부사장 1 | 30 | 20, 30 | \20\30 |
| 21 | 부사장 2 | 30 | 21, 30 | \21\30 |
| 30 | CEO | 해당 없음 | 30 | 30 |
평면화가 올바르게 작동하기 위해서는
- 계층 데이터에 순환 종속성이 없어야 합니다. 즉, 상위 노드가 하위 노드를 자신의 상위 노드로 다시 가리키지 않아야 합니다.
- 계층이 완성되어 있어야 합니다. 즉 모든 하위 노드에 상위 노드가 있어야 합니다.
예를 들어 역할 및 역할 경로 값은 계산되지 않습니다.
- 부사장 1, 지역 관리자 1, 판매 담당자 1의 경우, 계층에 순환 종속성이 있으므로 판매 담당자 1이 지역 관리자 1에 보고하고, 지역 관리자 1이 부사장 1에게 보고하고, 부사장이 판매 담당자 1에게 보고합니다.
- 판매 담당자 1과 판매 담당자 2의 경우 계층이 완벽하지 않으므로 지역 관리자 1이 없습니다.
예제를 살펴보십시오. 모든 기회를 포함하는 데이터 집합을 만들 수 있습니다. 각 기회에 대해 기회 담당자에 대한 역할 정보와 사용자를 포함할 수 있습니다. 또한 역할 계층을 기반으로 한 행 수준 보안을 구현하려면 기회 레코드마다 역할 계층을 기반으로 각각의 기회 담당자보다 상위인 모든 최상위 항목의 목록이 포함되어 있어야 합니다. 최상위 항목의 목록을 생성하려면 평면화 변환을 사용하여 역할 계층을 평면화합니다.
다음 데이터 플로 정의 파일을 만듭니다.
{
"Extract_Opportunity": {
"action": "sfdcDigest",
"parameters": {
"object": "Opportunity",
"fields": [
{ "name": "Id" },
{ "name": "Name" },
{ "name": "Amount" },
{ "name": "StageName" },
{ "name": "AccountId" },
{ "name": "OwnerId" }
]
}
},
"Extract_User": {
"action": "sfdcDigest",
"parameters": {
"object": "User",
"fields": [
{ "name": "Id" },
{ "name": "Name" },
{ "name": "Department" },
{ "name": "UserRoleId" }
]
}
},
"Extract_UserRole": {
"action": "sfdcDigest",
"parameters": {
"object": "UserRole",
"fields": [
{ "name": "Id" },
{ "name": "Name" },
{ "name": "ParentRoleId" }
]
}
},
"Flatten_UserRole": {
"action": "flatten",
"parameters": {
"source": "Extract_UserRole",
"self_field": "Id",
"parent_field": "ParentRoleId",
"multi_field": "Roles",
"path_field": "RolePath",
"include_self_id":false
}
},
"Augment_User_FlattenUserRole": {
"action": "augment",
"parameters": {
"left": "Extract_User",
"left_key": [ "UserRoleId" ],
"relationship": "Role",
"right": "Flatten_UserRole",
"right_key": [ "Id" ],
"right_select": [
"Id",
"Name",
"Roles",
"RolePath"
]
}
},
"Augment_Opportunity_UserWithRoles": {
"action": "augment",
"parameters": {
"left": "Extract_Opportunity",
"left_key": [ "OwnerId" ],
"right": "Augment_User_FlattenUserRole",
"relationship": "Owner",
"right_select": [
"Name",
"Department",
"Role.Id",
"Role.Name",
"Role.Roles",
"Role.RolePath"
],
"right_key": [ "Id" ]
}
},
"Register_OpportunityWithRoles_Dataset": {
"action": "sfdcRegister",
"parameters": {
"alias": "OppRoles",
"name": "OppRoles",
"source": "Augment_Opportunity_UserWithRoles",
"rowLevelSecurityFilter": "'Owner.Role.Roles' == \"$User.UserRoleId\" || 'OwnerId'
== \"$User.Id\""
}
}
}
Salesforce 역할 계층을 평면화하기 위해 평면화 변환에서 UserRole 개체의 다음 입력 필드를 사용합니다.
- ID - ID는 Salesforce 역할 계층에 있는 노드를 각각 식별합니다.
- ParentRoleId - ParentRoleId는 역할 계층에 정의된 대로 상위 항목을 식별합니다.
UserRole 개체에서 각각의 상위-하위 관계를 탐색하고 나면 평면화 변환을 통해 역할 ID마다 하나의 레코드가 생성됩니다. 각각의 레코드에 계층에 있는 각 노드에 대한 최상위 역할이 모두 포함됩니다. 평면화 변환에서 역할 및 역할 경로와 같은 두 가지 출력 열을 생성하여 각 역할에 해당하는 최상위 역할을 모두 저장합니다.
- flatten Transformation 매개 변수
평면화 변환을 정의할 때 작업 특성을flatten Transformation로 설정하고 매개 변수를 지정합니다.
