การดึงข้อมูลการผลิตแบบเรียลไทม์ด้วย Power BI

การดึงข้อมูลการผลิตแบบเรียลไทม์ด้วย Power BI
บทความนี้ 9Expert จะสอนวิธีสร้างเว็บเซอร์วิสที่ดึงข้อมูลการผลิตจากเครื่องจักรในโรงงานอุตสาหกรรม นำมาให้บริการเป็น API endpoint แล้วนำข้อมูลไปแสดงเป็นรายงาน Power BI ที่แสดงภาพข้อมูลการผลิตอัปเดตอัตโนมัติแบบเรียลไทม์
สิ่งที่ท่านต้องมีเพื่อทำตามบทความนี้
1. เว็บเซิร์ฟเวอร์ที่สามารถโฮสต์เว็บซอร์วิส API endpoint ได้ (เว็บเซิร์ฟเวอร์ส่วนใหญ่มีคุณสมบัตินี้)2. โปรแกรม Visual Studio 2022 อัปเดตล่าสุด ติดตั้งเวิร์คโหลด “ASP.NET and web development” และ “.NET desktop development”
3. บัญชี Microsoft Azure เพื่อสร้างและใช้งาน Azure Table Storage
4. บัญชี Power BI ระดับพรีเมียม (Premium subscription) หรือ Pro เพราะมีฟีเจอร์ให้สร้างรายงานอัปเดตเรียลไทม์
อธิบายกลไก ASP.NET Core Minimal APIs
Minimal APIs คือ API แบบน้อยสุด ถูกออกแบบมาเพื่อการสร้าง HTTP API ที่พึ่งพาแพกเกจต่าง ๆ ต่ำสุด เหมาะสำหรับไมโครเซอร์วิสและแอพที่ต้องการทำ API ที่มีเฉพาะสิ่งที่จำเป็นจริง ๆ แทนที่เราจะต้องใช้คอนโทรลเลอร์ของ MVC บวกเฟรมเวิร์คขนาดใหญ่ เราแค่ใส่โค้ดเพียงไม่กี่บรรทัดลงในไฟล์ Program.cs โดยตรงก็ได้ API แล้ววิธีสร้างโปรเจ็กต์ Visual Studio แบบ ASP.NET Core Minimal APIs
ต่อไปนี้เราจะสร้างเว็บแอพชื่อ MinimalApi (หมายเลข 2 ในแผนภูมิพัฒนาฯ) เพื่อทำหน้าที่เป็นตัวให้บริการ API โดยมีขั้นตอนดังนี้1. เปิดโปรแกรม Visual Studio เลือก Create a new project
2. เลือกเทมเพลตแบบ ASP.NET Core Empty (ถ้าไม่พบแสดงว่าท่านยังไม่ได้ติดตั้งเวิร์คโหลด “ASP.NET and web development” ไว้ใน Visual Studio)

3. ตั้งชื่อโปรเจ็กต์ว่า MinimalApi
4. เปิดไฟล์ program.cs จะเห็นโค้ดดังนี้
4. เปิดไฟล์ program.cs จะเห็นโค้ดดังนี้

5. สิ่งที่ควรสนใจคือโค้ดบรรทัดที่ 10 เพราะนี่คือ API ที่จะทำงานเมื่อโปรแกรมเริ่ม หรือเมื่อมีแอพเรียก API แบบ get โดยไม่ระบุ endpoint
6. ASP.NET Core Minimal APIs สนับสนุนAPI ทั้งแบบ get, post, put และ delete แต่ในบทความนี้เราจะใช้ get เท่านั้น
1.ในโปรเจ็กต์ MinimalApi ให้แก้ไขไฟล์ program.cs โดยใส่โค้ดดังนี้
6. ASP.NET Core Minimal APIs สนับสนุนAPI ทั้งแบบ get, post, put และ delete แต่ในบทความนี้เราจะใช้ get เท่านั้น
วิธีเขียนโค้ด C# เพื่อทำหน้าที่เป็น API endpoint
หัวข้อนี้เราจะมาดูวิธีเขียนโค้ด API แบบ get ที่มี endpoint ชื่อ ep1 (end point 1) วิธีทำเป็นดังนี้1.ในโปรเจ็กต์ MinimalApi ให้แก้ไขไฟล์ program.cs โดยใส่โค้ดดังนี้

