Tuần 2 · Ngày 10 · Tổng kết tuần · 4 giờ
Mục tiêu
- Củng cố Unpivot, Group By trên một bộ dữ liệu mới
- Hoàn thành mini project "Pipeline dữ liệu Q1/2025"
- Làm bài kiểm tra tuần 2
Ngày 5: Review 4 + Tổng kết tuần 2
Kế hoạch 4 giờ
| Thời gian | Nội dung |
|---|---|
| 1 giờ | Phần 1: Review ngày 4 với dữ liệu lịch viếng thăm |
| 1 giờ 30 | Phần 2: Mini project |
| 1 giờ | Phần 3: Kiểm tra tuần 2 |
| 30 phút | Phần 4: Tự đánh giá |
Bối cảnh dữ liệu mới: lịch viếng thăm cửa hàng
Ở công ty FMCG, nhân viên bán hàng (salesman) đi tuyến hằng ngày để viếng thăm cửa hàng và lấy đơn. Phòng nhân sự bán hàng theo dõi bằng file LichViengTham_Q1_2025.xlsx:
- 3 sheet: T1-2025, T2-2025, T3-2025.
- Mỗi dòng là một nhân viên. Mỗi ngày trong tháng là một cột (1, 2, …, 31). Đây là dạng rộng.
- Mã trong ô:
| Mã | Ý nghĩa |
|---|---|
| X | Viếng thăm có đơn hàng |
| V | Viếng thăm không có đơn |
| P | Nghỉ phép |
| K | Vắng không phép |
| L | Nghỉ lễ / Tết |
| (trống) | Chủ nhật |
Phần 1: Review ngày 4
Lịch viếng thăm tháng 1 (45 phút)
Query mới từ sheet T1-2025, đặt tên ViengTham_T1. Tạo bảng dạng dài với các cột:
| Cột | Kiểu |
|---|---|
| Mã NV | Text |
| Họ và tên | Text |
| Ngày | Date (ví dụ 02/01/2025) |
| Mã | Text (X / V / P / K / L) |
Trả lời:
- Bảng có bao nhiêu dòng? Có bao nhiêu nhân viên?
- Đếm số dòng theo từng Mã. Dùng Group By hoặc visual sau khi nạp.
- Tỷ lệ viếng thăm có đơn = X / (X + V) của tháng 1 là bao nhiêu?
Các bước:
- Get data > Excel > sheet T1-2025 > Transform Data. Dòng đầu đã là tên cột (Mã NV, Họ và tên, 1, 2, …).
- Chọn Mã NV, Họ và tên > Unpivot Other Columns. Đổi tên
AttributethànhNgày,ValuethànhMã. - Cột Ngày đang là văn bản “1”, “2”, … Đổi kiểu sang Whole Number, rồi tạo Custom Column:
Xóa cột Ngày cũ, đổi tên cột mới thành#date(2025, 1, [Ngày])Ngày, đổi kiểu Date.
Đáp số:
- 1.512 dòng, 56 nhân viên. Các ô Chủ nhật trống đã tự bị loại khi Unpivot.
- Theo mã:
| Mã | Số dòng |
|---|---|
| X | 658 |
| V | 458 |
| L | 280 |
| P | 79 |
| K | 37 |
-
Tỷ lệ có đơn tháng 1 = 658 / (658 + 458), khoảng 59,0%.
L = 280 là các ngày nghỉ Tết 28 - 31/01/2025: 4 ngày x 56 nhân viên = 224, cộng ngày 1/1 (Tết Dương lịch) 56 dòng = 280.
Lưu ý: file có 56 nhân viên, nhưng công ty chỉ có 54 nhân viên chính thức. Có 2 dòng lạ (NV901, NV902). Tuần 3 bạn sẽ dùng Merge kiểu Left Anti để phát hiện tự động.
Group By + Pivot: bảng công của nhân viên (15 phút)
Từ ViengTham_T1, tạo bảng tổng hợp mỗi nhân viên một dòng, mỗi mã một cột (X, V, P, K, L), giá trị là số ngày.
Nhân viên nào có nhiều ngày K (vắng không phép) nhất trong tháng 1?
Cách 1: Reference query > Group By (Mã NV, Họ và tên, Mã; Count Rows) > chọn cột Mã > Pivot Column, Values = cột đếm, Don’t Aggregate.
Cách 2 (ngắn hơn): Reference query > chọn cột Mã > Pivot Column, Values Column = Ngày, Aggregate = Count (All).
Pivot sẽ tạo các ô null khi nhân viên không có mã đó. Hãy Replace Values null → 0 cho các cột số.
Sắp xếp giảm dần cột K: đồng hạng nhất là NV008 (Phạm Thanh Châu) và NV016 (Võ Gia Hoa), mỗi người 3 ngày K.
Kiểm tra lại bằng cách lọc bảng dài ViengTham_T1 theo Mã NV = NV008 và Mã = K, xem có đúng 3 dòng không. Tự đối chiếu bằng 2 cách khác nhau là thói quen quan trọng nhất của người làm dữ liệu.
Phần 2: Mini project “Pipeline dữ liệu Q1/2025”
Đề bài. Giám đốc kinh doanh muốn biết trong Q1/2025: (1) doanh thu thực tế so với chỉ tiêu theo từng tháng, (2) hiệu quả viếng thăm của đội bán hàng trong tháng 3.
Tạo file SaoMai_Q1_Pipeline.pbix với 3 query sạch:
- DonHang: từ file đơn hàng bẩn, làm sạch đầy đủ như Review 3, có cột Thành tiền và Tháng.
- ChiTieu: từ
ChiTieu_2025.xlsx, dạng dài, có cột Tháng (số) và Chỉ tiêu (đồng). - ViengTham_T3: sheet T3-2025, dạng dài như bài 1.
Một trang báo cáo Q1/2025 gồm:
- Matrix 1 (DonHang): Rows = Tháng, Values = Thành tiền.
- Matrix 2 (ChiTieu): Rows = Tháng, Values = Chỉ tiêu, lọc Tháng 1 - 3 bằng visual filter.
- Card: tỷ lệ viếng thăm có đơn tháng 3. Tính bằng tay từ 2 card đếm X và V, hoặc dùng Group By trong Power Query.
- Bar chart: số ngày theo Mã (X/V/P/K/L) tháng 3.
Mọi query phải chạy lại không lỗi khi Refresh. Không sửa tay file gốc.
Đối chiếu số liệu:
| Tháng | Doanh thu thực tế | Chỉ tiêu | % đạt (tính tay) |
|---|---|---|---|
| 1 | 5.264.785.790 | 5.400.000.000 | khoảng 97,5% |
| 2 | 3.240.399.080 | 3.324.000.000 | khoảng 97,5% |
| 3 | 3.585.838.820 | 3.661.000.000 | khoảng 97,9% |
| Q1 | 12.091.023.690 | 12.385.000.000 | khoảng 97,6% |
Viếng thăm tháng 3: X = 596, V = 701, P = 118, K = 41. Không có ngày lễ trong tháng 3. Tỷ lệ có đơn = 596 / 1.297, khoảng 46,0%, thấp hơn nhiều so với tháng 1 (59%) vì sau Tết cửa hàng còn tồn hàng.
Điều còn bất tiện: cột % đạt phải tính tay, vì 2 bảng chưa có quan hệ. Tuần 5 - 6 sẽ giải quyết bằng mô hình dữ liệu và measure DAX.
Phần 3: Kiểm tra tuần 2
Thời gian: 60 phút. 10 câu trắc nghiệm (10 điểm) + 1 bài thực hành (10 điểm). Đạt: từ 14/20.
Thực hành (30 phút, 10 điểm). Sheet T2-2025 của LichViengTham_Q1_2025.xlsx:
- (4 điểm) Đưa về dạng dài: Mã NV, Họ và tên, Ngày (kiểu Date), Mã.
- (3 điểm) Đếm số dòng theo từng Mã.
- (3 điểm) Nhân viên nào có nhiều ngày X nhất trong tháng 2? Bao nhiêu ngày?
-
Bảng dài có 1.344 dòng. Ngày tạo bằng
#date(2025, 2, [Ngày]). -
Theo mã:
| Mã | Số dòng |
|---|---|
| V | 623 |
| X | 514 |
| P | 102 |
| L | 56 |
| K | 49 |
L = 56 là ngày 01/02/2025 (mùng 4 Tết, công ty vẫn nghỉ). Ngày 02/02 là Chủ nhật nên trống.
- Đồng hạng nhất: NV001 và NV032, mỗi người 18 ngày X. Nếu bạn chỉ trả lời một người thì vẫn được 2/3 điểm. Hãy tập thói quen kiểm tra có đồng hạng không khi trả lời câu hỏi “ai cao nhất”.
Chấm điểm: mục 1 được 4 điểm nếu đúng số dòng và kiểu Date; được 2 điểm nếu đúng dạng dài nhưng cột Ngày vẫn là số.
Phần 4: Tự đánh giá tuần 2
- Kiểm tra tuần 2 đạt từ 14/20
- Mini project chạy Refresh không lỗi, số liệu khớp bảng đối chiếu
- Tôi làm sạch file DonHang bẩn trong 40 phút mà không xem lại bài
- Tôi nhận ra và xử lý được: dòng rác, dòng trùng, Locale, null, hoa/thường, dạng rộng
- Tôi đọc hiểu được code M của các bước đơn giản (Table.SelectRows, Table.AddColumn)