
Excel, Power BI hay Python cho phân tích dữ liệu
AIDev TeamTham vấn chuyên môn: Nguyễn Việt Chung
Đăng 13 phút đọc1 lượt xem
Mục lục · 19
Phân tích dữ liệu bằng Excel đủ dùng khi dữ liệu nằm gọn trong một file; Power BI hợp khi cần dashboard cho nhiều người xem; Python hợp khi phải gộp nhiều file và chạy lại mỗi tháng. Bài đặt cùng một câu hỏi cho cả ba công cụ trên 6 file đơn hàng mẫu, chạy thật và có ảnh chụp từng công cụ.
Excel, Power BI và Python đều trả lời được cùng một câu hỏi về doanh thu và cho cùng một đáp số. Chúng khác nhau ở ba chỗ: gộp nhiều file có dễ không, tháng sau làm lại tốn bao nhiêu công, và kết quả đến tay người khác bằng cách nào. Excel hợp với dữ liệu nằm gọn trong một file. Power BI hợp khi cần một dashboard nhiều người cùng xem. Python hợp khi dữ liệu nằm rải trong nhiều file và báo cáo phải chạy lại đều đặn.
Mình thử bằng một câu hỏi cụ thể: sáu tháng đầu năm 2026, kênh bán nào của cửa hàng mẫu "Tiệm Mây" mang về nhiều doanh thu nhất, và kênh nào có tỉ lệ đơn hủy cao nhất? Dữ liệu là 6 file CSV đơn hàng theo tháng, tổng cộng 2.222 đơn, tải công khai ở lab.aidev.edu.vn/k2. Đây là dữ liệu mô phỏng của khóa Phân tích dữ liệu với Python.
Mấy điều cần nắm trước khi đọc tiếp:
Website dẫn đầu với 3,39 tỷ đồng, Sàn TMĐT có tỉ lệ hủy cao nhất là 10,1%. Excel, Power BI và Python đều ra đúng các con số này.
PivotTable (bảng tổng hợp của Excel) mặc định cộng mọi trạng thái đơn. Nếu không lọc, Website "đạt" 3,62 tỷ đồng vì cộng cả đơn hủy, đổi trả và đang giao.
Một đơn sỉ 1,995 tỷ đồng chiếm hơn nửa doanh thu Website. Công cụ nào cũng cộng đúng, nhưng phải có người nhìn ra đơn này.
Excel for Mac bản mình dùng không có lệnh gộp cả thư mục trong Power Query (công cụ nhập dữ liệu của Excel). Power BI Desktop chỉ chạy trên Windows, gộp được cả thư mục nhưng tỉ lệ hủy phải viết công thức DAX (ngôn ngữ công thức riêng của Power BI).
Câu hỏi và dữ liệu dùng để so ba công cụ
Mỗi file tháng có 13 cột, trong đó ba cột quan trọng cho câu hỏi này là kenh (App, Facebook, Sàn TMĐT, Website), trang_thai (Hoàn tất, Hủy, Đổi trả, Đang giao) và doanh_thu. Trong 2.222 đơn có 1.874 đơn Hoàn tất, 175 đơn Hủy, 108 đơn Đổi trả và 65 đơn Đang giao.
Muốn trả lời đúng thì phải làm đủ ba bước, công cụ nào cũng vậy:
Gộp 6 file thành một bảng.
Đếm số đơn và số đơn Hủy của từng kênh để ra tỉ lệ hủy.
Cộng doanh thu của riêng đơn Hoàn tất theo từng kênh.
Bước 1 là chỗ ba công cụ khác nhau nhiều nhất. Bước 2 và 3 thì công cụ nào cũng làm được, chỉ khác cách viết công thức.
Phân tích dữ liệu bằng Excel thì làm thế nào?
Trên Excel for Windows, Microsoft hướng dẫn gộp file bằng Power Query: chọn Data > Get Data > From File > From Folder, trỏ tới thư mục, rồi bấm Combine and Load (trang hướng dẫn của Microsoft). Trang này ghi áp dụng cho Excel for Microsoft 365, 2024, 2021, 2019 và 2016, không nhắc tới Mac.
Mình dùng Excel for Mac 16.114.1. Khi mở Data > Get Data (Power Query), hộp chọn nguồn chỉ liệt kê 8 nguồn: Excel workbook, Text/CSV, XML, JSON, SharePoint Online list, OData, Blank table và Blank query. Gõ "folder" vào ô tìm kiếm thì Excel báo không có nguồn nào:

