
Data Warehouse là gì?
Data Warehouse (kho dữ liệu) là một hệ thống tổng hợp dữ liệu từ một hoặc nhiều nguồn thành một kho dữ liệu duy nhất, nhằm hỗ trợ các yêu cầu phân tích dữ liệu khác nhau như data mining, AI, machine learning, front-end reporting và online analytical processing (OLAP).
Data warehouse là một phần không thể thiếu trong hầu hết các ngành công nghiệp, bao gồm thương mại điện tử, vận tải, y tế, ngân hàng và công nghệ tài chính, mạng xã hội, …
Dữ liệu được tập trung ở một nơi duy nhất giúp người dùng tận dụng tất cả dữ liệu của công ty và truy cập vào đó một cách hiệu quả. Việc tách biệt hoạt động cơ sở dữ liệu và phân tích dữ liệu cũng cải thiện hiệu suất truy cập dữ liệu, giúp các query phân tích nặng không ảnh hưởng đến hoạt động kinh doanh thường nhật của doanh nghiệp.
- Các tổ chức bán lẻ và thương mại điện tử sử dụng kho dữ liệu để phân tích và báo cáo về hiệu suất bán hàng. Dữ liệu lịch sử được sử dụng để huấn luyện AI nhằm hỗ trợ đưa ra các đề xuất nhằm tăng doanh số bán hàng.
- Ngành y tế có thể áp dụng trí tuệ nhân tạo vào dữ liệu bệnh nhân, hỗ trợ chẩn đoán và điều trị bệnh nhân một cách chính xác hơn.
- Khả năng phân tích thông tin doanh nghiệp giúp các nhà cung cấp dịch vụ vận tải tối ưu hóa tuyến đường, thời gian di chuyển, nhu cầu thiết bị và yêu cầu nhân sự.
- Các tổ chức công nghệ tài chính, bao gồm ngân hàng, áp dụng phân tích dữ liệu để đánh giá rủi ro, phát hiện gian lận và quảng bá dịch vụ.
- Các tổ chức mạng xã hội cần khả năng phân tích dữ liệu nhanh chóng để đo lường tâm trạng khách hàng và dự đoán doanh số sản phẩm.
Data Warehouse Architecture
Một kiến trúc data warehouse cơ bản gồm có 4 layers: Data sources, Staging Area, Warehouse và Analytic layer.
- Data sources: Gồm các nguồn dữ liệu làm đầu vào cho data warehouse như flat files, cơ sở dữ liệu…
- Staging area: Khu vực lưu trữ tạm thời để thực hiện quá trình ETL.
- Data warehouse: Khu vực lưu trữ dữ liệu của data warehouse, bao gồm cả metadata, raw data và summary data. Ngoài ra có thể có các data marts.
- Analytic: Các công cụ thực hiện phân tích dữ liệu cho doanh nghiệp, bao gồm data mining, data analytic, automation reporting và machine learning…

Dữ liệu sẽ được thu thập từ các data source, trải qua quá trình ETL (và lưu trữ tạm thời) trong staging area. Sau khi làm sạch và chuẩn hóa về schema cho trước, dữ liệu sẽ được đổ vào warehouse để phục vụ cho quá trình analytic.
Facts & Dimensions
Dữ liệu trong data warehouse có thể được chia thành 2 loại là Facts và Dimensions.
Facts là các đại lượng có thể đo lường như nhiệt độ, doanh số bán hàng, lượng mưa. Tuy nhiên, đôi khi facts cũng có thể nhận các giá trị category như nắng, mưa, giông bão, … Bảng fact là trung tâm của schema hình sao (star schema) và schema hình bông tuyết (snowflake schema). Thông tin trong bảng fact và được cung cấp ngữ cảnh qua các bảng dimensions.
Dimensions là các thuộc tính được gán cho facts và cung cấp ngữ cảnh để fact có ý nghĩa. Ví dụ, một fact là “20 triệu đồng”, các dimension như sản phẩm, vị trí bán hàng, thời gian, … sẽ cung cấp ý nghĩa rằng: doanh số bán hàng của các sản phẩm X, trong các thành phố Y và thời gian Z là 20 triệu đồng.

Trong snowflake schema, các dimensions được phân cấp, ví dụ thời gian sẽ được chia thành nhiều bảng phân cấp như tuần, quý, năm. Trong khi ở star schema, dimensions được làm phẳng, tất cả thông tin phân cấp sẽ cùng nằm trên 1 bảng. Điều này có thể gây dư thừa dữ liệu nhưng tăng tốc độ truy vấn do không phải join quá nhiều bảng trong 1 truy vấn.

Data Cube & Operations
Khối dữ liệu (data cube) được tạo ra bằng cách kết hợp các dimensions và facts từ cơ sở dữ liệu gốc. Mỗi chiều đại diện cho một thuộc tính hoặc một khía cạnh của dữ liệu, ví dụ như thời gian, địa điểm, sản phẩm, khách hàng, v.v. Các fact là các số liệu hoặc các chỉ số có liên quan đến các chiều, ví dụ như doanh số bán hàng, số lượng sản phẩm, tổng cộng tiền, v.v.

