Tiếp cận DAX dễ dàng hơn thông qua góc nhìn từ SQL

Ngày đăng: 22/02/2024

Nếu bạn là người mới tiếp cận DAX – ngôn ngữ được sử dụng chính trong Power BI và bạn đã có sẵn nền tảng sử dụng SQL thì đây là bài viết dành cho bạn. Bởi vì khi tiếp cận một ngôn ngữ mới, chúng ta thường có thói quen liên kết những tình huống hoặc những nhóm hàm liên quan giữa các ngôn ngữ với nhau, cách này sẽ giúp chúng ta dễ hiểu và dễ tiếp cận hơn.

Trong bài viết này, các bạn hãy cùng mình mình trải nghiệm một số nhóm hàm cơ bản và được sử dụng phổ biến trong SQL và DAX nhé.

Nhóm 1: String Comparison

Giới thiệu String Comparison

String Comparison là dạng so sánh hai hay nhiều chuỗi giá trị dạng chữ (text). Mục đích của việc so sánh này là xác định xem hai chuỗi có giống nhau hay không, hoặc để xác định xem một chuỗi có chứa một chuỗi khác hay không. 

Để so sánh các chuỗi giá trị trong SQL, chúng ta thường hay sử dụng nhóm hàm LIKE. Trong khi đó, ngôn ngữ DAX sử dụng các toán tử (=, <>, <, >, <=, >=) kết hợp với  hàm LEFT, RIGHT…, hoặc hàm SEARCH, CONTAINSSTRING…

Chúng ta sẽ cùng tìm hiểu kỹ hơn thông qua một số tình huống bên dưới nhé.

Xử lý tình huống bằng SQL và DA 

Mình sẽ minh họa tình huống bằng bảng dữ liệu Product nằm trong bộ Dataset Internet Sales ở đây.

Tiếp cận DAX dễ dàng hơn thông qua góc nhìn từ SQL
Yêu cầu SQL DAX 
1/ So sánh/ tìm kiếm xem chuỗi dữ liệu trong cột Subcategory có phải là  “Bikes” Subcategory LIKE ‘Bikes’ Product[Subcategory] = “Bikes” 
2/ So sánh/ tìm kiếm xem chuỗi dữ liệu trong cột Subcategory có bắt đầu bằng chữ “Bikes”  Subcategory LIKE ‘Bikes%’ LEFT(Product[Subcategory], 5 ) = “Bikes” 
3/ So sánh/tìm kiếm xem chuỗi dữ liệu trong cột Subcategory có chứa chữ “Bikes” Subcategory LIKE ‘%Bikes%’  CONTAINSSTRING( Product[Subcategory], “Bikes” ) 

Nhóm 2: Filtering Data 

Giới thiệu Filter Data  

Filter Data được sử dụng để lọc dữ liệu có điều kiện. Trong SQL, khi muốn đặt điều kiện trong các trường hợp tính toán, chúng ta sẽ sử dụng mệnh đề WHERE. Trong khi đó, nhóm hàm FILTERCALCULATETABLE sẽ được sử dụng trong DAX. 

Xử lý tình huống bằng SQL và DAX 

Mình sẽ sử dụng lại Bảng Product ở trên để minh họa các tình huống bên dưới: 

Tình huống SQL DAX 
1/ Lấy ra toàn bộ dữ liệu có màu sắc (Color) là đỏ SELECT * FROM Product WHERE Color = ‘Red’ EVALUATE FILTER (Product, Product[Color] = “Red”)  
Hoặc  
EVALUATE CALCULATETABLE (Product, Product[Color] = “Red” )
2/ Lấy ra toàn bộ dữ liệu có màu sắc (Color) là đỏ và Giá vốn (Standard Cost) lớn hơn 100 SELECT * FROM Product WHERE Color = ‘Red’ AND Standard Cost > 100 EVALUATE FILTER (Product, AND (Product[Color] = “Red”, Product[Standard Cost] > 100 ) )  
Hoặc 
EVALUATE CALCULATETABLE ( Product, FILTER ( Product, AND (Product[Color] = “Red”, Product[Standard Cost] > 100 ) ) ) 

Nhóm 3: Grouping Data

Giới thiệu Grouping Data

Grouping Data là nhóm hàm cho phép chúng ta chia dữ liệu của mình thành các nhóm riêng biệt để thực hiện các phép tính, ví dụ như tính Doanh thu theo tháng (với ví dụ này chúng ta đang chia nhóm dữ liệu theo từng tháng và tính toán trên nhóm đó).

Để thực hiện điều này, SQL thường sử dụng mệnh đề GROUP BY và DAX sẽ sử dụng SUMMARIZE. Chúng ta cùng tìm hiểu cách sử dụng bên dưới nhé.

Xử lý tình huống bằng SQL và DAX

Mình sẽ sử dụng bảng dữ liệu Internet Sales nằm trong bộ Dataset Internet Sales ở đây.

Bảng dữ liệu này ghi nhận thông tin bán hàng theo từng hóa đơn và từng dòng sản phẩm. Tức là khi khách hàng mua hàng, sẽ được ghi nhận 1 hóa đơn và trên hóa đơn sẽ ghi nhận nhiều dòng sản phẩm. Dưới đây là hình chụp tóm gọn các cột dữ liệu chính trong bảng Internet Sales.

Tiếp cận DAX thông qua góc nhìn từ SQL

Yêu cầu: Tính doanh thu (SalesAmount) và nhóm theo từng ngày để trả ra kết quả như bên dưới.

Chúng ta sẽ viết công thức như sau: 

SQL DAX 
SELECT OrderDate, SUM(SalesAmount) AS Sales FROM Internet Sales GROUP BY OrderDate EVALUATE SUMMARIZE (‘Internet Sales’, ‘Internet Sales'[OrderDate], “Sales”, SUM (‘Internet Sales'[SalesAmount] ) ) 

Nhóm 4: Window Functions

Giới thiệu Window Functions

Window Functions vốn là một hàm đặc trưng trong SQL, đặc biệt là khi người dùng muốn xử lý các phép tính phức tạp. Về cơ bản, hàm này được sử dụng để tính toán một tập hợp các hàng liên quan đến hàng hiện tại. Chỉ vài năm gần đây, Microsoft mới bổ sung nhóm hàm Window Functions này vào DAX và đã giúp người dùng xử lý dữ liệu nhanh chóng hơn. 

Xử lý tình huống bằng SQL và DAX

Trong khuôn khổ của bài viết này, mình chỉ đưa ra một tình huống phổ biến liên quan đến nhóm hàm Window Function này thường được dùng trong SQL và DAX, đó là nhóm hàm xếp hạng RANK. Nếu các bạn quan tâm và muốn tìm hiểu sâu hơn về các nhóm hàm Window Funtions khác, có thể tìm đọc các bài viết liên quan trong các link đính kèm phía dưới. 

Bây giờ, hãy cùng mình đi đến một ví dụ về cách sắp xếp dữ liệu thông qua hàm RANK này nhé. Cũng với bảng dữ liệu Product ở Mục 1, mình muốn sắp sếp các SubCategory theo Standard Cost giảm dần và trên từng nhóm Category.

Tiếp cận DAX thông qua SQL

Chúng ta sẽ viết công thức như bên dưới cho cả SQL và DAX.

SQL:

SELECT Product.Category, 
       Product.Subcategory, 
       Product.StandardCost, 
       DENSE_RANK() OVER (PARTITION BY Product.Category 
            			ORDER BY Product.StandardCost DESC) 
FROM Product 

DAX:

Nhóm 5: Running Total

Giới thiệu Running Total

Running Total hay còn gọi là tính toán cộng dồn / lũy kế thường được ứng dụng trong các tình huống liên quan đến doanh thu cộng dồn, hàng tồn kho cuối kỳ… Nội dung sau đây mình sẽ hướng dẫn các bạn viết công thức tính cho cả SQL và DAX nhé. 

Xử lý tình huống bằng SQL và DAX

Mình sẽ sử dụng lại bảng dữ liệu Internet Sales ở Mục 3 và tạo ra một kết quả như sau: 

Xử lý tình huống bằng SQL và DAX

Các bạn có thể thấy là cột Running Total Sales đang cộng dồn doanh số qua từng ngày. 

Để thực hiện bài toán này, chúng ta có thể tạo công thức như sau: 

SQL:

SELECT  
      B.Date , 
      B.SalesAmount AS TotalSales , 
     (SELECT SUM(A.SalesAmount) 
       FROM InternetSales AS A 
       WHERE A.Date <= B.Date) AS Running_Total_Sales 
FROM InternetSales AS B 
ORDER BY B.Date 

DAX:

Running Total Sales =
CALCULATE (
    ‘Internet Sales'[Total Sales],
    ‘Date'[Date] <= MAX ( ‘Date'[Date] )
)

Kết luận

Vậy là chúng ta cùng tìm hiểu qua các nhóm hàm liên quan đến So sánh dạng chuỗi (String Comparison); Lọc dữ liệu (Filter data); Nhóm dữ liệu (Grouping data); Windows Function (thông qua một hàm tiêu biểu là Rank) và cách tính Running Total (cộng dồn). Các bạn cũng đã nhận ra những bài toán được thực hiện bằng SQL đều có thể xử lý được bằng DAX và các hàm sử dụng trong những công cụ này cũng có nhiều điểm chung với nhau.

Hy vọng các bạn có thể dễ dàng tiếp cận DAX thông qua những kiến thức từ SQL.

Một số bài viết liên quan:

https://datapot.vn/ung-dung-cua-window-function-trong-sql/ 

https://datapot.vn/kham-pha-ham-index-va-window-trong-power-bi/  

https://datapot.vn/dax-ham-rank-va-su-khac-biet-so-voi-ham-rankx/  

Chia sẻ bài viết này

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *