You are on page 1of 53

Chương 6 : Chuẩn bị Star Schema trong

Power Query Editor


Chúng ta đã tìm hiểu về một số bước chuẩn bị dữ liệu phổ biến trong chương trước, bao
gồm chuyển đổi kiểu dữ liệu, tách cột, hợp nhất cột, thêm cột tùy chỉnh và lọc hàng. Chúng
tôi cũng đã học cách tạo các bảng tóm tắt bằng cách sử dụng tính năng Nhóm theo, nối
thêm dữ liệu và hợp nhất các truy vấn.

Chương này sẽ sử dụng tất cả các chủ đề mà chúng ta đã thảo luận trong vài chương
trước và giúp bạn tìm hiểu cách chuẩn bị Star Shema trong Power Query Editor. Lập mô
hình dữ liệu trong Power BI bắt đầu bằng việc chuẩn bị Lược đồ hình sao. Trong chương
này, chúng ta sẽ sử dụng tệp Chương 6, Sales Data.xlsx , chứa dữ liệu được làm
phẳng. Đây là một kịch bản phổ biến mà nhiều người trong chúng ta đã phải đối mặt; chúng
tôi nhận được một tập hợp các tệp chứa dữ liệu đã được xuất từ hệ thống nguồn và chúng
tôi cần tạo báo cáo để trả lời các câu hỏi kinh doanh. Do đó, có các kỹ năng cần thiết để
xây dựng Lược đồ hình sao trên thiết kế phẳng sẽ rất hữu ích.

Trong chương này, chúng ta sẽ đề cập đến các chủ đề sau:

● Xác định kích thước và sự kiện


● Tạo bảng Kích thước
● Tạo bảng thực tế

Xác định kích thước và sự kiện


Khi chúng ta đang nói về một Star Schema, chúng ta sẽ tự động nói về các chiều và sự
kiện. Trong mô hình Star Schema, chúng tôi thường giữ tất cả các giá trị số trong bảng thực
tế và đặt tất cả dữ liệu mô tả trong bảng Thứ nguyên . Nhưng không phải tất cả các giá trị
số đều nằm trong bảng thực tế. Một ví dụ điển hình là Đơn Giá Sản Phẩm. Nếu chúng tôi
cần thực hiện một số tính toán liên quan đến Đơn giá Sản phẩm, thì đó có thể là một phần
trong bảng thực tế của chúng tôi. Tuy nhiên, nếu Đơn giá sản phẩm được sử dụng để lọc
hoặc nhóm dữ liệu, thì đó có thể là một phần của thứ nguyên.

Không thể thiết kế mô hình dữ liệu trong Lược đồ hình sao trừ khi chúng ta có mức độ hiểu
biết về dữ liệu. Chương này nhằm mục đích xem xét dữ liệu Chương 6, Dữ liệu bán
hàng.xlsx và tạo Lược đồ sao.

Như chúng tôi đã đề cập trước đó, để tạo Lược đồ hình sao, chúng tôi cần xem xét kỹ hơn
dữ liệu mà chúng tôi sẽ lập mô hình và xác định các kích thước và sự kiện. Trong phần
này, chúng ta sẽ cố gắng tìm ra những chiều và sự kiện này. Chúng tôi cũng sẽ thảo luận
xem liệu chúng tôi có bao gồm các kích thước trong các bảng riêng biệt hay không và tại
sao. Trong một vài phần sau, chúng ta sẽ xem xét vấn đề này chi tiết hơn và triển khai các
kích thước và dữ kiện đã xác định.

Trước khi tiếp tục, hãy đưa dữ liệu từ tệp mẫu vào Power Query Editor, như minh họa trong
ảnh chụp màn hình sau đây. Trong vài chương trước, chúng ta đã học cách lấy dữ liệu từ
tệp Excel; do đó, chúng tôi sẽ bỏ qua việc giải thích các bước Lấy dữ liệu:

Hình 6.1 – Power Query Editor được kết nối với dữ liệu mẫu Chương 6, Sales Data.xlsx
Xem xét dữ liệu mẫu trong Chương 6, Sales Data.xlsx mà chúng ta đã tải vào
Power Query Editor, chúng ta phải nghiên cứu dữ liệu và tìm hiểu những điều sau:

● Số lượng bảng trong nguồn dữ liệu


● Mối liên kết giữa các bảng hiện có
● Hạt yêu cầu thấp nhất của Ngày và Giờ

Các điểm trước là những điểm ban đầu đơn giản nhất mà chúng ta phải nêu ra với doanh
nghiệp trong các hội thảo khám phá ban đầu. Những điểm đơn giản này sẽ giúp chúng ta
hiểu được quy mô và mức độ phức tạp của công việc. Trong một vài phần sau đây, chúng
ta sẽ xem xét các điểm trước chi tiết hơn.

Số lượng bảng trong nguồn dữ liệu


Tệp mẫu của chúng tôi chứa hai trang tính chuyển thành hai bảng cơ sở : Bán hàng và
Khách hàng . Chúng tôi sử dụng các bảng cơ sở từ để trích xuất các kích thước và
sự kiện từ chúng; do đó, chúng sẽ không được tải vào mô hình ở hình dạng ban đầu. Từ
góc độ lập mô hình, phải có mối liên kết giữa hai bảng, vì vậy chúng tôi cần nêu vấn đề này
với doanh nghiệp và nghiên cứu dữ liệu và xem liệu chúng tôi có thể tìm thấy (các) mối liên
kết hay không. Tên của các bảng được đánh dấu trong ảnh chụp màn hình sau:

Hình 6.2 – Tệp mẫu Excel chứa hai trang tính chuyển thành hai bảng cơ sở trong Power
Query Editor

Điểm quan trọng là không bị lừa bởi số lượng bảng cơ sở. Các bảng này có thể rộng và
cao, đồng thời có thể có nhiều bảng dữ kiện và kích thước khác sau khi chúng tôi đã chuẩn
bị dữ liệu mô hình Lược đồ sao. Mẫu của chúng tôi chỉ chứa hai bảng cơ sở, sau đó
chuyển thành năm chiều và một bảng thực tế sau khi chúng tôi chuẩn bị dữ liệu cho Lược
đồ sao.

Mối liên kết giữa các bảng hiện có


Các cột của hai bảng như sau:

● Bán hàng : SalesTerritoryRegion , SalesTerritoryCountry ,


SalesTerritoryGroup , CustomerKey , SalesOrderNumber ,
SalesOrderLineNumber , OrderQuantity , ExtendedAmount ,
TotalProductCost , SalesAmount , TaxAmt , Freight , OrderDate ,
DueDate , ShipDate , Product , ProductCategory , ProductSubcategory
, Currency

● Khách hàng : Khóa khách hàng , Tiêu đề , Tên , Tên đệm , Họ , TênPhong
cách , Ngày sinh , Tình trạng hôn nhân , Hậu tố , Giới tính , Địa
chỉ Email , Thu nhập hàng năm , Tổng số trẻ em , Số trẻ em ở nhà , Tiếng
Anh Giáo dục , Tiếng Anh Nghề nghiệp , Cờ chủ nhà , Số xe ô tô sở
hữu , Dòng địa chỉ1 , Dòng địa chỉ2 , Điện thoại , Ngày đầu tiên mua
hàng , Khoảng cách đi lại , Thành phố , StateProvinceCode ,
StateProvinceName , CountryRegionCode , EnglishCountryRegionName
, Postal Code , SalesRegion , SalesCountry , SalesContinent

Bằng cách xem xét các cột này và nghiên cứu dữ liệu của chúng, chúng ta có thể thấy rằng
cột CustomerKey trong cả hai bảng chứa mối liên kết nhỏ giữa chúng. Nhưng có nhiều
hơn nữa. Sau đây là một số liên kết tiềm năng khác:
● Liên kết qua dữ liệu địa lý như Vùng , Quốc gia , Nhóm lãnh thổ , Bang/Tỉnh
, Thành phố , Địa chỉ và Mã bưu chính

● Liên kết trên dữ liệu sản phẩm như Danh mục sản phẩm , Danh mục con sản
phẩm và Sản phẩm

