สร้าง Dashboard ต้องคิดถึงอะไรบ้าง

Dashboard ทำขึ้นเพื่อ…ผู้ใช้ ไม่ได้ทำเพื่อแสดงข้อมูลทั้งหมดที่มี ทำเพื่อตอบคำถามผู้ใช้งานแต่สำหรับบางองค์กรที่ผู้ต้องการดูข้อมูลยังไม่รู้ว่าจะดูอะไรดี ขอแนะนำให้ตั้งโจทย์ขึ้นมาแล้วหาข้อมูลมาประกอบสร้างเรื่องราวจากโจทย์ขึ้นมาจากข้อมูล (การคิดโจทย์ขึ้นมาก็ต้องมาจากการคาดการณ์ความต้องการและเป้าหมายของผู้ใช้ เดาใจตามหน้าที่รับผิดชอบของผู้ใช้งาน) รูปแบบการวิเคราะห์ข้อมูลเบื้องต้น 1.ต้องการแสดงความสัมพันธ์ (Relationship) เพื่อเชื่อมต่อสองข้อมูลตัวแปรที่สนใจ หรือมากกว่านั้น เช่น จังหวัดที่เกิดกับวิทยาเขตที่เรียน 2.ต้องการเปรียบเทียบข้อมูล (Comparison) ใช้ Bar chart หรือ line chart เพื่อแสดงข้อมูลรับนักศึกษาในแต่ละปี 3.ต้องการแสดงการเปลี่ยนแปลงข้อมูลตามช่วงเวลา (Trend) 4.ต้องการแสดงการจ่ายของข้อมูล (Distribution) โดยการเอาข้อมูลมาจัดกลุ่ม (Grouping) หรือเรียง (Ranking) แล้วนับจำนวนเพื่อดูการกระจายของข้อมูลเช่น อายุงานบุคลากรแยกทุก 10 ปีของการทำงาน เพื่อดูว่าบุคลากรส่วนใหญ่อายุงานอยู่ที่กี่ปี เป็นต้น สิ่งที่ต้องเอาใจใส่ เลือก Data Visualization ให้ตรงกับจุดประสงค์ของการนำเสนอ และผู้ใช้งานต้องเข้าใจ Visualization ที่ใช้ด้วยเป็นสำคัญ โทนสีที่เลือกใช้งานควรจะไม่มากเกินไป และควรจะเป็นโทนเดียวกัน (ลองค้นหาตารางโทนสีใน Google ดูครับ) ควรจะคำนึงถึง ขนาด สี ที่มีความสัมพันธ์กัน เช่น ใน 1 Dashboard ใช้สีชมพูแทนเพศหญิง ก็ควรจะใช้สีชมพูในแต่ละ Visualization เพื่อแทนเพศหญิงเหมือนกัน ทำให้ผู้ใช้งานมองติดตามข้อมูลได้ง่ายและเข้าใจ การมีเส้นนำสายตาก็จะมีผลต่อการแบ่งกลุ่มข้อมูลโดยอัตโนมัติสำหรับผู้ใช้งาน (five-second rule) กฏ 5 วินาที Dashboard ควรจะตอบโจทย์ที่ได้รับมาโดยการมองเพียงแค่ 5 วินาที ซึ่งต้องได้คำตอบหลักแล้ว ส่วนถ้าต้องการหาสาเหตุหรือต้องการข้อมูลเชิงลึกก็จะเข้าส่วน ออกแบบแบบปรามิดคว่ำ คือส่วนบน เป็น indicators ส่วนที่ 2 เป็น Trends ส่วนที่ 3 เป็น รายละเอียด ใน 1 Dashboard ควรมี Visualization ประมาณ 5-9 Visualization (ตามข้อมูลการศึกษาการรับรู้ของสมองมนุษย์จะเข้าใจภาพได้ประมาณ 7 +- 2) จำไว้ว่าข้อมูลสมบูรณ์ครบถ้วน ไม่สู่ตอบโจทย์ที่ผู้ใช้ต้องการนะครับ เพราะเราต้องการตอบสนองผู้ใช้งานไม่ใช่ตอบสนองข้อมูลหรือตัวผู้จัดทำ Dashboard ทำแล้วใช่ว่าจะจบนะครับ ต้องคุยกับผู้ใช้อีกว่าเข้าใจตรงกันหรือไม่แล้วก็ปรับแต่งตามการพูดคุยทำความเข้าใจกัน อ้างอิง : https://www.sisense.com/blog/4-design-principles-creating-better-dashboards/https://realmonkey.co/web-design/principles-of-effective-dashboard-design/https://www.netsolutions.com/insights/good-dashboard-design-principles/https://wandr.studio/blog/dashboard-design-principles/https://medium.com/madt-and-bads-nida/4-principles-of-dashboard-design-%E0%B8%AB%E0%B8%B1%E0%B8%A7%E0%B9%83%E0%B8%88-4-%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%AA%E0%B8%B3%E0%B8%AB%E0%B8%A3%E0%B8%B1%E0%B8%9A%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%AD%E0%B8%AD%E0%B8%81%E0%B9%81%E0%B8%9A%E0%B8%9A-dashboard-957b79e0179a

