You are on page 1of 82

Trường ĐH Khoa Học Tự Nhiên Tp.

Hồ Chí Minh
TRUNG TÂM TIN HỌC

PHÂN TÍCH DỮ LIỆU VỚI DAX


(DATA ANALYSIS EXPRESSIONS)
Phòng Tin học Ứng dụng

2020
Nội dung
1. Introduction

2. Variables

3. Multi Filter

4. Calculate & Nested Level

5. Time Intelligence

6. Advanced Relationships

7. Optimizing DAX

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 2
Introduction
 DAX thuộc nhóm ngôn ngữ lập trình hàm (Functional Language) trong
đó cho phép kết hợp các các hàm, toán tử và hằng số để phân tích dữ
liệu.

 DAX được dùng trong Power Pivot của Excel, SQL Server Analysis
Services và Power BI.

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 3
Introduction
 Cú pháp:

NAME COLUMN/MEASURE = FUNCTION NAME( [PARAM 1], [PARAM 2], …)

 DAX sử dụng thông qua :


● Calculated Columns: giá trị được tính toán dựa trên tham chiếu tới vị trí
theo từng dòng dữ liệu.
● Measures: giá trị được tính toán dựa vào ngữ cảnh tương ứng

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 4
Introduction
 Để phân tích động, chúng ta cần hiểu rõ ngữ cảnh sử dụng trong hàm
DAX
● Filter Context
● Row Context

 Ví dụ: cho Data Model gồm 2 bảng Sales và Customer. Tính doanh thu theo
Country “OZ”

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 5
Introduction
 Data Model

Sales
Customer

 Để tính doanh thu theo Country “OZ”, ta sử dụng công thức DAX sau:

DoanhThuOZ = CALCULATE( SUMX(Sales, Sales[Amount]),


Customer[Country]=”OZ”)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 6
Introduction
 Các bước thực thi công thức DAX:
● Thêm “OZ” vào filter context -> lọc và trả về kết quả là view mới

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 7
Introduction
 Các bước thực thi công thức DAX:
● Thêm column “X” trong View mới -> tính tổng theo công thức

● Trả về kết quả tổng trên column “X”: 250+350+220 = 820.

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 8
Variables
 Biến là đối tượng sử dụng để lưu trữ tạm thời các giá trị.

 Sử dụng biến trong biểu thức DAX:


● Đọc và hiệu chỉnh code dễ hơn.
● Tối ưu hiệu suất thực thi.

 Ví dụ:

NewDiscount =
VAR Distcount= SUM(Invoices[TotalDiscount])
RETURN
IF(
Distcount > 1000,
Distcount,
Distcount * 1.1
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 9
Variables
 Cú pháp:
● Sử dụng từ khóa VAR để khai báo biến, có thể khai báo nhiều biến trong
cùng khối lệnh.
● Sử dụng từ khóa RETURN để trả về giá trị trong khối lệnh, tuy nhiên kết
quả trả về phải là biến hoặc biểu thức duy nhất.

 Ví dụ:

SalesAmt =
SUMX (
InvoiceLines,
VAR Quantity = InvoiceLines[LineItem]
VAR Price = InvoiceLines[SalePrice]
RETURN
Quantity * Price
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 10
Variables
 Phạm vi sử dụng:
● Biến có thể tham chiếu các biến được định nghĩa trước trong khối lệnh
hoặc các biến được định nghĩa trước đó cấp bên ngoài (Hàm nhiều cấp).

 Ví dụ:

Margin =
VAR SalesAmount = SUMX ( Sales, Sales[Quantity] *
Sales[Net Price] )
VAR TotalCost = SUMX ( Sales, Sales[Quantity] *
Sales[Unit Cost] )
VAR Margin = SalesAmount - TotalCost
RETURN
Margin

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 11
Variables
 Ví dụ:

AmountCurrent =
SUMX (
'Product’,
VAR CurrentPrice = 'Product'[Unit Price]
RETURN
SUMX (
RELATEDTABLE ( Sales ),
VAR Quantity = Sales[Quantity]
VAR AmountAtCurrentPrice = Quantity * CurrentPrice
RETURN
AmountAtCurrentPrice
)
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 12
Variables
 Biến có thể lưu trữ giá trị Scalar hoặc Table.

 Ví dụ:

Segments =
VAR Vals =
DATATABLE(
"Segment",STRING,
"Segment Sort", INTEGER,
"Max Sales",CURRENCY,
{
{"Low",1,100000},{"Mideum", 2, 150000},{"High",3,
999999}
}
)
RETURN Vals

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 13
Multi Filter
 Tùy theo nhu cầu, ngữ cảnh phân tích và thống kê dữ liệu, đôi khi chúng
ta cần kết hợp nhiều tiêu chí bộ lọc.

 DAX cung cấp các hàm kết hợp và sử dụng các bộ lọc để đáp ứng theo
từng yêu cầu nghiệp vụ khác nhau.

 Ví dụ: xem thống kê doanh thu theo hãng xe

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 14
Multi Filter
 Hàm KEEPFILTERS:
● Qui định cách bộ lọc được áp dụng trong khi sử dụng hàm CALCULATE.
● Cú pháp

KEEPFILTERS (<Expression>)

 Ví dụ: xem thống kê doanh thu theo hãng xe

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 15
Multi Filter
 Ví dụ: xem thống kê doanh thu theo hãng xe

Revenue = SUM(InvoiceLines[Sales])

RevenueBentley =
CALCULATE(
SUM(InvoiceLines[Sales]),
Stock[Make]=“Bentley”
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 16
Multi Filter
 Ví dụ: xem thống kê doanh thu theo hãng xe

RevenueBentley =
CALCULATE(
SUM(InvoiceLines[Sales]),
Stock[Make]=“Bentley”
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 17
Multi Filter
 Ví dụ: xem thống kê doanh thu theo hãng xe

RevenueBentley =
CALCULATE(
SUM(InvoiceLines[Sales]),
KEEPFILTERS( Stock[Make]=“Bentley”)
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 18
Multi Filter
 Hàm ALL:
● Trả về tất các dòng trong bảng hoặc tất cả các giá trị trong cột. Bỏ qua
các bộ lọc đang áp dụng.
● Cú pháp

ALL([<table>|<column>[,<column>[,…]]])

 Ví dụ: xem thống kê doanh thu theo hãng xe và màu “Black”

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 19
Multi Filter
 Ví dụ: xem thống kê doanh thu theo hãng xe và màu “Black”

Revenue = SUM(InvoiceLines[Sales])

RevenueColorBlack =
CALCULATE(
SUM(InvoiceLines[Sales]),
FILTER(
ALL(Colors),
Colors[Color]="Black”
)
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 20
Multi Filter
 Ví dụ: xem thống kê doanh thu theo hãng xe và màu “Black”
RevenueColorBlack =
CALCULATE(
SUM(InvoiceLines[Sales]),
FILTER(
ALL(Colors),
Colors[Color]="Black”
)
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 21
Multi Filter
 Hàm REMOVEFILTERS:
● Xóa các bộ lọc đang áp dụng trên Table | Column.
● Cú pháp

REMOVEFILTERS([<table>|<column>[,<column>[,…]]])

 Ví dụ: tính tỉ lệ phần trăm Revenue theo Category “%GT”

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 22
Multi Filter
 Ví dụ: tính tỉ lệ phần trăm Revenue theo Category “%GT”

% GT =
DIVIDE(
SUM(Sales[Revenue]),
CALCULATE(
SUM(Sales[Revenue]),
REMOVEFILTERS('Product’),
VALUES('Product'[Category])
)
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 23
Multi Filter
 Ví dụ: tính tỉ lệ phần trăm Revenue theo Category “%GT”
% GT = DIVIDE(
SUM(Sales[Revenue]),
CALCULATE(
SUM(Sales[Revenue]),
REMOVEFILTERS('Product’),
VALUES('Product'[Category])
)
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 24
Calculate & Nested Level
 Hàm CALCULATE:
● Đánh giá biểu thức với tham số ngữ cảnh bộ lọc mới được truyền vào.
● Cú pháp

CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])

 Ví dụ: xem thống kê Revenue theo Country “USA”

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 25
Calculate & Nested Level
 Ví dụ: xem thống kê Revenue theo Country “USA”

RevenueCountrySumX =
SUMX(
FILTER(Sales,Sales[Country]="USA"),
Sales[Revenue]
)

RevenueCountryCalculate =
CALCULATE(
SUM(Sales[Revenue]),
Geography[Country]="USA"
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 26
Calculate & Nested Level
 Khi sử dụng hàm CALCULATE “Nested Level”, theo thứ tự thực thi từ cấp
ngoài vào trong.

 Ví dụ: xem thống kê Sales theo Color và Make

Revenue = SUM(InvoiceLines[Sales] )

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 27
Calculate & Nested Level
 Ví dụ: xem thống kê Sales theo Color và Make

RevenueNestLevel =
CALCULATE (
CALCULATE (
SUM(InvoiceLines[Sales] ),
Colors[Color] IN { "Green", "Black" }
),
ALLSELECTED(Stock[Make])
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 28
Time Intelligence
 Trong mô hình dữ liệu doanh nghiệp thường lưu trữ thông tin về ngày
tháng kinh doanh.

 Phân tích dữ liệu theo thời gian là nhu cầu quan trọng và cần thiết, do đó
DAX cung cấp cho chúng ta các tính năng để thực hiện các xử lý nghiệp
vụ theo thời gian.

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 29
Time Intelligence
 Ví dụ: xem thống kê Revenue theo năm và tháng, trong đó:
● TotalRevenue: doanh thu tháng trong năm
● RunningTotalYear: doanh thu tích lũy tháng trong năm

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 30
Time Intelligence
 Mô hình dữ liệu sau khi kết nối và chuẩn hóa:

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 31
Time Intelligence
 Sử dụng hàm DAX để tạo table Date:

Date = CALENDAR(MIN(Sales[Date]), MAX(Sales[Date]))

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 32
Time Intelligence
 Tạo Relationship giữa table Date và Sales:

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 33
Time Intelligence
 Tạo thống kê Revenue theo năm và tháng:

RunningTotalYear =
VAR Result=
CALCULATE(
[TotalRevenue],
VAR CurrentDate= MAX('Date'[date])
VAR FilterDate= FILTER(ALL('Date'), 'Date'[Date] <=
CurrentDate && YEAR('Date'[Date])=YEAR(CurrentDate))
RETURN
FilterDate
)
RETURN
Result

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 34
Time Intelligence
 Trực quan hóa với Matrix

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 35
Time Intelligence
 Ví dụ: xem thống kê trung bình số ngày giao hàng theo năm và tháng, trong
đó:
● NumberDate = (DeliveryDate – InvoiceDate) + 1
● Lưu ý: không tính thứ 7, chủ nhật và các ngày nghỉ lễ

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 36
Time Intelligence
 Thiết kế Mô hình dữ liệu:

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 37
Time Intelligence
 Thống kê số ngày giao hàng trung bình:
AvgDateDelivery = AVERAGEX (
Invoices,
VAR RangeOfDates =
DATESBETWEEN (
DateDimension[DateKey],
Invoices[InvoiceDate], Invoices[DeliveryDate]
)
VAR NumberOfWorkingDays = CALCULATE (
COUNTROWS ('DateDimension’),
RangeOfDates
)
RETURN
NumberOfWorkingDays
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 38
Time Intelligence
 Thống kê số ngày giao hàng trung bình (không tính thứ 7, chủ nhật):
AvgDateDelivery = AVERAGEX (
Invoices,
VAR RangeOfDates =
DATESBETWEEN (
DateDimension[DateKey],
Invoices[InvoiceDate], Invoices[DeliveryDate]
)
VAR NumberOfWorkingDays = CALCULATE (
COUNTROWS ('DateDimension’),
RangeOfDates,
NOT(WEEKDAY('DateDimension'[DateKey]) IN { 1, 7 })
)
RETURN
NumberOfWorkingDays
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 39
Time Intelligence
 Thống kê số ngày giao hàng trung bình (không tính ngày lễ):
AvgDateDelivery = AVERAGEX (
Invoices,
VAR RangeOfDates =
DATESBETWEEN (
DateDimension[DateKey],
Invoices[InvoiceDate], Invoices[DeliveryDate]
)
VAR NumberOfWorkingDays = CALCULATE (
COUNTROWS ('DateDimension’), RangeOfDates,
NOT(WEEKDAY('DateDimension'[DateKey]) IN { 1, 7 }) ,
NOT(DateDimension[DateKey] IN ALL(Holiday[Date]))
)
RETURN
NumberOfWorkingDays
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 40
Time Intelligence
 Table Holiday chứa danh sách các ngày nghỉ lễ được nhập theo từng năm

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 41
Time Intelligence
 Trực quan hóa với Matrix

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 42
Time Intelligence
 Ví dụ: xem thống kê Revenue và DeliveryCharge theo năm và tháng

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 43
Time Intelligence
 Sử dụng hàm DAX để tạo table DateDelivery và DateInvoice:

DateDelivery =
CALENDAR(
MIN(Invoices[DeliveryDate]),
MAX(Invoices[DeliveryDate])
)

DateInvoice =
CALENDAR(
MIN(Invoices[InvoiceDate]),
MAX(Invoices[InvoiceDate])
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 44
Time Intelligence
 Thiết kế Mô hình dữ liệu:

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 45
Time Intelligence
 Thống kê Revenue và DeliveryCharge

Revenue =
SUM(
InvoiceLines[Sales]
)

TotalDeliveryCharge =
SUM(
Invoices[DeliveryCharge]
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 46
Time Intelligence
 Trực quan hóa với Matrix

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 47
Advanced Relationships
 DAX thực thi dựa trên mô hình dữ liệu quan hệ. Do đó, hiểu và tối ưu
thiết kế bảng và quan hệ giữa các bảng giúp nâng cao kỹ năng sử dụng
DAX.

 Có 2 loại mối quan hệ giữa 2 bảng:


● Quan hệ hiện hành được sử dụng để tính toán
● Quan hệ ảo

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 48
Advanced Relationships
 Ví dụ: xem thống kê Revenue và DeliveryCharge theo năm và tháng

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 49
Advanced Relationships
 Sử dụng hàm DAX để tạo table Date:

Date =
CALENDAR(
MIN(Invoices[InvoiceDate]),
MAX(Invoices[DeliveryDate])
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 50
Advanced Relationships
 Thiết kế mô hình dữ liệu

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 51
Advanced Relationships
 Thống kê Revenue và DeliveryCharge

Revenue =
SUM(
InvoiceLines[Sales]
)

TotalDeliveryCharge =
CALCULATE (
SUMX( Invoices, Invoices[DeliveryCharge]),
USERELATIONSHIP( Invoices[DeliveryDate], 'Date'[Date])
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 52
Advanced Relationships
 Trực quan hóa với Matrix

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 53
Advanced Relationships
 Dữ liệu trong phân tích có thể từ nhiều nguồn hay trong quá trình phân
tích có thể phát sinh bảng nên trong một số trường hợp giữa các bảng
không thiết lập mối quan hệ

 Chúng ta có thể sử dụng DAX để thống kê và trực quan hóa trong ngữ
cảnh trên.

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 54
Advanced Relationships
 Ví dụ: mô hình dữ liệu bán điện thoại Xiaomi

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 55
Advanced Relationships
 Dữ liệu bảng KPI

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 56
Advanced Relationships
 Dữ liệu bảng Sale

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 57
Advanced Relationships
 Yêu cầu: thống kê và trực quan KPI và Sale của Nhân viên theo năm tháng

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 58
Advanced Relationships
 Sử dụng hàm DAX thống kê Sale của nhân viên theo năm tháng:

TotalSale =
SUMX(
FILTER(
Sale,
Sale[Year-Mon] = SELECTEDVALUE('KPI'[Year-Mon]) &&
Sale[Saleman Name] =SELECTEDVALUE('KPI'[Saleman Name])
),
Sale[Sale]
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 59
Advanced Relationships
 Trực quan KPI và Sale với Clustered column chart

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 60
Optimizing DAX
 Tối ưu hóa biểu thức DAX là điều cần thiết trong các phân tích nghiệp vụ
nâng cao nhằm tăng hiệu suất thực thi.

 DAX Studio là một trong các công cụ hỗ trợ thực thi truy vấn DAX, cho
phép xem và cải tiến hiệu suất thực thi truy vấn DAX

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 61
Optimizing DAX
 Truy cập link tải và cài đặt DAX Studio https://daxstudio.org

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 62
Optimizing DAX
 Kết nối nguồn dữ liệu và thực thi truy vấn DAX
● PowerPivot in Excel
● Power BI Desktop
● Analysis Services Tabular

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 63
Optimizing DAX
 Kết nối nguồn dữ liệu và thực thi truy vấn DAX

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 64
Optimizing DAX
 Cú pháp:

[DEFINE
{ MEASURE <tableName>[<name>] = <expression> }
{ VAR <name> = <expression>}]
EVALUATE <table>
[ORDER BY
{<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]

● Từ khóa DEFINE: định nghĩa variable, measure dùng trong truy vấn DAX
● Từ khóa EVALUATE: kết quả trả về của truy vấn DAX, ở dạng table.
● Từ khóa ORDER BY: chỉ định biểu thức | cột cần sắp xếp tăng | giảm

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 65
Optimizing DAX
 Ví dụ: tính tổng doanh thu bán hàng

DEFINE
MEASURE Sales[Total Sales] =
SUM ( Sales[Revenue] )
EVALUATE
ROW("Total", [Total Sales])

 Kết quả:

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 66
Optimizing DAX
 Ví dụ: thống kê tổng doanh thu theo nhóm hàng
EVALUATE
SUMMARIZECOLUMNS(
'Product'[Category],
'Product’,
"Total", SUM(Sales[Revenue])
)

 Kết quả:

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 67
Optimizing DAX
 Ví dụ: thống kê tổng doanh thu nhóm hàng “Mix” và “Urban”
DEFINE
MEASURE Sales[Total]= Sum(Sales[Revenue])
EVALUATE
SUMMARIZECOLUMNS(
'Product'[Category],
TREATAS({"urban","mix"},'Product'[category]),
"Total",[Total]
)

 Kết quả

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 68
Optimizing DAX
 Ví dụ: hiển thị danh sách Product, thêm cột Manufacturer từ bảng
Manufacturer

EVALUATE
GENERATE(
'Product',
VAR Tri='Product'[ManufacturerID]
RETURN
CALCULATETABLE(
SELECTCOLUMNS(
Manufacturer,
"Manufacturer",
Manufacturer[Manufacturer]
),
Manufacturer[ManufacturerID]=Tri
)
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 69
Optimizing DAX
 Kết quả

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 70
Optimizing DAX
 Ví dụ: thống kê 3 sản phẩm có doanh thu cao nhất theo từng năm

EVALUATE
GENERATE(
SUMMARIZE('Date', 'Date'[Year]),
VAR Top3Product=
TOPN(
3,
ADDCOLUMNS(
VALUES('Product'[Product]),"@Amt",[TotalRevenue]
),
[@Amt]
)
RETURN
Top3Product
)
ORDER BY [Year], [@Amt] DESC

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 71
Optimizing DAX
 Kết quả

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 72
Optimizing DAX
 Để xem kịch bản thực thi và tối ưu truy vấn DAX, chúng ta sử dụng chức
năng:
● Query Plan: kịch bản thực thi truy vấn DAX
● Server Timings: hiệu suất và thời gian thực thi truy vấn DAX

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 73
Optimizing DAX
 Ví dụ: cho mô hình dữ liệu sau

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 74
Optimizing DAX
 Trong đó:
● Sales[SaleAmount]: số tiền thanh toán, chưa trừ giảm giá
● Customers[CustomerDiscount]: tỉ suất giảm của mỗi khách hàng
● Products[ProductDiscount]: tỉ suất giảm của mỗi sản phẩm

 Yêu cầu:
● Thống kê doanh thu bán hàng theo năm

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 75
Optimizing DAX
 Truy vấn DAX thống kê doanh thu theo năm:

DEFINE
MEASURE Sales[DiscountSale]=
SUMX(
Customers, --18484 rows
SUMX(
Products, -- 397 rows
VAR CustomerDiscount= Customers[CustomerDiscount]
VAR ProductDiscount= Products[ProductDiscount]
VAR SaleAmount= [TotalAmount]
RETURN SaleAmount * (1- CustomerDiscount)*(1-ProductDiscount)
)
)
EVALUATE
SUMMARIZECOLUMNS(
'Calendar'[CalendarYear],
"Amt",
[DiscountSale]
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 76
Optimizing DAX
 Query Plan
● Line
● Records
● Physical Query Plan

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 77
Optimizing DAX
 Server Timings
● Total
● SE (storage engine)
● FE (formula engine)
● SE CPU
● SE Queries
● SE Cache

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 78
Optimizing DAX
 Tối ưu truy vấn DAX thống kê doanh thu theo năm:

DEFINE
MEASURE Sales[DiscountSale]=
SUMX(
Sales, -- 60398 rows
VAR CustomerDiscount= RELATED(Customers[CustomerDiscount])
VAR ProductDiscount= RELATED(Products[ProductDiscount])
VAR SaleAmount= [TotalAmount]
RETURN SaleAmount * (1- CustomerDiscount)*(1-ProductDiscount)
)
EVALUATE
SUMMARIZECOLUMNS(
'Calendar'[CalendarYear],
"Amt",
[DiscountSale]
)

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 79
Optimizing DAX
 Query Plan

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 80
Optimizing DAX
 Server Timings

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 81
Thảo luận

Bài 03: Phân tích dữ liệu với DAX (Data Analysis Expressions) 82

You might also like