● Liên kết qua dữ liệu đơn đặt hàng như Đơn đặt hàng và Dòng đơn đặt hàng

● Liên kết theo Ngày và Giờ , chẳng hạn như Ngày đặt hàng , Ngày đến hạn
và Ngày giao hàng

Tìm hạt yêu cầu thấp nhất của Ngày


và Giờ
Trong hầu hết các trường hợp thực tế, nếu không phải tất cả các trường hợp, doanh nghiệp
phải phân tích dữ liệu theo Ngày hoặc Giờ hoặc cả hai. Trong ví dụ của chúng tôi, doanh
nghiệp cần phân tích dữ liệu theo cả Ngày và Giờ . Nhưng chúng ta phải lấy thêm thông
tin mô tả về mức độ Ngày Giờ mà doanh nghiệp yêu cầu để phân tích dữ liệu. Qua
nghiên cứu dữ liệu, chúng tôi phát hiện ra rằng cả hai bảng Doanh số và Khách hàng
đều có các cột có kiểu dữ liệu Ngày hoặc Ngày giờ . Bảng Sales có ba cột chứa kiểu
dữ liệu DateTime . Các kiểu dữ liệu của cột được Power Query Editor tự động phát hiện.
Nghiên cứu dữ liệu chính xác hơn cho thấy rằng yếu tố thời gian của các giá trị trong cả hai
cột luôn là 12:00:00 AM . Do đó, kiểu dữ liệu của hai cột DueDate và ShipDate phải
là Date chứ không phải DateTime . Điều này có nghĩa là cột duy nhất có kiểu dữ liệu
DateTime là cột OrderDate . Ảnh chụp màn hình sau đây cho thấy dữ liệu trong cột
OrderDate được lưu trữ trong Giây :
Hình 6.3 – Các cột có kiểu dữ liệu Date và DateTime trong bảng Sales

Vì vậy, hạt của cột OrderDate có thể tính bằng Giây . Chúng tôi sẽ lưu câu hỏi này lại
và xác nhận lại với doanh nghiệp sau.

Hãy cũng nhìn vào bảng Khách hàng . Bảng Khách hàng cũng có hai cột thuộc loại dữ
liệu Ngày , BirthDate và DateFirstPurchase , như minh họa trong ảnh chụp màn
hình sau:
Hình 6.4 – Cột Ngày trong bảng Khách hàng

Là bước tiếp theo trong hội thảo khám phá của chúng tôi, chúng tôi phải yêu cầu doanh
nghiệp xác định xem họ có cần phân tích dữ liệu khách hàng xung quanh các yếu tố ngày
hay không. Chúng ta phải làm rõ những điều sau đây với doanh nghiệp:

● Họ có cần phân tích dữ liệu về Ngày sinh của khách hàng không ?

● Họ có cần phải có dữ liệu Ngày sinh ở các mức ngày khác nhau ( Năm , Quý ,
Tháng , v.v.) không?

● Họ có cần phân tích dữ liệu qua DateFirstPurchase không?

● Họ có yêu cầu hiển thị dữ liệu DateFirstPurchase ở các mức ngày khác nhau
không?

Trong hội thảo khám phá tưởng tượng của chúng tôi với doanh nghiệp, chúng tôi có thể
thấy rằng họ không cần phân tích ngày sinh của khách hàng hoặc ngày mua hàng đầu tiên
của họ. Chúng ta cũng có thể thấy rằng họ cần phân tích OrderDate từ bảng Doanh số
theo Ngày ở cấp độ Ngày và theo Thời gian ở cấp độ Phút . Dữ liệu cũng sẽ được
phân tích theo DueDate và ShipDate từ bảng Doanh số , theo Ngày ở cấp độ Ngày .

Cùng với đó, chúng ta sẽ cần tạo thứ nguyên Ngày và thứ nguyên Thời gian .

Bước tiếp theo là xác định các kích thước, mức độ chi tiết và sự thật của chúng.

Xác định kích thước và sự kiện


Để xác định các khía cạnh và sự thật, chúng tôi phải tiến hành hội thảo thu thập yêu cầu với
doanh nghiệp. Chúng ta cần hiểu quy trình kinh doanh bằng cách đặt câu hỏi WWWWWH;
nghĩa là Cái gì, Khi nào, Ở đâu, Ai, Tại sao và Như thế nào. Đây là một kỹ thuật phổ biến
còn được gọi là 5W-1H. Câu trả lời cho những câu hỏi này giúp chúng tôi hiểu các quy trình
kinh doanh, điều này sẽ giúp chúng tôi xác định các khía cạnh và dữ kiện của mình. Chúng
ta hãy xem xét một số ví dụ:

● Câu trả lời cho câu hỏi What có thể là một sản phẩm, mặt hàng, dịch vụ, v.v.
● Câu trả lời cho câu hỏi When có thể là ngày, giờ hoặc cả hai và ở cấp độ nào, tháng,
ngày, giờ, phút, v.v.
● Câu trả lời cho câu hỏi Ở đâu có thể là một vị trí thực tế chẳng hạn như cửa hàng
hoặc nhà kho, vị trí địa lý, v.v.

Trong các hội thảo thu thập yêu cầu, chúng tôi cố gắng xác định điều gì mô tả doanh nghiệp
và cách doanh nghiệp tự đo lường. Trong kịch bản của chúng tôi, hãy tưởng tượng chúng
tôi đã tiến hành một số hội thảo khám phá với doanh nghiệp và chúng tôi phát hiện ra rằng
họ yêu cầu dữ liệu bán hàng cho những mục sau:

● Sản lượng bán ra


● Số lượng
● Chi phí (thuế, vận chuyển hàng hóa, v.v.)

Dữ liệu bán hàng phải được phân tích bằng cách sau:

● Địa lý
● Đơn đặt hàng
● Sản phẩm
● Tiền tệ
● Khách hàng
● Nhân khẩu học bán hàng
● Ngày ở cấp độ ngày
● Thời gian ở cấp độ phút

Trong một số phần tiếp theo, chúng tôi sẽ xác định kích thước và sự kiện của chúng tôi.

Xác định kích thước tiềm năng


Để xác định các thứ nguyên, chúng tôi thường tìm kiếm dữ liệu mô tả. Dựa trên kết quả của
các hội thảo thu thập yêu cầu, chúng tôi xem xét các tệp mẫu của mình. Trong cả bảng
Doanh số và Khách hàng , chúng ta có thể tạo các thứ nguyên sau:
Hình 6.5 – Các kích thước tiềm năng bắt nguồn từ các bảng hiện có

Xác định các sự kiện tiềm năng


Để xác định sự thật, chúng ta phải xem xét kết quả của các cuộc hội thảo thu thập yêu cầu.
Với kiến thức hiện tại của chúng tôi về kinh doanh, chúng tôi có một ý tưởng về sự thật của
chúng tôi. Hãy xem dữ liệu trong Power Query Editor và tìm các cột có kiểu dữ liệu Số .
Tuy nhiên, không phải tất cả các cột có kiểu dữ liệu Số đều chứa dữ kiện. Các sự kiện phải
có ý nghĩa đối với các quy trình kinh doanh đã được xác định trong các bước trước đó. Với
ý nghĩ đó, trong bài tập của chúng tôi, danh sách sau đây cho thấy các sự kiện có thể xảy
ra:

Hình 6.6 – Các dữ kiện có thể có được từ các bảng hiện có

Ghi chú

Trong các tình huống thực tế, chúng tôi tiến hành các hội thảo khám phá với các Chuyên
gia về Chủ đề (SMEs) để xác định các khía cạnh và sự kiện khi có thể. Nhưng đó cũng là
một tình huống phổ biến khi doanh nghiệp cung cấp một tập hợp các tệp nguồn và yêu cầu
chúng tôi tạo báo cáo phân tích.
Bây giờ chúng ta đã xác định được các kích thước và dữ kiện tiềm năng, hãy tiến thêm một
bước nữa và bắt đầu chuẩn bị Lược đồ các vì sao. Chúng ta phải thực hiện một số hành
động trước khi có thể chuyển sang các bước tiếp theo.