Vậy trên máy Mac này, bạn phải nhập từng file CSV một rồi nối lại, hoặc chép tay 6 file vào một sheet. Để làm tiếp hai bước sau, mình dùng một file đã gộp sẵn 6 tháng vào sheet DonHang, có 2.222 dòng.
PivotTable cho số sai nếu chưa lọc trạng thái
Cách nhanh nhất là PivotTable. Mình đặt con trỏ trong bảng, chọn Insert > PivotTable, bấm OK, rồi tích hai trường kenh và doanh_thu. Chỉ năm thao tác là Excel đã ra bảng:

Bảng này cộng mọi đơn, kể cả đơn Hủy, Đổi trả và Đang giao. Tổng ra 7,70 tỷ đồng, trong khi doanh thu thật của đơn Hoàn tất chỉ là 6,76 tỷ đồng. Muốn đúng, bạn phải kéo thêm trang_thai vào ô Filters hoặc Columns rồi chỉ chọn "Hoàn tất". PivotTable không báo trước chuyện này. Người làm phải tự biết cột trạng thái có những giá trị gì.
Dùng COUNTIFS và SUMIFS để ra đủ cả hai con số
Tỉ lệ hủy cần đếm có điều kiện, nên mình viết thêm ba công thức cạnh PivotTable, dùng COUNTIFS (đếm có điều kiện) và SUMIFS (cộng có điều kiện), rồi kéo xuống cho 4 kênh:
E4: =COUNTIFS(DonHang!I:I;D4)
F4: =COUNTIFS(DonHang!I:I;D4;DonHang!J:J;"Hủy")/E4
G4: =SUMIFS(DonHang!M:M;DonHang!I:I;D4;DonHang!J:J;"Hoàn tất")
Cột I của sheet DonHang là kenh, cột J là trang_thai, cột M là doanh_thu. Máy đặt định dạng số kiểu Việt Nam dùng dấu chấm phẩy để ngăn các đối số, còn máy đặt kiểu Mỹ dùng dấu phẩy.

Bảng bên phải là đáp án: Website 3,39 tỷ đồng, Sàn TMĐT có tỉ lệ hủy 10,1%. Excel làm tốt khi dữ liệu đã nằm trong một sheet. Phần tốn công nằm ở bước gộp file, và tháng sau bước đó phải làm lại.
Trả lời câu hỏi này bằng Power BI ra sao?
Power BI Desktop tải miễn phí, nhưng theo trang cài đặt của Microsoft thì cần Windows 10, Windows Server 2016 hoặc mới hơn, RAM trống ít nhất 2 GB và màn hình từ 1440x900. Máy mình là Mac, nên mình thuê một máy Windows 10 trên AIDev Cloud (8 nhân, 16 GB RAM). Bộ cài lấy từ Microsoft Download Center, bản 2.159.883.0. Mở lên là dùng được ngay, không cần bấm Sign in để đăng nhập.
Gộp 6 file bằng Get data > Folder
Mình chọn Get data, bấm No thanks ở hộp mời dùng giao diện Get Data mới, rồi chọn Folder trong danh sách nguồn. Đây đúng là nguồn mà Excel for Mac của mình không có:

Mình bấm Connect, nhập đường dẫn C:\TiemMay\don_hang_2026 rồi bấm OK. Power BI liệt kê đủ 6 file. Mình chọn Combine > Combine & Load. Hộp Combine Files tự lấy file đầu tiên làm file mẫu, tự nhận bảng mã UTF-8 và dấu phẩy ngăn cột, nên chữ tiếng Việt hiện đúng:

Bấm OK xong, khoảng 13 giây sau bảng don_hang_2026 đã nằm trong khung Data. Power BI thêm một cột Source.Name ghi mỗi dòng đến từ file nào. Từ Get data đến lúc có bảng, mình bấm 7 lần và nhập một đường dẫn.
Lọc trạng thái và tính tỉ lệ hủy
Mình tích hai trường kenh và doanh_thu, và Power BI tạo ngay một bảng có dòng Total 7.698.830.000. Con số này giống hệt PivotTable chưa lọc của Excel: Power BI cũng cộng mọi trạng thái, không cảnh báo gì.
Để lọc, mình bấm chuột phải vào trang_thai, chọn Add to filters > Visual-level filters (bộ lọc chỉ áp cho bảng đang chọn), rồi tích Hoàn tất. Khung lọc còn đếm sẵn số đơn của từng trạng thái: Đang giao 65, Đổi trả 108, Hoàn tất 1.874, Hủy 175. Bảng đổi ngay sang số đúng:

Tỉ lệ hủy thì không có sẵn ô nào để tích. Mình bấm New measure (measure là công thức tính viết bằng ngôn ngữ DAX của Power BI) và gõ:
Ti le huy = DIVIDE(CALCULATE(COUNTROWS(don_hang_2026), don_hang_2026[trang_thai] = "Hủy"), COUNTROWS(don_hang_2026))
Mình thêm một measure So don = COUNTROWS(don_hang_2026), đặt định dạng phần trăm cho Ti le huy, rồi tích kenh, So don, Ti le huy vào một bảng thứ hai:

Số đơn, tỉ lệ hủy và doanh thu đơn Hoàn tất của cả 4 kênh khớp với Excel, và cũng khớp với kết quả Python ở mục sau. Phần khó nhất là measure DAX: người mới phải học thêm một ngôn ngữ công thức, khác với hàm Excel quen thuộc.
Phần chia sẻ thì mình không thử vì cần đăng nhập tài khoản công ty. Theo trang giá của Microsoft ngày 23/10/2026, muốn đăng báo cáo lên Power BI service cho người khác mở trên trình duyệt thì cần gói Pro 14 USD mỗi người mỗi tháng, hoặc Premium Per User 24 USD, cả hai trả theo năm.
Theo tài liệu Combine files, thư mục có thêm file tháng 7 thì bấm Refresh là bảng tự có thêm dòng.
Python trả lời câu hỏi này trong bao nhiêu dòng code?
Với pandas (library xử lý bảng dữ liệu của Python), cả ba bước nằm trong một file 11 dòng:
from pathlib import Path
import pandas as pd
df = pd.concat([pd.read_csv(f) for f in sorted(Path("don_hang_2026").glob("2026-*.csv"))], ignore_index=True)
df["huy"] = df["trang_thai"] == "Hủy"
df["dt_hoan_tat"] = df["doanh_thu"].where(df["trang_thai"] == "Hoàn tất", 0)
bang = df.groupby("kenh").agg(so_don=("ma_don", "count"), ti_le_huy=("huy", "mean"),
doanh_thu=("dt_hoan_tat", "sum"))
bang["ti_le_huy"] = (bang["ti_le_huy"] * 100).round(1)
print(len(df), "đơn trong", df["ngay_dat"].min(), "đến", df["ngay_dat"].max())
print(bang.sort_values("doanh_thu", ascending=False))
Dòng 4 gộp 6 file. Dòng 5 đánh dấu đơn Hủy, nên lấy trung bình cột này là ra tỉ lệ hủy. Dòng 6 giữ doanh thu của đơn Hoàn tất, các đơn khác tính là 0. Dòng 7 và 8 dùng groupby để làm việc của PivotTable: gom theo kênh, đếm số đơn, lấy trung bình cột huy và cộng doanh thu. Cả file chạy hết 0,24 giây trên máy Mac M4 Pro của mình, đo bằng lệnh time:

Các con số khớp từng đồng với bảng SUMIFS trong Excel. Tháng sau có file 2026-07.csv, bạn chỉ cần chép file vào thư mục rồi chạy lại lệnh. Nếu mới làm quen pandas, bài pandas là gì đi từ DataFrame đến groupby trên 6.000 đơn hàng mẫu.
Tham số ignore_index=True ở dòng 4 không được bỏ. Bản đầu của mình thiếu tham số này, lại có một hàm tự viết lấy trạng thái theo số dòng, nên pandas báo lỗi:
IndexError: boolean index did not match indexed array along axis 0; size of axis is 562 but size of corresponding boolean axis is 7424
Nguyên nhân là pandas đánh số dòng của từng file CSV từ 0, nên sau khi gộp có tới 6 dòng cùng mang số 5. Đoạn thử dưới đây cho thấy số dòng bị trùng: df.loc[5] trả về 6 đơn thay vì 1:

Thêm ignore_index=True thì pandas đánh số lại từ 0 đến 2.221 và lỗi biến mất. Bài Python cho Excel có cách làm cùng loại việc cho file .xlsx, kèm phần định dạng báo cáo và số đo khi dữ liệu lên tới 377.800 dòng.
Ba công cụ khác nhau ở đâu?
Excel | Power BI Desktop | Python (pandas) | |
|---|---|---|---|
Gộp cả thư mục file | Power Query From Folder trên Windows; Excel for Mac 16.114.1 không có | Get data > Folder > Combine & Load, 7 lần bấm | một dòng |
Lọc trạng thái, tính tỉ lệ hủy | PivotTable kèm bộ lọc, hoặc COUNTIFS và SUMIFS | bộ lọc Visual-level, tỉ lệ hủy cần measure DAX | thêm 2 dòng code |
Tháng sau làm lại | Refresh nếu đã dùng Power Query, chép lại nếu dán tay | Refresh | chạy lại script |
Giới hạn số dòng | 1.048.576 dòng mỗi sheet | theo RAM máy | theo RAM máy |
Hệ điều hành | Windows, Mac | chỉ Windows | Windows, Mac, Linux |
Gửi kết quả cho người khác | gửi file | đăng lên Power BI service | gửi file kết quả hoặc notebook |
Chi phí | bản quyền Microsoft 365 | Desktop miễn phí, chia sẻ cần gói trả phí | miễn phí |
Giới hạn dòng của Excel lấy từ trang giới hạn chính thức của Microsoft. Số dòng tối đa của Power BI và pandas mình chưa đo trong bài này.
Có đáp số rồi thì phần khó nằm ở đâu?
Đáp số "Website dẫn đầu" đúng về mặt cộng trừ, nhưng có điểm đáng ngờ. Khi xếp đơn theo doanh thu, mình thấy đơn DH004429 ngày 14/02/2026 gồm 273 tai nghe bluetooth Pro, thành tiền 1,995 tỷ đồng. Riêng đơn này chiếm 59% doanh thu Website trong sáu tháng.

