ในที่สุดก็มาถึงตอนที่เป็น Concept สำคัญอีกตอนหนึ่ง นั่นก็คือเรื่องของ Data Model นั่นเอง
ถ้าใครได้ลองทำ Visual ในตอนที่ 4 ก็จะรู้ว่า เราสามารถลาก Field ข้ามตารางมาลงใน Visual ได้ถ้าตารางนั้นได้มีการผูก Relationship กันไว้แล้ว และทิศทางของการ Filter ข้อมูลจะวิ่งตามทิศทางของลูกศรใน Relationship ด้วย
พอพูดถึงเรื่อง Data Model แล้ว การออกแบบ Data Model ที่ดี จะช่วยให้ Performance ของงานเราเร็วขึ้น และสามารถเขียนสูตร DAX ได้ง่ายขึ้นด้วย
สารบัญ
Star Schema: Data Model ที่ Power BI ชอบที่สุด
และจากคำแนะนำของกูรูระดับโลกในเรื่อง DAX อย่าง Marco Russo และ Alberto Ferrari ได้แนะนำไว้ว่า Data Model ที่ Power BI ชอบมากที่สุดคือ Data Model ที่เรียกว่า Star Schema ซึ่งมีหน้าตาแบบนี้ครับ
Star Schema คือรูปแบบที่มีตารางหลัก (เรียกว่าตาราง Fact) อยู่ตรงกลาง แล้วล้อมรอบลากเส้นเชื่อมกับตารางอ้างอิง (เรียกว่าตาราง Dimension)
Tips : ความสัมพันธ์บนเส้นจะมีเลข 1 กับ * ซึ่งมีความหมายดังนี้
(สมมติว่าดูตาราง Product ที่มีตัวเชื่อมกับตาราง fSales เป็น ProductID)
- 1 คือ ฝั่งที่มีค่า Field ที่เป็น Key ไม่ซ้ำกัน (มี 1 ตัว)
- อยู่ฝั่ง Dimension เพราะฝั่งนั้น ProductID จะไม่มีทางซ้ำกัน
- * คือ ฝั่งที่มีค่า Field ที่เป็น Key ซ้ำกันได้
- อยู่ฝั่ง Fact เพราะ ProductID มีสิทธิ์ซ้ำกันได้ เพราะการขายของแต่ละครั้งก็ขายสินค้าเดียวกันได้จริงมะ
ทีนี้ถ้าเรามาดู Data Model ของเรา ณ ตอนนี้…
มันก็คล้ายๆ Star Schema อยู่นะ แต่กลายเป็นว่าตาราง Dimension มันซ้อนกันหลายชั้นเลย ออกมาจะคล้ายๆ แบบนี้ เค้าเรียกกันว่าเป็น Model แบบ Snowflake
ปั้นเกล็ดหิมะให้เป็นดาว
ดังนั้นสิ่งที่เราจะต้องทำคือ แก้ Data Model ของเราจาก Snowflake ให้เป็น Star Schema โดยการรวบตาราง Dimension ที่ซ้อนๆ กันอยู่ให้เหลือแค่ชั้นเดียวพอ ดังนี้
และวิธีที่จะทำแบบนั้นได้ก็คือการใช้คำสั่ง Merge ใน Power Query นั่นเองครับ ซึ่ง Merge เป็นวิธีการที่สามารถดึงข้อมูลจากอีกตารางนึงมาใส่ในอีกตารางนึงได้ (มองว่าคล้ายๆ VLOOKUP ก็ได้นะ แต่มันไม่เหมือนเป๊ะ)
ดังนั้นเราจะกด Home -> Edit Queries เพื่อเข้าไปแก้ไข Query ของเราซะ
เอาตาราง Geography ไปไว้ในตาราง Stores
เลือกที่ตารางที่ต้องการจะเอาอันอื่นมารวมด้วย นั่นคือตาราง Stores แล้วเลือก Merge Queries ดังรูป
ตอนแรกข้อมูลคอลัมน์ Geography จะออกมาเป็น Table ก่อน ให้เรากด Expand Data ออกมาว่าจะเอา Field ไหนบ้างดังรูป
จากนั้นมันจะแตกข้อมูล 3 คอลัมน์นั้นออกมา ต่อไปให้เราลบ Field ชื่อ GeographyKey ออกจากตาราง Stores ซะ เพราะไม่ต้องใช้แล้ว (ก็เราดึงข้อมูลจากตาราง Geography มาแล้วนี่ เลยไม่ต้องมีตัวเชื่อมแล้ว)
แล้วก็เปลี่ยนชื่อ Query ให้เป็น dStores ซะ (ใส่ตัว d นำหน้าจะได้เห็นว่าเป็น Dimension)
จากนั้นสิ่งที่เราต้องทำต่อคือ ตั้งค่าว่าไม่ต้องเอาตาราง Geography ออกไปใน Model แล้วโดยการคลิ๊กขวาแล้วเลือกให้เครื่องหมายถูกหน้า Enable Load หายไปซะ (แปลว่าไม่ต้องโหลด)
ถ้าเราเคยโหลดข้อมูลออกไปใน Data Model แล้วมาเอา Enable Load ออก มันจะขึ้นข้อความมาเตือนว่าข้อมูลจะหายไปนะ
ซึ่งก็ให้กด continue ไป เพราะเราต้องการให้ตารางนั้นหายไปนี่แหละ ถูกแล้ว
เอาตาราง ProductSubcategory ไปไว้ในตาราง Product
ต่อไปเราก็จะทำคล้ายๆ เดิม คือ เลือกตาราง Product ก่อน แล้วไปที่ Merge Query กับ ProductSubcategory ก่อน โดยตัวเชื่อมคือ ProductSubcategoryKey
จากนั้น Expand Data ออกมา เหมือนเดิมจะพบว่าชื่อ Field ProductSubcategory ดันมี .1 ติดมา เป็นเพราะเดิมทีชื่อมันซ้ำกับชื่อตาราง มันเลยงง ดังนั้นให้ดับเบิ้ลคลิ๊กเปลี่ยนชื่อ Field เอา .1 ออกไปด้วยนะ เดี๋ยวไม่สวย
พอเรามีข้อมล ProductCategoryKey แล้ว เราก็พร้อมที่จะเอาตาราง ProductCategory ไปไว้ในตาราง Product ซะที
เอาตาราง ProductCategory ไปไว้ในตาราง Product
เลือกที่ตาราง Product แล้ว Merge Query เหมือนเดิม โดยตัวเชื่อมคือ ProductCategoryKey
พอ Expand ข้อมูลออกมาแล้ว อย่าลืมเปลี่ยนชื่อ Field ให้เรียบร้อย และลบ Key ที่ไม่ใช้แล้วออกไปซะ เช่น ProductSubcategoryKey และ ProductCategoryKey
จากนั้นเปลี่ยนชื่อ Query นี้เป็น dProduct และเอา Enable Load ของ ProductCategory และ ProductSubcategory ออกไปซะ
สรุปก่อนจะ Close & Apply
- เราจะไม่โหลด Geography, ProductCategory, ProductSubcategory แล้ว
- และมีการเปลี่ยนชื่อตาราง Dimension ทั้งหมดให้ขึ้นต้นด้วยตัว d (จะได้เห็นชัดๆ)
- และชื่อตารางหลักที่เป็น Fact ให้ขึ้นต้นด้วยตัว f
จากนั้นกด Close & Apply
จะเห็นว่าตอนนี้เราได้ Data Model แบบ Star Schema เรียบร้อยแล้ววว
แล้ว Data Model มีกี่แบบ?
ในความเป็นจริงแล้ว Data Model ที่จะใช้ใน Power BI ไม่ได้มีแค่ Star Schema นะครับ มันสามารถมีได้อีกหลายอย่างเลย เช่น
- กรณีที่ต้องมี Fact Table มากกว่า 1 ตัว (เพราะเป็น Fact คนละเรื่องกัน) เราจะพยายามทำให้ใช้ตาราง Dimension ร่วมกัน (เช่น Actual vs Budget หรือ การ Order vs การการขายของ)
- กรณีที่ตาราง Date อันเดียว เชื่อมกับ Field วันที่หลาย Field ที่อยู่ในตารางเดียวกันก็มีอีก…
แต่สำหรับพื้นฐานสุดๆ ผมแนะนำให้หักใช้ Power BI กับ Model Star Schema ง่ายๆ นี้ก่อนครับ ใครที่สนใจแบบ advance ขึ้นลองดูคลิปของ SQLBI อันนี้ก่อนได้ (ฟรี)
ตอนนี้จบเท่านี้
เดี๋ยวตอนถัดไป เราจะมาสร้างตารางวันที่ด้วยสูตร DAX กันล่ะ!
สารบัญ 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
ใครสนใจอยากเรียนเป็นคลิปวีดีโอ ผมมี