2. โปรดสังเกตโค้ดบรรทัดต่าง ๆ ดังนี้
ในโปรเจ็กต์ MininalApi ไฟล์ program.cs โค้ดบรรทัดที่ 22 ถึง 26 คือเมธอดเพื่อสร้างเครื่องจักรจำลอง (หมายเลข 1 ในแผนภูมิพัฒนาฯ) ซึ่งสมมติว่าเป็นค่าความเร็วรอบมอเตอร์ เป็นตัวเลขจำนวนเต็มของค่าสุ่มระหว่าง 1 ถึง 13 ในการใช้งานจริงให้ท่านแทนที่โค้ดเหล่านี้ด้วยโค้ดอ่านข้อมูลจากเซ็นเซอร์
1. รันโปรแกรม MininalApi ด้วย Visual Studio โดยกดปุ่ม Ctrl+F5
- บรรทัดที่ 13 ถึง 18 ทำหน้าที่เพิ่ม API แบบ get ที่มี endpoint ชื่อ ep1
- บรรทัดที่ 13 คำว่า MapGet คือเมธอดของอินเตอร์เฟส IEndpointRouteBuilder ที่อยู่ในเนมสเปส Microsoft.AspNetCore.Routing ทำหน้าที่กำหนดเร้าติ้งว่าจะให้ไปทำงานอะไรเมื่อมีแอพภายนอกอ้างถึง endpoint (ในที่นี้คือ /ep1)
- บรรทัดที่ 13 ใช้แลมป์ด้าเพื่อนิยามอะนอนิมัสฟังก์ชันไว้ในบรรทัดนี้เพื่อให้โค้ดกระชับ
- บรรทัดที่ 14 ถึง 18 คือข้อมูลโครงสร้างแบบ Json ที่เราจะส่งให้แก่แอพที่เรียกมา
วิธีเขียนโค้ด C# สร้าง Simulator จำลองเครื่องจักรที่ให้ข้อมูลการผลิต
โรงงานอุตสาหกรรมจะมีข้อมูลจากเซ็นเซอร์ประเภทต่าง ๆ เป็นจำนวนมาก แต่การทดสอบโปรแกรมอาจไม่สะดวกต่อเชื่อมกับเครื่องจักร ราจึงสร้างเครื่องจักรจำลองด้วยโค้ดแบบสั้นที่สุดในโปรเจ็กต์ MininalApi ไฟล์ program.cs โค้ดบรรทัดที่ 22 ถึง 26 คือเมธอดเพื่อสร้างเครื่องจักรจำลอง (หมายเลข 1 ในแผนภูมิพัฒนาฯ) ซึ่งสมมติว่าเป็นค่าความเร็วรอบมอเตอร์ เป็นตัวเลขจำนวนเต็มของค่าสุ่มระหว่าง 1 ถึง 13 ในการใช้งานจริงให้ท่านแทนที่โค้ดเหล่านี้ด้วยโค้ดอ่านข้อมูลจากเซ็นเซอร์
การทดสอบ API endpoint โดยใช้โปรแกรม Postman
เมื่อแก้ไขโค้ดเสร็จแล้วเราสามารถทดสอบการทำงานของ endpoint ได้โดยใช้โปรแกรม postman (หมายเลข 7 ในแผนภูมิพัฒนาฯ) โปรแกรมนี้ฟรี ดาวน์โหลดได้จากเว็บไซต์ www.postman.com เมื่อติดตั้งเสร็จแล้วให้เริ่มการทดสอบโดยมีขั้นตอนดังนี้1. รันโปรแกรม MininalApi ด้วย Visual Studio โดยกดปุ่ม Ctrl+F5

2. เมื่อรันแล้วจะมีเว็บบราวเซอร์ถูกเปิดขึ้น ให้คัดลอก URL ไว้ นี่คือ URL ของเว็บเซิร์ฟเวอร์ชั่วคราวที่ Visual Studio สร้างขึ้นในคอมพิวเตอร์ของเรา (หมายเลข 3 ในแผนภูมิพัฒนาฯ) เพื่อสะดวกในการทดสอบ (ตอนใช้งานจริงเราต้อง deploy โปรเจ็กต์ไปยังเว็บเซิร์ฟเวอร์ในคลาวด์ก่อน)

