relationship trong Data Model

Power BI Day 23: Tìm hiểu về những yếu tố quan trọng để đánh giá một Model là tốt hay không?

Ngày đăng: 14/02/2022

Trong PowerBI, bạn có thể thoải mái tạo mới relationship và edit relationship giữa các bảng.

Ví dụ trong trường hợp sau nếu ta có 3 bảng Dim Product bổ sung thông tin cho 1 bảng Fact?

Hay sẽ tốt hơn nếu ta combine (merge) các bảng Product và có mô hình như sau:

Hãy cùng đi so sánh!

Performance

Có thêm các mối quan hệ không giúp ích gì cho hiệu suất. Các truy vấn DAX đằng sau cảnh sẽ lâu hơn. Ví dụ mình muốn xuất ra thông tin như sau:

Trường hợp 1: Thông tin Product tách ra thành nhiều bảng, mình sẽ cần link các bảng với nhau, điều này giống như VLOOKUP trong Excel và JOIN trong SQL. Với DAX cũng vậy, câu lệnh chắc chắn sẽ phức tạp hơn!

// DAX Query

DEFINE

VAR __DS0Core =

SELECTCOLUMNS(

KEEPFILTERS(

FILTER(

KEEPFILTERS(

SUMMARIZECOLUMNS(

'DimProductCategory'[EnglishProductCategoryName],

'DimProductSubcategory'[EnglishProductSubcategoryName],

'DimProduct'[EnglishProductName],

"CountRowsDimProduct", CALCULATE(COUNTROWS('DimProduct'))

)

),

OR(

OR(

NOT(ISBLANK('DimProductCategory'[EnglishProductCategoryName])),

NOT(ISBLANK('DimProductSubcategory'[EnglishProductSubcategoryName]))

),

NOT(ISBLANK('DimProduct'[EnglishProductName]))

)

)

),

"'DimProductCategory'[EnglishProductCategoryName]", 'DimProductCategory'[EnglishProductCategoryName],

"'DimProductSubcategory'[EnglishProductSubcategoryName]", 'DimProductSubcategory'[EnglishProductSubcategoryName],

"'DimProduct'[EnglishProductName]", 'DimProduct'[EnglishProductName]

)

VAR __DS0PrimaryWindowed =

TOPN(

501,

__DS0Core,

'DimProductCategory'[EnglishProductCategoryName],

1,

'DimProductSubcategory'[EnglishProductSubcategoryName],

1,

'DimProduct'[EnglishProductName],

1

)

EVALUATE

__DS0PrimaryWindowed

ORDER BY

'DimProductCategory'[EnglishProductCategoryName],

'DimProductSubcategory'[EnglishProductSubcategoryName],

'DimProduct'[EnglishProductName]

Trường hợp 2: Thông tin Product được combine trong 1 bảng, đoạn DAX và hiệu năng sẽ được cải thiện cho chúng ta chỉ cần lấy thông tin từ 1 bảng. Trong trường hợp này là __DS0Core

// DAX Query

DEFINE

VAR __DS0Core =

SUMMARIZE(

'DimProduct',

'DimProduct'[EnglishProductCategoryName],

'DimProduct'[EnglishProductSubcategoryName],

'DimProduct'[EnglishProductName]

)

VAR __DS0PrimaryWindowed =

TOPN(

501,

__DS0Core,

'DimProduct'[EnglishProductCategoryName],

1,

'DimProduct'[EnglishProductSubcategoryName],

1,

'DimProduct'[EnglishProductName],

1

)

EVALUATE

__DS0PrimaryWindowed

ORDER BY

'DimProduct'[EnglishProductCategoryName],

'DimProduct'[EnglishProductSubcategoryName],

'DimProduct'[EnglishProductName]

Simplicity

Một yếu tố để đánh giá một model tốt là nó cần dễ đọc và dễ hiểu.

Bạn sẽ đánh giá cao model nào trong 2 model sau?

Tạo nhiều bảng con và nhiều mối quan hệ sẽ khiến mô hình trở nên phức tạp!

Bên cạnh đó, có nhiều mối quan hệ khiến bạn cần phải mất thêm thời gian cấu hình chiều quan hệ cho chúng, hoặc sẽ gặp vướng mắc với các active/inactive relationship.

Tuy nhiên, nếu gộp tất cả các thông tin cần dùng để hạn chế relationship cũng khiến cho việc tìm thông tin cần thiết trở nên phức tạp!

Hãy bắt đầu với Star Schema!

Việc design Data Model hoàn toàn là step bắt đầu từ bút và giấy, không có công cụ kỹ thuật nào cả! Hãy bắt đầu với 1 bảng Fact – bảng thực tế bao gồm các phép đo, số liệu hoặc sự kiện của một quy trình kinh doanh và các bảng Dim – bảng thứ nguyên là một cấu trúc phân loại các sự kiện và biện pháp để cho phép người dùng trả lời các câu hỏi kinh doanh.

Một mô hình tốt phải xem xét trên nhiều khía cạnh. Đầu tiên và sau cuối, nó phải bắt đầu với yêu cầu!

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 *