Group By trong Power Query giúp gom các dòng có cùng khoá, chẳng hạn cửa hàng và tháng, rồi tính tổng doanh thu hoặc đếm dòng cho từng nhóm. Bạn có thể thao tác bằng hộp thoại Group By hoặc dùng hàm M Table.Group; điểm cần xác định trước là mỗi dòng kết quả sẽ đại diện cho điều gì.
Bài này dùng dữ liệu bán hàng giả lập để hướng dẫn trên Excel và Power BI Desktop, đồng thời chỉ ra cách tránh đếm nhầm số đơn và kiểm tra tổng tiền sau khi nhóm.
Khi nào nên dùng Group By?
Giả sử bảng bán hàng có nhiều dòng sản phẩm, còn báo cáo chỉ cần doanh thu từng cửa hàng theo tháng. Group By tạo bảng tổng hợp ngay trong bước chuẩn bị dữ liệu. Khi nguồn được cập nhật, bạn refresh truy vấn để áp dụng lại các bước đã lưu.
Hãy viết rõ cấp độ dữ liệu: trước khi nhóm, một dòng là một dòng hàng trên đơn; sau khi nhóm, một dòng là một cửa hàng trong một tháng. Nếu vẫn cần lọc theo sản phẩm, bạn nên giữ truy vấn chi tiết và tạo truy vấn Reference để tổng hợp riêng. Bảng đã nhóm không còn đủ chi tiết để phân tích theo những cột bị loại bỏ.
Group By phù hợp với bảng tổng hợp cố định để xuất Excel hoặc đối soát. Nếu cần doanh thu thay đổi theo bộ lọc sản phẩm, khách hàng và ngày trên Power BI, giữ bảng chi tiết và tính measure DAX thường linh hoạt hơn. Đừng nhóm sớm chỉ vì muốn bảng có ít dòng.