3. เปิดโปรแกรม postman
4. เลือก API เป็น GET
5. ใส่ URL ที่คัดลอกไว้ แล้วพิมพ์ /ep1 ต่อท้าย นี่คือการระบุ endpoint
6. กดปุ่ม Send เพื่อส่งคำร้องขอไปยังเว็บแอพ endpoint ชื่อ ep1 (หมายเลข 4 ในแผนภูมิพัฒนาฯ)
7. ผลลัพธ์คือได้ Json ที่มีข้อมูลสามคอลัมน์ คือ name, time และ motor_speed
4. เลือก API เป็น GET
5. ใส่ URL ที่คัดลอกไว้ แล้วพิมพ์ /ep1 ต่อท้าย นี่คือการระบุ endpoint
6. กดปุ่ม Send เพื่อส่งคำร้องขอไปยังเว็บแอพ endpoint ชื่อ ep1 (หมายเลข 4 ในแผนภูมิพัฒนาฯ)
7. ผลลัพธ์คือได้ Json ที่มีข้อมูลสามคอลัมน์ คือ name, time และ motor_speed

8. ให้ลอง send หลาย ๆ หน โปรดสังเกตว่าแต่ละครั้ง ผลลัพธ์จะมีค่า time และ motor_speed ต่างกัน
1. เปิดโปรแกรม Visual Studio เลือก Create a new project
2. เลือกเทมเพลตแบบ Console App
วิธีสร้างโปรเจ็กต์ Visual Studio แบบ console เพื่อการทดสอบ API endpoint
ในหัวข้อนี้เราจะสร้างคอนโซลแอพชื่อ TestApi (หมายเลข 8 ในแผนภูมิพัฒนาฯ) เพื่อทดสอบ API แทนการใช้โปรแกรม postman วิธีทำเป็นดังนี้1. เปิดโปรแกรม Visual Studio เลือก Create a new project
2. เลือกเทมเพลตแบบ Console App

3. ตั้งชื่อโปรเจ็กต์ว่า TestApi
4. ติดตั้งแพคเกจ RestSharpNet40 ด้วย NuGet
4. ติดตั้งแพคเกจ RestSharpNet40 ด้วย NuGet

5. ใส่โค้ดนี้ลงในไฟล์ program.cs

6. รันโปรแกรม TestApi จะเห็นกรอบหน้าต่างคอนโซลเปิดขึ้น และเห็นการเรียก API endpoint สี่ครั้ง

วิธีนำข้อมูลจาก API endpoint ไปบันทึกไว้ใน Azure Table Storage
วิธีสร้างรายงาน Power BI ที่อัปเดตเรียลไทม์ ทำได้หลายวิธี (เช่น การเชื่อมต่อแบบสตรีม การรีเฟรชหน้าอัตโนมัติ การใช้กลไก Azure Stream Analytic การใช้แบบจำลอง Push และ PubNub เป็นต้น) ในบทความนี้เราจะใช้วิธีเชื่อม Power BI กับไฟล์ข้อมูล Azure ด้วยวิธี DirectQuery ดังนั้นก่อนที่เราจะสร้างรายงานใน Power BI ได้ เราจะต้องสร้างไฟล์ข้อมูลใน Azure แล้วบันทึกข้อมูลที่อ่านได้จาก endpoint ลงไปในไฟล์เสียก่อนเราจะใช้ไฟล์ข้อมูลแบบ Azure Table Storage (หมายเลข 6 ในแผนภูมิพัฒนาฯ) เพราะเป็นไฟล์ที่ไม่ซับซ้อน ไม่มีความสัมพันธ์ (ไม่จอยกับไฟล์อื่น) จึงประหยัดและเรียบง่ายกว่าไฟล์ฐานข้อมูล SQL Server
วิธีสร้าง Azure Table Storage ทำได้ดังนี้
1. ใช้เว็บบราวเซอร์เปิดหน้าหลักของ Microsoft Azure
2. สร้าง Resource Group (ถ้ายังไม่มี)
3. สร้าง Storage Account (ถ้ายังไม่มี)

4. กำหนดค่าของ Storage Account ตามภาพแล้ว Create

5. ตรวจหา connection string โดยพิมพ์ว่า key ในช่องค้น (ตามภาพ) เมื่อพบแล้วให้คัดลอกไว้ เพราะเราจะต้องใช้มันในโค้ด

