เก่งโค้ดงาน Business Intelligence ตอนที่ 8

บทความโดย: 9Expert Team

เก่งโค้ดงาน Business Intelligence ตอนที่ 8

บทความตอนที่ผ่านมาผู้เขียนได้พูดถึงการประยุกต์ใช้งานคิวรีภาษาเอ็มกับตารางในเวิร์กชีทของเอ็กซ์เซล เรื่องการใช้คิวรีอื่นเป็นดาต้าซอร์ส การทำคิวรีแบบมีพารามิเตอร์ การเชื่อมต่อข้อมูล การจอยตาราง การหาร้อยละของผลรวม และวิธีหาการโตของยอดขาย ส่วนในตอนนี้จะเป็นเรื่องการประยุกต์ใช้คิวรีภาษาเอ็มเพื่อการประมวลผลที่มีประโยชน์ต่องานบิซิเนสอินเทลลิเจนซ์และเทคนิคที่น่าสนใจอื่น ๆ

9Expert Team 4 นาที

เก่งโค้ดงาน Business Intelligence ตอนที่ 8

บทความตอนที่ผ่านมาผู้เขียนได้พูดถึงการประยุกต์ใช้งานคิวรีภาษาเอ็มกับตารางในเวิร์กชีทของเอ็กซ์เซล เรื่องการใช้คิวรีอื่นเป็นดาต้าซอร์ส การทำคิวรีแบบมีพารามิเตอร์ การเชื่อมต่อข้อมูล การจอยตาราง การหาร้อยละของผลรวม และวิธีหาการโตของยอดขาย ส่วนในตอนนี้จะเป็นเรื่องการประยุกต์ใช้คิวรีภาษาเอ็มเพื่อการประมวลผลที่มีประโยชน์ต่องานบิซิเนสอินเทลลิเจนซ์และเทคนิคที่น่าสนใจอื่น ๆ

 

หาเลขอันดับของยอดขาย

ในการวิเคราะห์ข้อมูลบ่อยครั้งที่เรามีตัวเลขที่เป็นรายการของค่า โดยที่ค่าต่าง ๆ เหล่านี้เป็นชุดเดียวกัน หากเราสามารถจัดลำดับหรือหาค่าอันดับของรายการค่าเหล่านี้ได้ก็จะเป็นประโยชน์ต่อการวิเคราะห์ ยกตัวอย่างเช่น การจัดลำดับรายการสินต้าตามยอดขาย

 

Product

Sales

 

Product

Sales

Rank

Apples

10

 

Apples

10

5

Oranges

30

 

Oranges

30

2

Pears

30

 

Pears

30

2

Grapes

20

 

Grapes

20

4

Pineapples

10

 

Pineapples

10

5

Bananas

50

 

Bananas

50

1


 

ตารางซ้ายชื่อ TiedRanksInput ทำหน้าที่เก็บยอดขายสินค้าประเภทต่าง ๆ คอลัมน์ Product คือรายการสินค้า คอลัมน์ Sales คือยอดขายของสินค้านั้น ๆ สิ่งที่เราต้องการหรือโจทย์คือ “หาเลขอันดับ” (Rank) ของยอดขายของสินค้าแต่ละตัว แล้วนำมาทำเป็นคอลัมน์ใหม่ชื่อ Rank มีผลลัพธ์เป็นอย่างตารางทางขวา สินค้าที่มียอดขายมากที่สุดคือ Bananas มีมูลค่าขาย 50 ถือเป็นอันดับที่ 1 สินค้าที่มียอดขายอันดับรองลงมาคือ Oranges และ Pears เป็นอันดับที่สอง และสินค้าที่มียอดขายต่ำที่สุดคือ Apples และ Pineapples รั้งอันดับที่ห้า

โค้ดแสดงวิธีหาเลขอันดับ

