top of page

Introducing SUMMARIZECOLUMNS

Bài viết này giải thích cách sử dụng SUMMARIZECOLUMNS, công thức được xem là thay thế SUMMARIZE và không cần phải sử dụng kèm với ADDCOLUMNS để tối ưu hóa quá trình tính toán kết quả.

SUMMARIZE là hàm được dùng để tổng kết và nhóm dữ liệu leverage được mối quan hệ trong data model. Hàm này yêu cầu 1 table được dùng để group dữ liệu cho đối số đầu tiên. Bạn có thể bao gồm cột dữ liệu ở table đích khác nếu có relationship one – one hoặc many to one trong data model. Ví dụ, bạn có thể viết câu lệnh bên dưới để cho kết quả một table với year, color và sales amount :

Sales by Year and Color =

SUMMARIZE (

Sales,

'Date'[Calendar Year],

'Product'[Color],

"Sales Amount", SUMX ( Sales, Sales[Quantity] * Sales[Unit Price] )

)

Vấn đề với SUMMARIZE là nó có một vài vấn đề về cạm bẫy và hiệu suất. Và giải pháp là kết hợp với hàm ADDCOLUMNS :

Sales by Year and Color optimized =

ADDCOLUMNS (

SUMMARIZE (

Sales,

'Date'[Calendar Year],

'Product'[Color]

),

"Sales Amount", CALCULATE ( SUMX ( Sales, Sales[Quantity] * Sales[Unit Price] ) )

)

Chú ý là với ADDCOLUMNS bạn phải chèn thêm hàm CALCULATE để kích hoạt context transition, trong khi đó với SUMMARIZE thì bạn ko cần phải làm như vậy.

Bạn cũng có thể dùng SUMMARIZECOLUMNS để cho kết quả tương tự mà không cần một table để group như là đối số đầu tiên trong hàm SUMMARIZE :

Sales by Year and Color new style =

SUMMARIZECOLUMNS (

'Date'[Calendar Year],

'Product'[Color],

"Sales Amount", SUMX ( Sales, Sales[Quantity] * Sales[Unit Price] )

)

Với câu lệnh trên bạn không cần phải chỉ định đến table Sales bởi vì bản chất câu lệnh trên là phái sinh của câu lệnh bên dưới :

Sales by Year and Color using Crossjoin =

FILTER (

SUMMARIZE (

CROSSJOIN (

VALUES ( 'Date'[Calendar Year] ),

VALUES ( 'Product'[Color] )

),

'Date'[Calendar Year],

'Product'[Color],

"Sales Amount", SUMX ( Sales, Sales[Quantity] * Sales[Unit Price] )

),

NOT ( ISBLANK ( [Sales Amount] ) )

)

Nếu bạn đo lường hiệu suất, SUMMARIZECOLUMNS sẽ cho bạn một kết quả hiệu suất khá ấn tượng và một cách tổng quát bạn nên thay thế SUMMARIZE với SUMMARIZECOLUMNS và cũng nên thay thế ADDCOLUMNS/SUMMARIZE vì lý do hiệu suất này. Tuy nhiên, có một vài điều bạn cần chú ý :

Filter table trong SUMMARIZECOLUMNS

SUMMARIZECOLUMNS sẽ không có đối số đầu tiên chỉ định đến 1 table cụ thể bằng cách sử dụng phương thức join. Với ví dụ ở trên phương thức kết hợp giữa Year và Color sẽ tạo ra 112 kết hợp ( 7 years và 16 colors) trong khi đó với SUMMARIZE nó chỉ trả về 47 kết hợp giữa year và color là ít hơn so với cách trên.

Giải pháp để tối ưu SUMMARIZECOLUMNS là bạn hãy chỉ định một table lọc ở phía sau các cột mà bạn muốn tổng kết và trước các cột chứa giá trị bạn cần tính toán :

Sales by Year and Color summarizecolumns =

SUMMARIZECOLUMNS (

'Date'[Calendar Year],

'Product'[Color],

Sales

)

Với SUMMARIZECOLUMNS bạn có thể chèn thêm nhiều filter table, và nó rất hữu dụng để queries cho những data model phức tạp gồm nhiều bảng fact.

Không có Row Context trong SUMMARIZECOLUMNS

Sự khác biệt thứ hai giữa SUMMARIZE và SUMMARIZECOLUMNS là SUMMARIZE bao gồm Row context và Filter Context trong công thức khi mà bạn dùng để tính toán. Trong khi đó, SUMMARIZECOLUMNS chỉ có duy nhất filter context mà thôi.

Ví dụ, với SUMMARIZE bạn có thể viết công thức như bên dưới với Row context :

Sales by Year and Color correction summarize =

SUMMARIZE (

Sales,

'Date'[Calendar Year Number],

'Product'[Color],

"Sales Amount",

VAR delta = 'Date'[Calendar Year Number] - 2007

VAR correction = 1 + ( delta / 100 )

RETURN

correction

* SUMX ( Sales, [Quantity] * Sales[Unit Price] )

)

Tuy nhiên với SUMMARIZECOLUMNS bạn không có row context trên cột mà bạn group nên bạn phải sử dụng VALUES để lấy được các giá trị từ filter context :

Sales by Year and Color correction summarizecolumns =

SUMMARIZECOLUMNS (

'Date'[Calendar Year Number],

'Product'[Color],

"Sales Amount",

VAR delta = VALUES ( 'Date'[Calendar Year Number] ) - 2007

VAR correction = 1 + ( delta / 100 )

RETURN

correction

* SUMX ( Sales, [Quantity] * Sales[Unit Price] )

)

Comments


VR Goggles

Practice makes perfect

Sign up for our newsletter

Thanks for subscribing!

Contact Us

Thu Duc, HCM city

  • Slack
  • Twitter
  • Linkedin
  • Facebook

© 2023 by Finclvr. Powered and secured by Microsoft

bottom of page