วิธีสร้างคอนโซลแอพ GetSaveData (หมายเลข 5 ในแผนภูมิพัฒนาฯ) ซึ่งทำหน้าที่บันทึกข้อมูลที่อ่านได้จาก endpoint ลงสู่ไฟล์ข้อมูลแบบ Azure Table Storage ที่เราสร้างไว้ในขั้นตอนก่อนหน้าเป็นดังนี้
1. ใน Visual Studio สร้างโปรเจ็กต์แบบ Console App
2. ตั้งชื่อโปรเจ็กต์ว่า GetSaveData
3. เพิ่มสาม NuGet แพคเกจตามภาพ
1. ใน Visual Studio สร้างโปรเจ็กต์แบบ Console App
2. ตั้งชื่อโปรเจ็กต์ว่า GetSaveData
3. เพิ่มสาม NuGet แพคเกจตามภาพ

4. ป้อนพิมพ์ซอร์สโค้ดตามนี้
5. ทำ deploy โปรแกรม MinimalApi ไปยังเว็บเซิร์ฟเวอร์ แล้วบันทึก URL ไว้
6. แก้ไขโค้ดบรรทัดที่ 52 แทนที่ด้วย URL ของเว็บแอพ MinimalApi แล้วเพิ่ม /ep1 ไว้ที่ท้าย URL
7. แก้ไขโค้ดบรรทัดที่ 66 แทนที่ด้วย connection string ของ Azure Table Storage ที่ท่านคัดลอกไว้ในหัวข้อวิธีสร้าง Azure Table Storage
8. รันโปรแกรม GetSaveData จะเห็นคอนโซลปรากฏขึ้นตามภาพ
5. ทำ deploy โปรแกรม MinimalApi ไปยังเว็บเซิร์ฟเวอร์ แล้วบันทึก URL ไว้
6. แก้ไขโค้ดบรรทัดที่ 52 แทนที่ด้วย URL ของเว็บแอพ MinimalApi แล้วเพิ่ม /ep1 ไว้ที่ท้าย URL
7. แก้ไขโค้ดบรรทัดที่ 66 แทนที่ด้วย connection string ของ Azure Table Storage ที่ท่านคัดลอกไว้ในหัวข้อวิธีสร้าง Azure Table Storage
8. รันโปรแกรม GetSaveData จะเห็นคอนโซลปรากฏขึ้นตามภาพ

9. ให้รันโปรแกรม GetSaveData อีกสี่ครั้งเพื่อให้เกิดการบันทึกข้อมูลลงในตาราง 5 แถวข้อมูล
10. วิธีตรวจสอบว่าเกิดการบันทึกข้อมูลลงในตารางจริงหรือไม่ทำได้โดยไปที่หน้า Azure portal / Storage Account / ชื่อ Storage Account ที่เราเพิ่งสร้างไปในขั้นตอนก่อนหน้า / Storage Browser / ชื่อตารางที่ตรงกับในโค้ดบรรทัดที่ 67
10. วิธีตรวจสอบว่าเกิดการบันทึกข้อมูลลงในตารางจริงหรือไม่ทำได้โดยไปที่หน้า Azure portal / Storage Account / ชื่อ Storage Account ที่เราเพิ่งสร้างไปในขั้นตอนก่อนหน้า / Storage Browser / ชื่อตารางที่ตรงกับในโค้ดบรรทัดที่ 67

วิธีเชื่อมรายงาน Power BI กับ Azure Table Storage
เมื่อเราสร้าง Azure Table ที่อัปเดตข้อมูลจาก API endpoint ได้สำเร็จแล้ว ขั้นตอนต่อไปคือการสร้าง data source ภายใน Power BI ที่เชื่อมกับ Azure Table ผ่าน DirectQuery (หมายเลข 9 ในแผนภูมิพัฒนาฯ) ซึ่งมีวิธีทำดังนี้1. ตรวจหา URL ของ Azure Tabler โดยการเข้าไปใน Azure/ Storage Account/Storage browser/table แล้วคัดลอก URL ของ Table โดยไม่รวมชื่อตารางข้างท้าย URL (ไม่เอาคำว่า /LoyTables)

2. เปิดโปรแกรม Power BI Desktop เข้าใช้งานด้วยบัญชี Power BI ระดับพรีเมียม (Premium subscription) หรือ Pro (เพราะถ้าใช้บัญชีแบบฟรีจะไม่มีฟีเจอร์ที่เราต้องการ)
3. เลือก Get Data/Azure/Azure Table Storage แล้วกดปุ่ม Connect
3. เลือก Get Data/Azure/Azure Table Storage แล้วกดปุ่ม Connect