Như chúng tôi đã đề cập trước đó, chúng tôi sẽ không tải các bảng Bán hàng và Khách
hàng vào mô hình dữ liệu ở dạng phẳng hiện tại của chúng. Do đó, chúng tôi sẽ dỡ bỏ cả
hai bảng. Chúng tôi đã giải thích cách hủy tải các bảng trong Chương 1 , Giới thiệu về Lập
mô hình dữ liệu trong Power BI , trong phần Tìm hiểu về sự không chuẩn hóa .

Một bước khác mà chúng ta nên thực hiện là thay đổi kiểu dữ liệu của các cột. Nếu một
bước Loại đã thay đổi được tự động thêm vào Các bước đã áp dụng, thì chúng tôi chỉ cần
kiểm tra các loại dữ liệu được phát hiện và đảm bảo các loại dữ liệu được phát hiện là
chính xác. Điều này được hiển thị trong ảnh chụp màn hình sau:

Hình 6.7 – Không tải cả hai bảng Sales và Customer


Khi cài đặt Phát hiện Loại không được đặt thành Không bao giờ phát hiện các loại cột và
tiêu đề cho các nguồn không có cấu trúc, thì Power Query sẽ tự động phát hiện các tiêu đề
cột và tạo bước Loại đã Thay đổi cho mỗi bảng. Chúng ta có thể định cấu hình cài đặt này
từ Power Query Editor (hoặc Power BI) bằng cách đi tới Tùy chọn và cài đặt -> Tùy chọn,
bên dưới Phát hiện loại.

Chúng tôi cũng có thể kiểm soát hành vi loại dữ liệu tự động phát hiện của Power Query ở
cả cấp độ Toàn cầu và Tệp hiện tại . Các bước sau đây cho thấy cách thực hiện điều đó:

Để định cấu hình cài đặt loại dữ liệu tự động phát hiện ở cấp Toàn cầu , hãy làm theo các
bước sau:

1. Nhấp vào menu Tệp.


2. Nhấp vào Tùy chọn và cài đặt.
3. Nhấp vào Tùy chọn.
4. Nhấp vào Tải dữ liệu.
5. Trong phần Phát hiện Loại, bạn có tùy chọn để chọn một trong các tùy chọn sau:
○ Luôn phát hiện các loại cột và tiêu đề cho các nguồn không có cấu trúc
○ Phát hiện các loại cột và tiêu đề cho các nguồn không có cấu trúc theo từng
cài đặt của tệp
○ Không bao giờ phát hiện các loại cột và tiêu đề cho các nguồn không có cấu
trúc
Hình 6.8 – Thay đổi cấu hình Type Detection ở mức Global

1. Nhấp vào Tải dữ liệu trong phần Tệp hiện tại.


2. Chọn/bỏ chọn tùy chọn Phát hiện các loại cột và tiêu đề cho nguồn không có cấu
trúc:
Hình 6.9 – Thay đổi cấu hình Type Detection ở mức Tệp hiện tại

Trong phần này, chúng tôi đã xác định các khía cạnh và sự kiện tiềm năng. Trong phần tiếp
theo, chúng ta sẽ xem xét cách tạo các kích thước vật lý từ những kích thước tiềm năng.

Tạo bảng Kích thước


Chúng ta đã được kết nối với tệp Chương 6, Sales Data.xlsx từ Power Query Editor.
Chúng ta cần phân tích từng thứ nguyên từ góc độ kinh doanh và tạo thứ nguyên, nếu
chúng cần được tạo.

Địa lý
Nhìn vào các yêu cầu kinh doanh đã xác định cho thấy rằng chúng ta phải có một thứ
nguyên lưu giữ dữ liệu địa lý. Khi xem dữ liệu, chúng ta có thể thấy rằng có các cột liên
quan đến địa lý trong bảng Doanh số . Chúng ta có thể tạo một thứ nguyên riêng cho Địa
lý bắt nguồn từ bảng Doanh số . Tuy nhiên, điều này có thể không bao gồm tất cả các
yêu cầu kinh doanh.

Chúng ta hãy xem xét lại bảng Thứ nguyên tiềm năng , được hiển thị trong hình dưới
đây, hiển thị một số cột liên quan đến địa lý trong bảng Khách hàng . Chúng ta cần tìm
những điểm tương đồng trong dữ liệu để kết hợp dữ liệu từ cả hai bảng thành một thứ
nguyên Địa lý duy nhất . Sử dụng Phân phối cột cho thấy rằng cột CustomerKey là
khóa chính của bảng Khách hàng :

Hình 6.10 – Phân phối cột cho thấy CustomerKey là khóa chính cho bảng Khách hàng

Kích hoạt và sử dụng Phân phối Cột đã được giải thích trong Chương 3 , Chuẩn bị Dữ liệu
trong Power Query Editor ( Hình 29 và Hình 30 ).

Hãy xem Phân phối cột cho các cột SalesContinent , SalesCountry và
SalesRegion từ bảng Khách hàng và SalesTerritoryGroup ,
SalesTerritoryCountry và SalesTerritoryRegion từ bảng Sales . Rõ ràng là
số lượng giá trị riêng biệt trong mỗi cột từ bảng Khách hàng khớp với số lượng giá trị
riêng biệt trong cột tương ứng từ bảng Doanh số . Điều này được hiển thị trong ảnh chụp
màn hình sau:
Hình 6.11 – So sánh Phân phối Cột cho các cột liên quan đến địa lý từ bảng Khách hàng và
bảng Doanh số

Để đảm bảo giá trị của các cột SalesContinent , SalesCountry và SalesRegion
từ bảng Khách hàng và các cột SalesTerritoryGroup ,
SalesTerritoryCountry và SalesTerritoryRegion từ bảng Sales khớp nhau,
hãy thực hiện quy trình kiểm tra sau:

1. Tham khảo bảng Khách hàng .


2. Đổi tên bảng CustomerGeoTest .
3. Dỡ bàn.
4. Giữ các cột SalesContinent , SalesCountry và SalesRegion bằng cách
xóa các cột khác.
5. Nhấp vào biểu tượng bảng ở trên cùng bên trái của ngăn Chế độ xem Dữ liệu và
nhấp vào Xóa Bản sao. Hình ảnh sau đây cho thấy các bước trước đó:
Hình 6.12 – Các bước cần thiết để tham chiếu bảng Khách hàng và loại bỏ các bản sao

Kết quả của các bước trước như sau:

Hình 6.13 – Kết quả của việc tham chiếu bảng Khách hàng và loại bỏ các bản trùng lặp khỏi
các cột liên quan đến địa lý
Sau đó, chúng ta phải thực hiện quy trình tương tự để loại bỏ các bản sao trong các cột
SalesTerritoryGroup , SalesTerritoryCountry và SalesTerritoryRegion
khỏi bảng Sales . Hình ảnh sau đây hiển thị các kết quả sau cùng bên cạnh kết quả loại
bỏ các bản sao của cột SalesContinent , SalesCountry và SalesRegion khỏi bảng
Khách hàng :

Hình 6.14 – So sánh kết quả của bảng CustomerGeoTest và bảng SalesGeoTest

Như hình ảnh trước cho thấy, sự khác biệt duy nhất giữa hai loại này là thứ tự sắp xếp của
các cột, điều này không cần thiết. Do kết quả của bài tập trước, chúng ta không cần tạo thứ
nguyên Địa lý vì các cột SalesTerritoryGroup , SalesTerritoryCountry và
SalesTerritoryRegion từ bảng Sales là dư thừa so với các cột SalesContinent
, SalesCountry và SalesRegion từ bảng Khách hàng , trong khi địa lý -các cột có
liên quan trong bảng Khách hàng cung cấp mức độ chi tiết cao hơn.

Đơn đặt hàng


Chỉ có hai cột trong bảng Doanh số – SalesOrderNumber và
SalesOrderLineNumber – chứa dữ liệu mô tả cho các đơn đặt hàng. Hãy đặt một câu
hỏi. Tại sao chúng ta cần tạo một thứ nguyên cho điều này? Hãy nhìn vào dữ liệu:

1. Thay đổi cấu hình Cột thành dựa trên toàn bộ tập dữ liệu.
2. Nhìn vào Phân phối cột cho cả hai cột cho thấy rằng SalesOrderNumber có
27.659 giá trị riêng biệt và SalesOrderLineNumber chỉ có 8 giá trị riêng biệt:

Hình 6.15 – Nhìn vào dữ liệu Phân phối cột cho thấy có rất nhiều giá trị riêng biệt
trong SalesOrderNumber
Có nhiều giá trị riêng biệt trong SalesOrderNumber bởi chính nó làm giảm cơ hội
tạo thứ nguyên Đơn đặt hàng mới là một ý tưởng hay. Vì vậy, hãy xem liệu
chúng ta có thể tìm thêm bằng chứng để tránh tạo thứ nguyên Đơn đặt hàng hay
không. Nếu chúng ta hợp nhất hai cột, chúng ta sẽ biết rõ hơn về số lượng hàng
chúng ta nhận được trong thứ nguyên mới nếu chúng ta tình cờ tạo một cột.
3. Chọn cả hai cột SalesOrderNumber và SalesOrderLineNumber .
4. Nhấp chuột phải vào tiêu đề của cột và nhấp vào Hợp nhất cột.
5. Từ cửa sổ Hợp nhất Cột, giữ nguyên giá trị mặc định và nhấp vào OK:

Hình 6.16 – Hợp nhất cột SalesOrderNumber và SalesOrderLineNumber

Cột Đã hợp nhất mới tiết lộ rằng nó chứa 60398 giá trị riêng biệt và 60398 duy nhất, có
nghĩa là sự kết hợp của SalesOrderNumber và SalesOrderLineNumber là giá trị
khóa chính của bảng Sales , như được hiển thị trong ảnh chụp màn hình sau đây.
Do đó, ngay cả khi chúng tôi tạo một thứ nguyên riêng biệt, chúng tôi sẽ nhận được cùng
một số hàng như bảng thực tế của chúng tôi. Hơn nữa, chúng ta không thể tưởng tượng
được bất kỳ mối liên hệ nào với bất kỳ chiều không gian nào khác. Vì vậy, tốt nhất là giữ hai
cột đó trong bảng Doanh số . Các loại kích thước này không thể được di chuyển ra khỏi
bảng thực tế do đặc điểm dữ liệu của chúng. Chúng cũng không có bất kỳ thuộc tính nào
khác hoặc mối liên kết có ý nghĩa với bất kỳ kích thước nào khác. Các loại kích thước này
được gọi là Kích thước suy biến:
Hình 6.17 – Kết quả cột được hợp nhất

Bây giờ, chúng ta phải xóa các bước Cột được hợp nhất mà chúng ta vừa tạo khỏi Các
bước đã áp dụng.

Sản phẩm
Thứ nguyên Sản phẩm cho đến nay là thứ rõ ràng nhất có ba cột mô tả. Chúng ta có thể
lấy thứ nguyên Sản phẩm từ bảng Doanh số bằng cách tham chiếu bảng Doanh số .
Sau đó, chúng ta có thể loại bỏ các cột khác để giữ lại các cột Product ,
ProductSubcategory và ProductCategory . Bước tiếp theo, chúng ta phải xóa các
bản sao khỏi bảng Sản phẩm . Ngoài ra, chúng ta cần tạo cột ProductKey làm khóa
chính của bảng Sản phẩm . Tiếp theo, chúng ta cần hợp nhất bảng Sales với bảng
Product để lấy ProductKey . Chúng tôi cũng có thể đổi tên các cột thành các phiên bản
thân thiện hơn với người dùng. Chúng tôi sẽ đổi tên ProductSubcategory thành
Product Subcategory và ProductCategory thành Product Category .

Ghi chú

Trong tương lai, chúng tôi sẽ tham khảo bảng Doanh số nhiều lần. Do đó, chúng ta sẽ đổi
tên bảng Sales Cơ sở bán hàng .

Các bước sau đây cho biết cách triển khai quy trình trước đó trong Power Query Editor:
1. Đổi tên bảng Doanh số Cơ sở Bán hàng :

Hình 6.18 – Đổi tên bảng Doanh số Cơ sở Doanh số


2. Tham khảo bảng Cơ sở Doanh số :

Hình 6.19 – Tham chiếu bảng Cơ sở Doanh số


3. Đổi tên bảng tham chiếu Product .
4. Chọn các cột ProductCategory , ProductSubcategory và Product tương
ứng.
Lưu ý
Power Query sẽ sắp xếp các cột theo thứ tự lựa chọn của chúng tôi trong Bước 4 .
5. Nhấp chuột phải vào một trong các cột đã chọn và nhấp vào Xóa các cột khác:

Hình 6.20 – Tùy chọn Xóa các cột khác


6. Nhấp vào nút bảng ở trên cùng bên trái của ngăn Chế độ xem dữ liệu.
7. Nhấp vào Xóa các mục trùng lặp:
Hình 6.21 – Xóa các mục trùng lặp khỏi tất cả các hàng
Cho đến nay, chúng ta đã có các giá trị riêng biệt cho từng hàng dữ liệu trong bảng
Sản phẩm . Bây giờ, chúng ta cần tạo một mã định danh duy nhất cho mỗi hàng:
8. Nhấp vào tab Thêm cột từ ruy-băng.
9. Nhấp vào nút thả xuống Cột chỉ mục.
10. Click From 1:

Hình 6.22 – Thêm một cột Index với chỉ số bắt đầu từ 1
11. Cho đến giờ, chúng ta đã tạo một cột chỉ mục với tên mặc định là Chỉ mục . Chúng
ta cần đổi tên cột này ProductKey . Chúng tôi có thể chỉnh sửa biểu thức Power
Query mà chúng tôi đã tạo trong bước Chỉ mục đã thêm thay vì đổi tên nó thành
bước Đổi tên cột mới.
12. Nhấp vào bước Chỉ mục đã thêm từ Các bước đã áp dụng. Sau đó, từ thanh công
thức, thay đổi Index thành ProductKey , như minh họa trong ảnh chụp màn hình
sau:
Hình 6.23 – Thay đổi tên cột chỉ mục mặc định

Cùng với đó, chúng tôi đã tạo thứ nguyên Sản phẩm .

Tiền tệ
Cột Tiền tệ trong bảng Cơ sở Bán hàng chứa mô tả tiền tệ cho mỗi giao dịch. Vì vậy,
theo định nghĩa, nó là một thứ nguyên. Hãy nêu câu hỏi Tại sao ở đây. Tại sao chúng ta
cần tạo một bảng riêng cho Currency ? Để trả lời câu hỏi này, chúng ta hãy phân tích tình
huống chi tiết hơn. Như được hiển thị trong ảnh chụp màn hình sau đây, hộp phân phối cột,
khi được đặt để hoạt động dựa trên toàn bộ tập dữ liệu, cho thấy rằng lực lượng của cột
Tiền tệ thấp, chỉ có 6 giá trị riêng biệt:

Hình 6.24 – Phân bổ cột cho cột Tiền tệ trên toàn bộ tập dữ liệu

Do việc lập chỉ mục Columnstore trong công cụ xVelocity cung cấp khả năng nén dữ liệu tốt
hơn và hiệu suất tốt hơn trên các cột có số lượng thẻ thấp, nên chúng tôi có thể mong đợi
hiệu suất hoặc mức tăng lưu trữ tối thiểu hoặc không hợp lý bằng cách tạo bảng thứ
nguyên mới cho Tiền tệ . Đây là trường hợp trong kịch bản của chúng tôi. Chúng tôi
không đạt được hiệu suất tốt hơn hoặc tiết kiệm nhiều dung lượng lưu trữ hoặc bộ nhớ
bằng cách tạo thứ nguyên Tiền tệ riêng biệt . Bên cạnh đó, chúng tôi có các thuộc
tính khác cung cấp nhiều mô tả hơn cho tiền tệ. Cuối cùng nhưng không kém phần quan
trọng, Tiền tệ không có bất kỳ mối liên kết có ý nghĩa nào với bất kỳ khía cạnh nào khác.
Do đó, chúng ta có thể giữ cột Tiền tệ dưới dạng Thứ nguyên suy biến trong bảng thực
tế.