Bỏ đơn sỉ ra thì Website còn 1,40 tỷ đồng, vẫn đứng đầu nhưng chỉ hơn App khoảng 156 triệu đồng. Kết luận lúc này đã khác hẳn: Website không mạnh vượt trội, chỉ có một khách mua sỉ lớn. Excel, Power BI hay Python đều cộng đúng, nhưng không công cụ nào tự đặt câu hỏi này. Thói quen xếp đơn theo giá trị để soi đơn bất thường là việc của người phân tích.
Nên chọn Excel, Power BI hay Python?
Excel khi dữ liệu nằm trong một hoặc vài file, người nhận cũng làm việc bằng Excel và báo cáo không lặp lại thường xuyên. Phân tích dữ liệu bằng Excel vẫn là cách ít bước nhất cho câu hỏi một lần.
Power BI khi bạn dùng Windows và cần một dashboard để nhiều người tự lọc, tự xem, cập nhật theo lịch.
Python khi dữ liệu đến từ nhiều file hoặc nhiều nguồn, báo cáo chạy lại mỗi tuần, hoặc bạn muốn đi tiếp sang Machine Learning.
Khi nào không nên dùng Python? Khi chỉ cần trả lời một câu hỏi một lần trên một file nhỏ. Năm thao tác PivotTable kèm một bộ lọc nhanh hơn việc cài Python và viết script.
Câu hỏi thường gặp
Data Analysis trong Excel là gì?
Đó là bộ công cụ thống kê Analysis ToolPak đi kèm Excel: thống kê mô tả, hồi quy, kiểm định t, biểu đồ tần suất. Bộ này giúp tính thống kê nhanh trên một vùng dữ liệu, nhưng không giúp gộp file hay chạy lại báo cáo.
Học Excel trước hay Python trước?
Nếu bạn đang làm văn phòng, hãy học PivotTable và SUMIFS trước vì dùng được ngay ngày mai. Khi thấy mình lặp lại cùng một chuỗi thao tác mỗi tháng thì học Python. Bài Data Analyst cần học gì xếp thứ tự học theo 41 tin tuyển dụng thật.
Power BI có chạy trên Mac không?
Power BI Desktop không có bản cho Mac. Yêu cầu tối thiểu ghi trên trang của Microsoft là Windows 10 hoặc Windows Server 2016 trở lên. Trên Mac, bạn mở được báo cáo đã đăng lên Power BI service bằng trình duyệt, còn muốn tạo báo cáo bằng Desktop thì cần một máy Windows.
Python có thay được Power BI không?
Thay được phần tính toán. Phần dashboard để người khác bấm lọc thì Python cần thêm một library dựng web, tức là phải viết thêm code và tự lo máy chủ để chạy. Nếu công ty bạn đã dùng Power BI service, dựng dashboard trên đó thường nhanh hơn.
Đọc tiếp
Python cho Excel: gộp 12 file
.xlsxthành báo cáo có định dạng và biểu đồ bằng pandas và openpyxl.Data Analyst, Data Scientist và AI Engineer khác nhau ở đâu: nếu bạn đang cân nhắc đi sâu vào nghề dữ liệu.
Khóa học Data Analyst: nên hỏi những gì trước khi chọn nơi học.
Câu hỏi trong bài lấy từ bộ dữ liệu Tiệm Mây của khóa Phân tích dữ liệu với Python. Khóa dạy pandas từ đọc file, làm sạch, gộp bảng đến một project báo cáo phân tích được chấm điểm, và là chặng thứ hai của lộ trình AI Engineer từ số 0.
Chạy ngày 23/10/2026 trên Mac M4 Pro, macOS 27.0.1: Excel for Mac 16.114.1, Python 3.14.7, pandas 3.1.0. Power BI Desktop 2.159.883.0 chạy cùng ngày trên máy Windows 10 IoT LTSC 21H2 của AIDev Cloud; phần chia sẻ và giá theo tài liệu chính thức của Microsoft. Dữ liệu Tiệm Mây là dữ liệu mô phỏng của AIDev (giấy phép MIT).
Chuyên mục
Phân tích dữ liệuTham vấn chuyên môn
Nhà sáng lập AIDev và VietPlatform · Thạc sĩ AI MSE
- Tốt nghiệp thủ khoa xuất sắc Thạc sĩ AI MSE.
- Đồng sáng lập, CTO E-University, SVOnline: số hóa 10+ đại học, 40.000+ sinh viên.
- Xây hệ thống AI cho doanh nghiệp tại VietPlatform.


