ขอเปิดบทความ Series ใหม่นั่นก็คือการเจาะลึกปรับแต่งการทำงานของ Visual ต่างๆ ใน Power BI ให้สร้างผลลัพธ์ให้ได้ดั่งใจเรามากขึ้น ซึ่งขอประเดิมด้วยกราฟ Waterfall ก่อนเลยครับ
กราฟ Waterfall เป็นกราฟที่เหมาะกับการเอาไว้แสดงองค์ประกอบว่าตัวเลขที่เราสนใจมันมีตัวเลขนั้นได้เพราะมีองค์ประกอบอะไรทำให้เกิดขึ้น (ทั้งทิศทางบวกและลบ) แต่มันอาจมีวิธีการใส่ข้อมูลที่เข้าใจยาก เราจึงต้องมาเจาะลึกกันให้เข้าใจมากขึ้นกันในบทความนี้
Waterfall แบบไม่มี Breakdown
ตัวอย่างแบบ Basic ที่สุด ก็คือ เอา TotalRevenue กับ MonthName ลงไปใน Visual นี้ มันก็จะแสดงให้เห็นว่า ยอดขายรวมทั้งหมด (กราฟ Total สีน้ำเงินด้านขวา) นั้นมาจาก เดือนอะไรเท่าไหร่ (ผมเอาปีไปเป็น Slicer/Filter แล้วเลือกปีเดียว)
เพื่อให้อธิบายง่ายขึ้น ผมจะเลือกให้มันแสดง Data Label ออกมาด้วย
Waterfall แบบมี Breakdown
กราฟ Waterfall นั้นสามารถใส่ Field ลงไปใน Breakdown ได้ด้วย เช่น ผมใส่ StoreType ลงไปด้วย จะพบว่าการทำงานของมันจะเปลี่ยนไปโดยสิ้นเชิง
ผลลัพธ์ของมันกลายเป็นการพยายามจะบอกว่า ยอดขายแต่ละเดือนนั้น ถ้าแบ่งตาม StoreType แล้ว มันมีการเปลี่ยนแปลงจากเดือนนึงเทียบกับอีกเดือนนึงยังไง (เอาแท่งขวาลบซ้าย สำหรับ breakdown แต่ละ item) โดยจะไม่มี Total ด้านขวาสุดอีกต่อไป
เช่น มอง May (23.5 M) เทียบกับ June (22.7 M) จะพบว่า มันเกิดจาก
- ยอด Online เพิ่มขึ้น 0.7M
- ยอด Catalog ลดลง 0.1M
- ยอด Reseller ลดลง 0.4M
- ยอด Store ลดลง 1.1M
กรณีที่การ Breakdown มันมีเยอะมาก เช่น ผมเปลี่ยนจาก StoreType เป็น BrandName จะพบว่ามันไม่ได้แสดง BrandName ทั้งหมดออกมา แต่จะมีการ Group เป็น Other ให้ด้วย ซึ่งเรากำหนดได้ว่าจะให้มันแสดง BreakDown สูงสุดกี่ตัว (ไม่รวม Others) ในหัวข้อ Max breakdowns ใน section แปรงทาสี ซึ่งปกติจะเป็น 5 ตัว (ไม่รวม Others)
Waterfall Breakdown พลิกแพลง
เนื้อหาข้างบนทั้งหมดนี้คือกราฟ Waterfall แบบพื้นฐาน ซึ่งหากเราอยากได้ Waterfall ที่แสดงผลลัพธ์แปลกกว่านี้ เช่น อยากให้เทียบว่า จาก Target ที่ตั้งไว้ เมื่อเทียบกับ Actual ที่ได้จริง ส่วนที่มันต่างกัน มันมาจากองค์ประกอบอะไร? ซึ่งมันทำตรงๆ ไม่ได้เพราะ Target กับ Actual เป็นคนละ Measure กันโดยสิ้นเชิง
เราจะทำยังไงดี? มาดูกัน
ก่อนอื่นเราจะต้องสร้าง Table ใหม่ขึ้นมาเพื่อตอบโจทย์นี้ โดยสร้าง Field ที่จะระบุ Label ที่เราต้องการ (เพราะใร Visual จะแสดงLabel ตาม item ที่มีอยู่จริง ก็เลยต้องสร้างขึ้นมาจริงๆ) โดยไม่ต้องผูก Relationship อะไรทั้งสิ้น เช่น
จากนั้นเราก็สร้าง Measure ใหม่ขึ้นมา โดยเช็คค่า Field Sort ในตารางของเราด้วย SELECTEDVALUE แล้วห้แสดงค่าที่ต้องการดังนี้
หลักกการคือเช็คว่าถ้าค่าใน Field WaterFallHelp[Sort] เป็น 1 ให้แสดง [TargetFinal] ถ้าเป็น 2 ให้เป็น [TotalRevenue]
ซึ่งถ้ามั่นใจว่า Label มีแค่ 2 item ก็ใช้ IF ธรรมดาก็ได้
WaterfallMeasure =
IF(SELECTEDVALUE(WaterFallHelp[Sort])=1,[TargetFinal],[TotalRevenue])
ซึ่งถ้าใช้ SWITCH จะทำ Label หลายแท่งได้สะดวกกว่า
WaterfallMeasureV2 =
SWITCH(SELECTEDVALUE(WaterFallHelp[Sort]),
1,[TargetFinal], //แท่งแรกแสดงค่า Target
2,[TotalRevenue] //แท่งหลังแสดงค่า Actual
)
แล้วเราก็เอา Label จากตารางไปเป็น Category แล้วเอา Measure ตัวใหม่ไปเป็น Value จะได้ดังนี้ ว่ามันแสดงค่าของทั้งคู่ถูกต้อง แต่ดันเอามารวมกันเป็น Total ซึ่งไม่มีความหมาย (กราฟ ณ ตอนนี้ยังไม่ใช่สิ่งที่เราต้องการ)
คราวนี้เราจะทำการใส่ breakdown ลงไป เพื่อแสดงการเปลี่ยนแปลง จากจุด Begin (ในที่นี้คือ Target) ไป End (ในที่นี้คือค่า Actual) แล้ว Total ก็จะหายไปเอง
สมมติผมอยากจะพยายามแจกแจงว่า การที่ค่า Target มันกลายมาเป็น Actual ได้นั้น เพราะ Brand ไหนทำผลงานได้เกินเป้าหรือขาดเป้าเท่าไหร่? เราก็สามารถลาก BrandNameลงมาที่ Breakdown ได้เลย ซึ่งเราก็สามารถปรับจำนวน Breakdown ให้แสดงเยอะๆ ได้เช่นเดิม เช่น ผมปรับเป็น 7
เลขที่โผล่มาในแต่ละ Brand เกิดจากการเอา แท่งขวา-แท่งซ้าย นั่นคือ Actual-Target สำหรับแต่ละ Brand นั่นเอง
ถ้าแท่งไหนเป็นบวก คือแท่งนั้นทำได้เกิน Target ถ้าเป็นลบก็คือทำไม่ถึง Target พอรวมๆ กันทุกตัว ก็จะสามารถแสดงได้ว่า ที่ค่า Actual ถึงหรือไม่ถึง Target นั้นเป็นเพราะ Brand ไหนเป็นหลักนั่นเอง ผมลองพิสูจน์ให้ดูโดยใช้ Measure ที่ชื่อว่า TargetDiff ขึ้นมาอีกตัวจะเห็นว่าเลขตรงกัน
ด้วยเทคนิคนี้เราจะเอาไปใช้กับอะไรก็ได้ เช่น ถ้าเปลี่ยน Breakdown เป็นเรื่องอื่น เช่น ปี ก็จะรู้ว่าปีไหนทำถึงเป้าไม่ถึงเป้าเป็นต้น (แต่เรื่องที่เอามาลง breakdown ต้องสามารถแสดงค่าด้วย Measure แท่งซ้ายกับขวาได้อย่างถูกต้องทั้งคู่นะครับ)
ก็จบแล้วสำหรับเทคนิคการปรับแต่งกราฟ Water Fall ยังไงก็ลองนำไปปรับใช้ดูนะครับ ใครทำแล้วติดอะไร หรือสงสัยตรงไหนก็ถามได้เลย