Power BI 대시보드 빌더
대시보드 스펙(bi-dashboard-design/references/dashboard-spec.md 참조)을 실제 작동하는 Power BI 아티팩트로 변환합니다. 도메인 지식은 도메인 기술에서 제공되며, 레이아웃 및 스타일 규칙은 bi-dashboard-design에서 제공됩니다. 이 기술은 Power BI 관련 세부 사항을 다룹니다.
먼저 빌드 모드 선택
사용 가능한 것을 확인하고 사용 중인 모드를 사용자에게 알립니다.
| 모드 | 사용 시기 | 생성 결과물 |
|---|---|---|
| A. MCP/CLI를 통한 라이브 모델 | Power BI Modeling MCP 서버(@microsoft/powerbi-modeling-mcp) 또는 pbi-cli가 연결되어 있고 Power BI Desktop에서 모델이 열려 있는 경우 | 열려 있는 모델에 테이블, 관계, 측정값을 직접 생성하고, 보고서는 PBIR 파일로 빌드 |
| B. PBIP 프로젝트 파일 | 파일을 쓸 수 있지만 라이브 연결이 없는 경우 | .pbip 프로젝트 폴더: <Name>.SemanticModel/definition/*.tmdl 및 <Name>.Report/definition/ (PBIR) – 사용자가 Power BI Desktop에서 열어야 함 |
| C. 빌드 키트 | 파일이나 도구를 실용적으로 사용할 수 없는 경우(예: 채팅 전용) | DAX 측정값 스크립트, TMDL 스니펫, 테마 JSON 및 개발자가 따를 페이지별 빌드 시트 |
A 모드를 선호하고, 그 다음 B 모드를 사용합니다. B 모드에서는 사용자에게 PBIP 저장 옵션을 활성화하고 Power BI Desktop 미리 보기 기능(아직 미리 보기 상태인 경우)에서 "TMDL 형식을 사용하여 시맨틱 모델 저장"을 활성화하도록 알리십시오.
워크플로
- 스펙과 도메인 메트릭스 파일을 읽습니다. 생성하는 모든 측정값은 도메인 기술의
<domain-skill>/references/metrics.md에 있는 정의와 일치해야 합니다. - 스타 스키마를 모델링합니다 (
references/tmdl-patterns.md참조):- 스펙에 있는 각 그레인(grain)에 대해 하나의 팩트 테이블을 사용하고, 팩트 전반에 걸쳐 차원을 컨폼드(conformed)합니다.
- 전용
Date테이블을 날짜 테이블로 표시하고 연속적이며 모든 팩트 날짜를 포함하도록 하고, 도메인에서 회계 달력을 사용하는 경우 회계 열을 포함합니다. - 차원에서 팩트로의 단방향 일대다 관계를 사용합니다. 양방향 관계는 서면 이유와 함께만 사용합니다. 역할 수행 날짜(송장일 vs. 납부기한 vs. 납부일)의 경우 하나의 활성 관계를 사용하고 다른 관계는 비활성화한 후 측정값에서
USERELATIONSHIP으로 활성화합니다. - 외래 키와 측정값으로 대체된 원시 숫자 열은 숨기고, 키, ID 및 연도/월 숫자에는
summarizeBy: none을 설정합니다. - 월 이름과 버킷 레이블(에이징, 밴드)에 대한 정렬 기준 열을 만듭니다.
- 측정값을 작성합니다 (
references/dax-patterns.md참조):_Measures테이블을 만들고, 테마별 표시 폴더(예:01 Revenue,02 Margin)를 사용하며, 모든 측정값에 형식 문자열과 설명을 포함합니다. 먼저 기본 측정값을 빌드한 다음, 비율, 시간 지능, 그리고 표시 도우미(델타 %, 화살표, 상태 색상)를 빌드합니다. - 보고서 페이지를 빌드합니다 (
references/report-pbir.md참조): 각 스펙 구성 요소를 시각적 개체에 매핑하고, 1280×720 캔버스의 그리드 매핑을 사용하여 배치하며,bi-dashboard-design/references/theme-tokens.md의 테마를 적용하고, 드릴스루 페이지와 재설정 책갈피를 추가합니다. - 보안: 스펙에
row_level이 있으면 관련 차원에 DAX 필터를 사용하여 RLS 역할을 만들고 서비스에서 멤버를 할당하는 방법을 문서화합니다. - 확인:
references/dax-patterns.md#verification의 DAX 검사(합계가 원본과 일치, 시간 지능이 최신 기간에 대한 값 반환, 빈 KPI 없음)를 실행한 다음bi-dashboard-design승인 체크리스트를 실행합니다. 확인할 수 없었던 사항을 보고합니다.
그리드 매핑 (1280 × 720 캔버스)
- 여백 16px, 사용 가능한 너비 1248px, 88px 열 12개와 16px 간격.
- 열 너비
c→ 너비c*88 + (c-1)*16px, x =16 + col_index*104 - 높이 단위 1개 = 56px, 16px 간격(헤더 행 ≈ 64px)
- 긴 페이지: L1/L2의 경우 세로 스크롤보다 두 번째 페이지를 선호하며, L3 상세 페이지는 테이블을 위해 더 높은 캔버스(1280 × 1440)를 사용할 수 있습니다.
시각적 개체 매핑
| 스펙 구성 요소 | Power BI 시각적 개체 | 참고 사항 |
|---|---|---|
| kpi_card | 카드(신규) / KPI | 비교를 위한 참조 레이블, 측정값을 통한 조건부 색상 |
| trend_line | 꺾은선형 차트 | 목표를 두 번째 측정값 또는 상수선으로 표시, 상대 날짜 필터 또는 측정값 창을 통해 13개월 표시 |
| ranked_bar | 묶은 가로 막대형 | 상위 N 필터 + 필요 시 동적 세분화 측정값을 통한 "기타" |
| variance_bar | 분산 측정값의 묶은 가로 막대형 | Var 부호 × 방향에 대한 규칙별 색상 |
| waterfall | 폭포수 | 분류 필드 = 드라이버 차원 |
| stacked_bar | 100% 기준 누적 가로 막대형 | |
| matrix | 행렬 | 행 계층 구조, 값 Actual/Budget/Var/Var%, Var%에 대한 셀 요소 |
| exception_table | 테이블 | 상위 N 또는 심각도 필터, 조건부 아이콘, 드릴스루 활성화 |
| aging_buckets | 묶은 세로 막대형 | 버킷 순서 열로 정렬된 버킷 열 |
| funnel | 깔때기형 또는 가로 막대형 | 단계 순서로 정렬된 막대가 더 읽기 쉬움 |
| map | Azure 지도 / 채워진 지도 | 테넌트에서 지도를 허용하는 경우에만 |
| slicer | 슬라이서(드롭다운 또는 타일) | 기간 및 조직용 슬라이서를 페이지 전체에서 동기화 |
가드레일
- 측정값에
"2026-10-31"과 같은 날짜를 하드코딩하지 말고, 데이터 또는 매개변수에서 "최신 완료 기간"을 파생시키십시오. - 모든 비율에 대해
DIVIDE()를 사용하십시오. 행 전체의 비율을 평균하지 마십시오. - 계산 열보다 측정값을 선호하고, DAX 계산 테이블보다 Power Query / 웨어하우스 변환을 선호하십시오.
- 스펙에서 요청하지 않고 RLS/OLS가 적용되지 않는 한 민감한 열(SSN, 환자 이름, 급여 세부 정보)을 가져오지 마십시오.
- 자동 날짜/시간을 비활성화하십시오. 모델을 비대하게 만들고 Date 테이블과 충돌합니다.
참조 파일
references/tmdl-patterns.md– 테이블, 열, 관계, 날짜 테이블, 역할에 대한 TMDL 구문. 모드 A/B에서 읽습니다.references/dax-patterns.md– 재사용 가능한 DAX: 비율, 시간 지능, 반가산 스냅샷, 에이징 버킷, 상위 N + 기타, 표시 도우미, 확인 쿼리.references/report-pbir.md– PBIR 폴더 레이아웃, 시각적 개체 JSON 필수 요소, 드릴스루, 책갈피 및 모드 C용 빌드 시트 형식.