การสร้าง Data Model ด้วย Microsoft SQL Server Analysis Service และการเรียกใช้
การสร้าง Data Model ด้วย Microsoft SQL Server Analysis Service และการเรียกใช้ด้วย Power BI Desktop
Microsoft SQL Server Analysis Service เป็นผลิตภัณฑ์สำหรับจัดการ Data Model ระดับ Enterprise ซึ่งแบ่งได้เป็น 2 ประเภทดังนี้
- Multidimensional Data Model ซึ่งเป็น โครงสร้างข้อมูลแบบ OLAP (cubes, dimensions, measures)
- Tabular Data Model ซึ่งเป็น โครงสร้างข้อมูลแบบ Relational (model, tables, columns)
โดยต้องเลือกประเภทตั้งแต่ตอนติดตั้ง
(หากผู้อ่านติดตั้ง Microsoft SQL Server แล้วเลือกติดตั้ง Microsoft SQL Server Analysis Service จะมีประเภท Power Pivot มาให้เลือกเป็นประเภทที่ 3
แต่ความจริงแล้วเป็น Tabular Data Model เช่นกัน เพียงแต่เป็นตัวเลือกเพื่อเปิดให้ Power Pivot for Excel ใช้งานได้บน Microsoft SharePoint)
การสร้าง Data Model ในที่นี้ เราจะนำ Data Warehouse ซึ่งได้แก่ AdventureWorksDW
(สามารถ download ไฟล์ AdventureWorksDW2017.bak มาจาก https://github.com/Microsoft/sql-server-samples/releases)
ทั้งนี้ ฐานข้อมูลดังกล่าวที่มีโครงสร้าง (schema) แบบ Dimensional Model มาสร้าง Data Model ด้วย Microsoft SQL Server Analysis Service
โครงสร้างแบบ Dimensional Model นั้น เป็นการรวบรวมข้อมูลเอาไว้ให้ Queries ได้ง่ายขึ้น
แต่ยังไม่ได้หาผลรวมจาก measures ที่เตรียมไว้เลย
หากจะออกรายงานจาก Dimensional Model ก็สามารถทำได้ แต่ต้องทำการ Group by เพื่อหาผลรวมนำไปออกรายงานเป็นครั้ง ๆ
ซึ่งหากจำนวนครั้ง และความหลากหลายของรายงานมีไม่มาก ก็ยังไม่ส่งผลประทบต่อประสิทธิภาพของ Database Engine เท่าไหร่
แต่ถ้าจำนวนครั้ง และความหลากหลายของรายงานมีมาก เราควรพิจารณาใช้ Data Model ระดับ Enterprise มาทดแทนดีกว่า
การสร้าง Data Model ระดับ Enterprise คือการคำนวณหาผลรวมของบรรดา measures ใน Fact Table ตามบรรดา Attributes ที่อยู่ใน Dimension Tables เอาไว้ล่วงหน้าแล้ว
ระบบรายงานเพียงแต่นำเอาผลรวมไปแสดงผลได้เลย ไม่ต้องส่งคำสั่งมาหาผลรวมอีก
ผู้เขียนจะทดลองสร้าง Data Model ชนิด Multidimensional ผ่าน Visual Studio ที่ลง SSDT (SQL Server Data Tools) เรียบร้อย
เมื่อเลือกสร้าง Project จะปรากฏ Template ของงาน Business Intelligence
เราสามารถเลือกสร้าง Project ชนิด Analysis Services Multidimensional and Data Mining Project ได้ดังรูป
ผู้เขียนไม่ได้แสดงแต่ละขั้นตอนการพัฒนา Project เพียงจับภาพบางขั้นตอนมาอธิบายพอเข้าใจเท่านั้น
โดยเลือกเอาเฉพาะ Fact Table และ Dimension Tables จาก AdventureworksDW
จากรูป ผู้เขียนเลือกตาราง
- FactResellerSales
- DimDate
- DimSalesTerritory
จากฐานข้อมูล AdventureworksDW มาสร้างสิ่งที่เรียกว่า Data Source View
การสร้าง Data Source View
โดยผู้เขียนเลือกบางคอลัมน์ไปสร้างเป็น Attributes
(การสร้าง Dimension Table ให้มีคอลัมน์ที่จะนำมาสร้าง Attributes ไว้ครบถ้วนเป็นสิ่งควรทำ แต่อาจถูกเลือกใช้หรือไม่ ขึ้นอยู่กับความต้องการของรายงานแต่ละอัน)
จากนั้นผู้เขียนได้นำ Attributes ที่ถูกเลือกและตั้งค่าเหมาะสมดีแล้ว ไปสร้างเป็น Hierarchy
แล้วตั้งค่าของ Hierarchy และ Attribute Relationships ตามความเหมาะสม
แล้วเลือกแท็บ Browser เพื่อเรียกดู Dimension ที่สร้างขึ้น
ผู้เขียนเลือกแสดงในส่วนของ Hierarchy ให้เห็นจะพบว่ามีการจัดลำดับชั้นของ Attributes ตามที่ได้สร้างไว้ คือ
ผู้เขียนได้จัดการทำนองเดียวกันกับตาราง DimSalesTerritory เพื่อสร้าง Dimension ที่มี Hierarchy ซึ่งมีลำดับชั้นของ Attributes ดังนี้
เมื่อได้ Dimensions ตามต้องการแล้ว ผู้เขียนจะสร้าง Cube จากตาราง FactResellerSales ที่มีบรรดา Measures ต่าง ๆ เก็บไว้
การสร้าง Cube
การสร้าง Cube จะเป็นการนำเอา measures ต่าง ๆ มาหาผลรวม
โดย Aggregate Function ที่เหมาะสมตาม Dimension Attributes และ Dimension Hierarchies ที่ได้สร้างไว้ก่อนหน้า
หลังจากนั้นเก็บผลลัพธ์ของผลรวมเอาไว้ในโครงสร้าง OLAP ซึ่งจัดการโดย Microsoft SQL Server Analysis Service
ในขณะสร้าง Cube ผ่าน Wizard จะปรากฏคอลัมน์ของตาราง FactResellerSales มาให้เลือกสร้างเป็น measures โดย Wizard จะเลือกมาให้แล้ว
บรรดาคอลัมน์ที่เป็น Foreign Key (Dimension Key) ที่มาจากบรรดา Dimension Tables จะไม่ถูกเลือก
ผู้เขียนลดคอลัมน์ที่ Wizard เลือกให้เหลือเท่าที่จำเป็นต้องใช้ จากนั้นตั้งค่าตามความเหมาะสมจนเสร็จ
เมื่อได้ Cube ตามต้องการแล้ว ผู้เขียนทำการ Process Cube และ Deploy ไปยัง Microsoft SQL Server Analysis Service จะปรากฏผลของการ Process ดังรูป
จากนั้นผู้เขียนได้ทดสอบเชื่อมต่อไปยัง Microsoft SQL Server Analysis Service ผ่านทาง SSMS
จะพบกับฐานข้อมูลชื่อ MultidimensionalProject1 (ผู้เขียนไม่ได้เปลี่ยนชื่อ Project ขณะ Deploy ทำให้ชื่อฐานข้อมูลเป็นไปตามชื่อ Project)
และจะพบกับ Cube ชื่อ Reseller Sales ที่สร้างไว้
จะพบกับฐานข้อมูลชื่อ MultidimensionalProject1 (ผู้เขียนไม่ได้เปลี่ยนชื่อ Project ขณะ Deploy ทำให้ชื่อฐานข้อมูลเป็นไปตามชื่อ Project)
และจะพบกับ Cube ชื่อ Reseller Sales ที่สร้างไว้
ทำการ browse ไปที่ Cube ชื่อ Reseller Sales แล้วนำ Measures ชื่อ Sales Amount ไปแสดงพร้อมกับ Dimension Attributes ชื่อ Calendar Year และ Sales Territory Country ตามรูป
จะพบว่าเห็นผลรวมของยอดขายตาม ปี และประเทศที่ขาย ซึ่งถูกคำนวนเก็บเอาไว้ใน Cube หมดแล้ว
เชื่อมต่อ Microsoft SQL Server Analysis Service ด้วย Power BI Desktop
Microsoft ได้ออกแบบให้การเชื่อมต่อไปยัง Microsoft SQL Server Analysis Service ผ่านโหมด Connect Live
ซึ่งเชื่อมต่อไปยัง Data Model ที่สร้างไว้เสร็จเรียบร้อยแล้ว ไม่จำเป็นต้องมาสร้างอีกบน Power BI
ผู้เขียนทดลองเชื่อมต่อไปยังฐานข้อมูล MultidimensionalProject1 ที่สร้างไว้จากขั้นตอนก่อนหน้า
เมื่อเข้าสู่ขั้นตอน Navigator จะพบกับ Cube ชื่อ Reseller Sales
ข้อสังเกตจากการแสดงผลที่เปลี่ยนไปหลังจากเชื่อมต่อในโหมด Connect Live ไปยัง Microsoft SQL Server Analysis Service
คือ มุมมอง Data View และ Relationship View จะหายไป เหลือเพียง Report View เพียงแค่นั้น
เพราะเราไม่สามารถเข้าไปปรับปรุงโครงสร้างข้อมูล ความสัมพันธ์ของข้อมูล อีกทั้งยังไม่สามารถสร้าง Measures และ Hierarchies ขึ้นมาได้เองใน Power BI
แต่จะใช้จาก Data Model ที่อยู่บน Microsoft SQL Server Analysis Service
ซึ่งจัดเตรียมและคำนวณผลรวมของ Measures ตาม Dimensions ไว้ล่วงหน้าหมดแล้ว
Power BI จึงทำหน้าที่เพียงการแสดงผลรายงานเท่านั้น
คือ มุมมอง Data View และ Relationship View จะหายไป เหลือเพียง Report View เพียงแค่นั้น
เพราะเราไม่สามารถเข้าไปปรับปรุงโครงสร้างข้อมูล ความสัมพันธ์ของข้อมูล อีกทั้งยังไม่สามารถสร้าง Measures และ Hierarchies ขึ้นมาได้เองใน Power BI
แต่จะใช้จาก Data Model ที่อยู่บน Microsoft SQL Server Analysis Service
ซึ่งจัดเตรียมและคำนวณผลรวมของ Measures ตาม Dimensions ไว้ล่วงหน้าหมดแล้ว
Power BI จึงทำหน้าที่เพียงการแสดงผลรายงานเท่านั้น
ผู้เขียนให้ความเห็นว่านี่คือ Solution ที่เหมาะสมที่สุด ที่จะใช้ Power BI ในองค์กร
แม้ว่า Power BI สามารถสร้าง Data Model ใช้เองภายในตัวของมัน
แต่ก็เป็นการ Import ข้อมูลเข้าไปในตัวมัน ซึ่งใช้ทรัพยากรบนเครื่อง Desktop (หรือบน Cloud) ไปคำนวณผลรวมบน Measures ต่าง ๆ ที่เลือกไว้
ซึ่งเป็นการทำบนเครื่องใครเครื่องมัน ผลรวมใครผลรวมมัน ไม่รวมศูนย์ และไม่ได้ใช้ทรัพยากรจากส่วนกลาง