Chuẩn bị bảng bán hàng để thực hành
Tạo bảng sau trong Excel. Các số tiền là đồng Việt Nam, nhập dưới dạng số, không kèm chữ “đ”. Hai dòng đầu cùng thuộc đơn DH01 nhưng là hai dòng hàng khác nhau.
| Ngay | CuaHang | MaDon | DoanhThu |
|---|---|---|---|
| 01/09/2026 | Hà Nội | DH01 | 200000 |
| 01/09/2026 | Hà Nội | DH01 | 100000 |
| 03/09/2026 | Hà Nội | DH02 | 450000 |
| 02/09/2026 | Đà Nẵng | DH03 | 300000 |
| 01/10/2026 | Hà Nội | DH04 | 500000 |
Trong Excel, chọn vùng dữ liệu, tạo Table bằng Ctrl+T rồi chọn Data → From Table/Range. Trong Power BI Desktop, chọn Get data → Excel workbook, chọn bảng và Transform Data. Tên nút có thể khác theo ngôn ngữ giao diện.
Trước khi nhóm, đặt Ngay là Date, CuaHang và MaDon là Text, DoanhThu là Whole Number với bộ mẫu này. Nếu ngày đang là chuỗi theo định dạng Việt Nam, dùng Change Type → Using Locale và chọn vùng phù hợp. Kiểm tra ngày 01/09 được hiểu là ngày 1 tháng 9.
Chuẩn hoá tên cửa hàng bằng Trim và Clean; tốt hơn nữa là dùng mã cửa hàng thống nhất. “Hà Nội” và “HN” vẫn là hai giá trị khác nhau nếu bạn chưa ánh xạ chúng. Khi nguồn đến từ nhiều file, hãy hoàn thành bước gộp file Excel bằng Power Query rồi kiểm tra cấu trúc trước.
Cách Group By theo cửa hàng và tháng
Tạo khoá tháng có cả năm
Trong Power Query Editor, chọn Add Column → Custom Column, đặt tên Thang và nhập công thức dưới đây. Cột Ngay phải có kiểu Date trước bước này.
Date.StartOfMonth([Ngay])
Đặt kiểu Thang là Date. Dùng ngày đầu tháng giúp phân biệt tháng 9/2026 với tháng 9/2027; chỉ lấy số tháng 9 sẽ vô tình gộp hai năm. Bạn có thể định dạng cách hiển thị tháng ở bước báo cáo sau.
Chọn Advanced để nhóm nhiều cột
- Chọn Home → Group By trong Power Query Editor.
- Chuyển sang Advanced, chọn CuaHang làm khoá đầu tiên.
- Chọn Add grouping và thêm Thang.
- Tạo cột TongDoanhThu, chọn Operation là Sum và Column là DoanhThu.
- Chọn Add aggregation, tạo SoDong với Operation là Count Rows.
- Nhấn OK, kiểm tra dữ liệu rồi tải kết quả về nơi cần dùng.
Ở Excel, có thể dùng Close & Load để đưa bảng ra sheet; ở Power BI Desktop, dùng Close & Apply để áp dụng vào mô hình. Kết quả mong đợi của bộ mẫu là ba nhóm:
| Cửa hàng | Tháng | Tổng doanh thu | Số dòng |
|---|---|---|---|
| Hà Nội | 09/2026 | 750000 | 3 |
| Đà Nẵng | 09/2026 | 300000 | 1 |
| Hà Nội | 10/2026 | 500000 | 1 |
Thứ tự dòng thực tế có thể khác. Nếu muốn kết quả luôn theo tháng rồi cửa hàng, thêm bước Sort sau Group By. Không nên dựa vào thứ tự đang nhìn thấy ở cửa sổ xem trước.
Các thao tác trong hộp thoại được mô tả tại hướng dẫn Group By của Microsoft.
Mã M hoàn chỉnh: tổng tiền và số đơn không trùng
Count Rows đếm dòng hàng, nên Hà Nội tháng 9 có ba dòng nhưng chỉ hai đơn. Để đếm mã đơn duy nhất, bạn có thể sửa bước Table.Group trong Advanced Editor. Đoạn dưới tự tạo dữ liệu mẫu; hãy dán toàn bộ vào một Blank Query để thử độc lập.
let
Source = #table(
type table [Ngay = date, CuaHang = text, MaDon = text, DoanhThu = number],
{
{#date(2026, 9, 1), "Hà Nội", "DH01", 200000},
{#date(2026, 9, 1), "Hà Nội", "DH01", 100000},
{#date(2026, 9, 3), "Hà Nội", "DH02", 450000},
{#date(2026, 9, 2), "Đà Nẵng", "DH03", 300000},
{#date(2026, 10, 1), "Hà Nội", "DH04", 500000}
}
),
AddMonth = Table.AddColumn(
Source, "Thang", each Date.StartOfMonth([Ngay]), type date
),
Grouped = Table.Group(
AddMonth,
{"CuaHang", "Thang"},
{
{"TongDoanhThu", each List.Sum([DoanhThu]), type nullable number},
{"SoDong", each Table.RowCount(_), Int64.Type},
{"SoDon", each List.Count(
List.Distinct(List.RemoveNulls([MaDon]))
), Int64.Type}
}
),
Sorted = Table.Sort(Grouped, {{"Thang", Order.Ascending}, {"CuaHang", Order.Ascending}})
in
Sorted
Trong từng nhóm, List.Sum cộng cột tiền; Table.RowCount đếm dòng; List.Distinct lấy mã đơn không trùng sau khi loại null. Chuỗi rỗng vẫn là một giá trị, vì vậy dữ liệu thật cần làm sạch mã đơn trống trước khi tính. Với bộ mẫu, SoDon lần lượt là 2 cho Hà Nội tháng 9 và 1 cho mỗi nhóm còn lại.
Nếu mã đơn chỉ duy nhất trong từng chi nhánh, khoá nhóm đã gồm cửa hàng sẽ giúp phép đếm theo cửa hàng đúng ngữ cảnh. Khi tính số đơn toàn công ty, cần tạo khoá đơn gồm mã chi nhánh và mã đơn. Đừng mặc định cộng số đơn từ các nhóm luôn bằng số đơn duy nhất toàn bộ dữ liệu.
Bạn có thể đối chiếu cấu trúc hàm tại tài liệu Table.Group, List.Distinct và List.Sum của Microsoft.

Giữ chi tiết bằng All Rows và tránh tổng bị nhân
Trong hộp thoại Group By, All Rows tạo một cột chứa bảng con của từng nhóm. Bạn có thể thêm nó bên cạnh tổng doanh thu để kiểm tra các dòng đóng góp vào mỗi nhóm. Đây là cách hữu ích khi cần truy nguyên chênh lệch.
Nếu bung bảng con trở lại, tổng nhóm sẽ lặp trên từng dòng chi tiết. Chẳng hạn tổng 750000 của Hà Nội tháng 9 xuất hiện ba lần; cộng cột tổng ấy sẽ thành 2250000. Khi cần bảng tổng hợp và bảng chi tiết, giữ chúng thành hai truy vấn riêng thường dễ kiểm soát hơn.
Group By cũng không thay thế Merge hoặc Append: một thao tác tổng hợp nhóm, một thao tác ghép cột theo khoá, còn thao tác kia nối thêm dòng. Bạn có thể xem cách phân biệt Merge và Append trong Power Query trước khi thiết kế chuỗi xử lý.
Checklist kiểm tra trước khi dùng báo cáo
- Đối chiếu tiền: bộ mẫu có tổng trước và sau nhóm là 1550000. Nếu khác, kiểm tra các bước lọc, lỗi chuyển kiểu và ghép bảng trước đó.
- Đối chiếu dòng: tổng SoDong phải bằng năm dòng đầu vào khi không loại dòng nào.
- Kiểm tra khoá: ba tổ hợp cửa hàng–tháng phải cho ba dòng kết quả; rà riêng nhóm có khoá trống.
- Kiểm tra null: List.Sum bỏ qua null, còn nhóm chỉ có null cho kết quả null. Không đổi thành 0 nếu chưa xác định đó là thiếu dữ liệu hay không phát sinh.
- Kiểm tra refresh: thêm một giao dịch thử vào nguồn, refresh và xác nhận đúng nhóm tăng tiền, rồi bỏ giao dịch thử.
Group By không sửa được dữ liệu trùng nguồn. Nếu một đơn bị nhập hai lần, tổng tiền vẫn tăng hai lần. Hãy thống nhất khoá dòng giao dịch và quy tắc xử lý trùng trước khi tổng hợp, tránh xoá nhầm hai dòng hàng hợp lệ chỉ vì chúng có cùng mã đơn.
Câu hỏi thường gặp
Group By trong Excel và Power BI có giống nhau không?
Cả hai đều dùng Power Query và ngôn ngữ M cho thao tác này. Bài hướng dẫn áp dụng cho Excel có Power Query và Power BI Desktop; vị trí nút, cách tải kết quả có thể khác theo phiên bản.
Vì sao không thấy Count distinct values?
Microsoft ghi nhận tuỳ chọn này trong hộp thoại Group By chỉ có ở Power Query Online. Trên Desktop, dùng List.Count kết hợp List.Distinct trong Table.Group như ví dụ, và xử lý mã trống theo quy tắc dữ liệu của bạn.
Group By có thay đổi khi người xem chọn slicer không?
Bảng tổng hợp được tính khi truy vấn chạy hoặc refresh. Slicer lọc dữ liệu đã tải trong mô hình, không chạy lại bước Group By. Nếu cần phép tính linh hoạt theo nhiều chiều, giữ dữ liệu chi tiết để xây measure phù hợp.
Có cần sắp xếp trước khi nhóm không?
Với cách Table.Group mặc định trong ví dụ, bạn không cần sắp xếp đầu vào. Hàm không bảo đảm thứ tự kết quả, nên thêm Table.Sort ở cuối nếu cần một thứ tự trình bày ổn định.
Nếu bạn cần người thiết kế luồng làm sạch, tổng hợp và đối soát dữ liệu trước khi dựng dashboard, hãy tham khảo báo giá làm Power BI trên SenData để chuẩn bị phạm vi công việc và dữ liệu mẫu phù hợp.
Sẵn sàng xây dựng dashboard Power BI?
Kết nối với freelancer Power BI phù hợp, xem báo cáo nhúng ngay trên trình duyệt và tải file .pbix về sau khi thanh toán.
Đào Ngọc Tú
Cộng tác viên chuyên gia tại SenData. Chia sẻ kiến thức về phát triển Power BI, trực quan hóa dữ liệu và best practice business intelligence.

