DAX(Data Analysis eXpressions)는 마이크로소프트의 파워 BI, SSAS 및 엑셀의 파워 피봇에 사용되는 프로그래밍 언어다. DAX는 2010년에 엑셀 2010에서 선보인 파워 피봇 도입과 함께 만들어져, 이제는 파워 BI 및 SSAS에서도 모델링 도구로 활용되고 있다. 이 책은 DAX에 관한 모든 것을 이해하고 싶은 독자를 대상으로 한다. DAX를 다뤄본 적이 없어도 파워 BI에 대한 기본 지식과 데이터 분석 경험이 있다면, 이 책을 통해 DAX 전문가로 발전할 수 있을 것이다.
Contents
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 함수 사용
____집계함수
____논리 함수
____정보 함수
____수학 함수
____삼각함수
____텍스트 함수
____변환 함수
____날짜 및 시간 함수
____관계 함수
__결론
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 규칙
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 및 페이징
____하드웨어 선택 시 모범 사례
__결론
18장. VertiPaq 최적화
__데이터 모델에 대한 정보 수집
__비정규화
__열 카디널리티
__날짜 및 시간 처리
__계산된 열
____부울 계산 열로 복잡한 필터 최적화
____계산된 열 처리
__저장할 올바른 열 선택
__열 저장소 최적화
____열 분할 최적화 사용
____카디널리티가 높은 열 최적화
____속성 계층 구조 비활성화
____드릴스루 특성 최적화
__VertiPaq 집계 관리
__결론
19장. DAX 쿼리 계획 분석
__DAX 쿼리 캡처
__DAX 쿼리 계획 소개
____쿼리 계획 수집
____논리적 쿼리 계획 소개
____물리적 쿼리 계획 소개
____저장 엔진 쿼리 소개
__프로파일링 정보 캡처
____DAX 스튜디오 사용
____SQL 서버 프로파일러 사용
__VertiPaq 저장 엔진 쿼리 읽기
____xmSQL 구문 소개
____집계함수
____산술 연산
____필터 연산
____조인 연산자
____배치 이벤트의 임시 테이블 및 얕은 관계
____스캔 시간 이해
____DISTINCTCOUNT 내부 이해
____병렬 처리 및 데이터캐시 이해
____VertiPaq 캐시 이해
____CallbackDataID 이해
__다이렉트쿼리의 저장 엔진 쿼리 읽기
____복합 모델 분석
____데이터 모델에서 집계 사용
__쿼리 계획 읽기
__결론
20장. DAX 최적화
__최적화 전략 정의
____최적화할 단일 DAX 식 식별
____재현 쿼리 만들기
____서버 타이밍 및 쿼리 계획 정보 분석
____저장 엔진 또는 수식 엔진의 병목 식별
____변경 사항 구현 및 테스트 쿼리 재실행
__DAX 식에서 병목 최적화
____필터 조건 최적화
____컨텍스트 전환 최적화
____IF 조건 최적화
____CallbackDataID의 영향 감소
____중첩된 반복함수 최적화
____DISTINCTCOUNT에서 테이블 필터 피하기
____변수를 사용해 다중 평가 방지
__결론
Author
마르코 루소,알베르토 페라리,김원권
sqlbi.com의 창립자로 해당 사이트에 파워 BI, 파워 피봇, DAX 및 SQL 분석 서비스(SSAS)에 관한 글을 정기적으로 게시하고 있다. 파워 피봇의 첫 베타 버전이 공개된 2009년 이후 줄곧 DAX 전문가로 활동하고 있으며, 이 기간 sqlbi.com은 DAX의 주요 배움터로 자리매김했다. 그들이 진행하는 온·오프라인 강의 과정도 DAX를 배우는 많은 사람에게 사랑받고 있다. 마이크로소프트 기술에 기반한 BI 관련 컨설팅 및 멘토링도 수행한다. 파워 BI, DAX 및 SSAS에 관한 책과 논문도 여러 편 썼으며, daxpatterns.com, daxformatter.com 및 dax.guide에 콘텐츠를 제공해 DAX 사용자를 지속적으로 돕고 있을 뿐만 아니라 마이크로소프트 이그나이트, PASS summit 및 SQLBits 등의 국제회의에서 단골 연사로도 활약하고 있다.
sqlbi.com의 창립자로 해당 사이트에 파워 BI, 파워 피봇, DAX 및 SQL 분석 서비스(SSAS)에 관한 글을 정기적으로 게시하고 있다. 파워 피봇의 첫 베타 버전이 공개된 2009년 이후 줄곧 DAX 전문가로 활동하고 있으며, 이 기간 sqlbi.com은 DAX의 주요 배움터로 자리매김했다. 그들이 진행하는 온·오프라인 강의 과정도 DAX를 배우는 많은 사람에게 사랑받고 있다. 마이크로소프트 기술에 기반한 BI 관련 컨설팅 및 멘토링도 수행한다. 파워 BI, DAX 및 SSAS에 관한 책과 논문도 여러 편 썼으며, daxpatterns.com, daxformatter.com 및 dax.guide에 콘텐츠를 제공해 DAX 사용자를 지속적으로 돕고 있을 뿐만 아니라 마이크로소프트 이그나이트, PASS summit 및 SQLBits 등의 국제회의에서 단골 연사로도 활약하고 있다.