วิธีทำมีโค้ดอย่างในรูป 1 ซึ่งเป็นรายการคำสั่งในภาษาเอ็มเพื่อทำหน้าที่หาเลขอันดับ

  • บรรทัด 5-7 ทำหน้าที่โหลดตาราง TiedRanksInput แล้วกำหนดให้อ้างถึงด้วยชื่อ Source

  • บรรทัด 10-13 ประกาศฟังก์ชันซึ่งทำหน้าที่คำนวณเลขอันดับ

  • บรรทัด 16 ทำหน้าที่กำหนดให้ตัวแปรหรือค่า Custom1 อ้างอิงไปยังแหล่งข้อมูลต้นทางหรือตาราง TiedRanksInput

  • บรรทัด 19-22 นำคอลัมน์ชื่อ Rank ที่จะเป็นค่าอันดับใส่เข้าไปในตาราง ค่าในคอลัมน์นี้เกิดจากการนำค่าในคอลัมน์ Sales ส่งไปยังฟังก์ชัน Rank เพื่อคำนวณคือค่าอันดับ

นับจำนวนลูกค้าที่ไม่ซ้ำกัน

บางครั้งเรามีชุดข้อมูลที่มีข้อมูลบางคอลัมน์ซ้ำกัน หากเราสามารถนับจำนวนที่ไม่ซ้ำกันได้ก็จะมีประโยชน์ต่อการนำไปประมวลผลในขั้นตอนอื่น ๆ ยกตัวอย่างเช่นในตาราง DistinctCustomersInput เรามีข้อมูลสามคอลัมน์ คือ Date เก็บวันที่ขาย Customer เก็บชื่อลูกค้า และ Sales เก็บยอดขาย

ในวันที่ 1-Jan-2019 เรามีรายการขายสี่รายการ แต่เป็นรายการขายที่เกิดกับ Chris สองครั้ง นั่นคือมีรายชื่อลูกค้าที่ซ้ำกัน แม้ว่าจะมีรายการขายสี่รายการ แต่ก็มีลูกค้าเพียงสามคน โจทย์ของเราคือต้องการสร้างตารางอย่างทางขวามือ เพื่อแสดงว่าในแต่ละวันมีลูกค้าที่ไม่ซ้ำกันอยู่กี่คน


 

Date

Customer

Sales

 

Date

Distinct Customers

1-Jan-2019

Chris

1

 

1/1/2019

3

1-Jan-2019

Helen

2

 

1/2/2019

4

1-Jan-2019

Chris

2

 

1/3/2019

4

1-Jan-2019

Mimi

4

 

 

 

2-Jan-2019

Robert

7

 

 

 

2-Jan-2019

Chris

3

 

 

 

2-Jan-2019

Mimi

4

 

 

 

2-Jan-2019

Natasha

2

 

 

 

3-Jan-2019

Mimi

2

 

 

 

3-Jan-2019

Helen

6

 

 

 

3-Jan-2019

Natasha

4

 

 

 

3-Jan-2019

Natasha

3

 

 

 

3-Jan-2019

Helen

2

 

 

 

3-Jan-2019

Rebert

4

 

 

 

โค้ดแสดงวิธีนับจำนวนลูกค้าที่ไม่ซ้ำกัน

วิธีทำมีโค้ดอย่างที่เห็นในรูป 2 ซึ่งเป็นรายการคำสั่งในภาษาเอ็มที่จะนับจำนวนลูกค้าที่ไม่ซ้ำกัน

  • บรรทัด 7-9 ทำหน้าที่โหลดตาราง DistinctCustomersInput แล้วกำหนดให้อ้างถึงด้วยชื่อ Source

  • บรรทัด 12-17 ทำหน้าที่แปลงชนิดข้อมูลของคอลัมน์ Date ให้เป็นไทป์ date เพื่อจะได้สามารถนำไปใช้ในการคำนวณในขั้นตอนต่อไปโดยใช้ฟังก์ชัน Table.TransformColumnTypes

  • บรรทัด 21-26 เรียกหาฟังก์ชัน Table.Distinct เพื่อลบข้อมูลทั้งหมดที่ซ้ำกันในคอลัมน์ Customer ผลลัพธ์ที่ได้คือค่า DuplicatesRemoved ที่เป็นรายชื่อคนโดยไม่ซ้ำ

  • บรรทัด 29-35 หาจำนวนนับของแถวในแต่ละวันด้วยการใช้ฟังก์ชัน Table.Group ที่จะจัดข้อมูลออกเป็นกลุ่ม  ๆ ตามค่า DuplicatesRemoved

การแปลงคอลัมน์เดียวให้กลายเป็นหลาย ๆ คอลัมน์

การแปลงคอลัมน์เดียวให้กลายเป็นหลาย ๆ คอลัมน์

ถ้าเรามีตารางอย่างตาราง ListData ซึ่งเป็นตารางที่มีคอลัมน์เดียว คือคอลัมน์ Data ข้อมูลในคอลัมน์นี้ ทุก ๆ สามแถวเป็นข้อมูลกลุ่มเดียวกัน คือข้อมูลของคนหนึ่งคน ประกอบด้วยชื่อ เพศ และสัญชาติ ถ้าเราสามารถแปลงข้อมูลคอลัมน์เดียวนี้ให้กลายเป็นสี่คอลัมน์อย่างตารางทางขวาก็คงจะมีประโยชน์

Data

 

CustomerID

Name

Gender

Country

Chris

 

0

Chris

Male

UK

Male

 

1

Bill

Male

USA

UK

 

2

Helen

Female

Australia

Bill

 

3

Mimi

Female

UK

Male

 

 

 

 

 

USA

 

 

 

 

 

Helen

 

 

 

 

 

Female

 

 

 

 

 

Australia

 

 

 

 

 

Mimi

 

 

 

 

 

Female

 

 

 

 

 

UK

 

 

 

 

 

โค้ดที่เห็นในรูป 3 แสดงวิธีแปลงคอลัมน์เดียวให้กลายเป็นหลาย ๆ คอลัมน์

  • บรรทัด 7-8 ทำหน้าที่โหลดตาราง ListData แล้วกำหนดให้อ้างถึงด้วยชื่อ Source

  • บรรทัด 11-13 ใส่คอลัมน์ใหม่ชื่อ Index เอาไว้ทำหน้าเก็บเลขดรรชนีโดยใช้ฟังก์ชัน Table.AddIndexColumn

  • บรรทัด 15-19  ใส่คอลัมน์ใหม่ชื่อ RowType เอาไว้ทำหน้าที่เก็บตัวเลข 1, 2, 3 เพื่อไว้ใช้ประมวลผลในขั้นตอนถัดไป

  • บรรทัด 22-27 ใส่คอลัมน์ใหม่ชื่อ RowTypeText โดยใช้ฟังก์ชัน Table.AddColumn ทำหน้าที่เก็บข้อมูลที่ระบุว่าแถวข้อมูลนั้นเป็น Name, Gender หรือ Country หากข้อมูลในคอลัมน์ RowType เป็น 0 จะใส่คำว่า Name ไว้ แต่ถ้าเป็น 1 จะใส่คำว่า Gender และถ้าเป็น 2 ให้เป็น Country

  • บรรทัด 30-33 ใส่คอลัมน์ใหม่ชื่อ CustomerID โดยใช้ฟังก์ชัน Table.AddColumn เอาไว้ทำหน้าเก็บเลขประจำตัวของลูกค้า เป็นเลขที่เราสร้างขึ้นเดี๋ยวนี้ เพื่อใช้ช่วยจัดกลุ่มข้อมูลของแต่ละคน

  • บรรทัด 36-41 ลบคอลัมน์ Index และ RowType ที่ไม่ต้องการใช้ในขั้นตอนต่อไป

  • บรรทัด 44-52 ทำ Pivot เพื่อให้ข้อมูล Name, Gender และ Country กลายมาเป็นคอลัมน์ แล้วลบคอลัมน์ RowTypeText และ Data ที่ไม่จำเป็นต้องใช้อีกแล้ว

คิวรีเพื่อการหาลูกค้าใหม่ ลูกค้าที่หายไป และลูกค้าที่กลับคืนมา ส่วนที่ 1คิวรีเพื่อการหาลูกค้าใหม่ ลูกค้าที่หายไป และลูกค้าที่กลับคืนมา ส่วนที่ 2

การหาลูกค้าใหม่ ลูกค้าที่หายไป และลูกค้าที่กลับคืนมา

ตารางซ้ายชื่อ ThisYearCustomers ทำหน้าที่เก็บรายชื่อลูกค้าที่ซื้อสินค้าในปีนี้   ตารางกลางชื่อ LastYearCustomers ทำหน้าที่เก็บรายชื่อลูกค้าที่ซื้อสินค้าในปีก่อนหน้านี้  ตารางขวาสุดคือสิ่งที่เราอยากได้ เพราะเป็นผลลัพธ์ของโจทย์การหาลูกค้าที่ใหม่ ที่หายไป และที่กลับคืนมา

โจทย์คือการแบ่งลูกค้าออกเป็นสามกลุ่มได้แก่

  • New: พวกที่ซื้อในปีนี้แต่ไม่เคยซื้อเมื่อปีก่อน

  • Lost: พวกที่ซื้อในปีที่แล้วแต่ไม่ได้ซื้อในปีนี้

  • Return: พวกที่ซื้อทั้งในปีนี้และปีที่ผ่านมา


 

Customers This Year

 

Customers Last Year

 

Customer

Classification

Chris

 

Chris

 

Chris

Returning

Natasha

 

Helen

 

Natasha

New

Helen

 

Mimi

 

Helen

Returning

Louisa

 

Robert

 

Louisa

New

Victoria

 

Barbara

 

Robert

Returning

Robert

 

 

 

Victoria

New

 

 

 

 

Mimi

Lost

 

 

 

 

Barbara

Lost

โค้ดที่เห็นในรูป 4 และ 5  แสดงคิวรีสร้างตารางเพื่อแบ่งกลุ่มลูกค้าใหม่ ลูกค้าที่หายไป และลูกค้าที่กลับคืนมา

  • บรรทัดที่ 7-11: นำตารางของทั้งสองปีมาผนวกกันโดยใช้ฟังก์ชัน Table.Combine

  • บรรทัดที่ 14-23: ผสานคอลัมน์ Customers This Year เข้ากับคอลัมน์ Customers Last Year โดยใช้ฟังก์ชัน Table.CombineColumns

  • บรรทัดที่ 26-34: ลบชื่อลูกค้าที่ซ้ำออกด้วยฟังก์ชัน Table.Distinct

  • บรรทัดที่ 31-34: เปลี่ยนชื่อคอลัมน์ที่ตอนนี้มีเพียงอันเดียวจาก Merged ไปเป็น  Customer โดยใช้ฟังก์ชัน Table.RenameColumns

  • บรรทัดที่ 37-42: จอยคิวรีนี้กับตาราง ThisYearCustomers โดยใช้ฟังก์ชัน Table.NestedJoin

  • บรรทัดที่ 46-51: หาจำนวนรวมของลูกค้าปีนี้ เครื่องหมาย # และ ” ” ถูกนำมาใช้เพื่อให้สามารถตั้งชื่อค่า (Aggregate NewColumn) ที่มีเคาะวรรคภายในชื่อได้

  • บรรทัดที่ 54-57: เปลี่ยนชื่อคอลัมน์จาก Count (Not Blank) of NewColumn.Customers This Year ไปเป็น ThisYear

  • บรรทัดที่ 60-65: จอยคิวรีนี้กับตาราง LastYearCustomers

  • บรรทัดที่ 69-74: หาจำนวนรวมของลูกค้าปีก่อน

  • บรรทัดที่ 77-80: เปลี่ยนชื่อคอลัมน์จาก Count (Not Blank) of NewColumn.Customers Last Year ไปเป็น LastYear

  • บรรทัดที่ 84-90: จำแนกกลุ่มของลูกค้าโดยใช้คอลัมน์ ThisYear และ LastYear

  • บรรทัดที่ 93-96:  ลบคอลัมน์ที่ไม่ต้องการ


บทความตอนนี้พูดถึงการหาเลขอันดับของยอดขาย การนับจำนวนลูกค้าที่ไม่ซ้ำกัน การแปลงคอลัมน์เดียวให้กลายเป็นหลาย ๆ คอลัมน์ การหาลูกค้าใหม่ ลูกค้าที่หายไป และลูกค้าที่กลับคืนมา ในตอนต่อไปจะเป็นเรื่องการประยุกต์ใช้คิวรีภาษาเอ็มเพื่อการประมวลผลที่มีประโยชน์ต่องานบิซิเนสอินเทลลิเจนซ์และเทคนิคต่าง ๆ ที่น่าสนใจ

หลักสูตรที่เกี่ยวข้อง

บทความที่เกี่ยวข้อง