Trong hình là data cube được tạo thành từ 3 dimentions là Address, Item và Time. Các ô trong data cube thể hiện các facts, trong minh họa trên là “doanh số bán sản phẩm”. Ví dụ 605 là doanh số bán căn hộ trong quý 1 tại Vancouver.
Khi biểu diễn dữ liệu dưới dạng data cube, ta có thể áp dụng một số phép toán để phục vụ cho data mining, data analytics, … gồm slicing, dicing, drilling up, drilling down, pivoting và rolling up.
Slicing
Slicing là hành động chọn 1 đơn vị của 1 chiều trong data cube đã cho và giữ nguyên các chiều còn lại. Ví dụ, để xem xét doanh thu trong Quý 1 của tất cả sản phẩm trong tất cả các thành phố, ta sử dụng phép slice để “chọn” quý 1 trong data cube.

Dicing
Dicing là hành động chọn một tập con các giá trị từ một chiều để thu nhỏ phạm vi dimension. Ví dụ, chọn location là “Toronto hoặc Vancouver”, thời gian là “Quý 1 hoặc Quý 2” và bao gồm 2 sảm phẩm “Mobile hoặc Modern”.

Drilling down
Trong data warehouse, một dimension có thể có nhiều mức khác nhau. Ví dụ chiều thời gian có thể đo bằng đơn vị tuần, tháng, quý, năm, … Chiều khu vực (location) có thể đo bằng đất nước, thành phố, …
Một data cube có location dimension là country và fact là doanh số bán sản phẩm, có thể hiển thị chi tiết thông tin các sub-category trong country đó, ví dụ doanh số bản sản phẩm của từng thành phố trong country, thông qua hành động “drill down”.

Rolling up
Rolling up là hành động tóm tắt data cube theo một chiều bằng cách áp dụng các hàm tổng hợp như COUNT, MIN, MAX, SUM và AVERAGE. Ví dụ, ta có thể tính tổng doanh thu của tất cả các thành phố (city) để có giá trị doanh thu của từng nước (country).

Verify data quaity
Dữ liệu trước khi đưa vào data warehouse cần được kiểm tra và làm sạch. Những yếu tố quan trọng nhất cần phải lưu ý bao gồm:
- Accuracy: Dữ liệu có thể bị trùng lặp, sai chính tả do nhập liệu thủ công hoặc sai sót trong module đọc dữ liệu, dẫn đến đọc sai định dạng file…
- Completeness: Dữ liệu có thể bị mất mát do các trường thông tin không được điền đầy đủ trong quá trình nhập dữ liệu, đôi khi thiếu toàn bộ các bảng ghi do lỗi hệ thống từ nguồn dữ liệu.
- Consistency: Dữ liệu có thể không nhất quán do các cơ sở dữ liệu khác nhau không sử dụng chung một định dạng ngày tháng hoặc một kiểu viết tắt. Các đơn vị đo có thể không nhất quán với nhau, ví dụ sử dụng đồng thời cả đơn vị kilometers và miles.
- Currency: Dữ liệu nhập vào có thể không phải mới nhất. Dữ liệu lãi suất của ngân hàng có thể thay đổi liên tục hàng tháng, khách hàng có thể đổi email hoặc số điện thoại…

Xử lý hoặc ngăn chặn dữ liệu không chính xác là một quá trình phức tạp và lặp đi lặp lại. Cách đơn giản nhất là xác định các rules để phát hiện dữ liệu khong chính xác. Dữ liệu không chính xác cần được DE hoặc domain expert phân tích, dự đoán nguyên nhân gốc rễ từ data history và đưa ra hướng xử lý phù hợp. Khi đã có solution, ta nên tự động hóa càng nhiều bước trong quy trình xử lý lỗi càng tốt.
Ví dụ, khi xử lý dữ liệu trong staging area trước khi đưa vào warehouse, ta nhận thấy dữ liệu có nhiều giá trị thiếu, trùng lặp, outlier và không hợp lệ. Quy trình xử lý có thể được miêu tả đơn giản như sau:
- Viết lệnh SQL để phát hiện lỗi.
- Giải quyết các vấn lặp đi lặp lại bằng cách tạo ra các rules để xác định và sửa chữa lỗi.
- Viết script để phát hiện và sửa chữa lỗi phổ biến.
- Viết script để tự động verify dữ liệu hằng đêm, phát hiện lỗi phổ biến và fix lỗi.
- Tạo report về các lỗi gặp phải, DE có thể xem báo cáo chi tiết về các lỗi đã gặp phải và xử lý các lỗi còn tồn đọng.
Có thể sử dụng một số công cụ như SAP Data Quality Management, SAS Data Quality, Talend Open Studio for Data Quality, Oracle Enterprise Data Quality, OpenRefine, … để đảm bảo chất lượng dữ liệu.