Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 17

CASE STUDY

BÁO CÁO CỘNG DỒN TRONG POWER BI


Dữ liệu: Opt tái ký
BÀI TOÁN 1: ĐẾM SỐ LƯỢNG HỢP ĐỒNG TÁI KÝ CỘNG DỒN THEO THỜI GIAN
Cách 1: Kết hợp hàm allselected và hàm max/min

Running contract = CALCULATE(DISTINCTCOUNT(vw_all_opt_taiky_from2019[potentialid]),


FILTER(ALLSELECTED(vw_all_opt_taiky_from2019),
vw_all_opt_taiky_from2019[sales_stage] IN {"ClosedWon", "Chờ Xét Duyệt"} &&
vw_all_opt_taiky_from2019[approval_date] <= MAX(vw_all_opt_taiky_from2019[approval_date])))

- Note: Hàm ALLSELECTED trong tình huống này giúp bỏ qua filter context trong chính biểu đồ, filter context này tạo ra bởi trục
hoành là Approval Date.
Công thức có allselected Công thức có không có allselected
Cách 2: Sử dụng họ hàm DATESYTD
Đầu tiên tạo 1 measure đếm hợp đồng:
No.Contracts = CALCULATE(DISTINCTCOUNT(vw_all_opt_taiky_from2019[potentialid]),
FILTER((vw_all_opt_taiky_from2019),
vw_all_opt_taiky_from2019[sales_stage] IN {"ClosedWon", "Chờ Xét Duyệt"}))

Tạo measure cộng dồn:


Running contract by DATESYTD = CALCULATE([Measure đếm hợp đồng], DATESYTD('d_Date (2)'[Date]))

Lưu ý: Cần có 1 bảng dim date đầy đủ

Công thức có DATESYTD Công thức có DATESQTD Công thức có DATESMTD


Cách 3: Sử dụng họ hàm TOTALYTD – KHÁ TƯƠNG ĐỒNG VỚI HÀM DATESYTD
Running contract by TotalYTD =
TOTALYTD(
CALCULATE(DISTINCTCOUNT(vw_all_opt_taiky_from2019[potentialid]),
FILTER((vw_all_opt_taiky_from2019),
vw_all_opt_taiky_from2019[sales_stage] IN {"ClosedWon", "Chờ Xét Duyệt"})), 'd_Date (2)'[Date])

Lưu ý: ở đây có thể dùng “Measure đếm hợp đồng” như là 1 thành phần trong hàm ở trên, thay vì viết cả 1 cục calculate to như
vậy bên trong

Công thức có TOTALYTD Công thức có TOTALQTD Công thức có TOTALMTD


BÀI TOÁN 2: ĐẾM SỐ LƯỢNG HỢP ĐỒNG TÁI KÝ CỘNG DỒN THEO TỐC ĐỘ CONVERT
Kết hợp hàm allselected và hàm max/min
- Tốc độ tái ký: Khoảng thời gian giữa ngày xác nhận hợp đồng tái ký (approval date) và ngày opt tái ký được tạo (created_date)
- Trong tình huống này, việc sử dụng các hàm TOTALYTD hay hàm DATESYTD sẽ không phù hợp, do cộng dồn không phải theo
thời gian.
running contract by V =
CALCULATE(
DISTINCTCOUNT(vw_all_opt_taiky_from2019[potentialid]),
FILTER(ALLSELECTED(vw_all_opt_taiky_from2019),
vw_all_opt_taiky_from2019[sales_stage] in {"ClosedWon", "Chờ Xét Duyệt"} &&
vw_all_opt_taiky_from2019[TC (ktxn)] <= MAX(vw_all_opt_taiky_from2019[TC (ktxn)])))
Note: TC (ktxn) là biến thể hiện thời gian convert
BÀI TOÁN 3:

TẠO BIỂU ĐỒ CÓ 2 ĐƯỜNG CỘNG DỒN THEO THỜI GIAN, 1 ĐƯỜNG THÁNG NÀY VÀ 1 ĐƯỜNG THÁNG TRƯỚC
Cách 1: Sử dụng họ hàm DATESYTD
- Tạo 1 measure đo số lượng hợp đồng của tháng trước
No.contracts Previous Month =
CALCULATE(CALCULATE(DISTINCTCOUNT(vw_all_opt_taiky_from2019[potentialid]),
FILTER((vw_all_opt_taiky_from2019),
vw_all_opt_taiky_from2019[sales_stage] IN {"ClosedWon", "Chờ Xét Duyệt"})),
DATEADD('d_Date (2)'[Date], -1, MONTH))

- Tính cộng dồn bằng hàm DATESYTD

Running contract by DATESYTD in Previous Month = CALCULATE([No.contracts Previous Month], DATESYTD('d_Date (2)'[Date]))
Cách 2: Sử dụng họ hàm TOTALYTD
- Tạo 1 measure đo số lượng hợp đồng của tháng trước
No.contracts Previous Month =
CALCULATE(CALCULATE(DISTINCTCOUNT(vw_all_opt_taiky_from2019[potentialid]),
FILTER((vw_all_opt_taiky_from2019),
vw_all_opt_taiky_from2019[sales_stage] IN {"ClosedWon", "Chờ Xét Duyệt"})),
DATEADD('d_Date (2)'[Date], -1, MONTH))

- Tính cộng dồn bằng hàm TOTALYTD

Running contract by TotalYTD in Previous Month = TOTALYTD([No.contracts Previous Month], 'd_Date (2)'[Date])
BÀI TOÁN 4:

BIỂU ĐỒ CÓ 2 ĐƯỜNG CỘNG DỒN THEO TỐC ĐỘ TÁI KÝ, 1 ĐƯỜNG THÁNG NÀY VÀ 1 ĐƯỜNG THÁNG TRƯỚC

Cụ thể: Giả sử ta có số lượng hợp đồng của những opt được tạo ra trong tháng 3 cộng dồn theo thời gian

convert. Muốn so sánh với tốc độ convert của những opt được tạo ra trong tháng 2.
Bước 1: Tạo 1 bảng tạm (đặt tên là d_Velocity) trong đó có cột “Thời gian convert”, Cột này sẽ tạo relationship với cột thể hiện thời gian convert trong bảng tính toán chính (đang đặt
tên là TC (ktxn)). Việc tạo bảng này rất quan trọng, đảm bảo đường cong mượt mà như đường cong Ngọc Trinh, tránh đứt quảng do không đủ các giá trị liên tục ở x-axis.
Bước 2: Tạo measure đo Running contract theo thời gian convert. Ở đây do trục hoành không phải là thời gian, do đó không thể sử dụng họ hàm DATESYTD hay TOTALYTD như ở các ví
dụ trước.
running contract by V =
CALCULATE(DISTINCTCOUNT(vw_all_opt_taiky_from2019[potentialid]),
FILTER(ALLSELECTED(vw_all_opt_taiky_from2019),
vw_all_opt_taiky_from2019[sales_stage] in {"ClosedWon", "Chờ Xét Duyệt"} &&
vw_all_opt_taiky_from2019[TC (ktxn)] <= MAX(d_Velocity[Thời gian convert])))

Bước 3: Tạo measure đo Running contract của tháng trước theo thời gian convert. Công thức sử dụng kết hợp các hàm MINX, ALLSELECTED, ALLEXCEPT, MAX…

Running contract by V in Previous Month =