4. เมื่อเห็นกรอบข้อความ Azure Table Storage ให้ใส่ URL ที่ท่านลอกมาจากขั้นตอนที่ 1 ลงในช่อง “account name or URL”

5. เมื่อเห็นกรอบข้อความ Navigator ให้คลิกเลือกตารางใน Azure Table Storage ที่เราเก็บข้อมูล API endpoint

6. ดูที่แถบ Data ทางขวาสุดจะเห็น data source ที่เราสร้าง เป็นเครื่องแสดงว่าการเชื่อมต่อ Power BI กับ Azure Table ด้วย DirectQuery สำเร็จแล้ว

วิธีสร้างรายงานแบบเรียลไทม์ใน Power BI
ตอนนี้เราได้ data Source จากการทำ DirectQuery แล้ว จึงสามารถสร้างรายงานที่เปลี่ยนแปลงแบบเรียลไทม์ได้ เพื่อความประหยัดทรัพยากรของระบบ เราจะกำหนดให้รายงานรีเฟรชก็ต่อเมื่อ motor_speed เปลี่ยนค่าเท่านั้น วิธีทำมีขั้นตอนดังนี้1. สร้างรายงานใหม่ใน Power BI ใส่ visualizations (เช่น Line Chart) ที่ผูกกับข้อมูลจาก data Source ที่เราสร้างไว้ในหัวข้อที่ผ่านมา
2. เลือกรายงานโดยกดที่พื้นที่ว่างบนตัวรายงาน กดปุ่ม Formatting บนแถบ Visualizations แล้วเลือกหัวข้อ Page refresh (ถ้าไม่ได้ใช้บัญชี Power BI ระดับพรีเมียมหรือ Pro ตัวเลือกนี้จะไม่แสดง)

3. เปลี่ยน Off ให้เป็น On แล้วเลือก Change detection จากรายการ

4. ที่แถบเมนูบนสุด ให้กดที่หัวข้อ Modeling แล้วกดปุ่ม Change detection (ถ้าไม่ได้ใช้บัญชี Power BI ระดับพรีเมียมหรือ Pro จะเลือกตัวเลือกนี้ไม่ได้)
.png)
5. จะเห็นหน้าต่าง Change detection ปรากฏขึ้น ให้ตั้งค่าต่าง ๆ ตามภาพ

6. ถึงขั้นตอนนี้เราได้หน้ารายงานที่จะรีเฟรชทุกครั้งเมื่อ motor_speed เปลี่ยนค่า ให้ทดสอบโดยรันโปรแกรม GetSaveData โปรดสังเกตว่ารายงานจะอัปเดตเองทุกครั้งที่เรารัน GetSaveData

7. ในการใช้งานจริงให้ดัดแปลงโค้ด GetSaveData ให้ทำงานทุก ๆ สิบวินาทีหรือตามระยะเวลาที่กำหนด
8. หากท่านต้องการนำรายงานไปฝังไว้ในหน้าเว็บให้ดูวิธีทำในบทความ วิธีการแชร์ Power BI Report | 9Expert
8. หากท่านต้องการนำรายงานไปฝังไว้ในหน้าเว็บให้ดูวิธีทำในบทความ วิธีการแชร์ Power BI Report | 9Expert
สรุปเนื้อหา
ในบทความนี้ 9Expert ได้นำเสนอวิธีสร้างเว็บแอพที่ดึงข้อมูลการผลิตจากเครื่องจักรในโรงงานอุตสาหกรรม แล้วเปิดให้มี API endpoint เพื่อให้แอพอื่น ๆ สามารถนำข้อมูลการผลิตไปใช้ทำสิ่งต่าง ๆ โดยยกตัวอย่างการนำไปใช้ทำรายงาน Power BI ที่อัปเดตอัตโนมัติแบบเรียลไทม์ บทความนี้มีโค้ดภาษา C# สามโปรเจ็กต์ ได้แก่ (1)MinimalApi เว็บแอพ ASP.NET Core ทำหน้าให้บริการ endpoint (2)TestApi คอนโซลแอพเพื่อทดสอบ API endpoint และ (3)GetSaveData คอนโซลแอพเพื่อนำข้อมูลจาก API endpoint ไปบันทึกไว้ที่ Azure Table Storage หากไม่ต้องการป้อนพิมพ์โค้ดท่านสามารถเข้าถึงซอร์สโค้ดได้ที่ https://gist.github.com/laployTags: