ในบทความนี้เดี๋ยวเราจะได้มาลองสร้าง Report ใน Power BI Desktop กันซักทีครับ โดยที่ผมเองเอา Dataset ดั้งเดิม ชื่อ Contoso มาจากที่นี่ (เพราะขี้เกียจทำเอง 555) แต่ว่าเนื่องจากไฟล์มันใหญ่เกินไปปป (มี Transaction ประมาณ 2 ล้านกว่าๆ) ผมเลยคิดว่าคงไม่เหมาะกับการที่จะให้เพื่อนๆ โหลดไฟล์นั้นตรงๆ
สารบัญ
สรุปแล้วโหลดไฟล์นี้ไปใช้นะ
ผมก็เลย Random Transaction เอามาแค่ 1 ใน 10 ก็คิดว่าน่าจะพอแล้ว (ประมาณ 2 แสน) และผมก็ตัดคอลัมน์หลายๆ อย่างที่ไม่จำเป็นออกไปด้วย
สรุปแล้วก็โหลดไฟล์ Power BI อันนี้ที่ Google Drive ได้เลย
(หรือถ้าข้างบนไม่ได้ก็โหลดอันนี้ที่ GitHub )
ผมผูก Data Model และเขียนสูตร DAX ที่จำเป็นให้หมดแล้วด้วย
เริ่มต้นที่ผลลัพธ์
ตอนแรกคิดว่าจะสอนให้ทุกท่านทำตั้งแต่ขั้นตอน Get Data แล้วมาทำ Data Model มาเขียน DAX จากนั้นค่อยทำ Report ตาม Step ที่ผมบอกไว้ในบทที่แล้ว
แต่เนื่องจากผมคิดว่าวิธีที่ดีกว่าคือให้ทุกคนได้รู้ก่อนว่าเป้าหมายปลายทางของเราคือแบบไหน (เหมือนหลักการ Begin with the End in Mind ในหนังสือ 7 Habits ไง) ดังนั้นผมจะทำขั้นตอนทุกอย่างให้เสร็จสรรพแล้ว เหลือแต่การสร้าง Visual เท่านั้นที่เราจะมาทำในบทความนี้
เมื่อเราเข้าใจการสร้าง Report ว่ามันทำอะไรได้โดยเบื้องต้นแล้ว หลังจากนั้นค่อยกลับไปทำตั้งแต่ขั้นตอน Get Data กันอีกทีในตอนถัดไปครับ
สรุปคือ เพื่อนๆ อย่าเพิ่งทำของยากอย่าง Query Editor กับ DAX เรามาเรียนของง่ายอย่าง Report กันก่อนดีกว่า จะได้มีกำลังใจนะ 555
ลองเปิดไฟล์ดู
หลังจากเปิดไฟล์มาทุกคนจะเจอหน้า Report ที่ว่างเปล่า แต่ว่ามี Field ที่ใช้งานได้อยู่ด้านขวามือเรียบร้อยแล้ว ดังนี้
ซึ่งไฟล์นี้ผมได้มีการผูก Data Model ไว้เรียบร้อยหมดแล้วดังนี้ (คลิ๊กที่ icon Model ซ้ายมือเพื่อดู Data Model)
ซึ่งถ้ายังดูไม่รู้เรื่องก็ไม่เป็นไร ตอนนี้รู้แค่ว่าผมผูกความสัมพันธ์ระหว่างตารางให้หมดแล้ว ดังนั้นเราจะสามารถลาก Field จากตารางอื่นๆ เข้ามาวิเคราะห์ใน Report ได้เลย โดยไม่ต้องมีการ VLOOKUP เหมือนที่เคยทำใน Excel อีกต่อไป
นอกจากนั้นผมยังเขียน Measure ให้หมดแล้ว (ที่เป็น icon รูปเครื่องคิดเลข) ถ้าอยากวิเคราะห์เรื่องไหนก็ลากเรื่องนั้นลง Report ได้เลยเช่นกัน
ลงมือสร้าง Report แรก
เมื่อ Data Model พร้อม DAX พร้อม งั้นการสร้าง Report ก็ง่ายสุดๆ วิธีการสร้างก็คือเลือกรูปแบบ Visual ที่ต้องการ จากนั้นก็ลาก Field ที่ต้องการจะวิเคราะห์ลงไปเป็น Axis/Category และลาก Measure ที่ต้องการจะวัดลงไปใน Value แค่นั้นก็จบแล้ว
Visual แรก
สมมติอยากทราบยอดขายราย Product Category โดยแสดงเป็นกราฟแท่ง…
เราก็เลือกกราฟแท่งก่อน จากนั้นลาก ProductCategory จากตาราง dProduct ลงมา และลาก TotalSales จากตาราง fSales ลงมา
สมมติว่าอยากแบ่งสีตามปีที่ขาย ก็ลาก Year จาก dDate ลงมาที่ Legend ก็ได้ (ลากมาที่ Legend คือแบ่งหลายๆ สี)
เห็นมั้ยว่าตอนนี้เราสามารถสร้างกราฟ โดยใช้ข้อมูลจาก 3 ตาราง ที่มีความสัมพันธ์กันโดยไม่ต้องมีการ VLOOKUP อะไรเลยนะ คือ
- TotalSales จาก fSales (เป็น DAX Measure ที่คำนวณจาก Data บน fSales)
- ProductCategory จาก dProduct (เป็น Field ดิบบน dProduct)
- Year จาก dDate (เป็น DAX New Column = Field บน dDate)
วิธีเปลี่ยนตัวหนังสือให้ใหญ่ขึ้น
ความรู้สึกแรกของผมของการสร้างกราฟใน Power BI คือ ทำไม Font มันตัวเล็กจังฟะ?
ทั้งนี้เป็นเพราะ View ที่เราดูมันถูก Resize ให้ Fit หน้าจอ มันก็เลยย่อลงครับ (ถ้าจะดูแบบขนาดที่แท้จริง ต้องไปที่ View -> Page View -> Actual Size
แต่ว่าในบางทีเราก็อยากจะดูแบบ Fit to Page นี่แหละ แต่อยากจะขยาย Font ให้ใหญ่ขึ้นอยู่ดี วิธีทำที่ง่ายสุดคือเลือก Visual ที่ต้องการ แล้วไปที่แปรงทาสี แล้ว search คำว่า Text Size เพื่อ Filter option ให้เหลือแค่เรื่อง Text Size จากนั้นค่อยเปลี่ยนขนาดตามต้องการ
ลองใส่ Visual ที่สองเพื่อลอง Interaction
ที่นี้ให้เราลองสร้าง Visual อีกอัน เป็น Pie Chart ก็ได้ (จริงๆ ผมเกลียด Pie Chart นะ 555) แล้วให้แสดง TotalSales แบ่งโดย ContinentName ที่ลากจาก dStore
ทีนี้ลองคลิ๊กที่กราฟแท่งเล่นๆ เช่น ผมคลิ๊ก Computer ปี 2013 จะเห็นว่ามันมี Interaction กับกราฟ Pie Chart ด้วย (แบบนี้เรียกว่าการ Highlight)
ถ้ากดซ้ำไปที่เดิมอีกทีจะเป็นการยกเลิกการเลือก (สีจางๆ ทั้งหมดจะหายไป)
ถ้ากด Ctrl+Click ไปเรื่อยๆ เช่น Ctrl+Click Computer ปี 2012 ด้วย จะเป็นการเพิ่มการเลือก เป็นรวมทั้ง Computer ปี 2012 และ 2013
ทีนี้ผมเลือก Computer และ Camera ทั้งปี 2012 และ 2013 เลย จะเห็นว่าส่วน Highlight ใหญ่ขึ้นตาม
ถ้าเราอยากให้ Interaction เปลี่ยนจากการ Highlight เป็น Filter แทน ก็สามารถทำได้โดยให้เลือกที่กราฟต้นทางก่อน (คือกราฟแท่ง) แล้วไปที่ Format -> Edit Interactions จากนั้นที่มุมของกราฟปลายทาง (กราฟ pie) ให้เลือกรูปแบบการ Filter ที่มีรูปกรวยแทน
การทำแบบนี้เป้นการกำหนดว่า เมื่อกดที่กราฟแท่ง จะมี interaction ไปที่กราฟ pie แบบ filter (ซึ่งเรากำหนด interaction แยกกันสำหรับ Visual แต่ละคู่ได้อย่างอิสระ)
Card = Visual แสดงตัวเลขชัดๆ
ทีนี้เราจะสร้าง Visual ที่ง่ายๆ แต่มีประโยชน์อย่าง Card กันครับ ซึ่ง Card เหมาะกับการนำไปแสดงตัวเลขที่มีความสำคัญ เช่น ยอดขาย ต้นทุน กำไร เป็นต้น
คราวนี้กด + ด้านล่างเพื่อสร้างหน้าใหม่ได้แล้วล่ะ (หน้าเดิมเต็มละ)
Table / Matrix เอาไว้สำหรับคนชอบผลลัพธ์เป็นตาราง
สำหรับคนรัก PivotTable อย่างผม Visual ที่ผมชอบมากที่สุดอันนึงก็คือ Table/Matrix นั่นเอง
มาลองดู Table ก่อน
ให้สร้าง Table โดยใส่ Field ดังรูปลงไปใน Value มันจะสร้างตารางโดยใช้ field เหล่านั้นไปเรื่อยๆ
ผมมองว่า Table เหมือนกับเราใช้ PivotTable โดยมีแค่ Rows กับ Values
โดยเอา Field ไปไว้ที่ Rows (ซ้อนได้เรื่อยๆ) แล้วเอา Measure ลากเข้า Value ของ Pivot เพื่อทำการสรุปข้อมูล
ถ้าเป็น Matrix ล่ะ?
ถ้าเป็น Matrix มันก็จะคล้ายกับ Pivot Table ที่มีทั้ง Rows Columns และ Values
โดยที่เราก็ยังสามารถเปลี่ยนตำแหน่งของ Values มาไว้ที่ Rows ได้เช่นเดียวกับ Pivot ใน Excel เลย แต่ใน Power BI เราต้องมาปรับที่เมนูแปรงทาสี ให้ Show on row
เพื่อนๆ น่าจะเห็นแล้วว่ามันคล้ายกับ Pivot Table มากๆ เลย ดังนั้นคนที่ใช้ Pivot Table เป็นก็น่าจะใช้ Power BI ได้ไม่ยากเนอะ
แล้วตัวเลขที่แสดงบน Visual คำนวณมาจากไหน?
จากที่เคยบอกไปในบทที่ 2 ว่า Pivot Table ใน Excel มีวิธีคำนวณค่าจาก Filter Context ผมก็จะบอกว่าใน Power BI ก็เช่นกันครับ สิ่งที่แสดงอยู่ใน Visual ทุกอย่าง ถูกคำนวณมาจากการที่ Visual ตัวนั้นมีการ Filter ในบริบทที่แตกต่างกัน (Filter Context) นั่นเอง
อย่างเช่น เลข 109,797,472.43 ที่ผมวงไว้ ก็มาจากการ Filter Product Category ใน เป็น Computers และ Filter Year เป็น 2013 จากนั้นค่อยคำนวณ TotalSales (ที่เคยสอนไว้ว่า Filter ก่อนแล้วค่อยคำนวณ จำได้มะ?)
แต่คราวนี้ถ้าคิดดีๆ มันเป็นการ Filter ข้ามตารางนะ ไม่ได้ Filter ในตาราง fSales ตรงๆ ซะหน่อย!!
การ Filter ที่เกิดขึ้นเป็นแบบนี้ครับ
- เรา Filter ProductCategory ในตาราง dProduct เป็น Computers
- เรา Filter Year ในตาราง dDate เป็น 2013
สิ่งที่เกิดขึ้นคือ การ Filter มันวิ่งข้าม Relationship ใน Model มาทำการ Filter ตาราง fSales ของเราด้วย!! ทำให้ผลลัพธ์ที่คำนวณได้มาจากจำนวน Record หรือจำนวนแถวที่ลดลงนั่นเอง
สังเกตว่าถ้ามองใน Data Model ของเรา ที่เส้น Relationship จะมีลูกศรที่บอกทิศทางของการ Filter ด้วยว่ายอมให้ไปทิศทางไหน
แปลว่าหากเราสั่ง Filter จาก dProduct มันจะมา Filter ข้อมูลบนตาราง fSales ได้ (เพราะทิศทาง Filter ยอมให้ทำ) ซึ่งตรงกับ Visual ของเราที่ใช้ Measure ชื่อ TotalSales ซึ่งสร้างมาจากข้อมูลบนตาราง fSales นั่นเอง ค่าตัวเลขมันจึงเปลี่ยนไปได้
Tips : สำหรับคนที่อยากรู้ว่า TotalSales สูตรคืออะไร สามารถคลิ๊กที่ Measure ได้นะครับ จะเห็นว่าสูตรเป็นแบบนี้
TotalSales = SUMX(fSales,fSales[SalesQuantity]*RELATED(dProduct[UnitPrice]))
ตอนนี้คุณอาจยังไม่เข้าใจสูตรนี้ แต่ว่ามันคือการคำนวณโดย
เอาจำนวน SalesQuantity * UnitPrice ให้ออกมาเป็นผลลัพธ์ในแต่ละบรรทัด
จากนั้นแล้วค่อย SUM ผลลัพธ์ทุกบรรทัดในตาราง fSales ครับ
และถ้าทำการ Filter ย้อนทางจะเกิดอะไรขึ้น?
แต่ถ้าเราดันลาก ข้อมูลมาจากตาราง dStore เช่น EmployeeCount แล้วลากมาสรุปด้วยการ Sum โดยที่ดันลาก Field หลัก มาจากตารางอื่น เช่น Year จาก dDate เราจะเห็นผลลัพธ์แบบนี้
เราจะได้เลขที่ดูซ้ำๆ กันหมดเลย (และเท่ากับตัว Total รวมด้วย) เป็นเพราะว่าการ Filter มันทำงานข้าม Relationship แบบย้อนลูกศรไม่ได้ ก็แปลว่าไม่มีการ Filter เกิดขึ้นนั่นเอง
วันนี้พอก่อนดีกว่า
สำหรับบทความนี้ก็เช่นเคยครับ ใครมีคำถามอะไรก็ถามได้เลยนะ เดี๋ยวตอนหน้าเรามาเล่นเรื่องการ Drill Through และพวก Report Tool Tips กันครับ
สารบัญ Series Power BI
- POWER BI ตอนที่ 01: POWER BI คืออะไร?
- POWER BI ตอนที่ 02: พื้นฐาน EXCEL ที่สำคัญก่อนจะเรียนรู้ POWER BI
- POWER BI ตอนที่ 03: ภาพรวมการใช้งาน POWER BI DESKTOP
- POWER BI ตอนที่ 04: สร้าง REPORT แรก ใน POWER BI
- POWER BI ตอนที่ 05: วิธีการ DRILL เพื่อเจาะลึกข้อมูลใน REPORT
- POWER BI ตอนที่ 06: การปรับแต่งสีใน VISUAL ด้วย CONDITIONAL FORMAT
- POWER BI ตอนที่ 07: เริ่ม GET DATA ตั้งแต่ไฟล์ยังว่างเปล่า
- POWER BI ตอนที่ 08: สร้าง DATA MODEL ที่เหมาะสม
- POWER BI ตอนที่ 09: สร้าง DATE TABLE ด้วย DAX
- POWER BI ตอนที่ 10: เรียนรู้ DAX เบื้องต้น
- POWER BI ตอนที่ 11: เรียนรู้ DAX Table Function – FILTER
- POWER BI ตอนที่ 12: DISTINCT, VALUES, ALL และผองเพื่อน
- POWER BI ตอนที่ 13: CALCULATE ฟังก์ชันที่ทรงพลังที่สุดใน DAX
- Power BI ตอนที่ 14: Context Transition และ พลังแฝงใน Measure
- Power BI ตอนที่ 15: วิธีดึงค่าจาก Slicer มาคำนวณใน Report
- Power BI ตอนที่ 16 : เดินทางข้ามเวลาไปกับ Time Intelligence DAX Function
- Power BI ตอนที่ 17 : วิธีทำรายงานเทียบเป้าหมาย Target vs Actual
- Power BI ตอนที่ 18 : วิธีการกระจายเป้า Allocate Target ด้วย DAX
- Power BI ตอนที่ 19 : การปรับ Cross Filter Direction เพื่อคำนวณค่าในตาราง Dimension
- ส่วนเสริม
- การคำนวณต้นทุนแบบ FIFO ด้วย DAX
- แสดงข้อมูลสรุปแบบ Top N + Others (ฉบับเทพเอ็กเซล)
- การวิเคราะห์ Event ที่มีช่วงเวลาเริ่มต้นกับสิ้นสุดคนละวัน
- เปรียบเทียบ MAX vs LASTDATE ในภาษา DAX
ใครสนใจอยากเรียนเป็นคลิปวีดีโอ ผมมี