전문가를 위한 DAX 완벽 가이드 2/e [파워 BI, 엑셀, SSAS에서 활용하는 DAX]
- 원서명The Definitive Guide to DAX: Business Intelligence for Microsoft Power BI, SQL Server Analysis Services, and Excel Second Edition (ISBN 9781509306978)
- 지은이마르코 루소(Marco Russo), 알베르토 페라리(Alberto Ferrari)
- 옮긴이김원권
- ISBN : 9791161756585
- 50,000원
- 2022년 07월 18일 펴냄
- 페이퍼백 | 928쪽 | 188*235mm
- 시리즈 : 데이터 과학
책 소개
요약
DAX(Data Analysis eXpressions)는 마이크로소프트의 파워 BI, SSAS 및 엑셀의 파워 피봇에 사용되는 프로그래밍 언어다. DAX는 2010년에 엑셀 2010에서 선보인 파워 피봇 도입과 함께 만들어져, 이제는 파워 BI 및 SSAS에서도 모델링 도구로 활용되고 있다.
이 책은 DAX에 관한 모든 것을 이해하고 싶은 독자를 대상으로 한다. DAX를 다뤄본 적이 없어도 파워 BI에 대한 기본 지식과 데이터 분석 경험이 있다면, 이 책을 통해 DAX 전문가로 발전할 수 있을 것이다.
추천의 글
아마 독자들은 우리를 잘 알지 못할 것이다. 우리는 업무용 소프트웨어 개발 전문가다. 파워 BI, SQL Server Analysis Services(SSAS) 개발 팀의 일원이며, DAX 언어와 VertiPaq 엔진의 개발에도 참여했다.
이 책으로 배우게 될 언어는 우리의 창작물이다. 데이터 분석가들이 더 쉽고 생산적으로 일할 수 있도록 이 언어를 연구하고 엔진을 최적화했다. 또한 지난 몇 년간 옵티마이저를 개선해 DAX가 더 쉽고 깔끔하며 안정된 언어가 되도록 노력해왔다.
DAX를 배우기 시작했다면 웹에서 몇 번의 검색만으로도 이 책의 저자들이 쓴 기사를 만날 수 있을 것이다. 그들이 쓴 글을 읽고 언어를 배운 후, 우리가 그간 노력한 결과물에 대해 평가해 주길 바란다. 수년 전 그들을 처음 만났을 때 SSAS에 대한 깊은 지식에 감탄했다. DAX 개발이 시작됐을 때 그들은 이 새로운 엔진과 언어를 배우고 채택한 첫 번째 그룹에 속한 사람들이었다.
저자들이 웹에 게재하고 공유하는 기사, 논문, 블로그는 수천 명에게 학습의 원천이 됐다. 우리는 코드를 작성하더라도 개발자들에게 사용법을 가르치는 것에 많은 시간을 들이지 않는다. 그러나 마르코와 알베르토는 DAX에 대한 지식을 전파하는 데 많은 기여를 했다.
알베르토와 마르코는 DAX에 관한 여러 베스트셀러를 썼으며, 이제 이 DAX의 새로운 안내서로 DAX에 관한 획기적인 책을 만들었다. 우리는 코드를 작성했고, 그들은 책을 썼다. 이제 여러분이 DAX를 배워서 여러분의 업무에서 과거에 경험하지 못한 분석력을 얻기를 기대한다. 저자와 우리 그리고 여러분 모두가 한 팀으로 협력해서 데이터로부터 더 나은 통찰력을 뽑아내는 것, 이것이 우리가 진정으로 원하는 것이다.
─ 마리우스 뒤미트루(Marius Dumitru), 파워 BI CTO이자 아키텍트
─ 크리스티안 페쿨레스쿠(Cristian Petculescu), 파워 BI 수석 아키텍트
─ 제프리 왕(Jeffrey Wang), 수석 소프트웨어 엔지니어 매니저
─ 크리스티안 웨이드(Christian Wade), 수석 프로그램 매니저
이 책에서 다루는 내용
◆ 계산된 열, 측정값 및 계산 그룹 등 DAX의 핵심 개념
◆ 기본 및 고급 테이블 함수로 효율적인 작업
◆ 평가 컨텍스트, CALCULATE 및 CALCULATETABLE
◆ 시간 기반 계산 수행
◆ 계산 그룹 및 계산 항목
◆ VAR(변수) 구문을 사용해 읽기 및 유지 관리가 쉬운 코드 작성
◆ 다대다 관계 및 양방향 필터 등 다양하고 특이한 관계 표현
◆ 고급 최적화 기법 마스터 및 집계 성능 향상
◆ 데이터 모델 최적화로 압축 효율 향상
◆ DAX 스튜디오를 사용한 DAX 쿼리 성능을 측정 및 DAX 최적화 방법
이 책의 대상 독자
이 책의 고급 부분에서는 모든 독자가 익숙하지 않을 수 있는 병렬, 메모리 액세스, CPU 사용량 및 기타 특이한 주제들에 대해 세부적으로 다룬다. 개발자는 편안하게 느끼겠지만 파워 BI와 엑셀 사용자는 약간 겁을 먹을 수 있다. 그럼에도 불구하고 DAX 최적화를 논의하기 위해서는 이 정보가 필요하다. 실제로 이 책의 가장 고급 부분은 파워 BI와 엑셀 사용자보다는 BI 개발자들을 더 많이 겨냥하고 있다. 하지만 고급 부분을 읽게 되면 모든 독자가 이익을 얻으리라 생각한다.
이 책의 구성
개략적인 소개로 시작해서 점차 고급 주제로 논리적으로 흐르도록 구성했다. 각 장은 이전의 내용을 완전히 이해한다는 가정하에 썼다. 앞서 설명한 개념의 반복은 거의 없다. 그렇기에 처음부터 끝까지 차례대로 읽을 것을 강력히 추천하고, 너무 일찍 고급 주제로 넘어가지 않길 바란다.
다 읽은 뒤에는 이 책을 참고도서로 활용할 수 있다. 예를 들어 여러분이 ALLSELECTED가 어떻게 작동하는지 궁금할 때 곧장 해당 부분으로 건너뛰어서 여러분의 생각을 명확히 할 수 있다. 그러나 이전 내용을 소화하지 않고 다음을 읽으면 다소 좌절하거나, 심할 경우 해당 개념을 불완전하게 이해할 수 있다.
이 책의 내용을 한눈에 살펴보면 다음과 같다.
1장은 DAX에 대한 간략한 소개로, SQL, 엑셀 또는 MDX와 같은 언어에 대해 이미 어느 정도 알고 있는 사용자를 위한 몇 개의 절로 구성돼 있다. 여기서는 새로운 개념을 소개하지 않는다. DAX와 다른 언어와의 차이점에 대한 몇 가지 힌트를 줄 뿐이다.
2장에서는 DAX 언어 자체를 소개한다. 계산된 열, 측정값, 오류 처리 함수와 같은 기본 개념을 다루며 기본 함수도 소개한다.
3장은 테이블 함수를 설명한다. DAX의 많은 함수는 테이블에서 작동하고 결과 또한 테이블 형태로 반환한다.
4장에서는 평가 컨텍스트를 설명한다. 평가 컨텍스트는 DAX 언어의 기초가 되므로, 4장은 5장과 함께 전체 책에서 가장 중요한 내용이 될 것이다.
5장에서는 CALCULATE와 CALCULATETABLE의 두 가지 함수만 다룬다. 이 함수는 DAX에서 가장 중요한 함수이며, 평가 컨텍스트에 대한 올바른 이해가 바탕이 돼야 한다.
6장은 변수를 설명한다. 모든 예에서 변수를 사용하지만, 6장은 변수의 구문을 소개하고 변수를 사용하는 방법을 설명하는 부분이다. 다음 장에서 변수를 사용하는 수많은 예를 볼 때 참고자료로 유용할 것이다.
7장은 반복함수와 CALCULATE에 관해 다룬다. DAX를 제대로 활용하기 위해서는 컨텍스트 전환과 반복함수 사용법을 함께 배워야 한다. 여기서는 이러한 도구를 활용하는 방법을 이해하는 데 유용한 몇 가지 예를 보여준다.
8장에서는 시간 인텔리전스 계산을 심층적으로 설명한다. YTD(연초부터 해당 날짜까지의 기간), MTD(월초부터 해당 날짜까지의 기간), 전년도값, 주 기반 기간 및 맞춤 캘린더를 다룬다.
9장은 DAX에 도입된 최신 기능인 계산 그룹을 소개한다. 계산 그룹은 모델링 도구로서 매우 강력하다. 계산 그룹을 만들고 사용하는 방법과 기본 개념을 소개하고 몇 가지 예를 보여준다.
10장에서는 고급 표현식 계산을 위해 필요한 필터 컨텍스트, 데이터 계보, 필터 컨텍스트 검사 및 기타 유용한 도구의 고급 사용 방법을 다룬다.
11장에서는 계층구조 계산을 수행하는 방법과 DAX를 사용해 부모/자녀 구조를 처리하는 방법을 설명한다.
12장과 13장은 작성자 쿼리 및 고급 계산에 유용한 고급 테이블 함수를 다룬다.
14장에서는 평가 컨텍스트에 대한 지식을 한 단계 더 발전시키고 확장 테이블 이론의 도움을 받아 ALLSELECTED 및 KEEPFILTERS와 같은 복잡한 함수에 대해 논의한다. 복잡한 DAX 표현식들의 비밀을 풀어내는 상급 내용을 다룬다.
15장은 DAX에서의 관계 및 관리에 관한 내용이다. 실제로 DAX 덕분에 데이터 모델 내에서 어떤 유형의 관계도 설정 가능하다. 여기서는 분석 데이터 모델에서 일반적인 여러 유형의 관계에 관해 설명한다.
16장에는 DAX에서 해결된 복잡한 계산의 예가 몇 가지 수록돼 있다. 이것은 해결책과 새로운 아이디어를 발견하는 데 유용한 언어에 관한 마지막 장이다.
17장에는 DAX를 실행하는 모델에서 사용하는 가장 일반적인 스토리지 엔진인 VertiPaq 엔진에 대한 자세한 설명이 수록돼 있다. DAX에서 최고의 성능을 얻는 방법을 배우려면 이를 이해하는 것이 필수다.
18장은 17장의 지식을 활용해 데이터 모델 레벨에서 적용할 수 있는 최적화를 보여준다. 적절한 관계 유형을 선택하고 DAX의 메모리 사용을 줄임으로써 열의 카디널리티를 줄이는 방법, 가져올 열을 선택하는 방법 및 성능을 향상시키는 방법을 배우게 된다.
19장에서는 쿼리 계획을 읽는 방법과 DAX Studio 및 SQL Server Profiler와 같은 도구를 사용해 DAX 쿼리의 성능을 측정하는 방법에 관해 설명한다.
20장에서는 최적화에 대한 이전 장의 내용을 기반으로 여러 가지 최적화 기법을 보여준다. 많은 DAX 계산식을 보여주고 성능을 측정한 다음 최적화된 계산식을 표시하고 설명한다.
목차
목차
- 01장. DAX란 무엇인가?
- 데이터 모델의 이해
- 관계의 방향 이해
- 엑셀 사용자를 위한 DAX
- 셀과 테이블
- 엑셀 및 DAX: 함수형 언어
- DAX의 반복함수
- DAX 이론의 필요성
- SQL 개발자를 위한 DAX
- 관계 처리
- 함수형 언어 DAX
- 프로그래밍 및 쿼리 언어 DAX
- DAX 및 SQL의 하위 쿼리 및 조건
- MDX 개발자를 위한 DAX
- 다차원 vs. 테이블 형식
- 프로그래밍 및 쿼리 언어로서 DAX
- 계층구조
- 상세 수준 계산
- 파워 BI 사용자를 위한 DAX
- 데이터 모델의 이해
- 02장. Dax 소개
- DAX 계산 이해
- DAX 데이터 유형
- DAX 연산자
- 테이블 구성자
- 조건문
- 계산된 열과 측정값
- 계산된 열
- 측정값
- 계산된 열과 측정값 사이의 선택
- 변수 소개
- DAX 식의 오류 처리
- 변환 오류
- 산술 연산 오류
- 비어 있거나 없는 값
- 오류 차단
- 오류 생성
- DAX 포맷팅
- 집계함수와 반복함수
- 일반적인 DAX 함수 사용
- 집계함수
- 논리 함수
- 정보 함수
- 수학 함수
- 삼각함수
- 텍스트 함수
- 변환 함수
- 날짜 및 시간 함수
- 관계 함수
- 결론
- DAX 계산 이해
- 03장. 기본 테이블 함수
- 테이블 함수 소개
- EVALUATE 구문 소개
- FILTER
- ALL과 ALLEXCEPT 소개
- VALUES, DISTINCT 및 빈 행 이해
- 테이블을 스칼라값으로 사용하기
- ALLSELECTED 소개
- 결론
- 04장. 평가 컨텍스트
- 평가 컨텍스트 소개
- 필터 컨텍스트
- 행 컨텍스트 이해
- 평가 컨텍스트에 대한 이해도 테스트
- 계산된 열에서 SUM 사용
- 측정값에 열 사용
- 반복함수로 행 컨텍스트 사용
- 여러 테이블에 중첩된 행 컨텍스트
- 동일한 테이블의 중첩된 행 컨텍스트
- EARLIER 함수
- FILTER, ALL 및 컨텍스트 상호 작용
- 여러 테이블 작업
- 행 컨텍스트 및 관계
- 필터 컨텍스트 및 관계
- 필터 컨텍스트에서 DISTINCT 및 SUMMARIZE 사용
- 결론
- 평가 컨텍스트 소개
- 05장. CALCULATE 및 CALCULATETABLE 이해
- CALCULATE 및 CALCULATETABLE 소개
- 필터 컨텍스트 만들기
- CALCULATE 소개
- CALCULATE를 사용한 백분율 계산
- KEEPFILTERS 소개
- 단일 열 필터링
- 복잡한 조건의 필터링
- CALCULATE의 평가 순서
- 컨텍스트 전환 이해
- 행 컨텍스트 및 필터 컨텍스트 복습
- 컨텍스트 전환 소개
- 계산된 열의 컨텍스트 전환
- 측정값으로 컨텍스트 전환하기
- 순환 의존성
- CALCULATE 제어자
- USERELATIONSHIP
- CROSSFILTER
- KEEPFILTERS
- CALCULATE의 ALL
- 매개변수 없는 ALL 및 ALLSELECTED
- CALCULATE 규칙
- CALCULATE 및 CALCULATETABLE 소개
- 06장. 변수
- VAR 구문 소개
- 변수는 상수
- 변수의 범위
- 테이블 변수 사용
- 지연된 평가
- 변수를 사용하는 일반적인 패턴
- 결론
- 07장. 반복함수 및 CALCULATE
- 반복함수 사용
- 반복함수의 카디널리티 이해
- 반복함수에서 컨텍스트 전환 활용
- CONCATENATEX 사용
- 테이블을 반환하는 반복함수
- 반복함수를 사용한 일반적인 시나리오 해결
- 평균 및 이동 평균 계산
- RANKX
- 계산 세분화 수준 변경
- 결론
- 반복함수 사용
- 08장. 시간 인텔리전스 계산
- 시간 인텔리전스 소개
- 파워 BI의 자동 날짜/시간 옵션
- 엑셀의 파워 피봇에서 자동 날짜 열
- 엑셀 파워 피봇에서 Date 테이블 템플릿
- Date 테이블 작성
- CALENDAR 및 CALENDARAUTO 사용
- 여러 날짜로 작업하기
- Date 테이블과의 다중 관계 처리
- 여러 Date 테이블 처리
- 기본 시간 인텔리전스 계산 이해
- Date 테이블로 표시
- 기본 시간 인텔리전스 함수 소개
- YTD, QTD, MTD
- 전기의 기간 계산
- 시간 인텔리전스 함수 결합
- 이전 기간과의 차이 계산
- 이동 연간 합계 계산
- 중첩된 시간 인텔리전스 함수에 적합한 호출 순서 사용
- 반가산 계산 이해
- LASTDATE 및 LASTNONBLANK 사용
- 기초 및 기말 잔액 작업
- 고급 시간 인텔리전스 계산
- 현재까지의 기간
- DATEADD
- FIRSTDATE, LASTDATE, FIRSTNONBLANK 및 LASTNONBLANK
- 시간 인텔리전스와 함께 드릴스루 사용
- 사용자 지정 달력
- 주 단위 작업
- 사용자 지정 YTD, QTD, MTD
- 결론
- 시간 인텔리전스 소개
- 09장. 계산 그룹
- 계산 그룹 소개
- 계산 그룹 만들기
- 계산 그룹 이해
- 계산 항목 적용의 이해
- 계산 그룹 우선순위 이해
- 계산 항목에서 측정값 포함 및 제외
- 측면 재귀 이해
- 모범 사례 사용
- 결론
- 10장. 필터 컨텍스트 작업
- HASONEVALUE 및 SELECTEDVALUE 사용
- ISFILTERED 및 ISCROSSFILTERED 소개
- VALUES와 FILTERS의 차이점
- ALLEXCEPT와 ALL/VALUE의 차이점
- 컨텍스트 전환을 피하기 위한 ALL
- ISEMPTY 사용
- 데이터 계보 및 TREATAS 소개
- 임의 모양의 필터 이해
- 결론
- 11장. 계층 구조 처리
- 계층 구조에 대한 비율 계산
- 부모/자식 계층 처리
- 결론
- 12장. 테이블 작업
- CALCULATETABLE
- 테이블 조작
- ADDCOLUMNS
- SUMMARIZE 사용
- CROSSJOIN 사용
- UNION 사용
- INTERSECT 사용
- EXCEPT 사용
- 테이블을 필터로 사용
- OR 조건 구현
- 첫해 고객으로 판매액 계산 범위 축소
- 신규 고객 계산
- DETAILROWS와 함께 테이블 식 재사용
- 계산된 테이블 만들기
- SELECTCOLUMNS 사용
- ROW를 사용해 정적 테이블 생성
- DATATABLE로 정적 테이블 생성
- GENERATESERIES 사용
- 결론
- 13장. 쿼리 작성
- DAX 스튜디오 소개
- EVALUATE 이해
- EVALUATE 구문 소개
- 정의 영역에서 VAR 사용
- DEFINE에서 측정값 사용
- 일반적인 DAX 쿼리 패턴 구현
- ROW를 사용한 측정값 테스트
- SUMMARIZE 사용
- SUMMARIZECOLUMNS 사용
- TOPN 사용
- GENERATE 및 GENERATEALL 사용
- ISONORAFTER 사용
- ADDMISSINGITEMS 사용
- TOPNSKIP 사용
- GROUPBY 사용
- NATURALINNERJOIN 및 NATURALLEFTOUTERJOIN 사용
- SUBSTITUTEWITHINDEX 사용
- SAMPLE 사용
- DAX 쿼리에서 자동 존재 동작 이해
- 결론
- 14장. 고급 DAX 개념
- 확장된 테이블 소개
- RELATED 이해
- 계산된 열에 RELATED 사용
- 테이블 필터와 열 필터 간의 차이점 이해
- 측정값에 테이블 필터 사용
- 활성화된 관계 이해
- 테이블 확장과 필터링의 차이
- 확장된 테이블의 컨텍스트 전환
- ALLSELECTED 및 그림자 필터 컨텍스트 이해
- 그림자 필터 컨텍스트 소개
- ALLSELECTED는 반복된 행을 반환함
- 매개변수 없는 ALLSELECTED
- ALL* 계열 함수
- ALL
- ALLEXCEPT
- ALLNOBLANKROW
- ALLSELECTED
- ALLCROSSFILTERED
- 데이터 계보 이해
- 결론
- 확장된 테이블 소개
- 15장. 고급 관계
- 계산된 물리적(실제) 관계 구현
- 다중 열 관계 계산
- 범위를 기반으로 관계 구현
- 계산된 물리적 관계에서의 순환 의존성
- 가상의 관계 구현
- DAX에서 필터 전송
- TREATAS를 사용해 필터 전송
- INTERSECT를 사용해 필터 전송
- FILTER를 사용해 필터 전송
- 가상 관계를 사용한 동적 세그멘테이션
- DAX의 물리적 관계 이해
- 양방향 크로스필터 사용
- 일대다 관계 이해
- 일대일 관계 이해
- 다대다 관계 이해
- 브릿지 테이블을 사용해 다대다 구현
- 공통 차원을 사용해 다대다 구현
- MMR 약한 관계를 사용해 다대다 구현
- 올바른 유형의 관계 선택
- 세분화 관리
- 관계에서 모호성 관리
- 활성화된 관계에서의 모호성 이해
- 비활성 관계에서 모호성 해결
- 결론
- 계산된 물리적(실제) 관계 구현
- 16장. DAX의 고급 계산
- 두 날짜 사이의 영업일 수 계산
- 예산과 판매액 함께 보여주기
- 동일 매장 판매 계산
- 이벤트 시퀀스 번호 매기기
- 전년도 매출액을 마지막 판매일까지 계산
- 결론
- 17장. DAX 엔진
- DAX 엔진의 아키텍처 이해
- 수식 엔진 소개
- 저장 엔진 소개
- VertiPaq(인메모리) 저장 엔진 소개
- 다이렉트쿼리 저장 엔진 소개
- 데이터 새로고침 이해
- VertiPaq 저장 엔진 이해
- 열 기반 데이터베이스 소개
- VertiPaq 압축 이해
- 값 인코딩 이해
- 해시 인코딩 이해
- RLE(실행 길이 인코딩) 이해
- 재인코딩 이해
- 최상의 정렬 순서 찾기
- 계층 및 관계 이해
- 세그멘테이션 및 파티셔닝 이해
- 동적 관리 보기 사용
- VertiPaq의 관계 사용 이해
- 구체화 소개
- 집계 소개
- VertiPaq용 하드웨어 선택
- 옵션으로 하드웨어 선택
- 하드웨어 우선순위 설정
- CPU 모델
- 메모리 속도
- 코어 수
- 메모리 크기
- 디스크 I/O 및 페이징
- 하드웨어 선택 시 모범 사례
- 결론
- DAX 엔진의 아키텍처 이해
- 18장. VertiPaq 최적화
- 데이터 모델에 대한 정보 수집
- 비정규화
- 열 카디널리티
- 날짜 및 시간 처리
- 계산된 열
- 부울 계산 열로 복잡한 필터 최적화
- 계산된 열 처리
- 저장할 올바른 열 선택
- 열 저장소 최적화
- 열 분할 최적화 사용
- 카디널리티가 높은 열 최적화
- 속성 계층 구조 비활성화
- 드릴스루 특성 최적화
- VertiPaq 집계 관리
- 결론
- 19장. DAX 쿼리 계획 분석
- DAX 쿼리 캡처
- DAX 쿼리 계획 소개
- 쿼리 계획 수집
- 논리적 쿼리 계획 소개
- 물리적 쿼리 계획 소개
- 저장 엔진 쿼리 소개
- 프로파일링 정보 캡처
- DAX 스튜디오 사용
- SQL 서버 프로파일러 사용
- VertiPaq 저장 엔진 쿼리 읽기
- xmSQL 구문 소개
- 집계함수
- 산술 연산
- 필터 연산
- 조인 연산자
- 배치 이벤트의 임시 테이블 및 얕은 관계
- 스캔 시간 이해
- DISTINCTCOUNT 내부 이해
- 병렬 처리 및 데이터캐시 이해
- VertiPaq 캐시 이해
- CallbackDataID 이해
- 다이렉트쿼리의 저장 엔진 쿼리 읽기
- 복합 모델 분석
- 데이터 모델에서 집계 사용
- 쿼리 계획 읽기
- 결론
- 20장. DAX 최적화
- 최적화 전략 정의
- 최적화할 단일 DAX 식 식별
- 재현 쿼리 만들기
- 서버 타이밍 및 쿼리 계획 정보 분석
- 저장 엔진 또는 수식 엔진의 병목 식별
- 변경 사항 구현 및 테스트 쿼리 재실행
- DAX 식에서 병목 최적화
- 필터 조건 최적화
- 컨텍스트 전환 최적화
- IF 조건 최적화
- CallbackDataID의 영향 감소
- 중첩된 반복함수 최적화
- DISTINCTCOUNT에서 테이블 필터 피하기
- 변수를 사용해 다중 평가 방지
- 결론
- 최적화 전략 정의