Read More »

DAX (Data Analysis Expression) ฉบับเริ่มใช้งาน

DAX (Data Analysis Expression) ใช้เพื่อการคำนวณใน Data Model  โดย DAX ประกอบด้วย Functions Operation และConstants เพื่อคำนวณและ/หรือแปลงข้อมูลเพื่อสร้าง Measure, Column, Table   ใช้งานได้ในผลิตภัณฑ์ของ Microsoft ดังนี้ Power BI, Excel (Power Pivot), SQL Server  โดยมีสูตรต่าง ๆ มากมาย มีประโยชน์มากในการทำงานเกี่ยวกับ Time Intelligence การสร้าง Date Dimension การคำนวณโดยใช้ Relationships เพื่อเตรียมการคำนวณให้ไปใช้ในการสร้าง Visualization ต่อไป Column หรือ Measure สร้างอะไรดี New Column จะมีการสร้างขึ้นมาจริงใน Data Model โดยการคำนวณขึ้นตอน Refresh Data ซึ่งต้องใช้พื้นที่จัดเก็บจริง  ใน Chart ต่างๆใน Report สามารถใช้ในฐานะ Category ได้ New Measure จะถูกคำนวณใน Report และค่าจะเปลี่ยนไปจามการ Filter ที่เปลี่ยนไป เมื่อ Filter เปลี่ยนจะมีการคำนวณใหม่ตลอด Functions ที่น่าสนใจสำหรับใช้งาน Format Number ถ้าต้องการใส่ Format ให้กับตัวเลข เช่น $ ใส่ “,” จุดทศนิยมต้องทำอย่างไร  ต้องทำเป็น Measure ดังนี้ 1.1 Click ขวาที่ Table Model และ New measure 1.2 ส่วนหมายเลข 1 แก้ไขชือ Measure ส่วนหมายเลข 2 Function ที่ต้องการใช้ในที่นี้ใช้ Function Count ส่วนหมายเลข 3 เลือกรูปแบบการจัด Formate ของตัวเลขตามที่ต้องการ RELATED วิธีการดึงข้อมูลจากตารางอื่นๆมาเป็น Column ในตารางที่กำลังทำงานอยู่ โดยการสร้างNew Column แล้วใช้ Function  RELATED ดึงข้อมูลจากอีกตารางที่ต้องสร้าง Relationship ไว้แล้วและต้องเป็น Relation ที่ active แบบ One:one หรือ One:Many แต่ความสัมพันธ์แบบ Many:Many จะไม่สามารถทำได้ 2.1 สร้าง Column ใหม่ 2.2 ใส่ชื่อ Column Name และ Function RELATE(TABLE_NAME[COLUMN NAME]) แล้ว Enter หรือ Click เครื่องหมายถูกด้านหน้า ชื่อ column  ในตารางที่เราต้องการก็จะมี Column เพิ่มขึ้นมาอีก 1 Column ตามที่ต้องการ 3. การใช้ IF ใน DAX IF(<logical_test>, <value_if_true>[, <value_if_false>]) ตัวอย่าง สัญชาติ = IF(student[Nationality]==”T”,”ไทย”,”ต่างชาติ”) การใช้ Switch ใน DAXSWITCH(<expression>, <value>, <result>[, <value>, <result>]…[, <else>])   สถานะไม่ปกติ = SWITCH(student[STATUS_DESC],“ลาออก”,”ลาออก”,“ลาออก (พ้นสภาพฯ)”,“ลาออก”,”ลาออก(พ้นสภาพฯ)”,“ลาออก”,”ไม่มาลงทะเบียน”,“ไม่มาลงทะเบียน”,”ไม่มาลงทะเบียน (พ้นสภาพฯ)”,“ไม่มาลงทะเบียน”,”ไม่มาลงทะเบียน(พ้นสภาพฯ)”,“ไม่มาลงทะเบียน”,””) สังเกตุง่ายๆ เป็นการจับคู่ตัวเลขคี่เป็นค่าที่ต้องการแปลงค่า และตัวเลขคู่ที่คู่กันเป็นค่าที่ต้องการจะแปลงให้เป็น  และตัวสุดท้ายจะเป็นค่าที่ไม่ตรงกับค่าใดๆที่ได้ตรวจสอบไว้ข้างต้น Operations  ประกอบด้วย arithmetic, comparison, text concatenation, and logical Operator type Symbol and use

