top of page

Hiểu Data lineage trong DAX

(Nguồn: Sqlbi.com)

Giới thiệu

Data lineage là gì ? nó là một cái tag. Được dán cho mỗi một cột trong table, và tag này nhận diện cột gốc ban đầu trong data model rằng các giá trị của một cột xuất phát từ đâu. Ví dụ, câu lệnh bên dưới cho kết quả các categories trong table Product

EVALUATE VALUES ( 'Product'[Category] )

Kết quả trả về như bên dưới

ree








Table trả về kết quả gồm 8 chuỗi ký tự. Tuy nhiên, nó không hẵn chỉ là chuỗi ký tự. DAX biết được rằng các chuỗi này xuất phát từ cột gốc Product [Category]. Vì vậy, là một cột trong table Product, chúng thừa hưởng khả năng lan truyền bộ lọc xuống các bảng khác trong model thông qua các mối quan hệ. Đó là lý do tại sao mà context transition được kích hoạt và VALUES ( Product[Category] ) lan truyền bộ lọc xuống table Sales. Chi tiết ở bên dưới :

EVALUATE

ADDCOLUMNS (

VALUES ( 'Product'[Category] ),

"Amt", [Sales Amount]

)

Kết quả là sẽ trả về giá trị doanh số cho mỗi một category :

ree







Một ví dụ có thể chứng minh không có data lineage sẽ không cho kết quả mong muốn như bên dưới :

EVALUATE

VAR Categories =

DATATABLE (

"Category", STRING,

{

{ "Category" },

{ "Audio" },

{ "TV and Video" },

{ "Computers" },

{ "Cameras and camcorders" },

{ "Cell phones" },

{ "Music, Movies and Audio Books" },

{ "Games and Toys" },

{ "Home Appliances" }

}

)

RETURN

ADDCOLUMNS(Categories,"Amt",[Sales Amount])

‘’Audio’’ không thể lọc xuống dưới table Sales và kết quả là :

ree







Tên cột và nội dung cột cũng không quan trọng, cái quan trọng duy nhất là data lineage của một cột, là cột ban đầu mà các giá trị đã được truy xuất từ ​​đó. Nếu một cột bị đổi tên, data lineage vẫn tồn tại. Ví dụ bên dưới :

EVALUATE

ADDCOLUMNS (

SELECTCOLUMNS (

VALUES ( 'Product'[Category] ),

"New name for Category", 'Product'[Category]

),

"Amt", [Sales Amount]

)

Cột ‘’New name for Category’’ vẫn duy trì data lineage với Product [Category]. Do đó, cho ra kết quả doanh số của từng Category như mong đợi mặc dù tên cột đã bị thay đổi.

ree








Data lineage được duy trì miễn là một biểu thức chỉ được tạo thành từ một tham chiếu cột. Ví dụ: việc thêm một chuỗi trống vào Product[Category] trong biểu thức trước đó không làm thay đổi nội dung cột, trong khi nó lại phá vỡ data lineage. Trong đoạn mã sau, nguồn của cột ‘’New name for Category’’ là một biểu thức thay vì chỉ là một tham chiếu cột. Do đó, data lineage của cột mới không liên quan đến bất kỳ cột nguồn nào của mô hình.

EVALUATE

ADDCOLUMNS (

SELECTCOLUMNS (

VALUES ( 'Product'[Category] ),

"New name for Category", 'Product'[Category] & ""

),

"Amt", [Sales Amount]

)

Không bất ngờ, kết quả sẽ giống nhau cho tất cả càng dòng của Amt value

ree







Mỗi cột đều có data lineage của nó mặc cho một table chứa các cột đến từ các table khác nhau. Do đó, kết quả của một table expression có thể áp dụng để lọc đến nhiều bảng trong một lần. Kết quả bên dưới cho thấy cả hai cột Product[Category] và Date[Calendar Year] đều có thể lan truyền lọc xuống đến table Sales thông qua context transition.

EVALUATE

FILTER (

ADDCOLUMNS (

CROSSJOIN (

VALUES ( 'Product'[Category] ),

VALUES ( 'Date'[Calendar Year] )

),

"Amt", [Sales Amount]

),

[Amt] > 0

)

Kết quả Sales Amt ra đúng theo Category và Year như mong đợi

ree








Mặc dù Data lineage luôn giữ và duy trì bởi engine một cách tự động, các developer có lựa chọn làm thay đổi data lineage của một table. Hàm TREATAS là hữu dụng cho việc đó. TREATAS chấp nhận một table với đối số đầu tiên và theo sau nó là các cột cụ thể liên quan. TREATAS trả kết quả về giống table ban đầu tương ứng các cột cụ thể được tag liên quan. Nếu một vài giá trị trong table không có trong các cột có liên quan (cột có tag) thì sau đó TREATAS sẽ tự động loại bỏ giá trị trong table đó. Ví dụ bên dưới thêm “Computers and geeky stuff” vào table mà không có trong danh sách Category :

EVALUATE

VAR Categories =

DATATABLE (

"Category", STRING,

{

{ "Category" },

{ "Audio" },

{ "TV and Video" },

{ "Computers and geeky stuff" },

{ "Cameras and camcorders" },

{ "Cell phones" },

{ "Music, Movies and Audio Books" },

{ "Games and Toys" },

{ "Home Appliances" }

}

)

RETURN

ADDCOLUMNS (

TREATAS (

Categories,

'Product'[Category]

),

"Amt", [Sales Amount]

)

Kết quả như bên dưới sẽ không xuất hiện trong danh sách kết quả :

ree


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