1. Giới thiệu hàm SUMMARIZE trong Power BI
Hàm SUMMARIZE trong DAX (Data Analysis Expressions) là một trong những công cụ mạnh mẽ nhất trong Power BI, hỗ trợ nhóm dữ liệu, tính toán chỉ số tổng hợp, và tạo bảng tóm tắt linh hoạt. Khi kết hợp với các hàm như ADDCOLUMNS, FILTER, ROLLUP, hoặc SUMMARIZECOLUMNS, hàm này có thể giải quyết các bài toán từ cơ bản đến phức tạp, đồng thời cung cấp nền tảng cho việc phân tích dữ liệu chuyên sâu.
2. Chức năng của hàm SUMMARIZE
Hàm SUMMARIZE được ứng dụng trong nhiều tình huống phân tích dữ liệu khác nhau:
- Tạo bảng tổng hợp: Nhóm dữ liệu theo các cột và tính toán các chỉ số tổng hợp như SUM, COUNT, AVERAGE, …
- Tổng hợp dữ liệu theo nhiều chiều.
- Phân tích dữ liệu giữa các bảng: Kết hợp dữ liệu từ nhiều bảng thông qua mối quan hệ đã thiết lập, cho phép tạo các báo cáo tổng hợp từ nhiều nguồn dữ liệu khác nhau.
- Tính toán chỉ số phức tạp: Khi kết hợp với các hàm bổ trợ như ADDCOLUMNS, FILTER, hoặc CALCULATE, SUMMARIZE có thể giúp tạo ra các chỉ số phức tạp hơn để đáp ứng với nhu cầu thực tế của chúng ta.
3. Hướng dẫn sử dụng cơ bản hàm SUMMARIZE
Cú pháp
Để có thể sử dụng hàm SUMMARIZE hiệu quả trong Power BI, chúng ta cần làm quen với cú pháp cơ bản và các bước áp dụng hàm này.
SUMMARIZE(
table,
groupBy_columnName1,
[groupBy_columnName2],
…,
[name1], expression1,
[name2], expression2
)
Trong đó:
- table: Bảng dữ liệu gốc cần tổng hợp.
- groupBy_columnName: Các cột được sử dụng để nhóm dữ liệu.
- name: Tên của cột mới được tạo ra.
- expression: Biểu thức tính toán cho cột mới.
Hướng dẫn tạo bảng tổng hợp bằng DAX
Để sử dụng hàm SUMMARIZE trong Power BI, bạn có thể tạo bảng tổng hợp mới bằng Calculated Table theo các bước sau:
- Chọn tab Table View trên thanh công cụ Power BI Desktop.
- Chọn New Table.
- Trong khung công thức, nhập công thức DAX sử dụng hàm SUMMARIZE.
- Bảng mới sẽ xuất hiện trong mô hình dữ liệu và có thể được sử dụng trực tiếp trong báo cáo hoặc biểu đồ.
4. Ví dụ minh họa với hàm SUMMARIZE
Giới thiệu về bộ dữ liệu
Bộ dữ liệu sử dụng trong các ví dụ dưới đây bao gồm thông tin về doanh thu, khách hàng, sản phẩm, và cửa hàng của một chuỗi bán lẻ, với các bảng chính:
- fact_sales: Thông tin chi tiết về giao dịch, bao gồm doanh thu (sales_amount), số lượng bán (order_quantity), và các khóa liên kết đến bảng sản phẩm, khách hàng, và cửa hàng.
- dim_customer: Thông tin khách hàng gồm: tên (full_name), nhóm tuổi (age_group), thu nhập (yearly_income), …
- dim_product: Thông tin sản phẩm (tên sản phẩm, phân loại nhóm sản phẩm, …)
- dim_store: Thông tin cửa hàng (tên cửa hàng, địa chỉ, quản lý, …)
Ví dụ minh họa với hàm SUMMARIZE
Ví dụ 1: Tạo bảng tổng hợp tổng doanh thu theo nhóm tuổi khách hàng và danh mục sản phẩm.
Hàm sử dụng:
SalesByCustomerAndCategory =
SUMMARIZE(
fact_sales,
dim_customer[age_group],
dim_product[product_category (groups)],
“Total Sales”, SUM(fact_sales[sales_amount])
)
- Dữ liệu sẽ được nhóm theo nhóm tuổi khách hàng (dim_customer[age_group]) và danh mục sản phẩm (dim_product[product_category (groups)]).
- Tính tổng doanh thu (sales_amount) cho từng nhóm kết hợp.
Kết quả:
Ví dụ 2: Sử dụng SUMMARIZE kết hợp với ADDCOLUMNS để tạo bảng tổng hợp tính tỉ lệ doanh thu theo cửa hàng và phân khúc độ tuổi của khách hàng
Yêu cầu: Tính tổng doanh thu và tỷ lệ phần trăm doanh thu của từng nhóm tuổi khách hàng so với tổng doanh thu của cửa hàng và đưa vào bảng tổng hợp.
Hàm sử dụng:
SalesWithPercentageByStoreAndAgeGroup =
SUMMARIZE(
ADDCOLUMNS(
fact_sales,
“@StoreTotalSales”,
Thêm cột tạm để tính tổng doanh thu từng cửa hàng
CALCULATE(
SUM(fact_sales[sales_amount]),
ALLEXCEPT(fact_sales, dim_store[store])
),
“@PercentageOfTotal”,
Thêm cột tạm tính tỉ lệ % doanh thu của từng giao dịch so với tổng
DIVIDE(
fact_sales[sales_amount],
CALCULATE(
SUM(fact_sales[sales_amount]),
ALLEXCEPT(fact_sales, dim_store[store])
),
0
)
),
dim_store[store],
Nhóm dữ liệu theo từng cửa hàng và nhóm tuổi khách hàng
dim_customer[age_group],
“Total Sales”, SUM(fact_sales[sales_amount]),
“Percentage Of Store Sales”,
SUMX(
ADDCOLUMNS(
fact_sales,
Tính tỉ lệ %
“@PercentageOfTotal”,
DIVIDE(
fact_sales[sales_amount],
CALCULATE(
SUM(fact_sales[sales_amount]),
ALLEXCEPT(fact_sales, dim_store[store])
),
0
)
),
[@PercentageOfTotal]
)
)
Trong ví dụ này, có một điểm đặc biệt đó là chúng ta đã sử dụng thêm hàm ADDCOLUMNS để tạo các cột động trong quá trình tính toán. Về khái niệm cột động (dynamic column), đây là các cột được tạo tạm thời trong quá trình tính toán, chỉ tồn tại trong phạm vi của công thức sử dụng chúng và sẽ không được lữu trữ vĩnh viễn trong bảng dữ liệu gốc.
Cụ thể, trong trường hợp này, hàm ADDCOLUMNS được dùng để tạo cột @StoreTotalSales tính doanh thu của từng cửa hàng và cột @PercentageOfTotal tính tỉ lệ phần tram doanh thu của từng giao dịch so với tổng doanh thu của cửa hàng. Ngoài ra, ở đây còn sử dụng thêm hàm ALLEXCEPT để đảm bảo giữ nguyên ngữ cảnh của cột dim_store[store] (tên cửa hàng) và loại bỏ các ngữ cảnh khác, giúp đảm bảo tính chính xác tại cấp độ cửa hàng.
Kết quả:
Ví dụ 3: Sử dụng kết hợp hàm SUMMARIZE để tạo measure
Yêu cầu: Tính doanh thu trung bình của 3 sản phẩm có tổng doanh thu cao nhất trong toàn bộ cửa hàng.
Hàm sử dụng:
Doanh thu TB top 3 sản phẩm bán chạy nhất =
VAR ProductRevenue =
SUMMARIZE(
Tạo bảng tạm nhóm theo mã sản phẩm và tính doanh thu
‘fact_sales’,
‘fact_sales'[product_key],
“@TotalRevenue”, SUM(‘fact_sales'[sales_amount])
)
VAR Top3Products =
TOPN(
3,
Lấy top 3 sản phẩm có doanh thu cao nhất
ProductRevenue,
[@TotalRevenue],
DESC
)
RETURN
AVERAGEX(Top3Products, [@TotalRevenue])
Kết quả: Thể hiện giá trị measure ra thẻ:
Khi nào nên sử dụng hàm SUMMARIZE để tạo measure?
- Khi cần nhóm dữ liệu và tính toán trên từng nhóm riêng lẻ.
- Khi cần thực hiện các phép toán phức tạp dựa trên nhiều cấp độ tổng hợp.
- Khi cần thêm các cột tính toán tạm thời mà không muốn lưu trữ trong bảng chính.
5. Ưu điểm và lưu ý khi sử dụng SUMMARIZE
Ưu điểm:
- Nhóm dữ liệu linh hoạt: SUMMARIZE cho phép nhóm dữ liệu theo nhiều cột khác nhau, chẳng hạn như nhóm theo sản phẩm, khách hàng, hoặc thời gian. Điều này rất hữu ích trong việc tạo các bảng tổng hợp để phân tích dữ liệu từ nhiều góc độ.
- Kết hợp dễ dàng với các hàm khác: Khi sử dụng kết hợp với các hàm như ADDCOLUMNS, CALCULATE, hoặc FILTER, SUMMARIZE có thể thực hiện các tính toán phức tạp và tạo ra các chỉ số động phù hợp với nhu cầu kinh doanh.
- Hiệu quả trong việc tạo bảng tạm và tính toán kết hợp: SUMMARIZE cho phép tạo ra các bảng tạm thời để thực hiện các phép tính trung gian, giúp giảm sự cần thiết của việc tạo nhiều measure riêng lẻ. Điều này làm tăng tính tổ chức và quản lý công thức trong báo cáo. Ngoài ra, điều này cũng giúp tăng thêm khả năng phân tích đa chiều.
- Dễ mở rộng: Phù hợp khi bạn cần xử lý các bài toán có yêu cầu phức tạp nhưng phải giữ công thức đơn giản và dễ dàng bảo trì khi thay đổi yêu cầu.
Một số lưu ý khi sử dụng:
- Phụ thuộc vào ngữ cảnh và quan hệ giữa các bảng: SUMMARIZE dựa vào ngữ cảnh dữ liệu và mối quan hệ đã thiết lập giữa các bảng. Nếu các mối quan hệ không được cấu hình đúng cách, kết quả tính toán có thể không chính xác hoặc không mong muốn.
- Hạn chế trong việc sử dụng trực tiếp cho các giá trị scalar: SUMMARIZE trả về bảng, không phải giá trị scalar. Do đó, để tạo ra các giá trị scalar khả dụng với biểu đồ trực quan, bạn phải kết hợp với các hàm khác như SUMX, AVERAGEX, hoặc COUNTX.
- Khả năng gây nhầm lẫn trong ngữ cảnh: Khi làm việc với các ngữ cảnh phức tạp, chẳng hạn như áp dụng bộ lọc hoặc các cột liên quan, việc sử dụng SUMMARIZE mà không hiểu rõ ngữ cảnh có thể dẫn đến sai sót trong kết quả.
- Không tối ưu hiệu suất khi dữ liệu lớn: Khi áp dụng trên các tập dữ liệu lớn hoặc phức tạp, SUMMARIZE có thể ảnh hưởng đến hiệu suất, dẫn đến thời gian tính toán lâu hơn. Trong trường hợp này, cần cân nhắc sử dụng SUMMARIZECOLUMNS – một biến thể tối ưu hơn của hàm này.
6. Kết luận
Hàm SUMMARIZE là một công cụ quan trọng và hữu ích trong Power BI, đặc biệt là trong việc tạo bảng tổng hợp và phân tích dữ liệu đa chiều. Tuy nhiên, để tận dụng tối đa sức mạnh của hàm này, người dùng cần hiểu rõ về cấu trúc dữ liệu, mối quan hệ giữa các bảng, cũng như ngữ cảnh trong tính toán. Đồng thời, nên sử dụng kết hợp với các hàm bổ trợ khác một cách hợp lý để đảm bảo hiệu suất và độ chính xác trong phân tích dữ liệu.