Read More »

ETL ต้องตรวจสอบอะไรบ้างเพื่อความมั่นใจในโอน ย้ายข้อมูล

ETL (Extract, Transform, Load) ประโยชน์ที่สามารถนำไปประยุกต์ใช้ ============================ ETL Tools ตอนนี้มีอยู่หลายค่ายหลายโปรแกรม ทั้งฟรีและขาย สามารถนำมาประยุกร์ใช้งานได้ ตัวอย่างเช่น ========================== ต้องตรวจสอบอะไรบ้างเมื่อท่านต้องทำ ETL 1. Metadata Testing เป็นการทดสอบส่วนประกอบของข้อมูลพวกชนิดของข้อมูล ขนาดและเงื่อนไขต่างๆของข้อมูล2. Data Completeness Testing ความสมบูรณ์ของข้อมูลต้องสุ่มทดสอบข้อมูล เช่น คีย์ที่ใช้เชื่อมข้อมูลระหว่างตารางไม่ควรจะเป็น NULL 3. Data Quality Testing คุณภาพของข้อมูล เช่นข้อมูลชื่อประเทศเดียวกันต้องสะกดเหมือนกันทั้งหมด การหาข้อมูลซ้ำซ่อนแบบไม่ปกติ4. Data Transformation Testing ดักจับ error ระหว่างการถ่ายโอนข้อมูล5. ETL Regression Testing ทดสอบเมื่อมีการเปลี่ยนแปลงกระบวนการในการทำ ETL6. Reference Data Testing การทดสอบกับข้อมูลที่เป็นสากลทั่วไปใช้กัน เช่น ชื่อ ตำบล อำเภอ จังหวัด ควรต้องตรงกันกับข้อมูลของราชการเท่านั้น7. Incremental ETL Testing เป็นการทดสอบโดยการค่อยๆเพิ่มกระบวนการถ่ายโอนข้อมูลเป็นขั้นๆเพื่อหาปัญหาของการถ่ายโอน8. ETL Integration Testing เป็นการทดสอบภาพรวมของการทำงานรวมกันของ module เงื่อนไขต่างๆในการถ่ายโอนข้อมูล9. ETL Performance Testing เป็นการประเมินเรื่องเวลาและปริมาณข้อมูลเพื่อจะได้ทราบถึงระยะเวลาการทำงานที่ควรจะเกิดขึ้นกับข้อมูลปริมาณที่ต้องการ Metadata Testing สิ่งที่ต้องตรวจสอบ การตรวจสอบการเปลี่ยนแปลงของข้อมูลของการทำ ETL แต่ละรอบ 1.Track changes ตรวจสอบ metadata ตามเวลาที่กำหนด ทั้ง Source และ Target และส่วนของการพ้ฒนา 2.Compare table metadata ทั้ง Source และ Target และส่วนของการพ้ฒนา ชื่อของตารางและColumn  ขนาดของ Column 3.Compare column data types 4.ตรวจสอบ Look Up table ต่างๆว่าข้อมูล Update ให้เหมาะสมและครบถ้วนแล้วหรือไม่ Data Completeness Testing Data Quality tests ตรวจสอบคุณภาพของข้อมูล SELECT fst_name, lst_name, mid_name, date_of_birth, count(1) FROM Customer GROUP BY fst_name, lst_name, mid_name HAVING count(1)>1 ในส่วนหัวข้ออื่นๆจะเป็นส่วนการทดสอบที่ขึ้นอยู่กับเครื่องมือที่นำมาใช้งาน การทำงานจริงควรจะหาเครื่องมือที่มีประสิทธิภาพมาใช้งานเพราะจะช่วยประหยัดกำลังไปได้มาก แต่ผู้ดำเนินการควรจะรู้ว่าควรระวังหรือต้องตรวจสอบตรงส่วนไหนเพื่อให้งานออกมาอย่างมีประสิทธิภาพ

Read More »

Big Data Framework

ออกตัวไว้ก่อนนะครับบทความนี้เป็นการย่อความหรือถอดสาระสำคัญมาจาก หนังสือกรอบการวิเคราะห์ข้อมูลขนาดใหญ่ภาครัฐ ภายใต้การกำกับดูแลของ สำนักงานพัฒนารัฐบาลดิจิทัล (สพร.) ซึ่งจะนำเสนอในส่วนของการตั้งทีมเพื่อพัฒนา Big Data แนวทางการพัฒนาทั้งข้อมูลและกลุ่มคนที่จะดำเนินการพัฒนาระบบให้บริการข้อมูล เพื่อประยุกร์ใช้กับการนำข้อมูลไปประกอบการพัฒนามหาวิทยาลัยของเราในรูปแบบ (Data Driven Organization) 1) กลุ่มผู้ใช้ข้อมูล (Business Domain) ได้แก่ ผู้บริหารระดับสูง ผู้อำนวยการกอง ผู้ทำงานด้านนโยบายและวิชาการ ผู้ทำงานด้านบริการ มีหน้าที่กำหนดโจทย์หรือประเด็น ที่ต้องการวิเคราะห์ข้อมูล และนำสารสนเทศที่เป็นผลจากการวิเคราะห์และนำเสนอข้อมูล มาใช้ประกอบการดำเนินงาน 2) กลุ่มผู้วิเคราะห์ ประมวลและแสดงผลข้อมูล ได้แก่ นักวิทยาศาสตร์ข้อมูล (Data Scientist) นักวิเคราะห์ข้อมูล (Data Analyst) และนักนิทัศน์ข้อมูล (Data Visualizer) มีหน้าที่ในการนำข้อมูลมาจัดกลุ่ม วิเคราะห์และประมวลผล พร้อมทั้งพัฒนาภาพแบบ แสดงผลข้อมูลหรือ Dashboard สำหรับการนำเสนอข้อมูล 3) กลุ่มผู้สร้างและพัฒนาระบบ ได้แก่ วิศวกรข้อมูล (Data Engineer) สถาปนิก ข้อมูล(Data Architect) นักวิเคราะห์ธุรกิจ(Business Analyst)ผู้จัดการโครงการ (Project Manager) และเจ้าหน้าที่เทคโนโลยีสารสนเทศด้านความปลอดภัยไซเบอร์ (Corporate Security IT Operator) มีหน้าที่ในการออกแบบและพัฒนาโครงสร้างพื้นฐานด้านข้อมูล รวมทั้งดูแลและบริหารจัดการข้อมูลให้อยู่ในสภาพที่พร้อมใช้งานอย่างต่อเนื่องและปลอดภัย นอกจากกรอบเรื่องของคนแล้วก็ยังมีกรอบเรื่องระยะเวลาด้วย ระยะสั้น :  การพัฒนาแพลตฟอร์ม (Platform) เสริมสร้างทักษะที่เรียกว่า Sandbox สำหรับการพัฒนาบุคลากรในระยะสั้น เริ่มตั้งแต่การกำหนดโจทย์การพัฒนาโครงสร้าง และระบบข้อมูล การวิเคราะห์และประมวลผลข้อมูล การแสดงผลข้อมูลเชิงประจักษ์ ตลอดไปจนถึงการนำสารสนเทศและองค์ความรู้ที่ได้จากการวิเคราะห์และประมวลผลมาใช้ ประกอบการตัดสินใจและการดำเนินงานในรูปแบบต่างๆแพลตฟอร์มดังกล่าวเน้นการพัฒนา บุคลากรผ่านหลักสูตรที่นำรูปแบบการพัฒนาแบบการเรียนแบบใช้โครงงานเป็นฐาน (Project Based Learning) มาปรับใช้เพื่อให้ผู้เข้ารับการฝึกอบรมสามารถ “ทำได้ ทำเป็น” มากกว่า เรียนรู้จากทฤษฎีโดยการดำเนินงานร่วมกับหลักสูตรนักบริหารภาครัฐเพื่อการบูรณาการ การพัฒนาประเทศไทย ตามกรอบการปฏิรูปประเทศ ยุทธศาสตร์ชาติและการสร้าง ความสามัคคีปรองดอง (ป.ย.ป.) โดยมีหน่วยงานหลักที่เกี่ยวข้อง ได้แก่ กระทรวงดิจิทัล เพื่อเศรษฐกิจและสังคม (ดศ.)สำนักงานคณะกรรมการดิจิทัลเพื่อเศรษฐกิจและสังคมแห่งชาติ (สดช.) สำนักงานคณะกรรมการข้าราชการพลเรือน (สกพ.) สำนักงานพัฒนารัฐบาลดิจิทัล (องค์กรมหาชน) (สพร.)และสถาบันสถาบันส่งเสริมการวิเคราะห์และบริหารข้อมูลขนาดใหญ่ ภาครัฐ (GBDi)  ระยะกลาง : การวางแผนการบริหารจัดการกำลังคนเพื่อการใช้ประโยชน์ข้อมูล ขนาดใหญ่ที่มีความคล่องตัว สามารถสนับสนุนการพัฒนานโยบาย การตัดสินใจ การบริหาร จัดการ การให้บริการ และการพัฒนานวัตกรรมภาครัฐ มีกรอบการดำเนินงานดังนี้  วางระบบการบริหารจัดการกำลังคนแบ่งเป็น 3 กลุ่มหลัก ดังนี้1) กลุ่มหน่วยงานที่มีความพร้อมด้านบุคลากรที่สามารถดูแลบริหารจัดการระบบข้อมูลและมีบุคลากรที่มีความสามารถด้านการวิเคราะห์ประมวลและแสดงผลข้อมูล แต่ยังคงมีความต้องการการสนับสนุนเชิงเทคนิคหรือการดำเนินการในบางประการ 2) กลุ่มหน่วยงานที่อยู่ระหว่างการพัฒนามีบุคลากรที่มีความเข้าใจและสามารถให้ข้อมูลความต้องการได้ชัดเจน       ระดับหนึ่ง ต้องการการสนับสนุนเชิงเทคนิคในการสร้างและพัฒนาระบบและการวิเคราะห์ ประมวลและแสดงผลข้อมูล 3) กลุ่มหน่วยงานที่ขาดแคลนบุคลากรด้านข้อมูล แต่มีความจำเป็นต้องนำข้อมูลมาใช้ประโยชน์เพื่อการตัดสินใจ การกำหนดนโยบาย หรือการบริหารจัดการต่าง ๆ นำบุคลากรที่มีทักษะและความเชี่ยวชาญเฉพาะทางจากหน่วยงานต่าง ๆ       มารวมไว้ภายในหน่วยงานเดียว เช่นพัฒนารูปแบบการทำงานในลักษณะเป็น “ทีมที่ปรึกษา” (Agile Team) เพื่อให้บริการหน่วยงานภาครัฐโดยอาจนำที่ปรึกษาภายนอกหรือหน่วยงานเอกชนมาร่วมดำเนินงานในรูปแบบต่าง ๆ หรือให้มีการพัฒนารูปแบบการจ้างงานใหม่นอกเหนือจาก “ข้าราชการ/พนักงานราชการ” เพื่อดึงดูด/จูงใจ และอาจมีการเพิ่ม “สายงานเฉพาะทาง” สำหรับผู้ปฏิบัติงานที่ต้องใช้องค์ความรู้เกี่ยวกับการวิเคราะห์ข้อมูล มีการดูแลความก้าวหน้าในอาชีพ มีการสร้างโอกาสการพัฒนาที่ต่อเนื่อง มีการให้ค่าตอบแทนที่เหมาะสม มีการปรับกรอบอัตรากำลังให้สอดคล้องกับลักษณะงานที่มีความซับซ้อนและความต้องการบุคลากรที่มีสมรรถนะสูงและมีความเป็นมืออาชีพ ทั้งนี้อาจมีการนำ       วุฒิบัตรหรือประกาศนียบัตรรับรองมาตรฐานหรือสมรรถนะด้านการวิเคราะห์ข้อมูลมาใช้ในการบริหารจัดการกำลังคนด้วย พัฒนาขีดความสามารถของผู้ใช้ข้อมูลกลุ่มต่างๆได้แก่ผู้บริหารระดับสูงผู้อำนวยการกอง ผู้ทำงานด้านนโยบายและวิชาการ และผู้ทำงานด้านบริการให้สามารถกำหนดโจทย์หรือประเด็นที่ต้องการวิเคราะห์ข้อมูลและนำสารสนเทศที่เป็นผลจากการวิเคราะห์และนำเสนอข้อมูลมาใช้ประกอบการดำเนินงานได้อย่างเหมาะสม รวมทั้งยกระดับศักยภาพผู้ปฏิบัติงานด้านเทคโนโลยีสารสนเทศของหน่วยงาน โดยอย่างน้อยให้มีความสามารถในการกำกับควบคุมงานจ้างที่ปรึกษา (Project Management) และในการบริหารจัดการข้อมูลอย่างปลอดภัยและมีธรรมาภิบาล (Data Governance)  นำกลไกการให้ทุนรัฐบาลมาใช้สนับสนุนการสร้างและพัฒนากำลังคนด้านการวิเคราะห์และใช้ประโยชน์ข้อมูลขนาดใหญ่ทั้งในระยะสั้นและระยะยาว วางระบบการบริหารองค์ความรู้และเก็บรวบรวมข้อมูลการดำเนินงานเพื่อสร้างความต่อเนื่องในการดำเนินงาน ระยะยาว : การต่อยอดขยายผลโดยมีเป้าหมายเพื่อให้เกิดการแบ่งปันและสร้าง ประโยชน์ในทรัพยากรข้อมูลของทุกภาคส่วน เพื่อการพัฒนาต่อยอดการสร้างมูลค่าเพิ่ม ให้กับระบบเศรษฐกิจ สร้างความมั่นคงให้กับสังคม และสร้างการพัฒนาที่ยั่งยืน โดยเน้นส่งเสริมสนับสนุนการพัฒนาพันธมิตรธุรกิจระหว่างภาครัฐและเอกชน ทั้งภายในและ ระหว่างประเทศภายใต้เจตจำนงค์ร่วมกัน โดยร่วมสร้าง Open Government DataPlatform for Business and Citizen ให้ความรู้และสร้างภูมิคุ้มกันเพื่อให้ประชาชนมีความเข้าใจ ที่ถูกต้องเกี่ยวกับการดูแลความปลอดภัยของข้อมูลส่วนบุคคล และการนำข้อมูลเปิดภาครัฐ มาใช้เพื่อพัฒนาต่อยอดและสร้างมูลค่าเพิ่ม โดยรวมแล้ว