Khách hàng
Chúng ta có thể lấy bảng Khách hàng từ bảng Khách hàng ban đầu từ nguồn. Để
làm điều này, chúng tôi sẽ đổi tên bảng Khách hàng ban đầu Cơ sở khách hàng .

Hãy xem bảng Cơ sở Doanh số để xem mỗi hàng có liên quan như thế nào với bảng Cơ
sở Khách hàng . Như được hiển thị trong ảnh chụp màn hình sau đây, bảng Cơ sở bán
hàng có cột Khóa khách hàng . Hộp Chất lượng Cột của Khóa khách hàng trong
bảng Cơ sở bán hàng cho thấy rằng có một khóa khách hàng cho mỗi giao dịch bán
hàng đơn lẻ trong bảng Cơ sở bán hàng (0% trống). Do đó, mỗi hàng của bảng Cơ sở
khách hàng mô tả các giao dịch bán hàng từ quan điểm của khách hàng:

Hình 6.25 – Thông tin Chất lượng Cột hiển thị 0% Empty cho CustomerKey

Mỗi hàng giữ thông tin mô tả về một khách hàng. Do đó, việc có một chiều Khách hàng là
tất yếu. Vì vậy, hãy tạo bảng Khách hàng bằng cách thực hiện theo các bước sau:
1. Tham khảo bảng Cơ sở khách hàng :

Hình 6.26 – Tham chiếu bảng Cơ sở khách hàng


2. Đổi tên bảng tham chiếu Khách hàng .
Chúng ta cần giữ các cột sau bằng cách loại bỏ các cột khác; nghĩa là,
CustomerKey , Title , FirstName , MiddleName , LastName , NameStyle
, BirthDate , MaritalStatus , Suffix , Gender , EmailAddress ,
YearlyIncome , TotalChildren , NumberChildrenAtHome , Education ,
Nghề nghiệp , HouseOwnerFlag , NumberCarsOwned , AddressLine1 ,
AddressLine2 , Phone , DateFirstPurchase và CommuteDistance .
3. Cách đơn giản nhất để làm như vậy là nhấp vào Chọn Cột từ tab Trang chủ.
4. Giữ các cột trước đó và bỏ chọn phần còn lại.
5. Bấm OK:
Hình 6.27 – Loại bỏ các cột không cần thiết

Cùng với đó, chúng tôi đã tạo thứ nguyên Khách hàng . Vì thứ nguyên Khách hàng đã
có Khóa khách hàng nên chúng tôi không cần thực hiện thêm bất kỳ hành động nào.

Như bạn có thể thấy, chúng tôi đã xóa tất cả các cột liên quan đến địa lý khỏi thứ nguyên
Khách hàng . Tiếp theo chúng ta sẽ tạo một chiều riêng cho chúng.

Nhân khẩu học bán hàng


Trước đây, chúng tôi đã xem xét việc tạo thứ nguyên Địa lý , điều này cho thấy rằng các
cột địa lý trong bảng Cơ sở khách hàng có thể cung cấp cho chúng tôi nhiều chi tiết
hơn, điều này sẽ giúp chúng tôi tạo báo cáo phân tích chính xác hơn với độ chi tiết thấp
hơn. Bây giờ, hãy tạo một thứ nguyên mới để giữ các mô tả Nhân khẩu học bán hàng
được lấy từ Cơ sở khách hàng , như sau:

1. Tham khảo bảng Cơ sở khách hàng từ Power Query Editor.


2. Đổi tên bảng mới Sales Demographic .
3. Nhấp vào nút Chọn Cột từ tab Trang chủ.
4. Bỏ chọn tất cả các cột ngoài Thành phố , StateProvinceCode ,
StateProvinceName , CountryRegionCode , CountryRegionName ,
PostalCode , SalesRegion , SalesCountry và SalesContinent .
5. Bấm OK:

Hình 6.28 – Tham chiếu bảng Cơ sở khách hàng để tạo bảng Nhân khẩu học bán
hàng và giữ các cột có liên quan
Nhìn vào dữ liệu trong các cột CountryRegionName và SalesCountry cho thấy
hai cột chứa dữ liệu giống nhau. Do đó, chúng ta cần xóa một trong số chúng bằng
cách bấm đúp vào bước Xóa các cột khác và bỏ chọn cột CountryRegionName .
Bước tiếp theo là loại bỏ các hàng trùng lặp. Điều này đảm bảo rằng thứ nguyên
không chứa các hàng trùng lặp trong tương lai, ngay cả khi hiện tại không có hàng
trùng lặp nào.
6. Nhấp vào nút chuyển đổi bảng ở trên cùng bên trái của ngăn Chế độ xem dữ liệu.
7. Nhấp vào Xóa các mục trùng lặp:

Hình 6.29 – Xóa các mục trùng lặp khỏi bảng Nhân khẩu học bán hàng
Bây giờ, chúng ta cần thêm một cột Chỉ mục để tạo khóa chính cho thứ nguyên
Nhân khẩu học bán hàng .
8. Nhấp vào nút thả xuống Cột chỉ mục từ tab Thêm cột.
9. Nhấp vào Từ 1:

Hình 6.30 – Thêm một cột Chỉ mục vào bảng Nhân khẩu bán hàng
10. Thay thế Index bằng SalesDemographicKey từ thanh công thức.

11. Nhấp vào nút Gửi :

Hình 6.31 – Thay thế Index bằng SalesDemographicKey

Cho đến nay, chúng tôi đã tạo tất cả các thứ nguyên tiềm năng có thể được lấy từ các bảng
Cơ sở bán hàng và Cơ sở khách hàng . Như chúng ta đã thảo luận trước đó trong
chương này, chúng ta cũng cần tạo thứ nguyên Ngày và thứ nguyên Thời gian . Chúng
tôi sẽ làm như vậy trong các phần sau.

Ngày
Do phiên thu thập yêu cầu của chúng tôi với doanh nghiệp, chúng tôi nhận thấy rằng chúng
tôi cần phải có thứ nguyên Ngày và thứ nguyên Thời gian vì doanh nghiệp cần chúng
tôi phân tích Dữ liệu bán hàng theo các yếu tố ngày và giờ. Như chúng ta đã thảo luận
trong Chương 2 , Phân tích dữ liệu eXpressions và Lập mô hình dữ liệu , thứ nguyên Ngày
có thể được tạo bằng DAX. Chúng ta cũng đã thảo luận về những ưu điểm và nhược điểm
của việc sử dụng hàm CALENDARAUTO() trong DAX. Trong phần này, chúng ta sẽ tạo một
hàm tùy chỉnh trong Power Query Editor để tạo một thứ nguyên Ngày đơn giản . Chức
năng tùy chỉnh này sẽ chấp nhận hai tham số đầu vào: Start Year và End Year . Sau
đó, nó sẽ tạo ra một bảng Ngày bắt đầu từ ngày 1 tháng 1 của Năm bắt đầu và kết
thúc vào ngày 31 tháng 12 của Năm cuối .

Các ngày được tạo trong cột Ngày là liên tục và không có bất kỳ khoảng trống nào ở giữa
các ngày. Các bước sau đây cho biết cách sử dụng biểu thức sau để tạo và gọi hàm tùy
chỉnh:

1. Hàm tùy chỉnh có thể được tạo bằng cách sao chép biểu thức Power Query sau:

// fnGenerateDate

(#''Đầu Năm'' là số, #''Cuối Năm'' là số) =>

cho phép

GenerateDates = List.Dates(#date(#''Start Year'',1,1),


Duration.Days(Duration.From(#date(#''End Year'', 12, 31) - #date(#
''Năm bắt đầu'' - 1,12,31))), #duration(1,0,0,0) ),
#''Converted to Table'' =
Table.TransformColumnTypes(Table.FromList(GenerateDates,
Splitter.SplitByNoth(), {''Date''}), {''Date'', Date.Type}),

#''Added Custom'' = Table.AddColumn(#''Converted to Table'',


''DateKey'', each Int64.From(Text.Combine({Date.ToText([Date],
''yyyy'' ), Date.ToText([Ngày], ''MM''), Date.ToText([Ngày],
''dd'')})), Int64.Type),

