작성일자 : 2023-11-06
Ver 0.1.1
1. Intro
SFDC(Salesforce) 와 Tableau 프로젝트를 동시에 진행하는 경우, SFDC의 데이터들(Object)을(를) Tableau Destkop에 직접 연결하여 대시보드를 개발하는 경우가 흔하다.
물론 이렇게 SFDC의 Object를 직접 연결하는 경우, Object의 Fomula Fields 나 Lookup 필드를 자유롭게 불러올 수 없다는 제한점이 있다. 이러한 제한점을 해결하기 위해서 1) API를 개발하여 RDB로 Interface 하여 RDB을 Tableau의 데이터 원본으로 연결 하거나 2) Fomular Fields를 동일하게 Tableau 에서 구현하거나 3) Lookup은 참고하는 Objects를 모두 Modeling에 연결하여 제한점을 해결 하거나 비교적 간단한 모델링의 경우 lookup 관계를 이용한 쿼리를 사용(field__r.name 등) 하여 해결 하곤 한다.
1)번이 아닌 2),3)번으로 대시보드를 개발할 경우, 즉 SFDC Objects를 데이터 원본으로 구성할 경우 상황에 따라 Object들 간에 Inner Join을 하는 경우가 있을 수 있다.
이렇게 Object간 Inner Join 시 동일하게 Modeling 하였으나 Data Set의 Output이 다른 현상이 발견되어 내용을 정리해 보려 한다.
2. 시나리오
1) SFDC의 표준 object인 'Opportunity' 와 , 'Account' 를 Account id를 key 값으로 Inner Join 하고자 한다.
(Opportunity)
id | account_id | opportunity name |
oppty1 | a | oppty name1 |
oppty2 | a | oppty name2 |
oppty3 | b | oppty name3 |
oppty4 | c | oppty name4 |
(Account)
id | name |
a | Account1 |
b | Account2 |
c | Account3 |
d | Account4 |
e | Account5 |
2) Tableau Desktop의 데이터 원본 생성시 Object 전체(Drag & Drop)를 Inner Join
3) SOQL (Salesforce Objects Query Language)를 통해 Inner Join
3. Object 전체(Drag & Drop)를 Inner Join 할 경우
데이터 원본 생성시 Object 전체를 Inner Join 하고 나서 Opportunity.account를 선반에 올렸을 때, 결과는 아래와 같다.
Opportunity.account_id |
a |
b |
c |
d |
e |
위 결과만 보면 Account 기준으로 outer join을 했을 때의 결과이다. 혹은 물리적인 결합인 Join이 아닌 논리적인 결합인 관계(Relation)과 동일한 결과이다.
이론적인 Inner Join 의 결과는 두개의 테이블에서 서로 매칭되는 a,b,c 고객사만이 Data Set으로 구성이되어야 하지만, 예상 및 기대와는 다르게 결과가 도출되었다.
다만, Tableau에서 COUNTD(Opportunity.account_id) 계산식을 만들면 5가 아닌 Inner Join이 적용된 3이 도출된다.
이에 계산식을 만든다면 Inner Join이 적용된 형태로 카운트 되지만, List View 형태로 차트를 만들다보면 기대한 바와는 다른 개수로 List view가 구성될 수 있다.
위 결과의 원인에 대해서 아직 파악이 되지 않았지만, 위 같은 모델링으로 List View를 개발할 때는 양쪽 테이블의 key 값이 같다는 Boolean 식을 만들어 'True' Filter를 적용해야 정확할 것이다.
4. SOQL (Salesforce Objects Query Language)를 통해 Inner Join 할 경우
데이터 원본 생성시 SOQL로 Inner Join을 한 Dataset을 가지고 Opportunity.account를 선반에 올렸을 때, 결과는 아래와 같다.
Opportunity.account |
a |
b |
c |
위 결과는 일반적인 Inner Join에 부합하며, 개발자가 기대하는 형태의 Data Set이다.
Data Set은 원하는 형태로 구성이 되었으나, 사용자 지정 SQL 기능을 통해 필요한 필드를 SELECT 해야 하므로 대시보드 개발에 필요한 필드들 선별 및 Object간 복잡한 구조인 경우 정확한 분석이 선행되어야 한다.
SFDC Object를 데이터 원본으로 대시보드를 개발하는 방법에 있어서 정확한 방법이 있진 않을 것이다. 이번 포스팅에서 소개한 대로 두가지 방법으로 개발을 할 수도 있는데, 각 방법 적용시 주의점을 고려하여 개발을 해야할 것이다.