Read More »

Query ที่ใช้งานบ่อยๆสำหรับทำ ETL , Data Warehouse และ Data Science ตอนที่ 1

สายงานดึงข้อมูลเพื่อใช้สำหรับวิเคราะห์ข้อมูล แปลงข้อมูล จัดรูปแบบข้อมูลต่างๆไม่ว่าวัตถุประสงค์ที่จะทำ ETL, Data warehouse , Data Science, Data Lake สิ่งที่จะเกิดขึ้นบ่อยๆคือ การจัดกลุ่มข้อมูล ROW_NUMBER(), RANK(), DENSE_RANK() การแปลงข้อมูล CAST,CASE การสร้าง View, Sub Table, temp table, Material View ,select ซ้อน select หลายชั้น (with) การทำงานด้านนี้จะแตกต่างจากการดึงข้อมูลในการทำงานแบบ CRUD (Create, Read, Update, Delete) เป็นงาน Transaction เน้นการทำงานที่เร็วอย่างมีประสิทธิภาพ ส่วนการวิเคราะห์ข้อมูลลืมเรื่อง Performance ไปได้เลยส่วนใหญ่คำสั่งที่ทาง Transaction Performance ต้องการให้เราหลีกเลี่ยงเราก็จะได้นำมาใช้งานอยากสนุกสนาน เนื่องจากตอนนี้ผมดึงข้อมูลจาก Oracle Database เป็นหลักก็เลยขอเขียนตัวอย่างของ Oracle ก่อนนะครับ ต่อไปค่อยเพิ่มเติม Database อื่นๆต่อไป การจัดกลุ่มข้อมูล พื้นฐานสุดๆที่รู้ๆกันคือการทำด้วยคำสั่ง Group By เช่นถ้าเราต้องการค่าเดียวจากตารางเลย select sum(a) from table_a แบบนี้ก็จะเป็นการ Group ข้อมูลทั้งตารางถ้าต้องการมีตัวแยกข้อมูลก็จะเป็น select column_a,count(*) from table_a group by column_a แบบนี้ก็จะมีตัวช่วยแบ่งกลุ่มข้อมูลออกมาแล้ว แต่การทำงานจริงไม่ได้ง่ายดายขนาดนั้น เช่น โจทย์ต้องการเอาค่าที่มากสุด น้อยสุดหรือล่าสุดของข้อมูลในตารางโดยต้องแบ่งข้อมูลออกเป็นส่วนๆตามที่ต้องการก่อน อันนี้ก็จะพอไหว แต่ถ้าบอกว่าต้องการเอาข้อมูลลำดับที่ 1 และลำดับที่ 2 ของข้อมูลมาเปรียบเทียบกันซึ่งไม่สนใจลำดับอื่นๆแบบนี้การแบ่งกลุ่มก็ต้องมาการจัดลำดับ และสามารถดึงลำดับที่ต้องการออกมาได้ อันนี้ยากแล้วเราก็ต้องมาดูว่าฐานข้อมูลแต่ละแบบมีตัวช่วยอะไรให้เราใช้บ้างในส่วนของ oracle จะมีฟังก์ชันกลุ่มนึงที่เป็นการเรียงลำดับข้อมูลนั่นก็คือ ROW_NUMBER(),  RANK(), DENSE_RANK()  ROW_NUMBER() ใช้สำหรับแป๊ะเลขที่ ของชุดข้อมูลที่สนใจ ถ้าไม่ Partition ข้อมูลก็จะเป็นการ แป๊ะเลขที่ของข้อมูลทั้งหมด ซึ่งใน Oracle จะมี อีกตัวไว้ใช้งานอยู่แล้วคือ ROWNUM ซึ่งเป็น pseudocolumn ไม่ต้องใช้ ROW_NUMBER() แต่ถ้าต้องการแบ่งข้อมูลออกเป็นส่วนๆด้วย ก็ต้องใช้ ROW_NUMBER บวกกับ PARTITION BY ลองดูตัวอย่างการทำงานจริงๆครับกว่าจะได้คำตอบมาต้องทำกี่ขั้นดังนี้ จากรูปอธิบายได้ดังนี้ RANK() ลักษณะการทำงานก็จะเหมือนตัวอย่าง ROW_NUMBER() จะเขียนอธิบายเฉพาะที่แตกต่างกันเท่านั้นดังนี้เป็นการแป๊ะตัวเลขลำดับให้กับชุดข้อมูลเดียวกัน แต่ค่าข้อมูลที่สนใจได้ลำดับเดียวกัน จะข้ามตัวเลขลำดับถันไปเท่ากับจำนวนลำดับที่เท่ากัน ดังรูปผลของ Query ด้านล่าง จากลำดับที่ 2 ไป 3 rows แล้วจะไปขึ้นลำดับที่ 5 เลย DENSE_RANK() จะเหมือนกัน RANK() แต่จะไม่มีการเว้นเลขลำดับ จะมีเลขที่ต่อเนื่องไปเลย ดังรูปผลของ Query ด้านล่าง จากลำดับที่ 2 ไป 3 rows แล้วจะต่อลำดับที่ 3 ต่อไป การแปลงข้อมูล CAST ใช้เพื่อแปลงชนิดของข้อมูลให้เป็นไปตามที่ต้องการ เช่น แปลงวันที่เป็นข้อความ กำหนดชนิดของข้อมูล Column ที่ยังไม่มีข้อมูลให้เป็นไปตามที่ต้องการ ดังตัวอย่าง CASE ใช้เพื่อจัดการข้อมูลในหลายๆรูปแบบเป็นการกำหนดเงื่อนไขขึ้นมาเพื่อแปลงข้อมูล ดังตัวอย่าง ต้องการ Update Column ให้มีค่าแตกต่างกันให้เป็นไปตามเงื่อนไขที่กำหนด การสร้าง VIEW, Temporary Table, Materialized view การแยกข้อมูลออกเป็นกลุ่มๆอีกวิธีที่ใช้งานเยอะคือการสร้าง View, Temporary Table, Materialized view View มีการเปลี่ยนแปลงตาม Table ต้นทาง View ไม่น่าจะต้องพูดเยอะเพราะน่าจะใช้งานกันเป็นประจำอยู่แล้ว Materialized view เป็นตารางที่มีข้อมูลที่ได้มาจากผลของการ Run Query ที่เราต้องการและมีการ Refresh ข้อมูลตามเวลาที่กำหนดไว้ ที่แตกต่างจาก View คือต้องการที่จัดเก็บข้อมูลส่วนตัวนะครับ ตัวอย่างการสร้าง Materialized View Temporary Table Temporary

Read More »