#''Year Column Added'' = Table.AddColumn(#''Added Custom'',


''Year'', each Date.Year([Date]), Int64.Type),

#''Cột quý đã thêm'' = Table.AddColumn(#''Cột năm đã thêm'',


''Quý'', mỗi ''Qtr ''&Text.From(Date.QuarterOfYear([Date])) , Văn
bản. Kiểu),

#''Cột Thứ Tự Tháng Đã Thêm'' = Table.AddColumn(#''Cột Quý Đã


Thêm'', ''Thứ Tự Tháng'', each Date.ToText([Date], ''MM''),
Text.Type),

#''Cột Ngắn Tháng Đã Thêm'' = Table.AddColumn(#''Cột Thứ Tự Tháng Đã


Thêm'', ''Tháng Ngắn'', mỗi Date.ToText([Ngày], ''MMM''), Text.Type)
,

#''Cột Tháng Đã Thêm'' = Table.AddColumn(#''Cột Tháng Ngắn Được


Thêm'', ''Tháng'', mỗi Date.MonthName([Ngày]), Text.Type)

TRONG
2. #''Cột Tháng Đã Thêm''
3. Sao chép
4. Lưu ý
Mã trước cũng có sẵn trong kho GitHub của cuốn sách này, trong Chương 6, Tạo
tệp Date Dimension.m , qua URL sau:
https://github.com/PacktPublishing/Expert-Data-Modeling-with-Power-
BI/blob/master/Chapter%206%2C%20Generate%20Date%20Dimension.m .
5. Trong Power Query Editor, bấm vào nút thả xuống Nguồn mới.
6. Nhấp vào Truy vấn trống:

Hình 6.32 – Thêm một truy vấn trống trong Power Query Editor
7. Đổi tên truy vấn mới từ Query1 thành fnGenerateDate .
8. Nhấp vào nút Trình chỉnh sửa nâng cao từ tab Trang chủ.
9. Xóa mã hiện có và dán các biểu thức mà chúng tôi đã sao chép ở bước đầu tiên.
10. Nhấp vào Xong:
Hình 6.33 – Tạo hàm tùy chỉnh fnGenerateDate trong Power Query Editor

Quy trình trước đó tạo hàm tùy chỉnh fnGenerateDate trong Power Query Editor. Bước
tiếp theo là gọi hàm bằng cách nhập các tham số Năm bắt đầu và Năm kết thúc . Trong
các tình huống trong thế giới thực, phạm vi ngày của thứ nguyên Ngày được quy định bởi
doanh nghiệp. Doanh nghiệp cho biết ngày bắt đầu nào phù hợp với doanh nghiệp và ngày
nào trong tương lai phù hợp nhất với doanh nghiệp.

Vì vậy, chúng ta có thể dễ dàng gọi hàm fnGenerateDate bằng cách chuyển các tham
số Ngày bắt đầu và Ngày kết thúc . Nhưng trong một số trường hợp khác, chúng ta
cần tìm ngày tối thiểu và tối đa của tất cả các cột có kiểu dữ liệu Date hoặc DateTime để
góp phần phân tích dữ liệu của chúng ta. Có nhiều cách khác nhau để khắc phục những
trường hợp đó, chẳng hạn như sau:

● Chúng tôi có thể nhận được ngày tối thiểu và tối đa bằng cách đánh dấu dữ liệu nếu
tập dữ liệu nhỏ.
● Chúng ta có thể sắp xếp từng giá trị OrderDate , DueDate và ShipDate theo
thứ tự tăng dần để nhận ngày tối thiểu, sau đó chúng ta có thể sắp xếp các cột đó
theo thứ tự giảm dần để nhận ngày tối đa.
● Chúng ta có thể sử dụng hàm List.Min() cho từng cột đã nói ở trên để lấy ngày
tối thiểu. Sau đó, sử dụng hàm List.Max() cho mỗi cột sẽ cho chúng ta ngày tối
đa.
● Chúng tôi có thể tìm thấy ngày tối thiểu và tối đa bằng cách sử dụng DAX.
● Chúng ta có thể sử dụng tính năng Cấu hình cột trong Power Query Editor.

Bất kể chúng ta chọn phương pháp nào, sau khi tìm thấy Ngày bắt đầu và Ngày kết thúc,
trong mẫu của chúng ta lần lượt là 2010 và 2014, chúng ta phải gọi hàm fnGenerateDate
như sau:

1. Chọn chức năng tùy chỉnh fnGenerateDate từ ngăn Truy vấn.


2. Nhập 2010 cho tham số Năm bắt đầu và 2014 cho tham số Năm kết thúc.
3. Nhấp vào Gọi:

Hình 6.34 – Gọi hàm fnGenerateDate


gọi hàm fnGenerateDate sẽ tạo một bảng mới có tên là Hàm được gọi . Đổi tên nó là
Date , như trong ảnh chụp màn hình sau:

Hình 6.35 – Đổi tên hàm tùy chỉnh được gọi Ngày

Cho đến nay, chúng tôi đã tạo thứ nguyên Ngày . Bây giờ, hãy tạo thứ nguyên Thời gian
.

Thời gian
Như chúng tôi đã đề cập trước đây, trong các hội thảo thu thập yêu cầu với doanh nghiệp,
chúng tôi phát hiện ra rằng cả thứ nguyên Ngày và Giờ đều bắt buộc. Trong phần trước,
chúng ta đã tạo một hàm tùy chỉnh để tạo thứ nguyên Ngày . Như chúng ta đã thảo luận
trong Chương 2 , Phân tích dữ liệu eXpressions và Lập mô hình dữ liệu , thứ nguyên Thời
gian có thể được tạo bằng DAX. Trong phần này, chúng ta sẽ thảo luận cách tạo thứ
nguyên Thời gian trong Power Query.
Lý do chúng ta cần tạo thứ nguyên Thời gian là tầm thường. Chúng tôi cần nó để có thể
phân tích dữ liệu của mình theo các yếu tố thời gian khác nhau, chẳng hạn như giờ, phút,
giây hoặc nhóm thời gian (hoặc dải thời gian), chẳng hạn như 5 phút, 15 phút, 30 phút, v.v.

Biểu thức Power Query sau đây tạo thứ nguyên Thời gian với các dải thời gian 5 phút,
15 phút, 30 phút, 45 phút và 60 phút:

cho phép

Nguồn = Table.FromList({1..86400}, Splitter.SplitByNoth()),

#''Cột đã đổi tên'' = Table.RenameColumns(Source,{{''Column1'',


''ID''}}),

#''Cột thời gian đã thêm'' = Table.AddColumn(#''Renamed Columns'',


''Time'', each Time.From(#datetime(1970,1,1,0,0,0) + #duration
(0,0,0,[ID]))),

#''Giờ đã thêm'' = Table.AddColumn(#''Cột thời gian đã thêm'',


''Giờ'', mỗi Time.Hour([Thời gian])),

#''Phút đã thêm'' = Table.AddColumn(#''Giờ đã thêm'', ''Phút'', mỗi


Time.Minute([Thời gian])),

#''5 phút được thêm'' = Table.AddColumn(#''Phút được thêm'', ''5


phút được thêm'', mỗi Time.From(#datetime(1970,1,1,0,0,0) +
#duration(0, 0, Number.RoundDown(Time.Minute([Time])/5) * 5, 0)) +
#duration(0, 0, 5, 0)),
#''15 băng tần tối thiểu được thêm'' = Table.AddColumn(#''5 băng tần
tối thiểu được thêm'', ''15 băng tần tối thiểu'', mỗi
Time.From(#datetime(1970,1,1,0,0, 0) + #duration(0, 0,
Number.RoundDown(Time.Minute([Time])/15) * 15, 0)) + #duration(0, 0,
15, 0)),

#''30 băng tần tối thiểu được thêm'' = Table.AddColumn(#''15 băng


tần tối thiểu được thêm'', ''30 băng tần tối thiểu'', mỗi
Time.From(#datetime(1970,1,1,0,0, 0) + #duration(0, 0,
Number.RoundDown(Time.Minute([Time])/30) * 30, 0)) + #duration(0, 0,
30, 0)),

#''45 băng tần tối thiểu được thêm'' = Table.AddColumn(#''30 băng


tần tối thiểu được thêm'', ''45 băng tần tối thiểu'', mỗi
Time.From(#datetime(1970,1,1,0,0, 0) + #duration(0, 0,
Number.RoundDown(Time.Minute([Time])/45) * 45, 0)) + #duration(0, 0,
45, 0)),

#''60 băng tần tối thiểu được thêm'' = Table.AddColumn(#''45 băng


tần tối thiểu được thêm'', ''60 băng tần tối thiểu'', mỗi
Time.From(#datetime(1970,1,1,0,0, 0) + #duration(0, 0,
Number.RoundDown(Time.Minute([Time])/60) * 60, 0)) + #duration(0, 0,
60, 0)),

#''Các cột khác đã bị xóa'' = Table.SelectColumns(#''Băng tần tối


thiểu 60 phút đã thêm'',{''Thời gian'', ''Giờ'', ''Phút'', ''Băng
tần 5 phút'', ''Khoảng 15 phút'', ''Khoảng 30 phút'', ''Khoảng 45
phút'', ''Khoảng 60 phút''}),
#''Loại đã thay đổi'' = Table.TransformColumnTypes(#''Các cột khác
đã bị loại bỏ'',{{''Thời gian'', nhập thời gian}, {''Giờ'',
Int64.Type}, {''Phút' ', Int64.Type}, {''Băng tần 5 phút'', nhập
thời gian}, {''Băng tần 15 phút'', nhập thời gian}, {''Băng tần 30
phút'', nhập thời gian}, {''45 Băng tần tối thiểu'', nhập thời
gian}, {''Băng tần tối thiểu 60'', nhập thời gian}})

TRONG

#''Đã thay đổi loại''

Sao chép
Ghi chú

Mã trước cũng có sẵn trong kho lưu trữ GitHub của cuốn sách này, trong Chương 6, Tạo
tệp Dimension.m theo thời gian , qua URL sau:
https://github.com/PacktPublishing/Expert-Data-Modeling-with-Power-BI
/blob/master/Chapter%206%2C%20Generate%20Time%20Dimension.m .

Bây giờ, chúng ta đã có sẵn mã trước đó, chúng ta cần tạo một Truy vấn trống mới, đặt tên
là Thời gian , sau đó sao chép và dán các biểu thức trước đó vào Advanced Editor, như
minh họa trong ảnh chụp màn hình sau:
Hình 6.36 – Tạo thứ nguyên Thời gian trong Power Query Editor

Trong phần này và phần trước, chúng ta đã tạo thứ nguyên Ngày và Giờ trong Power
Query. Bạn có thể thắc mắc điều này khác với việc tạo các thứ nguyên đó như thế nào
trong DAX, điều này đưa chúng ta đến phần tiếp theo.

Tạo thứ nguyên Ngày và Giờ –


Power Query so với DAX
Trong hai phần trước, chúng ta đã thảo luận về việc tạo thứ nguyên Ngày và Giờ trong
Power Query. Chúng ta cũng đã thảo luận về việc tạo cả hai thứ nguyên với DAX trong
Chương 2 , eXpressions phân tích dữ liệu và lập mô hình dữ liệu . Trong phần này, chúng
ta sẽ thảo luận về sự khác biệt giữa hai cách tiếp cận này.
Nói chung, sau khi chúng tôi tải các bảng vào mô hình dữ liệu, cả hai cách tiếp cận sẽ hoạt
động giống nhau và có hiệu suất tương tự nhau. Nhưng cũng có một số khác biệt có thể
khiến chúng ta chọn cách tiếp cận này thay vì cách tiếp cận khác, như sau:

● Chúng ta có thể tạo thứ nguyên Ngày và Giờ trong Power Query bằng cách tạo
hàm tùy chỉnh hoặc truy vấn tĩnh. Dù bằng cách nào, chúng ta có thể sử dụng truy
vấn để tạo Luồng dữ liệu Power BI và cung cấp chúng trong toàn tổ chức. Điều này
hiện không thể thực hiện được với DAX.
● Các bảng được tính toán được tạo trong DAX không thể truy cập được trong lớp
Power Query. Do đó, chúng tôi không thể thực hiện bất kỳ phương trình nào trong
Power Query theo thứ nguyên Ngày hoặc Giờ nếu cần.

● Nếu chúng ta cần xem xét các ngày lễ địa phương trong bảng Ngày , chúng ta có
thể kết nối với các trang web công cộng qua internet và kết hợp dữ liệu đó trong
Power Query. Tùy chọn này KHÔNG khả dụng trong DAX.
● Nếu chúng ta cần xem xét tất cả các cột có kiểu dữ liệu Ngày hoặc Ngày giờ trên
mô hình dữ liệu, thì việc sử dụng CALENDARAUTO() trong DAX sẽ cực kỳ tiện dụng.
Hàm tương tự hiện không tồn tại trong Power Query.
● Kiến thức của chúng tôi về Power Query và DAX cũng là một yếu tố cần thiết để xem
xét. Một số người trong chúng ta cảm thấy thoải mái hơn với một ngôn ngữ so với
ngôn ngữ kia.

Tạo bảng thực tế


Bây giờ chúng ta đã tạo tất cả các kích thước, đã đến lúc tạo một bảng thực tế có chứa các
giá trị số và các khóa chính của kích thước dưới dạng khóa ngoại. Nhìn vào dữ liệu Cơ sở
bán hàng và Cơ sở khách hàng cho chúng ta thấy rằng bảng Cơ sở bán hàng chứa
nhiều giao dịch có giá trị số. Do đó, một bảng thực tế có thể được lấy từ bảng Cơ sở
Doanh số mà chúng ta sẽ gọi là Doanh số bằng cách thực hiện theo các bước sau:
1. Tham khảo bảng Sales Base rồi đổi tên bảng mới là Sales .
Chúng tôi muốn lấy ProductKey từ bảng Sản phẩm . Để làm như vậy, chúng ta
có thể hợp nhất bảng Doanh số với bảng Sản phẩm .
2. Nhấp vào Hợp nhất truy vấn.
3. Chọn các cột ProductCategory , ProductSubcategory và Product tương
ứng.
4. Chọn bảng Sản phẩm từ danh sách thả xuống.
5. Một lần nữa, chọn các cột ProductCategory , ProductSubcategory và
Product .
6. Chọn Bên ngoài bên trái (tất cả từ đầu tiên, khớp từ thứ hai) từ danh sách thả xuống
Loại tham gia.
7. Nhấn OK:

Hình 6.37 – Hợp nhất bảng Sales với bảng Product


8. Điều này tạo ra một cột có cấu trúc mới có tên là Product.1 và một bước chuyển
đổi mới trong Các bước đã áp dụng. Tên mặc định cho bước này là Truy vấn được
hợp nhất. Đổi tên nó Bán hàng hợp nhất với sản phẩm.
9. Mở rộng cột Sản phẩm.1 .
10. Đánh dấu vào cột ProductKey (không đánh dấu phần còn lại).
11. Bỏ chọn tùy chọn Sử dụng tên cột gốc làm tiền tố.
12. Nhấp OK:

Hình 6.38 – Mở rộng cột có cấu trúc Product.1


Bây giờ, chúng ta cần lấy SalesDemographicKey từ bảng Sales Demographic
. Các cột tạo mã định danh duy nhất cho mỗi hàng trong bảng Nhân khẩu bán
hàng là SalesCountry , City , StateProvinceName và PostalCode . Tuy
nhiên, bảng Doanh số không chứa tất cả các cột đó. Ngoài ra, thứ nguyên Nhân
khẩu học bán hàng được lấy từ bảng Cơ sở khách hàng . Do đó, chúng tôi
phải hợp nhất bảng Doanh số với bảng Cơ sở khách hàng thông qua cột
CustomerKey , sau đó hợp nhất lại với bảng Nhân khẩu học bán hàng để đạt
được SalesDemographicKey .
13. Nhấp vào Hợp nhất truy vấn một lần nữa.
14. Chọn cột CostomerKey trong phần Bán hàng .
15. Chọn Cơ sở khách hàng từ danh sách thả xuống.
16. Chọn Khóa khách hàng .
17. Chọn Bên ngoài bên trái cho Loại tham gia.
18. Nhấp vào OK:

Hình 6.39 – Hợp nhất bảng Doanh số với Cơ sở Khách hàng


Thao tác này sẽ tạo ra một cột có cấu trúc mới có tên Cơ sở Khách hàng . Nó
cũng tạo ra một bước chuyển đổi mới trong Các bước đã áp dụng có tên là Truy vấn
được hợp nhất.
19. Đổi tên bước này Bán hàng hợp nhất với cơ sở khách hàng.
20. Mở rộng cột có cấu trúc Cơ sở khách hàng .
21. Giữ các cột SalesCountry , City , StateProvinceName và PostalCode
được chọn và bỏ chọn các cột còn lại.
22. Bỏ chọn tùy chọn Sử dụng tên cột gốc làm tiền tố.
23. Nhấp vào OK:

Hình 6.40 – Mở rộng cột có cấu trúc Cơ sở khách hàng


Bây giờ, chúng ta cần hợp nhất các kết quả với bảng Nhân khẩu học bán hàng
và lấy Khóa Nhân khẩu học bán hàng của mình .
24. Sau khi nhấp vào Hợp nhất truy vấn một lần nữa, hãy chọn các cột
SalesCountry , City , StateProvinceName và PostalCode .
25. Chọn bảng Nhân khẩu học bán hàng từ danh sách thả xuống.
26. Chọn các cột SalesCountry , City , StateProvinceName và PostalCode
tương ứng. Hãy nhớ rằng, trình tự là quan trọng.
27. Giữ Loại tham gia được đặt thành Bên ngoài bên trái.
28. Nhấp vào OK:

Hình 6.41 – Hợp nhất Doanh số bán hàng với Nhân khẩu học bán hàng
Thao tác này sẽ tạo ra một cột có cấu trúc mới có tên Nhân khẩu học bán hàng
. Một bước Truy vấn được hợp nhất mới cũng được tạo trong Các bước đã áp dụng.
29. Đổi tên bước Truy vấn được hợp nhất Bán hàng được hợp nhất với Nhân khẩu học
bán hàng.
30. Mở rộng cột có cấu trúc Nhân khẩu học bán hàng .
31. Bỏ chọn tất cả các cột ngoại trừ cột SalesDemographicKey .
32. Bỏ chọn tùy chọn Sử dụng tên cột gốc làm tiền tố.
33. Bấm OK:

Hình 6.42 – Hợp nhất Doanh số bán hàng với Nhân khẩu học bán hàng
Bây giờ chúng ta đã thêm SalesDemographicKey vào bảng Doanh số , đã đến
lúc xem xét các cột trong bảng Doanh số với kiểu dữ liệu Ngày hoặc Ngày giờ .
Bảng Sales có ba cột với kiểu dữ liệu DateTime . Nhìn kỹ hơn vào dữ liệu cho
thấy rằng OrderDate là giá trị duy nhất thực sự nằm trong DateTime , trong khi
hai giá trị còn lại biểu thị các giá trị Ngày vì phần Thời gian của tất cả các giá trị
là 12:00:00 AM . Do đó, tốt hơn hết là chuyển đổi kiểu dữ liệu thành Date . Cột
OrderDate đại diện cho cả Ngày và Giờ . Phần duy nhất còn lại là lấy riêng các
giá trị Ngày và Giờ để có thể sử dụng chúng trong các mối quan hệ của mô hình
dữ liệu. Vì vậy, chúng ta cần chia OrderDate thành hai cột riêng biệt: Order Date
và Order Time . Thực hiện theo các bước sau để làm như vậy:
34. Chọn cột OrderDate .
35. Bấm vào nút Tách cột từ tab Trang chủ của dải băng.
36. Bấm theo dấu phân cách.
37. Chọn Dấu cách làm dấu phân cách.
38. Nhấp vào Dấu tách ngoài cùng bên trái để Chia tại.
39. Nhấn OK:

Hình 6.43 – Tách OrderDate bằng dấu phân cách


40. Đổi tên bước Tách cột theo dấu phân cách thành Tách ngày đặt hàng theo dấu phân
cách từ các bước đã áp dụng.
41. Từ thanh công thức, thay đổi OrderDate.1 thành Order Date và thay đổi
OrderDate.2 thành Order Time . Sau đó, gửi những thay đổi này:

Hình 6.44 – Thay đổi tên cột phân tách từ thanh công thức
Bước Loại đã thay đổi sẽ được thêm tự động nếu cài đặt Phát hiện loại được đặt để
phát hiện các loại dữ liệu. Giữ bước này. Bây giờ, chúng ta cần thay đổi kiểu dữ liệu
của các cột DueDate và ShipDate từ DateTime thành Date .
42. Nhấp vào bước Loại đã thay đổi từ khung Bước đã áp dụng.
43. Chọn cả Ngày đến hạn và Ngày giao hàng .
44. Nhấp vào nút thả xuống Loại dữ liệu từ tab Trang chủ.
45. Select Date :

Hình 6.45 – Thay đổi kiểu dữ liệu DueDate và ShipDate


Cho đến nay, chúng ta đã thêm tất cả các cột chính từ tham số vào bảng thực tế, cột
này sẽ được sử dụng để tạo mối quan hệ giữa các tham số và bảng thực tế trong dữ
liệu lớp mô hình. Phần duy nhất còn lại của câu đố là dọn sạch bảng Doanh số
bằng cách xóa tất cả các cột không cần thiết.
46. Nhấp vào nút Chọn cột từ tab Trang chủ.
47. Giữ các cột sau được đánh dấu và bỏ chọn phần còn lại; nghĩa là, CustomerKey ,
SalesOrderNumber , SalesOrderLineNumber , OrderQuantity ,
ExtendedAmount , TotalProductCost , SalesAmount , TaxAmt , Freight
, Order Date , Order Time , DueDate , ShipDate , Currency và
ProductKey .
48. Bấm OK:
Hình 6.46 – Xóa các cột không cần thiết khỏi bảng Fact

Nhìn vào kết quả của các bước chuyển đổi trước đó, bảng dữ kiện Doanh số chứa các
thông tin sau:

● Các cột OrderQuantity , ExtendedAmount , TotalProductCost ,


SalesAmount , TaxAmt , Freight là các dữ kiện.

● CustomerKey , Order Date , Order Time , DueDate , ShipDate ,


ProductKey và SalesDemographicKey là các khóa ngoại sẽ được sử dụng
trong lớp mô hình hóa dữ liệu để tạo mối quan hệ giữa bảng Sales và các thứ
nguyên của nó.
● SalesOrderNumber , SalesOrderLineNumber và Currency là các thứ
nguyên suy biến.

Bản tóm tắt


Trong chương này, chúng tôi đã chuẩn bị dữ liệu trong Lược đồ hình sao, lược đồ này đã
được tối ưu hóa cho mục đích báo cáo và phân tích dữ liệu trên cấu trúc dữ liệu phẳng.
Chúng tôi đã xác định các thứ nguyên tiềm năng và thảo luận về lý do tạo hoặc không tạo
các bảng thứ nguyên riêng biệt. Sau đó, chúng tôi đã thực hiện các bước chuyển đổi để tạo
các bảng thứ nguyên hợp lý. Cuối cùng, chúng tôi đã thêm tất cả các cột khóa thứ nguyên
vào bảng thực tế và loại bỏ tất cả các cột không cần thiết, điều này mang lại cho chúng tôi
một bảng thực tế gọn gàng chỉ chứa tất cả các cột cần thiết.

Trong chương tiếp theo, chúng ta sẽ đề cập đến một chủ đề thú vị và khá quan trọng: Các
phương pháp hay nhất phổ biến về chuẩn bị dữ liệu . Bằng cách tuân theo các phương
pháp hay nhất này, chúng tôi có thể tránh được rất nhiều chi phí làm lại và bảo trì.

You might also like