Power BI에서 데이터 모델링 이해하기: 조인, 관계 및 스키마 설명
Source: Dev.to
What Exactly is Data Modeling?
데이터 모델링을 데이터 집의 설계도라고 생각하세요. 이것은 생산 로그와 기계 세부 정보와 같은 복잡하고 개별적인 테이블들을 가져와서 서로 어떻게 소통할 수 있는지를 보여주는 과정입니다. Power BI에서는 Model View에서 이 작업이 이루어지며, 여기서 “Machine Name”에 대한 필터가 실제로 “Yield” 수치를 업데이트하도록 관계를 정의합니다.
접착제: Power Query에서 SQL 조인
데이터가 모델에 도달하기 전에, 종종 테이블을 “합쳐”야 할 필요가 있습니다. 이는 Power Query에서 조인을 사용하여 이루어집니다.
Inner Join
완벽한 일치만 표시합니다. Production 테이블을 QualityCheck 테이블과 조인하면, Inner Join은 실제로 검사를 받은 배치만 표시합니다. 검사를 받지 않은 배치는 사라집니다.
Left Outer Join (The “Go‑To”)
주 테이블의 모든 데이터를 유지합니다. YieldData를 MaintenanceLogs와 조인하면 모든 수율 기록이 표시됩니다. 배치가 유지보수 중에 발생했을 경우 상세 정보가 나타나고, 그렇지 않으면 null이 표시됩니다. 생산 데이터가 손실되지 않습니다.
Left Anti Join (The Detective)
첫 번째 테이블에 존재하지만 두 번째 테이블에 매치가 없는 행을 표시합니다. Yield 1 파일에서는 시스템에 존재하지만 FinalYield 출력 테이블에 누락된 ProductionID를 찾는 데 이상적이며, 데이터의 빈틈을 강조합니다.
관계: 테이블에게 대화 가르치기
데이터를 로드한 후, 관계를 생성합니다. 이는 조인과 다르게 테이블이 별도로 유지되면서 연결됩니다.
카디널리티 (“몇 개” 규칙)
- 일대다 (1:M) – 최상의 표준. 하나의 Machine이 여러 Yield 항목을 가질 수 있습니다. Power BI는 이를 빠르고 예측 가능하게 처리합니다.
- 다대다 (M:M) – 주의해서 사용하세요. 여러 Operator가 여러 ProductionLine에서 작업하면 모호성이 발생할 수 있으며, Power BI는 이를 해결하는 방법을 묻습니다.
- 일대일 (1:1) – 드뭅니다. 실제로 1:1인 테이블은 보통 병합하는 것이 좋습니다.
방향 및 상태
- 교차 필터 방향 – 일반적으로 “One” 측(예: Machine)에서 “Many” 측(예: Yield)으로 흐릅니다. 절대 필요하지 않은 경우 양방향 필터링을 피하세요. 성능에 영향을 줄 수 있습니다.
- 활성 vs. 비활성 – 한 번에 하나의 경로만 활성화될 수 있습니다. 수율 데이터에
TargetDate와ActualDate가 모두 있는 경우, 동시에 캘린더 테이블에 연결될 수 있는 것은 하나뿐입니다. 비활성 경로는 DAX 함수USERELATIONSHIP을 사용하세요.
Facts vs. Dimensions: The “How Much” and the “Who”
- Fact Tables – 집계하고자 하는 숫자를 포함합니다 (예:
YieldAmount,ScrapQuantity,TotalHours). 일반적으로 길고 숫자형입니다. - Dimension Tables – 컨텍스트를 제공합니다 (예:
MachineName,ShiftType,ProductCategory,Date). 더 짧고 서술적인 속성을 포함합니다.
스키마 선택 (레이아웃)
스타 스키마
이상적인 레이아웃: 중앙에 하나의 Fact 테이블 (Yield)이 위치하고, 모든 Dimension 테이블 (Machine, Shift, Date 등)이 별의 점처럼 바깥으로 퍼져 있습니다. 깔끔하고 빠르며 Power BI가 최적화된 방식입니다.
스노우플레이크 스키마
스타 스키마의 변형으로, 차원 테이블을 더 정규화합니다 (예: Machine → PlantLocation). 관계형 데이터베이스에 더 체계적이지만 추가 조인이 발생해 Power BI가 더 많은 작업을 해야 할 수 있습니다.
플랫 테이블 (DLAT)
모든 데이터를 하나의 넓은 테이블에 저장합니다. 처음에는 간단해 보일 수 있지만, 생산 데이터가 증가함에 따라 관리가 곧 악몽이 됩니다. 빠른 보고서를 원한다면 피하세요.
전문가 팁: 역할 연기 및 문제
- 역할 연기 차원 – 단일 테이블이 여러 역할을 수행할 수 있습니다. 날짜 테이블이 하나의 시각화에서는 “계획된 날짜”, 다른 시각화에서는 “실제 날짜” 역할을 할 수 있습니다.
- 일반적인 문제 – 순환 종속성을 방지하세요. 테이블 A가 B를 필터링하고 B가 C를 필터링한다면, C가 A를 필터링하지 않도록 하세요; Power BI가 오류를 발생시킵니다.
단계별: Power BI에서 수행하는 방법
Power Query에서 조인(병합)
- Transform Data 로 이동합니다.
- 홈 탭에서 Merge Queries 를 클릭합니다.
- 두 테이블(예:
Yield및MachineList)을 선택하고 일치하는 열(예:MachineID)을 선택합니다. - 조인 종류를 선택합니다(보통 Left Outer) 그리고 OK 를 클릭합니다.
모델 보기에서 관계 만들기
- 왼쪽 사이드바에서 Model View 아이콘(플로우차트)을 클릭합니다.
- 차원 테이블(예: 캘린더 테이블의
Date)에서 열을 끌어와 사실 테이블의 일치하는 열(예:ProductionDate)에 놓습니다. - Power BI가 올바르게 추측하지 못한 경우, 관계 라인을 더블 클릭하여 Cardinality 또는 Cross‑Filter Direction 를 조정합니다.