VAR min_date = MINX(ALLSELECTED(vw_all_opt_taiky_from2019[created_date]), [created_date]) - 1
VAR result = CALCULATE(DISTINCTCOUNT(vw_all_opt_taiky_from2019[potentialid]),
FILTER(ALLEXCEPT(vw_all_opt_taiky_from2019, d_auth_industry[Industry], vw_all_opt_taiky_from2019[cf_city]),
vw_all_opt_taiky_from2019[sales_stage] IN {"ClosedWon", "Chờ Xét Duyệt"} &&
MONTH(vw_all_opt_taiky_from2019[created_date]) = MONTH(min_date) &&
YEAR(vw_all_opt_taiky_from2019[created_date]) = YEAR(min_date) &&
vw_all_opt_taiky_from2019[TC (ktxn)] <= MAX(d_Velocity[Thời gian convert])))
RETURN result
Giải thích công thức tính Running contract by V in Previous Month
• min_date = MINX(ALLSELECTED(vw_all_opt_taiky_from2019[created_date]), [created_date]) – 1: Đoạn này mục đích để xác định được ngày created date
nhỏ nhất trong khoảng thời gian created date được chọn trong slicer created_date (Quan sát ảnh ở slide 13). Từ đó suy ra được ngày lớn nhất của tháng
liền trước đó. Từ đó xác định được tháng và được month.
• Ở đây sử dụng ALLSELECTED: Hàm này sẽ filter bảng vw_all_opt_taiky_from2019 theo như filter context đang được thiết lập (bao gồm filter trong
slicer và cả filter ở bên phải màn hình), tuy nhiên nó sẽ loại bỏ bất kì filter nào bên trong query (tức là bên trong đoạn code mà người viết đã viết).
• Hàm MINX này cho phép xác định giá trị nhỏ nhất của created_date sau khi được filter (bởi hàm ALLSELECTED)
• FILTER(ALLEXCEPT(vw_all_opt_taiky_from2019, d_auth_industry[Industry], vw_all_opt_taiky_from2019[cf_city]): Đoạn này có ý nghĩa quan trọng. Nếu
không dùng AllEXCEPT thì bảng vw_all_opt_taiky_from2019 sẽ bị lọc theo filter context mà ta đã thiết lập ở slicer và vùng filter (ở bên phải màn hình) và cả
bên trong chính biểu đồ (cũng là 1 loại filter). Khi đó không có dữ liệu trả về để tính toán cho previous month.
• Đầu tiên hãy nói về hàm ALL, hàm này cho phép chúng ta lấy nguyên bảng vw_all_opt_taiky_from2019 mà không bị ảnh hưởng bởi bất kì một loại
filter nào. Tuy nhiên nếu dùng ALL thì nếu chúng ta filter theo từng ngành hàng, từng khu vực, đường cong của previous month sẽ không thay
đổi. Vì bản chất của ALL là đã bỏ qua bất kì loại filter nào.
• Do đó trường hợp này dùng ALLEXCEPT sẽ chuẩn hơn, ví dụ chúng ta muốn có thể filter theo Industry hay khu vực, thì đưa các cột biến đó vào trong
hàm này.
• 2 đoạn MONTH(…) và YEAR(…) đơn giản chỉ là sau khi ALLEXCEPT, chúng ta chỉ filter những dòng dữ liệu mà có Created_date thuộc previous month (của
current month mà chúng ta đang filter trong slicer Created date – quay lại slide thứ 13 nhìn cho rõ nhé)
• Cuối cùng là điều kiện vw_all_opt_taiky_from2019[TC (ktxn)] <= MAX(d_Velocity[Thời gian convert]) như các phần trước có nói
Bên dưới 3 biểu đồ thể hiện sự khác biệt khi dùng ALLEXCEPT và ALL.
- Khi không filter FnB, khác biệt khi dùng ALLEXCEPT và ALL là không có.
- Khi filter chỉ ngành hàng FnB, với hàm ALL, đường cong cho Previous Month không thay đổi so với khi ta filter FnB.
Chỉ có đường màu vàng là thay đổi do bị filter.

ALLEXCEPT: Tất cả ALLEXCEPT: Ngành hàng FnB ALL: Tất cả ALL: Ngành hàng FnB
Tổng kết

- Tạo đường cong cộng dồn có 1 số cách tạo, tùy tình huống để người dùng lựa chọn phù hợp

- ALLSELECTED, ALL và ALLEXCEPT có sự khác nhau về cách dùng

You might also like