Author: Sira Ekabut

  • 9 ความลำเอียงหรืออคติที่ต้องระวังเวลาทำงานเกี่ยวกับข้อมูล (Data Bias Warning)

    9 ความลำเอียงหรืออคติที่ต้องระวังเวลาทำงานเกี่ยวกับข้อมูล (Data Bias Warning)

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

    ตัวอย่างที่ผมชอบมากคือ กรณีของการวิเคราะห์ข้อมูลของนักวิจัยในสมัยสงครามโลก เพื่อที่จะหาว่าจะเพิ่มเกราะป้องกันให้เครื่องบินตรงไหนดี เพื่อให้นักบินมีโอกาสรอดตายมากขึ้น (เพิ่มทั้งลำไม่ไหว เดี๋ยวบินไม่ขึ้นพอดี)

    ซึ่งเค้าได้เก็บข้อมูลจากเครื่องบินที่กลับมาที่ฐานทัพทั้งหมดว่าถูกยิงที่จุดไหนบ้าง?
    ซึ่งก็ได้ดังรูป (จุดแดงคือจุดที่ถูกยิง)

    survivorship bias

    เพื่อนๆ คิดว่าเค้าควรจะติดตั้งเกราะป้องกันเพิ่มตรงบริเวณไหนดีครับ?

    ถ้าคิดเร็วๆ ก็ต้องเพิ่มเกราะตรงจุดที่มีสีแดงเยอะๆ สิ เพราะว่าถูกยิงเยอะบริเวณนั้น…. ใช่มะ?

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

    ดังนั้นแปลว่าสิ่งที่เห็นคือเป็นข้อมูลที่ได้จากผู้รอดชีวิต (Survivor) เท่านั้น ไม่ใช่ข้อมูลที่ครบถ้วนจริงๆ มันถึงมีชื่อเรียก Bias หรือความลำเอียงแบบนี้ว่า “Survivorship Bias” นั่นเอง

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

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

    Bias ในขั้นตอนการเก็บข้อมูล

    1. Observer Effect

    ความลำเอียงนี้เกิดขึ้นเมื่อ “ผู้ที่ถูกเก็บข้อมูลทำตัวไม่ปกติเพราะรู้ว่ามีคนคอยจับตาเป็นพิเศษ” เช่น ถ้าพนักงานรู้ว่าทีมตัวเองช่วงนี้กำลังถูก Monitor เค้าก็จะทำตัวดีผิดปกติ ทำให้ผลงานหรือค่าที่วัดได้ “ดูดีเกินจริง”

    หรือแม้แต่การที่ถ้าผู้ถูกวัดต้องเปิดเผยตัวตนว่าได้ให้ความคิดเห็นยังไง ประเมินผลยังไง หรือลงคะแนน Vote แบบไหน ก็อาจจะมีผลต่อการตัดสินใจก็ได้ เพราะการ Vote บางแบบที่ตรงกับใจตนเอง อาจไม่ตรงใจกับเจ้านายที่เฝ้ามองอยู่…

    ทางแก้เบื้องต้นคือ ต้องวัดแบบไม่ให้รู้ตัว หรือ อาจวัดให้นานขึ้น จนไม่สามารถ Fake ไหว (ถ้า Fake นานได้ก็ดีไปอีกแบบ) ถ้าเป็นการ Vote หรือการประเมินผลก็ต้องทำแบบ Anonymous ไม่ให้รู้ว่าใครเป็นผู้ให้คะแนนเป็นต้น

    2. Survivorship Bias

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

    ทางแก้เบื้องต้น คือ อย่าลืมคิดว่า มีอะไรที่เรามองไม่เห็น หรือไม่มีข้อมูลหรือไม่? ทำไมจึงไม่มีข้อมูลนั้น? ซึ่งการไม่มีข้อมูล บางทีก็บอกอะไรได้มากกว่าการที่มีข้อมูลด้วยซ้ำไป…

    3. Selection / Sampling Bias

    อันนี้เกิดจากการที่กลุ่มตัวอย่างที่เราไปเก็บมา ไม่ได้เป็นตัวแทนประชากรที่ดี เช่น อาจเก็บมาเฉพาะกลุ่มที่เราสนใจเท่านั้น หรืออาจมีเหตุการณ์บางอย่างที่ทำให้กลุ่มนึงมาตอบ อีกกลุ่มไม่ตอบ (ก็กลายเป็น Survivorship อีก)

    ถ้าเราวิเคราะห์ค่าจากกลุ่มที่ไม่ใช่ตัวแทนที่ดี ผลที่ได้ก็ย่อมจะไม่สะท้อนประชากรที่แท้จริง

    ดังนั้นทางแก้ก็คือ ต้องสุ่มข้อมูลให้เป็นกลาง เช่น มีประชากรอยู่ 1,000 คน เราสัมภาษณ์ไหวแค่ 100 คน เราอาจเอาชื่อคน 1000 คนมาเรียง

    จากนั้นใส่ฟังก์ชัน RAND ใน Excel เพื่อทำการสุ่มเลข 0-1 (เป็นจุดทศนิยม)
    แล้ว Copy Paste Value ไว้ไม่ให้ค่าเปลี่ยน

    9 ความลำเอียงหรืออคติที่ต้องระวังเวลาทำงานเกี่ยวกับข้อมูล (Data Bias Warning) 1

    แล้ว Sort เอา 100 คนแรกมาสัมภาษณ์เจาะลึก เป็นต้น

    9 ความลำเอียงหรืออคติที่ต้องระวังเวลาทำงานเกี่ยวกับข้อมูล (Data Bias Warning) 2

    4. Measurement Bias

    อันนี้เกิดจากการวัดที่ไม่เที่ยงตรง อาจเป็นที่ตัวเครื่องมือวัดไม่เสถียร ทำให้วัดค่าได้แกว่งไปแกว่งมา เมื่อการวัดค่าไม่ได้เรื่อง การวิเคราะห์ในขั้นตอนต่อไปก็ย่อมจะแย่ไปตามกัน ดังที่บอกว่า Garbage-in Garbage-Out นั่นแหละครับ

    วิธีแก้ก็คือ พยายาม Calibrate เครื่องมือด้วย หรือลองวัดกับตัวอย่างเดิมซ้ำๆ ว่าค่าที่ได้แกว่งหรือไม่

    Bias ในขั้นตอนการคำนวณ

    5. Outliers

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

    วิธีแก้ก็อาจจะตัด Outlier ก่อนแล้วค่อยคำนวณ หรือจะเปลี่ยนไปใช้ค่ากลางตัวอื่นที่ไม่ได้รับผลจาก Outlier เช่นค่า MEDIAN แทนก็ได้ เพราะว่า MEDIAN จะเอาข้อมูลมาเรียงกันจากน้อยไปมากแล้วดูว่าค่าไหนอยู่ตรงกลาง ซึ่งการทำแบบนี้จะไม่ได้รับผลการฉุดดึงจาก Outlier เลย

    9 ความลำเอียงหรืออคติที่ต้องระวังเวลาทำงานเกี่ยวกับข้อมูล (Data Bias Warning) 3

    6. Simpson’s Paradox

    เป็นปรากฏการณ์ที่ผลสรุปของกลุ่มย่อย ดันดูขัดแย้งกับผลสรุปในกลุ่มใหญ่กว่า ตัวอย่างเช่นอันนี้

    9 ความลำเอียงหรืออคติที่ต้องระวังเวลาทำงานเกี่ยวกับข้อมูล (Data Bias Warning) 4

    ถ้าเราได้ข้อมูลแบบนี้มา เราก็คงคิดว่า ผู้หญิงเนี่ยมาสายกว่าผู้ชายเนอะ ดูสิ สายกว่าทั้งสองแผนกเลย แย่จัง!

    แต่ถ้าเรามาดูตัวเลขตัวรวม และดูที่มาจากเลขดิบอาจจะได้ข้อสรุปอีกแบบ

    9 ความลำเอียงหรืออคติที่ต้องระวังเวลาทำงานเกี่ยวกับข้อมูล (Data Bias Warning) 5

    กลายเป็นว่า พอดูภาพรวมปุ๊ป ผู้ชายดันมี % การมาสายสูงกว่าผู้หญิงตั้งเกือบ 2 เท่า ทั้งๆ ที่ตอนดูแยกแผนก สัดส่วนของผู้หญิงที่มาสายดันมากกว่าตั้งเยอะ!

    ทั้งนี้เพราะว่าเลข 66.67% ที่ดูเยอะ มาจากกลุ่มที่มีแค่ 15 คนเอง แต่ 10% นั่นมาจากตั้ง 500 คน การ Weight จึงเยอะว่า ซึ่งกลับด้านกับของผู้ชายเลย

    นี่แหละความน่ากลัวของการดูข้อมูล หึหึ

    Bias ในขั้นตอนการตีความผลลัพธ์

    7. Correlation bias

    Bias นี้ก็เจอบ่อยมากเลย โดยเฉพาะเวลาคนพยายามหาความสัมพันธ์ระหว่าง 2 ตัวแปร เช่น X กับ Y แล้วเห็นว่ามันมี Correlation กัน คือวิ่งแบบสัมพันกัน รู้ค่า X แล้วสามารถทำนาย Y ได้

    ปัญหาคือ เรามักจะเผลอคิดไปด้วยว่า X จะต้องเป็นสาเหตุทำให้เกิด Y ด้วยก็เลยจะพยายามที่จะเพิ่ม X เพื่อให้ได้ Y มากขึ้น ซึ่งบางทีก็เป็นอย่างนั้นจริง แต่บางทีมันก็ไม่ใช่! (หรือบางที Y นั่นแหละที่ทำให้เกิด X ซึ่งกลับกันเลย)

    เพื่อนๆ เคยได้ยินประโยคนี้มั้ย? “Correlation does not imply Causation” หรือแปลเป็นไทยว่า “มีความสัมพันธ์กันไม่ได้หมายความว่าเป็นเหตุผลซึ่งกันและกัน”

    ถ้าอยากดูตัวอย่าง Correlation ประหลาดๆ ก็ลองเข้าไปดูได้ที่ tylervigen.com นี่เลย

    มันมีลูกเล่นให้เราลองหา Correlation แปลกๆ ด้วยตัวเองได้ด้วย โดยไปที่หน้านี้ เช่น ที่ผมทำอันนี้เป็น Correlation ระหว่างจำนวนคนที่ตายจากการตกเตียง กับ จำนวนเงินที่จ่ายไปกับสัตว์เลี้ยง ซึ่งมี Correlation ตั้ง 94% แน่ะ (หรือว่าจริงๆ สัตว์เลี้ยงคือฆาตกร!!)

    9 ความลำเอียงหรืออคติที่ต้องระวังเวลาทำงานเกี่ยวกับข้อมูล (Data Bias Warning) 6

    ป.ล. ที่แปลกกว่าคือ มีคนเก็บสถิติการตกเตียงตายด้วยเหรอ…เจ๋งจริงๆ

    ทางแก้ Bias คือ เราต้องหาเหตุผลให้ได้ว่า X มันทำให้ Y เปลี่ยนแปลงได้ยังไง มีกลไกอะไร? อาจต้องทำการทดลองว่าเพิ่ม X ลด X แล้ว Y เปลี่ยนจริงรึเปล่า? และต้องควบคุมการทดลองให้ดีด้วยนะ ไม่ใช่ยังมีตัวแปรปริศนา Z ซ่อนตัวอยู่อีก แบบนั้นการสรุปผลของเราอาจจะผิดก็ได้

    8. Gambler’s Fallacy

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

    9 ความลำเอียงหรืออคติที่ต้องระวังเวลาทำงานเกี่ยวกับข้อมูล (Data Bias Warning) 7

    สมมติผมโยนเหรียญปกติ (ไม่ได้โกง) แล้วมันออกหัวไป 5 รอบติดกัน

    ถามว่าตาต่อไป โอกาสออกหัวหรือก้อยจะเยอะกว่ากัน?

    คำตอบคือ ถ้าเหรียญไม่ได้โกง มันก็จะยังมีโอกาสออกหัวอยู่ 50% เช่นเดิมตามปกติ ไม่ได้เกี่ยวอะไรกับที่เคยออกหัวไปแล้ว 5 รอบติดเลย

    9. Confirmation bias

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

    ตัวอย่างอันนึงที่ค่อนข้างน่าสนใจคือ คลิปให้นับว่ามีคนเสื้อขาวส่งบอลกี่ครั้ง?

    คำตอบคือ 15 ครั้ง…

    แต่มีคนเกินครึ่งที่ไม่เห็นคนใส่ชุดกอลิล่าที่เดินผ่านไปในคลิปนี้เลย…

    นั่นเป็นเพราะปกติคนเราจะเห็นเฉพาะสิ่งที่เราสนใจเท่านั้น และเราก็จะ ignore ข้อมูลที่ไม่ได้ตรงกับใจเรา

    ซึ่งเป็นกับทุกเรื่อง เรามักจะรับแต่ข้อมูลที่ Support ความคิดเรา และไม่สนใจข้อมูลของอีกฝ่าย ยิ่งยุคนี้ที่มี Social Media ยิ่งจะได้เห็นแต่ข้อมูลที่ตรงกับเรามากผิดปกติอีก (เพราะเค้าคิดว่าเราน่าจะชอบ) ซึ่งก็ต้องระวังกันไว้ พยายามเปิดใจรับฟังรอบด้านด้วย

    ก่อนจากลา

    วันนี้ผมขอจบบทความเท่านี้ดีกว่า หากเพื่อนๆ มีเรื่อง Bias อะไรน่าสนใจ ก็ Comment บอกกันได้นะครับ

    และถ้าใครชอบบทความแนวนี้ ก็ยังมีเรื่องอื่นๆ อีกตามนี้เลย

  • Power BI ตอนที่ 14:  Context Transition และ พลังแฝงใน Measure

    Power BI ตอนที่ 14: Context Transition และ พลังแฝงใน Measure

    จากในตอนที่แล้วเราได้ทำความรู้จัก CALCULATE กันไปแล้วว่ามันเป็นฟังก์ชันที่เอาไว้เปลี่ยน Filter Context ได้ตามต้องการ ในตอนนี้เราจะมาทำความรู้จักพลังที่แท้จริงของมัน ซึ่งก็คือ

    • CALCULATE สามารถเปลี่ยน Row Context ให้เป็น Filter Context ได้ เรียกว่า Context Transition
    • Measure ทุกตัวมี CALCULATE แฝงอยู่ข้างในเสมอ

    ไฟล์ประกอบ

    ใช้ไฟล์เดิมจากตอนก่อนหน้าได้เลยนะครับ หรือจะใช้อันนี้ก็ได้ ซึ่งเรามี Data Model แบบนี้

    Power BI ตอนที่ 14: Context Transition และ พลังแฝงใน Measure 8

    มาดูเรื่องแรกกันก่อนครับ

    CALCULATE กับ Context Transition

    หากเรานำ CALCULATE ไปใช้ในบริบทที่มี Row Context มันจะเปลี่ยน Row Context นั้นให้กลายเป็น Filter Context … ฟังแล้วไม่เข้าใจเลยซักนิดใช่มั้ยครับ? งั้นมาดูตัวอย่างดีกว่าครับ

    สมมติว่าผมไปที่ Data View แล้วไปที่ Table dStores แล้วสร้างคอลัมน์ใหม์โดยที่ผมอยากจะแสดงยอดขายของแต่ Store ไว้ในคอลัมนี้

    ผมสามารถทำได้โดยกด New Column แล้วใส่สูตรแบบนี้ได้

    StoreRevenue = CALCULATE([TotalRevenue])
    Power BI ตอนที่ 14: Context Transition และ พลังแฝงใน Measure 9

    ผลลัพธ์ที่ได้มันจะใช้ CALCULATE คำนวณ TotalRevenue โดยเปลี่ยน Filter Context ให้เป็นไปตามค่าในแถวเดียวกับมัน

    สมมติว่าเราลองวิเคราะห์ Filter ของบรรทัดแรกจะมีดังนี้

    • StoreKey=1
    • StoreType=Store
    • StoreName=Contoso Seattle No.1 Store
    • Status=On
    • CloseReason=blank
    • EmployeeCount=17
    • SellingAreaSize=462
    • GeographyType=City
    • ContinentName=North America
    • RegionCountryName=United Sates

    พอมัน Filter ตามนี้ก็จะได้ว่า StoreRevenue = 1,615,303.83

    นี่แหละคือการเปลี่ยน Row Context เป็น Filter Context ซึ่งเรียกว่า Context Transition ซึ่งทำให้ผลคำนวณ Revenue แต่ละบรรทัดออกมาไม่เท่ากัน เพราะว่ามันมี Filter ไม่เหมือนกันนั่นเอง

    ระวัง! ถ้าคิดดูให้ดู เวลาเราคำนวณแบบนี้ หากในตารางมีคอลัมน์ที่ Unique ไม่ซ้ำกัน ผลลัพธ์ก็จะไม่มีปัญหา แต่ถ้าในตารางดันมีบรรทัดที่ Duplicate กันทั้งแถว ค่าที่ได้จากการคำนวณจะเบิ้ลทันที

    Measure ทุกตัวมี CALCULATE แฝงอยู่ข้างในเสมอ

    ประเด็นถัดไปก็คือ Measure ทุกตัวมี CALCULATE แฝงอยู่เสมอ อันนี้เข้าใจง่ายครับ

    แปลว่า การเขียนสูตรว่า

    StoreRevenue = CALCULATE([TotalRevenue])

    สามารถเขียนเหลือแค่ Measure ก็ได้ เพราะมันมี CALCUATE อยู่ในตัวอยู่แล้ว เช่น

    StoreRevenue = [TotalRevenue]

    ซึ่งจะได้ผลลัพธ์เท่าเดิมทุกประการ แต่เขียนสั้นลงไปอีก

    Power BI ตอนที่ 14: Context Transition และ พลังแฝงใน Measure 10

    และนี่ก็คือความลับอีก 2 ข้อที่เกี่ยวกับ CALCULATE ครับ จะเห็นว่ามันสั้นๆ ดูเรียบง่าย ไม่มีอะไร แต่พอใช้งานจริง หลายๆ คนอาจลืมนึกถึงเรื่องพวกนี้ ลืมนึกไปว่า Measure มี CALCULATE อยู่ และมันก็จะเกิด Context Transition ด้วย

    เพื่อให้เห็นความสามารถที่ลึกซึ้งมากขึ้น ลองมาดูตัวอย่างการใช้ CALCULATE กับ Row Context ที่น่าสนใจขึ้นดีกว่าครับ

    CALCULATE กับ Row Context ของ Iterator

    สมมติว่าผมอยากจะแสดงยอดขายเฉลี่ยของแต่ละ Store โดยแบ่งตาม Product Category เราจะทำยังไง?

    ก่อนอื่นผมจะต้องทำ Visual ที่มี Product Category อยู่ที่ Row ไว้ก่อน (เพราะเราจะแบ่งตาม Product Category ไง) ดังนี้

    Power BI ตอนที่ 14: Context Transition และ พลังแฝงใน Measure 11

    ทีนี้เราจะทำให้ Values หรือการคำนวณ คำนวณแบบไหนล่ะ? เราอยากได้ยอดขายเฉลี่ย ถ้าเราลาก Total Revenue ลงมา มันก็คือยอดขายรวม หรือถ้าเราลาก Field ยอดขายลงมาแล้วกด Average มันก็คือยอดขายเฉลี่ยแต่ละ Transaction ไม่ใช่ยอดขายเฉลี่ยของแต่ละร้านค้า…

    ทางออกคือ การสร้าง Measure ยอดขายเฉลี่ยของแต่ละร้านขึ้นมา

    Concept คือ เราจะใช้ Iterator เช่น AVERAGEX มาช่วย

    AVERAGEX ( <Table>, <Expression> )

    AVERAGEX จะทำการคำนวณ <Expression> ในแต่ละแถวของ <Table> (เรียกว่า Iterate) จากนั้นจำไว้ในใจ (สร้างตารางจำลอง) พอครบทั้ง Table แล้วก็เอามา Average กันซะ

    สูตรที่จะใช้คือ

    AverageStoreSales = AVERAGEX(DISTINCT(dStores[StoreKey]),[TotalRevenue])

    Table คือ DISTINCT(dStores[StoreKey]) ซึ่งก็คือ Store แต่ละร้านแบบไม่ซ้ำกัน

    Expression คือ [TotalRevenue] ซึ่งคือ Measure และมันมี CALCULATE แฝงอยู่ข้างใน ทำให้เกิด Context Transition ในการคำนวณ [TotalRevenue] ของ StoreKey แต่ละบรรทัดนั่นเอง

    พอคำนวณ TotalRevenue ของแต่ละ StoreKey ได้ก็จับมา Average กันให้เรา จบ.. ได้ผลลัพธ์แบบนี้

    Power BI ตอนที่ 14: Context Transition และ พลังแฝงใน Measure 12

    แต่ละสินค้าก็จะมียอดขายเฉลี่ยต่อร้านไม่เท่ากัน และตรง Total ก็คือยอดขายเฉลี่ยต่อร้านแบบที่ไม่ได้แบ่งตามสินค้า (พูดง่ายๆ ก็คือรวมสินค้าทุกประเภทนั่นแหละ) เลขมันก็เลยเยอะ

    การใช้ CALCULATE ผสมกับพวก SUMX AVERAGEX MAXX RANKX เพื่อแปลง Row Context เป็น Filter Context เป็นอะไรที่ใช้ในชีวิตจริงบ่อยมาก

    จะเห็นว่า TotalRevenue คำนวณจากตาราง fSales ดังนั้นจึงสามารถ Filter จากตารางอื่นได้เมื่อเราใช้ พวก SUMX AVERAGEX MAXX สร้างตารางจำลองขึ้นมา แล้วเกิด Context Transition ขึ้น

    ยกตัวอย่างเช่น

    TotalRevenue เฉลี่ยรายร้านค้า

    AverageStoreRevenue = 
    AVERAGEX(DISTINCT(dStores[StoreKey]),[TotalRevenue])

    TotalRevenue เฉลี่ยราย Category สินค้า

    AvgProductCategoryRevenue = 
    AVERAGEX( DISTINCT(dProduct[ProductCategory]) , [TotalRevenue] )

    TotalProfit ที่มากสุดรายสินค้า

    MaxProductCategoryProfit = 
    MAXX( DISTINCT(dProduct[ProductCategory]) ,[TotalGrossProfit] )

    ซึ่งจะเห็นว่าเราสามารถสร้างมุมมองต่างๆ เพิ่มได้ไม่จำกัด หาก Measure หลักนั้นคำนวณจากข้อมูลซึ่งอยู่ที่ Fact Table แต่ถ้า Measure หลักไม่ได้คำนวณจากคอลัมน์ใน Fact Table จะต้องทำตามในบทความนี้ครับ

    และนี่ก็คือความเจ๋งของการที่เรารู้ DAX ครับ เพราะเป็นเรื่องที่ PivotTable แบบปกติใน Excel ทำไม่ได้เลย ต้องเขียน DAX Measure ใน PowerPivot หรือ Power BI เท่านั้น ^^

    สารบัญ Series Power BI

    ใครสนใจอยากเรียนเป็นคลิปวีดีโอ ผมมี

  • วิธีสร้างเลข Combination กัน

    วิธีสร้างเลข Combination กัน

    มีคนถามมาว่า ถ้ามีเลข 0, 2, 3, 6, 9 สามารถผสมเป็นเลข 2 Digit ได้แบบไหนบ้าง? ผมว่าน่าสนใจดีเลยเอามาทำบทความให้ครับ วิธีทำที่ผมคิดว่าง่าย ก็คือใช้ Power Query ช่วยทำ ซึ่งมีวิธีทำดังนี้

    เริ่มต้นสร้างเลข Combination

    ก่อนอื่นสร้าง Table ที่มี List ตัวเลขที่ต้องการก่อน

    วิธีสร้างเลข Combination กัน 13

    แล้วก็เอาเข้า Power Query ซะ แล้วเปลี่ยน Data Type เป็น Text เพื่อความยืดหยุ่น (กดแบบ Replace Current)

    จากนั้น Add Custom Column ขึ้นมาแล้วใส่สูตรว่า =1 เพื่อให้ออกมาเป็นเลข 1 ทั้งหมด

    วิธีสร้างเลข Combination กัน 14

    จากนั้นทำการ Merge Query กับตัวเองซะ เลือกตัวเชื่อมเป้นคอลัมน์ที่มีเลข 1 ที่เราสร้างไว้

    วิธีสร้างเลข Combination กัน 15

    กด Expand ผลลัพธ์ออกมา

    วิธีสร้างเลข Combination กัน 16

    จากนั้นเลือกคอลัมน์ Num กับ Num.1 แล้วสั่ง Merge กันซะ จะใส่ตัวคั่นรึเปล่าก็แล้วแต่

    วิธีสร้างเลข Combination กัน 17

    จากนั้นลบ Column Custom ออกไปก็จบละ กด Load เอาผลลัพธ์ออกมาได้เลย

    วิธีสร้างเลข Combination กัน 18

    ลองเปลี่ยนข้อมูลดูได้ ใช้ตัวหนังสือก็ได้

    วิธีสร้างเลข Combination กัน 19
  • 4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query

    ในบทความนี้ผมจะมาแนะนำวิธีสร้าง Function Query ขึ้นใน Power Query ซึ่งไม่ใช่แบบปกติ แต่จะเป็นแบบที่ยังยอมให้เราแก้ไข Step ต่างๆ ใน Function นั้นได้โดยง่าย

    แต่ถ้าใครยังไม่รู้ว่าผมพูดถึงเรื่องอะไร ลองอ่าน recap นี้ดูก่อนเล็กน้อย…

    Recap

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

    ในหนังสือ Excel Power Up! ที่ผมเขียนไว้ ในบทหลังๆ ก็มีเขียนวิธีที่ทำให้ Query กลายเป็นฟังก์ชันได้ง่ายๆ โดยเปิด Advanced Editor แล้วใส่คำว่า (input1, input2)=> นำหน้า code เดิม

    ซึ่งมันจะเปลี่ยน Query นั้นให้กลายเป็นฟังก์ชันที่มี input 2 ตัวคือ input1 กับ input2 ทันที แต่ข้อเสียคือถ้าจะแก้ต้องมาแก้ใน Advanced Editor ไม่สามารถมี User Interface ง่ายๆ ให้แก้อีกแล้ว

    ในบทความนี้ผมก็เลยจะมาแชร์วิธีสร้าง Function อีกวิธีนึงซึ่งยังสามารถทำให้เราแก้ไขได้ง่ายๆ โดยใช้ User Interface ได้อยู่ โดยที่ผมเห็นวิธีนี้ครั้งแรกมาจากคุณโบแห่ง Excel Wizard ที่ไปตอบในคลิปของ อ. Mike แห่ง Excel is fun

    ผมเห็นว่ามันเป็นประโยชน์มาก เลยขออนุญาตนำเทคนิคนี้มาถ่ายทอดอีกที แต่มีการดัดแปลงเล็กน้อยให้เข้าใจง่ายขึ้น (ล่ะมั๊ง) นะครับ 555

    วิธีใช้ Function Query แบบแก้ไขได้

    หลักการมี 4 ขั้นตอน คือ

    1. สร้าง New Parameter ขึ้นมา โดยจะสร้างกี่ตัวก็ได้ สมมติชื่อ Para1, Para2
    2. เอา Parameter จากข้อ 1 ไปเรียกใช้ใน Query ที่ต้องการจะให้เป็นต้นแบบ (อันนี้ต้อง Manual แก้สูตรนิดนึง) สมมติชื่อ StepQuery ซึ่ง Function ของเราจะทำ Step ตาม Query ตัวนี้เลย
    3. สร้างฟังก์ชัน โดยกดคลิ๊กขวา ที่ StepQuery แล้ว Create Function แล้วตั้งชื่อฟังก์ชันอะไรก็ได้
    4. นำฟังก์ชันไปใช้งาน เช่นเอาไปใช้ใน Query หลัก อาจใช้ผ่าน Invoke Custom Function ก็ได้ง่ายดี

    ซึ่งแบบที่เข้าใจง่ายที่สุดก็คือ Parameter ที่เป็นพวกค่าเดี่ยวๆ เช่น ตัวเลข หรือ ข้อความ เป็นต้น

    ตัวอย่างของการใช้ Parameter แบบนี้แล้วมีประโยชน์มากก็คือ การดึงข้อมูลจากเว็บไซต์ต่างๆ โดยเปลี่ยน URL ไปเรื่อยๆ เช่น การดึงข้อมูลหุ้น เป็นต้น

    ตัวอย่างการสร้าง Function ดึงข้อมูลหุ้นจาก symbol ที่ต้องการ

    สมมติผมต้องการข้อมูลจากเว็บหน้านี้ https://www.set.or.th/set/companyhighlight.do?symbol=SCC

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 20

    ผมก็สามารถสั่ง Get Data From Web ได้ โดยเลือกว่าจะดูด table ในรูป

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 21

    ที่นี้มันจะดูดข้อมูลเข้า Power Query เฉพาะ Symbol นี้อันเดียว

    ให้เปลี่ยนชื่อ Query เป็น StepQuery ซะ เพราะตารางนี้แหละที่เราจะใช้เป็นแม่เแบบของการ Transform Data ซึ่งเราจะ Transform ข้อมูลให้เสร็จไปเลยก็ได้ แต่ผมยังไม่ทำ เพราะไปทีหลังได้

    1. สร้าง Parameter

    ทีนี้ให้เราสร้าง Parameter ขึ้นมา โดยกด Manage Parameter แล้ว New แล้วตั้งชื่อว่า StockSymbol จากนั้นเลือก Type เป็น Text เพราะว่า Parameter นี้คือข้อความ จากนั้นใส่ Current Value เป็น SCC ไปก่อน เพื่อจะได้ดึงค่าจากหุ้น SCC ได้

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 22

    2.เอา Parameter ไปใช้ใน Step Query

    กดตามรูป แล้วไปแก้สูตรของ Source ซะ ให้เปลี่ยนจากข้อความว่า SCC เป็น Parameter ที่ชื่อว่า StockSymbol แทน ซึ่งเชื่อมด้วยเครื่องหมาย &

    = Web.Page(Web.Contents("https://www.set.or.th/set/companyhighlight.do?symbol="&StockSymbol))
    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 23

    พอลองกดกลับมาดู Step หลังๆ ก็ควรจะต้องเห็นว่ายังใช้งานได้อยู่เหมือนเดิม

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 24

    3.สร้างฟังก์ชัน

    จากนั้นคลิ๊กขวาที StepQuery แล้วกด Create Function

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 25

    จากนั้นตั้งชื่อตามใจชอบเช่น GetStockData แล้วกด ok

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 26

    มันจะสร้างฟังก์ชันแล้วผูก Query ให้เราโดยอัตโนมัติ

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 27

    4.นำฟังก์ชันไปใช้งาน

    ทีนี้เราจะลองใช้งานเพื่อดูดหุ้นซัก 5-6 ตัว แต่เนื่องจากเรายังไม่มี List รายชื่อหุ้นเลย ดังนั้นเดี๋ยวไปสร้าง List รายชื่อหุ้นก่อน ซึ่งเราจะสร้างใน Excel ไฟล์นี้แหละ

    ดังนั้นก่อนอื่นให้เรา Close & Load To… -> Only Create Connection เพื่อออกไปยัง Excel ก่อน (ไม่งั้นมันไม่ให้ออกไปสร้าง)

    ให้เราใส่ Data ลงไปตามต้องการ แล้วกดสร้าง Table ชื่อ StockList ซะ

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 28

    จากนั้นกด Get Data From Table/Range เพื่อเอาเข้า Power Query

    จากนั้นกด Add Column -> Invoke Custom Function เพื่อเรียกใช้ฟังก์ชันที่เราสร้างขึ้นมา

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 29

    มันอาจจะมีขึ้นมาเตือนเรื่อง Data Privacy เพราะมีการดึงข้อมูลจาก Local ผสมกับจากแหล่งออนไลน์ ก็ให้กด Continue ไป

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 30

    จุดนี้ถ้าไม่คิดอะไรมาก ติ๊ก Ignore Privacy Level ก็ได้ (มันก็จะไม่แคร์เรื่องข้อมูลรั่วไหลอะไรเลย)

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 31

    จากนั้นมันก็จะดึงข้อมูล Symbol ทุกตัวออกมาเป็น Table ดังรูป เมื่อคลิ๊กแต่ละช่องที่เป็น Table เราก็จะเห็นไส้ในของ Table นั้น

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 32

    ถ้าเรากด Expand ที่มุมขวาบนของคอลัมน์ มันก็จะเอาทุก Table มา Append ต่อแถวกันโดยอัตโนมัติ โดยการ Append ก็จะยึดจากชื่อคอลัมน์ที่เป็นหัวตารางเป็นหลัก

    แต่เนื่องจากหัวตารางไส้ในของเรายังไม่ ok ดังนั้นเราจะกลับไปแก้ StepQuery ให้เรียบร้อยก่อน

    กลับไปแก้ StepQuery (เพราะเราข้ามมา)

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 33

    เอาล่ะ เรากดย้อนหลับมายัง StepQuery เพื่อจัดการตารางให้เรียบร้อยกัน

    ก่อนอื่นจะ Filter เอาบรรทัดที่ไม่เกี่ยวข้องออก นั่นก็คือคอลัมน์แรกจะเอาตัวที่มีคำว่า “สำคัญ” ออกไปซะ

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 34

    ให้ Transpose ตารางลงมาก่อน

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 35

    แล้ว Use First Row as Header ซะ แต่จะลบ Step Change Type ออกเพื่อไม่ให้มันระบุชื่อหัวตารางในสูตร

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 36

    จากนั้นเราอยากใส่ลำดับปีเป็น Y-4, Y-3, Y-2, Y-1, Y-0 ดังนั้นจะกด Add Index Column ใหม่แบบ Custom

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 37

    จากนั้นจะได้เลขเรียง 4,3,2,1,0 ออกมา

    แต่คราวนี้เราจะใส่คำว่า Y- ไว้ข้างหน้า ก็ไปที่ Transform -> Format-> Add Prefix

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 38

    ก็จะได้ผลลัพธ์ตามต้องการ

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 39

    กลับไปดูผลที่ Query หลัก (หลังจากแก้ StepQuery)

    เมื่อกดกลับไปดูที่ StockList ซึ่งเป็น Query หลักของเรา จะเห็นว่าที่เราไปแก้ใน StepQuery นั้นได้สะท้อนออกมายัง Query หลักแล้ว

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 40

    คราวนี้เราก็ Expand ข้อมูลได้อย่างสบายใจแล้ว

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 41

    แค่นี้เราก็จะได้ข้อมูลจากทุก Symbol มารวมกันแล้วครับ

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 42

    ถ้าใครไม่อยากให้ตอน Expand มันระบุชื่อคอลัมน์ ก็สามารถทำตาม Tips ของบทความนี้ได้ เพื่อให้มันอ่านหัวคอลัมน์ใหม่ได้ตลอด

    เช่น เราจะแก้สูตรเป็น

    = Table.ExpandTableColumn(#"Invoked Custom Function", "GetStockData", List.Union(List.Transform(#"Invoked Custom Function"[GetStockData],each Table.ColumnNames(_))))

    ผลลัพธ์ที่ได้จะเหมือนเดิม แต่จะยืดหยุ่นขึ้นกรณีที่ในอนาคตอาจจะมี Field เพิ่มก็จะเห็นทันที

    4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query 43

    ต่อจากนี้จะเปลี่ยน Datatype ตัวไหนยังไงก็แล้วแต่เลยครับ ผมขอไม่ทำให้ดูแล้วนะ ^^

    ตอนต่อไปคืออะไร?

    ในบทความตอนถัดไป จะเป็นวิธีสร้างฟังก์ชันคล้ายๆ แบบบทความนี้ แต่สร้าง Parameter เป็น Any แทนที่จะเป็น Parameter แค่ Text ธรรมดา เพื่อให้ดึงข้อมูลจาก Table ที่ต้องการได้ ซึ่งจะยากขึ้นอีกเล็กน้อยครับ

    ซึ่งแบบหลังนี้แหละที่คุณโบ Excel Wizard ทำให้ดูในคลิป Excel is fun แต่ถ้าให้ผมอธิบายวิธีนั้นเลย น่าจะงงแน่นอน เลยต้องสอนแบบง่ายก่อนนะ

    แล้วพบกันในตอนต่อไปครับ รับรองว่าเจ๋งมากๆ อีกแล้ววว

  • Power BI ตอนที่ 13: CALCULATE ฟังก์ชันที่ทรงพลังที่สุดใน DAX

    Power BI ตอนที่ 13: CALCULATE ฟังก์ชันที่ทรงพลังที่สุดใน DAX

    ในบทความนี้ผมจะมาพูดถึงฟังก์ชัน CALCULATE ฟังก์ชันที่ทรงพลังที่สุดใน DAX ที่ถูกออกแบบมาให้ทำหน้าที่ “เปลี่ยน Filter Context” โดยเฉพาะ

    CALCULATE เป็นฟังก์ชันที่หน้าตาดูเรียบง่าย เหมือนไม่มีอะไร แต่ทรงพลังมากๆ ผมว่ามันเทียบได้กับตัวการ์ตูนเอกในเรื่อง One Punch Man ที่ชื่อไซตามะเลยครับ หน้าตาดูไม่เก่งอะไรเลย แต่ต่อยทีเดียวศัตรูตายหมด ดังนั้นอย่าดูถูก CALCULATE เด็ดขาด!!

    ผมกล้าพูดได้เลยว่าใครที่ใช้ Power BI แต่ไม่รู้จัก CALCULATE ก็เหมือนกับยังใช้ Power BI ไม่เป็นอ่ะครับ ดังนั้นมันสำคัญจริงๆ

    บอกเลยว่าตั้งแต่บทนี้ไปเนื้อหาจะเริ่มลึกซึ้งมากขึ้นๆ ดังนั้นความรู้เดิมควรจะแน่นก่อน และควรมีสมาธิในการอ่านดีๆ นะครับ อ่านผ่านๆ ไม่คิดตาม ไม่เข้าใจแน่นอน

    ไฟล์ประกอบ

    ใช้ไฟล์เดิมจากตอนก่อนหน้าได้เลยนะครับ หรือจะใช้อันนี้ก็ได้

    เอาล่ะเราไปเริ่มกันเลย!

    Recap เล็กน้อย

    ความหมายของการเปลี่ยน Filter Context ก็จะคล้ายๆ กับในบทความตอนก่อนหน้านี้ที่ ผมได้พยายามเขียนสูตร ALL เพื่อปลด Filter Context เดิมออกแล้ว Filter สินค้าที่เป็น Class ระดับ Economy เข้าไปอีกที ด้วยสูตรว่า

    FilterEconomyRevenue =
    SUMX (
        FILTER ( ALL ( fSales ), RELATED ( dProduct[ClassName] ) = "Economy" ),
        fSales[SalesQuantity] * RELATED ( dProduct[UnitPrice] )
    )
    

    ถ้าหากเราใช้ CALCULATE ทำ เราสามารถเขียนสูตรสั้นๆ เหลือแค่นี้

    CalculateEconomyRevenue = 
    CALCULATE([TotalRevenue],dProduct[ClassName]="Economy")
    Power BI ตอนที่ 13: CALCULATE ฟังก์ชันที่ทรงพลังที่สุดใน DAX 44

    จะเห็นว่า CALCULATE นั้นสามารถใช้สูตรที่ทั้งสั้นกว่า และดูน่าจะอ่านเข้าใจง่ายกว่าสูตรยาวๆ นั้นด้วย ดังนั้นเรามาดูกันดีกว่าว่า CALCULATE มีวิธีการใช้งานยังไงกันแน่

    ทำความเข้าใจ CALCULATE

    CALCULATE ( <Expression> , [<Filter1>] , [<Filter2>] , ... )

    CALCULATE นั้นประกอบไปด้วย 2 ส่วนหลักๆ ก็คือ

    • Expression หรือก็คือวิธีการคำนวณ เราจะใส่สูตรคำนวณเอาเองหรือจะอ้างอิง Measure ที่มีอยู่แล้วก็ได้
    • Filter คือ Filter Context ใหม่ที่อยากได้ สามารถใส่ได้หลายตัวโดยคั่นด้วย comma ซึ่งจะเป็นเงื่อนไขแบบ AND
      • สามารถใส่เป็นเงื่อนไขเปรียบเทียบคล้ายๆ กับเงื่อนไขในฟังก์ชัน FILTER ได้เลย
        • เช่น Field เทียบกับค่าอะไรบางอย่าง
        • ซึ่งความหมายคือจะมีการปลด Filter เดิมของ Field นั้นออกด้วย ALL แล้วค่อยใส่ Filter ใหม่ตามที่เราระบุ
      • ความพิเศษคือสามารถอ้างอิง Field จากตารางไหนก็ได้ โดยไม่ต้องใช้ RELATED มาช่วยเลย

    หมายเหตุ : CALCULATE จะประเมิน Filter ก่อน Expression เสมอ

    ฟังดูแล้วอาจจะยังงงๆ งั้นมาดูคำอธิบายของตัวอย่างข้างบนกัน

    CalculateEconomyRevenue = CALCULATE([TotalRevenue],dProduct[ClassName]="Economy")
    • Expression เขียนว่า [TotalRevenue] นั่นคือให้ใช้สูตรวิธีคำนวณของ Measure ที่ชื่อว่า [TotalRevenue] มาคำนวณ
    • Filter เขียนว่า dProduct[ClassName]=”Economy” ความหมายคือ ให้สั่งปลด Filter ของ Field dProduct[ClassName] ออกก่อนด้วย ALL จากนั้นค่อย Filter dProduct[ClassName] ให้เป็น Economy อีกที

    ก่อนจะมีการใช้ CALCULATE

    Total Revenue จะถูก Filter ตามแต่ละ ClassName อย่างที่ผมเคยอธิบายไปในบทแรกๆ ว่าแต่ละจุดของตาราง Pivot นั้นมี Filter Context ที่ไม่เหมือนกันเลย

    Power BI ตอนที่ 13: CALCULATE ฟังก์ชันที่ทรงพลังที่สุดใน DAX 45

    หลังจากใช้ CALCULATE

    มันปลด Filter ของ ClassName ออกหมด แล้ว Filter เข้าไปใหม่ด้วย ClassName ว่าต้องเท่ากับ Economy ทุกตัวเลยได้ค่าเดียวกันหมดเลยดังรูป

    CALCULATE

    สรุปสั้นๆ นะ

    “CALCULATE จะเปลี่ยน Filter ตามเงื่อนไขที่ระบุ แล้วค่อยคำนวณตามวิธีที่เราระบุ

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

    จากคำอธิบายข้างบน จริงๆ แล้วสูตร CALCULATE ข้างบน มันคือการเขียนโดยย่อของการเขียนแบบนี้เลยครับ เทียบเท่ากันทุกประการ!!

    CalculateEconomyRevenueFull =
    CALCULATE (
        [TotalRevenue],
        FILTER ( ALL ( dProduct[ClassName] ), dProduct[ClassName] = "Economy" )
    )
    Power BI ตอนที่ 13: CALCULATE ฟังก์ชันที่ทรงพลังที่สุดใน DAX 46

    ดังนั้นแปลว่า ถ้าผมใส่ Filter ตัวอื่นที่ไม่เคยถูก Filter มาก่อน เช่น StoreType ด้วยสูตรนี้ว่าต้องการ StoreType แบบ Online เท่านั้น

    CalculateOnlineRevenue = 
    CALCULATE([TotalRevenue],dStores[StoreType]="online")

    การทำงานก็ยังคงเป็น Concept เดิม คือ ปลด Filter ด้วย ALL แล้ว Filter เข้าไปด้วยตัวใหม่ที่ระบุ

    Power BI ตอนที่ 13: CALCULATE ฟังก์ชันที่ทรงพลังที่สุดใน DAX 47

    ผลที่ได้ก็จะเป็นการ Filter เพิ่มจากตัว [TotalRevenue] ปกติ เนื่องจากปลด Filter dStores[StoreType] ก็ไม่ได้มีผลอะไร (เพราะไม่ได้มี Filter ไว้อยู่แล้ว) จากนั้นค่อย Filter dStores[StoreType] ให้เป็น Online

    ทั้งนี้มันต่างจากตอนแรกที่เราสั่ง dProduct[ClassName] = “Economy” ในแง่ที่ว่าอันนั้นการปลด Filter ออกจะเห็นผลที่ชัดเจนเลย เพราะถ้าไม่ปลดออก กรณี Class Name ใน Visual ไม่ใช่ Economy จะต้องได้ค่า Blank เนื่องจาก ไม่มีทางที่จะเป็น Class Name 2 อย่างได้พร้อมกันอยู่แล้ว

    CALCULATE หลายเงื่อนไข

    เงื่อนไขแบบ AND

    ถ้าเราใส่ Filter สองเงื่อนไขคั่นด้วย comma มันจะเป็นเงื่อนไขแบบ AND เลย จะเป็นยังไงมาดูกันครับ

    CalculateOnlineEconomyRevenue =
    CALCULATE (
        [TotalRevenue],
        dProduct[ClassName] = "Economy",
        dStores[StoreType] = "online"
    )
    Power BI ตอนที่ 13: CALCULATE ฟังก์ชันที่ทรงพลังที่สุดใน DAX 48

    ผลที่ได้จะเป็นการปลด Filter ClassName และ StoreType ออกทั้งหมด และสั่งให้ Filter ClassName เป็น Economy และ StoreType เป็น online นั่นเอง

    และถ้าจะเป็นเงื่อนไขแบบ OR ล่ะ?

    OR Field เดียวกัน ไม่มีปัญหา

    ถ้าเป็นเงื่อนไขแบบ OR แบบอ้างอิง Field เดียวกันเรายังพอใช้เครื่องหมาย || หรือพวก IN มาช่วยได้ดังนี้

    CalculateEconomyRegular =
    CALCULATE (
        [TotalRevenue],
        dProduct[ClassName] = "Economy"
            || dProduct[ClassName] = "Regular"
    )

    หรือ

    CalculateEconomyRegular =
    CALCULATE ( [TotalRevenue], dProduct[ClassName] IN { "Economy", "Regular" } )
    Power BI ตอนที่ 13: CALCULATE ฟังก์ชันที่ทรงพลังที่สุดใน DAX 49

    OR คนละ Field เริ่มยากละ

    แต่ถ้าเราจะอ้างอิง Field คนละ Field กันแบบ OR มันจะไม่ยอม เช่น

    Power BI ตอนที่ 13: CALCULATE ฟังก์ชันที่ทรงพลังที่สุดใน DAX 50

    ดังนั้นเราจะใช้ CALCULATE เปล่าๆ ไม่ได้แล้ว ต้องใช้ฟังก์ชันอื่นมาช่วย นั่นก็คือ FILTER กับ ALL มาช่วยนั่นเอง เช่น

    CalculateEconomy_or_Online =
    CALCULATE (
        [TotalRevenue],
        FILTER (
            ALL ( fSales ),
            RELATED ( dProduct[ClassName] ) = "Economy"
                || RELATED ( dStores[StoreType] ) = "online"
        )
    )
    Power BI ตอนที่ 13: CALCULATE ฟังก์ชันที่ทรงพลังที่สุดใน DAX 51

    สูตรยากกว่า CALCULATE สำเร็จรูปเยอะเลยเนอะ…

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

    เราน่าจะพอเห็นภาพการทำงานของ CALCULATE กันแล้ว คราวนี้ลองมาดูกันว่าถ้าใส่ CALCULATE ซ้อนกันจะเกิดอะไรขึ้น

    CALCULATE ซ้อนกัน

    สมมติผมเขียน Measure แบบนี้ ให้ทายว่ามันจะเปลี่ยน Filter ให้กลายเป็นแบบไหน?

    Calculate2X =
    CALCULATE (
        CALCULATE (
            [TotalRevenue],
            dProduct[ClassName] = "Economy",
            dStores[StoreType] = "online"
        ),
        dProduct[ClassName] = "Regular"
    )

    ถ้าดูเผินๆ คนทั่วไปน่าจะคิดว่า มันน่าจะได้เป็น Online และ Regular แต่ในความเป็นจริง Filter ที่หลงเหลือกลับได้เป็น Online และ Economy เหมือนเดิม!!

    Power BI ตอนที่ 13: CALCULATE ฟังก์ชันที่ทรงพลังที่สุดใน DAX 52

    ทำไมถึงเป็นแบบนั้น? ทั้งๆ ที่การเขียนสูตร 2 ชั้นซ้อนกันมันต้องคำนวณตัวข้างในก่อนสิ ?

    การเขียนสูตร 2 ชั้นจะคำนวณตัวในก่อนนั้นถูกต้องแล้วครับ แต่สาเหตุที่ผลลัพธ์เป็นแบบนี้ก็เพราะ CALCULATE จะประเมิน Filter ก่อน Expression เสมอครับ

    มาดูกันให้ชัดๆ ว่าเกิดอะไรขึ้น

    Calculate2X =
    CALCULATE (
    CALCULATE (
    [TotalRevenue],
    dProduct[ClassName] = "Economy",
    dStores[StoreType] = "online"
    ),
    dProduct[ClassName] = "Regular"
    )

    CALCULATE ตัวข้างใน (สีแดง) จะถูกคำนวณก่อน ซึ่งเดี๋ยวมันจะต้องคิดว่าจะต้องเปลี่ยน Filter ยังไงดี ทำให้มันต้องปลด Filter ClassName และ StoreType ออกให้หมดก่อน ทำให้ dProduct[ClassName] = “Regular” ที่อยู่ในชั้นนอกถูกทำลายไปโดยปริยาย

    จากนั้นมันค่อยใส่ Filter ไปใหม่ว่า ClassName ให้เป็น Economy และ StoreType เป็น online นั่นเอง

    กลายเป็นว่า เวลาใช้ CALCULATE ซ้อนกันหลายชั้น ชั้นในดันได้รับ Priority เรื่อง Filter มากว่านั่นเอง และจะทำลายชั้นนอกตัวที่ซ้ำกันด้านในทิ้งหมดเลย

    เดี๋ยวลองเขียนเงื่อนไขชั้นนอกอีกอันแบบไม่ซ้ำกับข้างในบ้าง

    Calculate2X_v2 =
    CALCULATE (
        CALCULATE (
            [TotalRevenue],
            dProduct[ClassName] = "Economy",
            dStores[StoreType] = "online"
        ),
        dProduct[ClassName] = "Regular",
        dDate[Year] = 2012
    )
    Power BI ตอนที่ 13: CALCULATE ฟังก์ชันที่ทรงพลังที่สุดใน DAX 53

    จะเห็นว่า Filter ที่หลงเหลือก็คือ Online และ Economy และ ปี 2012 เพราะว่าเลขลดลงไปกว่า 2x ปกติ ดังนั้นจะเห็นว่า เงื่อนไข Filter ของ CALCULATE ชั้นนอกไม่ได้ถูกทำลายไปทั้งหมด แต่ถูกทำลายเฉพาะตัวที่ซ้ำกับด้านในเท่านั้น

    หลายคนอาจเริ่มสงสัยแล้วว่า “ในชีวิตจริงใครจะไปเขียน CALCULATE 2 ตัวซ้อนกัน งงจะตายชัก??”

    ครับ มันไม่มีใครตั้งใจเขียนแบบนั้นหรอก แต่เป็นเพราะความลับอีก 2 อย่างต่อจากนี้ต่างหากที่ทำให้เราต้องระวังเรื่องนี้ นั่นก็คือ…

    • CALCULATE สามารถเปลี่ยน Row Context ให้เป็น Filter Context ได้ เรียกว่า Context Transition
    • Measure ทุกตัวมี CALCULATE แฝงอยู่ข้างในเสมอ

    ซึ่งเดี๋ยวผมจะพูดถึง 2 เรื่องนี้ในบทถัดไปครับ ซึ่งบอกเลยว่าเป็น Concept ของ CALCULATE ที่ลึกลับซับซ้อนที่สุดที่คนส่วนใหญ่ล้วนงงไปตามๆ กันเลยล่ะ!!

    สารบัญ Series Power BI

    ใครสนใจอยากเรียนเป็นคลิปวีดีโอ ผมมี

  • Power BI ตอนที่ 12: DISTINCT, VALUES, ALL และผองเพื่อน

    Power BI ตอนที่ 12: DISTINCT, VALUES, ALL และผองเพื่อน

    เรื่องของ Table Function ใน DAX นอกจาก FILTER ที่แนะนำไปในบทความที่แล้ว ยังมีที่เราควรจะรู้จักอีก 3 ตัว ก็คือ DISTINCT, VALUES, ALL (และเพื่อนๆ ของมัน)

    เนื่องจากทั้ง 3 ตัวนี้ทำงานคล้ายกันๆ แต่ไม่เหมือนกัน… ดูเผินๆ แล้วจะสับสนได้
    ผมจึงขอทำตารางเปรียบเทียบดังนี้

    ฟังก์ชันรองรับ Table/Col ที่เป็นสูตร (Expression)กรณีใช้กับ Tableกรณีใช้กับคอลัมน์เดียวกรณีใช้กับหลายคอลัมน์
    DISTINCTได้•ได้ Table แบบค่าที่ไม่ซ้ำกัน•ได้ค่าไม่ซ้ำกันในคอลัมน์นั้นทำไม่ได้
    VALUESไม่ได้•ค่า Duplicates ยังอยู่
    •ได้ Blank Row พิเศษ
    •ได้ค่าไม่ซ้ำกันในคอลัมน์นั้น
    •ได้ Blank Row
    พิเศษ
    ทำไม่ได้
    ALLไม่ได้•ค่า Duplicates ยังอยู่
    •ได้ Blank Row พิเศษ
    •เห็นทุกค่าเสมอ
    •ได้ค่าไม่ซ้ำกันในคอลัมน์นั้น
    •ได้ Blank Row พิเศษ
    •เห็นทุกค่าเสมอ
    •ได้ค่าไม่ซ้ำกันเมื่อมองผสมหลายคอลัมน์
    •ได้ Blank Row พิเศษ •เห็นทุกค่าเสมอ

    หมายเหตุ

    • Blank Row พิเศษ จะโผล่มากรณีที่ Relationship ไปเจอข้อมูลเป็น Key ในฝั่ง Many แต่ดันไม่มีใน Key ฝั่ง One (จะมีอธิบายในบทความด้านล่าง)
    • ALLSELECTED = เหมือน All แต่ปลดแค่ Filter ใน Visual นั้นๆ

    ไฟล์ประกอบ

    ใช้ไฟล์เดิมจากตอนก่อนหน้าได้เลยนะครับ หรือจะใช้อันนี้ก็ได้

    สร้าง New Table ใหม่

    เพื่อให้เห็นภาพมากขึ้น เดี๋ยวเราจะสร้างตารางใหม่ที่ชื่อว่า dStoresNew โดยจะเอาให้เหลือเฉพาะ StoreKey ตั้งแต่ 100 ขึ้นไปเท่านั้น (เพื่อตั้งใจสร้างสถานการณ์ให้เจอ Blank Row พิเศษครับ)

    ให้เรา NewTable ขึ้นมาดังนี้

    dStoresNew = FILTER(dStores,dStores[StoreKey]>100)
    Power BI ตอนที่ 12: DISTINCT, VALUES, ALL และผองเพื่อน 54

    เราจะได้ dStoresNew ที่มี 207 Rows นะครับ

    จากนั้นให้ผูก Relationship กับ Fact ที่เป็น fSales ด้วย

    Power BI ตอนที่ 12: DISTINCT, VALUES, ALL และผองเพื่อน 55

    เมื่อเตรียมข้อมูลพร้อมแล้ว มาดูรายละเอียดทีละตัวกันครับ

    DISTINCT

    “จะได้ item แบบไม่ซ้ำกัน”

    DISTINCT ( <ColumnNameOrTableExpr> )

    DISTINCT นั้นจะใช้กับ Table ก็ได้ หรือจะใช้กับ คอลัมน์เดียวก็ได้ จะได้ข้อมูลแบบไม่ซ้ำกัน

    Power BI ตอนที่ 12: DISTINCT, VALUES, ALL และผองเพื่อน 56

    *จะเห็นว่า DISTINCT ไม่มี Blank Row พิเศษโผล่ออกมาเหมือนกับ VALUES และ ALL ที่จะแสดงให้เห็นถัดไป

    และสามารถใส่เป็นสูตรได้ด้วย (รองรับ input แบบ Expression) ตัวอย่างเช่น

    DistinctTableExpression = DISTINCT(FILTER(dProduct,dProduct[BrandName]="fabrikam"))
    Power BI ตอนที่ 12: DISTINCT, VALUES, ALL และผองเพื่อน 57

    VALUES

    มี Blank row พิเศษ โดยถ้าใช้กับคอลัมน์จะได้ item แบบไม่ซ้ำกัน ถ้าใช้กับตารางจะไม่ได้เอาตัวซ้ำออกให้”

    VALUES ( <TableNameOrColumnName> )
    Power BI ตอนที่ 12: DISTINCT, VALUES, ALL และผองเพื่อน 58

    สังเกตว่าจะได้ Blank Row พิเศษติดมาด้วย ซึ่งจะเกิดขึ้นกรณีที่อีกฝั่งของตารางที่มันอ้างอิง เช่น fSales ดันมี StoreKey ที่ไม่มีในตารางนี้ด้วย (ที่เลข StoreKey <100)

    เจ้า Blank Row พิเศษนี้ถูกสร้างขึ้นมาเพื่อจับคู่กับ key ตัวที่เหลือในฝั่ง fSales ที่หาคู่ใน dStoresNew ไม่ได้นั่นเอง

    ดังนั้นสรุปได้ว่าเวลาใช้งานส่วนใหญ่ จะมองว่าใช้ VALUES กับคอลัมน์จะให้ผลคล้าย DISTINCT แต่ได้ Blank row พิเศษมาด้วย

    และ VALUES ไม่รองรับ Table/Column Expression นะครับ ให้ input เป็นสูตรไม่ได้เลย มันจะไม่ยอม

    ALL

    ALL เป็นตัวที่ผมอยากลงรายละเอียดมากที่สุด เพราะเราจะได้เจอมันค่อนข้างบ่อยเลย

    “การทำงานเหมือน VALUES แต่จะมองเห็นครบทุกค่าเสมอ นอกจากนี้ยังอ้างอิงคอลัมน์อันเดียว หรือ หลายๆ อันก็ได้ (แต่ต้องตารางเดียวกัน)”

    กรณีอ้างอิงทั้งตาราง

    “จะเห็นครบทุกค่า ถ้าใช้กับตารางจะไม่ได้เอาตัวซ้ำออก และก็มี Blank row พิเศษ

    ALL ( TableName )

    เช่น

    AllTable1 = ALL ( dStoresNew )
    Power BI ตอนที่ 12: DISTINCT, VALUES, ALL และผองเพื่อน 59

    Tips: สังเกตว่า การสร้าง New Table ถือว่าได้ตารางดิบอันใหม่มาเลย จะใช้ ALL ปลด Filter ที่เป็นตัวสร้าง dStoresNew ไม่ได้นะครับ ดังนั้น StoreKey ก็ยังคงมีเฉพาะตั้งแต่เลข 100 อยู่ดี

    กรณีอ้างอิงคอลัมน์ ไม่ว่าจะอันเดียวหรือหลายคอลัมน์

    “จะปลด Filter ออก และได้ combination ที่ไม่ซ้ำกัน แต่มี Blank row พิเศษ

    ALL ( TableName[ColName1])

    ใช้กับคอลัมน์จะได้ Blank Row พิเศษติดมาด้วยเช่นกัน

    All_1Col = ALL(dStoresNew[ContinentName])
    Power BI ตอนที่ 12: DISTINCT, VALUES, ALL และผองเพื่อน 60
    ALL ( TableName[ColName1], TableName[ColName2] , TableName[ColName3] )

    และถ้าเราใช้ ALL อ้างอิงที่ระดับคอลัมน์ เราจะได้ Combination ของคอลัมน์นั้นๆ แบบไม่ซ้ำกันด้วย แต่ก็จะได้ Blank Row พิเศษติดมาด้วยเช่นกัน

    AllMultiColumn = 
    ALL(dStoresNew[StoreType],dStoresNew[ContinentName],dStoresNew[RegionCountryName])
    Power BI ตอนที่ 12: DISTINCT, VALUES, ALL และผองเพื่อน 61

    ALLEXCEPT ก็คือเพื่อนของ ALL

    สมมติว่าตาราง MiniTable มีคอลัมน์ชื่อ A,B,C,D,E,F แล้วเราอยากจะปลด FILTER และเลือก combination ทุกคอลัมน์ยกเว้น E กับ F เราสามารถเขียนได้ 2 แบบ คือ

    =ALL(MiniTable[A],MiniTable[B],MiniTable[C],MiniTable[D])

    หรือจะเขียนกลับด้านกันว่าปลดทุกอย่าง ยกเว้น E กับ F ก็ได้ และนั่นคือที่มาของ ALLEXCEPT

    =ALLEXCEPT(MiniTable,MiniTable[E],MiniTable[F])

    จุดเด่นที่สุดของ ALL คือการปลด Filter

    สมมติว่าตารางที่ ALL อ้างอิงอยู่ มีการใส่ Filter เอาไว้ เช่น ใน Report

    จะเห็นว่า ผมสร้าง Measure ตัวใหม่ขึ้นมาคือ AllRevenue โดยเขียนสูตรเหมือน TotalRevenue ทุกอย่างเลย ยกเว้นใส่คำว่า ALL(fSales) แทน fSales เฉยๆ

    TotalRevenue = SUMX(fSales,fSales[SalesQuantity]*RELATED(dProduct[UnitPrice]))
    AllRevenue = SUMX(ALL(fSales),fSales[SalesQuantity]* RELATED(dProduct[UnitPrice]))

    ส่งผลให้ผลลัพธ์ที่ได้ ไม่ได้ถูก Filter จากตัวใดๆ เลย (ค่าเลยได้เท่ากับ Total แบบรวมทั้งหมด)

    Power BI ตอนที่ 12: DISTINCT, VALUES, ALL และผองเพื่อน 62

    แม้ว่าเรา Filter ปี 2012 เข้าไปด้วย AllRevenue ก็ยังคงไม่เปลี่ยน แต่ TotalRevenue ถูก Filter ได้

    Power BI ตอนที่ 12: DISTINCT, VALUES, ALL และผองเพื่อน 63

    หากอยากให้ปลด Filter ออกแค่ใน Visual นั้นๆ ให้ใช้ ALLSELECT แทน ALL ได้ครับ

    AllSelectRevenue = SUMX(ALLSELECTED(fSales),fSales[SalesQuantity]*RELATED(dProduct[UnitPrice]))
    Power BI ตอนที่ 12: DISTINCT, VALUES, ALL และผองเพื่อน 64

    พอคำนวณค่าเหล่านี้ได้ เราจะสร้าง Ratio คล้ายๆ ในบทความที่แล้วก็ได้ครับ แต่อันนี้จะได้เป็น %เทียบกับยอดรวม แต่จะมีความยืดหยุ่นกว่ากด % of Total ธรรมดาๆ เพราะเราสามารถปลด FILTER ออกแบบไหนก็ได้ตามที่ต้องการ ไม่ใช่แค่ปลดที่ตัวที่อยู่ใน Visual อย่างเดียวเหมือนเครื่องมือสำเร็จรูป

    และรูปแบบนึงที่อาจเกิดขึ้นได้ก็คือการปลด Filter ออก แล้ว Filter อีกตัวกลับเข้าไปใหม่

    ตัวอย่างการปลด FILTER ออก แล้ว FILTER อีกตัวกลับเข้าไปใหม่

    เช่น ถ้าเราอยากได้ยอด Revenue ของ Class Economy การ FILTER class=”economy” ลงไปเฉยๆ

    FilterEconomyRevenue = SUMX(FILTER(fSales,RELATED(dProduct[ClassName])="economy"), fSales[SalesQuantity]*RELATED(dProduct[UnitPrice]))
    Power BI ตอนที่ 12: DISTINCT, VALUES, ALL และผองเพื่อน 65

    ผลลัพธ์จะเท่ากับเป็นการ Filter เพิ่มลงไปแบบ AND ใน Filter Context เดิม ทำให้กรณีที่ Row Label มี Class เป็นตัวอื่น เช่น Deluxe จะหลายเป็น Deluxe และ Economy ซึ่งเป็นไปไม่ได้ จึงไม่เหลือผลลัพธ์จากการ Filter เลย

    ดังนั้นถ้าอยากจะได้ Economy Revenue ทุกช่อง จะต้องมีการใช้ ALL มาช่วยปลด Filter ออกไปซะดังนี้

    FilterEconomyRevenue = SUMX(FILTER(ALL(fSales),RELATED(dProduct[ClassName])="economy"), fSales[SalesQuantity]*RELATED(dProduct[UnitPrice]))
    Power BI ตอนที่ 12: DISTINCT, VALUES, ALL และผองเพื่อน 66

    เราถึงจะได้ผลลัพธ์ที่ปลด Filter ตาราง fSales ออกให้หมดก่อน จากนั้นค่อย FILTER ให้มี Class เป็น economy อีกทีนึง

    ลักษณะการปลด Filter ออกแล้วใส่ Filter ใหม่ลงไป เรียกได้อีกอย่างว่าเป็นการ “เปลี่ยน Filter Context” ซึ่งเป็นสิ่งที่ต้องทำบ่อยมากในการทำ Report Power BI เจ๋งๆ และมันคือหน้าที่หลักของสุดยอดฟังก์ชันที่ชื่อว่า CALCULATE ซึ่งจริงๆ ฝังความสามารถของ FILTER และ ALL อยู่ข้างในตัวมันเองอีกด้วย!!

    ตอนต่อไปเจอกับ CALCULATE

    CALCULATE ถือได้ว่าเป็นฟังก์ชันที่ลึกลับซับซ้อนและทรงพลังที่สุดอันนึงใน DAX เลยล่ะ ซึ่งเราจะได้เรียนเจ้า CALCULATE นี้ในบทถัดไปแล้วครับ ^^

    สารบัญ Series Power BI

    ใครสนใจอยากเรียนเป็นคลิปวีดีโอ ผมมี

  • Power BI ตอนที่ 11: เรียนรู้ DAX Table Function – FILTER

    Power BI ตอนที่ 11: เรียนรู้ DAX Table Function – FILTER

    ในซีรีส์ Power BI บทก่อนหน้านี้เราได้เรียนรู้จักสูตร DAX พื้นฐานกันไปแล้ว คราวนี้เรามารู้จักฟังก์ชันกลุ่ม Table Function เพิ่มเติม นั่นก็คือ FILTER, DISTINCT, VALUES, ALL ซึ่งจะช่วยให้เราสามารถเขียนสูตร DAX ที่ซับซ้อนได้มากขึ้นในอนาคตนั่นเอง

    แต่เพื่อไม่ให้มันเยอะเกินไป เดี๋ยวบทความนี้ผมจะพูดถึง FILTER แค่ตัวเดียวก่อน ส่วน ALL, DISTINCT, VALUES และผองเพื่อน จะพูดในตอนถัดไปนะครับ

    ไฟล์ประกอบ

    ใช้ไฟล์เดิมที่ทำมาจากตอนก่อนหน้าได้เลยนะครับ หรือจะใช้อันนี้ก็ได้

    Table Function คืออะไร?

    คำว่า Table Function ก็คือ ฟังก์ชันที่ให้ผลลัพธ์กลับมาเป็น Table หรือตารางนั่นเอง ต้องบอกว่าฟังก์ชันปกติที่เราคุ้นเคยกันก่อนหน้านี้ทุกอัน จะให้คำตอบออกมาเป็นค่าเดียว (เรียกว่า Scalar Value) ไม่ว่าจะเป็นประเภทตัวเลข ตัวหนังสือ logic ก็ตาม ก็จะมีค่าเดียวมาโดยตลอด

    แต่เจ้า Table Function ไม่ใช่แบบนั้น มันดันให้ผลลัพธ์กลับมาเป็นตารางเลย เรามาทำความรู้จักมันทีละตัวกันครับ

    FILTER

    ซึ่งตัวที่น่าจะเห็นหน้าตาเป็นตารางได้ชัดเจนที่สุดก็คือ เจ้า FILTER นี่แหละ เพราะมันจะให้ผลลัพธ์เป็นตารางที่ผ่านการคัดกรองจนเหลือสิ่งที่ต้องการแล้วนั่นเอง (คล้ายๆ กับ FILTER ซึ่งเป็นฟังก์ชันของ Excel 365 เลยเนอะ แต่มันเป็นคนละตัวกันนะครับ อันที่สอนในบทความนี้คือใน DAX)

    วิธีการใช้งานคือ

    FILTER ( <Table>, <FilterExpression> )

    โดยที่ <Table> ก็คือตาราง Original ซึ่งจะเป็นแค่การใส่ชื่อตารางธรรมดาๆ หรือ เป็น Table Function ตัวอื่นก็ยังได้

    ส่วน <FilterExpression> ก็คือเงื่อนไขในการคัดกรอง โดยมันจะต้องเขียนสูตรส่วนนี้ให้ได้ผลลัพธ์เป็น TRUE/FALSE เพื่อคัดกรองเอาเฉพาะตัวที่เป็น TRUE มาแสดง

    สมมติว่า ผมอยากจะ Filter ตาราง dProduct ด้วยสูตร ผมสามารถใช้ฟังก์ชัน FILTER นี้ได้เลย และเพื่อให้เห็นผลลัพธ์ชัดเจนที่สุด ผมจะใช้คำสั่ง New Table เพื่อให้มันออกมาเป็นตารางอีกอันนึงชัดๆ เลย

    ผมใส่สูตรว่า

    myTable = FILTER(dProduct,dProduct[UnitPrice]>200)

    แปลว่า ผมเอาตาราง dProduct มา Filter นะ โดยเงื่อนไขคือ dProduct[UnitPrice]>200 ซึ่งแปลว่า คอลัมน์ UnitPrice มีค่ามากกว่า 200 นั่นเอง

    ซึ่งผลลัพธ์ก็จะออกมาเป็น Table ที่มีจำนวนคอลัมน์เท่ากับ dProduct ทุกประการ แค่มีจำนวนแถวลดลง เพราะมีการคัดกรองตามเงื่อนไขใน <FilterExpression>

    dax filter

    ปล. Power BI มีอัปเดทหน้าตา UI ใหม่นิดหน่อยนะ (ให้เหมือน Ribbon ใน Excel มากขึ้น) หน้าตาเลยแปลกไปจากบทความก่อน

    การอ้างอิงคอลัมน์ที่จะ FILTER

    <FilterExpression> ของ FILTER เนี่ยปกติจะสามารถอ้างอิงคอลัมน์ได้เฉพาะจาก Field ที่อยู่ใน <Table> ที่อ้างถึงเท่านั้น แต่ถ้าอยากจะอ้างอิงข้ามตารางต้องใช้ RELATED มาช่วยนะครับ

    ตัวอย่างการใช้ RELATED ใน FILTER

    หากเราต้องการ Filter fSales ให้เหลือรายการเฉพาะที่มาจากช่องทาง online เท่านั้น แม้ว่าจะไม่มี StoreType ให้เลือกในตารางนี้ตรงๆ เราก็ใช้ RELATED ดึงมามาช่วยได้ครับ

    OnlinefSales = FILTER(fSales,RELATED(dStores[StoreType])="online")
    Power BI ตอนที่ 11: เรียนรู้ DAX Table Function - FILTER 67

    แล้วถ้าจะใส่เงื่อนไขมากกว่า 1 อย่างล่ะ?

    ถ้าสังเกตดูจะเห็นว่า input ที่เป็นเงื่อนไขของ FILTER นั้นมีแค่ตัวเดียว แปลว่าเราไม่สามารถคั่นด้วยเครื่องหมาย , ได้แบบ SUMIFS นะ แปลว่าเราจะต้องใช้เงื่อนไขแบบ AND OR มาช่วยแทนนั่นเอง

    เงื่อนไขแบบ AND

    สามารถใช้ฟังก์ชัน AND(เงื่อนไข1,เงื่อนไข2) ได้ แต่ก็จะได้แค่ 2 เงื่อนไขนี่แหละ

    myTable = FILTER(dProduct,
    AND(dProduct[UnitPrice]>200,dProduct[BrandName]="Litware"))

    แปลว่าเอาที่ Unit Price > 200 และ ฺBrandName เป็น Litware

    Power BI ตอนที่ 11: เรียนรู้ DAX Table Function - FILTER 68

    ถ้าจะใช้มากกว่านี้ให้ใช้เครื่องหมาย && มาช่วยแทน
    เช่น เงื่อนไข1 && เงื่อนไข2 && เงื่อนไข3

    myTable = FILTER(dProduct,
    dProduct[UnitPrice]>200 && dProduct[BrandName]="Litware" && dProduct[ClassName]="Deluxe")

    แปลว่าเอาที่ Unit Price > 200 และ ฺBrandName เป็น Litware และ ClassName เป็น Deluxe

    Power BI ตอนที่ 11: เรียนรู้ DAX Table Function - FILTER 69

    Tips : ถ้าอยากจะเขียน FILTER ซ้อนไปอีกชั้น เพื่อทำเงื่อนไขซ้อนกันแบบ AND ก็ย่อมได้นะ เพราะซ้อนไปเรื่อยๆ ก็แปลว่าต้องผ่านทุกเงื่อนไขนั่นแหละ จึงเป็น AND โดยปริยาย แต่ผมว่ามันอ่านยากเปล่าๆ อย่าทำเลย

    เงื่อนไขแบบ OR

    สามารถใช้ฟังก์ชัน OR(เงื่อนไข1,เงื่อนไข2) ได้ แต่ก็จะได้แค่ 2 เงื่อนไขเช่นกัน

    myTable = FILTER(dProduct,
    OR(dProduct[UnitPrice]>1000, dProduct[BrandName]="Litware"))

    แปลว่าเอาที่ Unit Price > 1000 หรือ BrandName เป็น Litware

    Power BI ตอนที่ 11: เรียนรู้ DAX Table Function - FILTER 70

    ถ้าจะใช้มากกว่านี้ให้ใช้เครื่อบหมาย || มาช่วยแทน
    เช่น เงื่อนไข1 || เงื่อนไข2 || เงื่อนไข3

    myTable = FILTER(dProduct,dProduct[UnitPrice]>1000 || dProduct[BrandName]="Litware" || dProduct[BrandName]="Proseware")

    แปลว่าเอาที่ Unit Price > 1000 หรือ BrandName เป็น Litware หรือ Proseware

    Power BI ตอนที่ 11: เรียนรู้ DAX Table Function - FILTER 71

    แต่ถ้ากรณีจะอ้างอิงค่าใน Field เดียวกันหลายๆ item อย่าง Litware กับ Proseware เราไม่ต้องใช้ OR ก็ได้ แต่หันมาใช้การอ้างอิงเงื่อนไขแบบ field IN {item1, item2} แทนจะง่ายกว่าการเขียนว่า field = item1 ||field = item2 เช่น

    myTable = FILTER(dProduct,dProduct[UnitPrice]>1000 || dProduct[BrandName] IN {"Litware" , "Proseware"} )

    จะได้ผลลัพธ์เหมือนกันทุกประการเลยครับ

    ตัวอย่างทั้งหมดที่ผ่านมายังเป็นการใช้งานพื้นฐานแบบให้เห็นภาพชัดๆ คือลองสร้าง New Table ขึ้นมาเลย แต่ในความเป็นจริงเราสามารถเอา FILTER ไปประกอบกับสูตรอื่นๆ ที่ต้องการ input เป็น Table ได้อีกนะครับ เช่น สร้าง Measure ยอดขายเฉพาะยอดแบบ Online เท่านั้น

    ตัวอย่างการใช้ FILTER ใน Measure

    ผมลองสร้าง New Measure ตัวใหม่ ที่สูตรเหมือน TotalRevenue ทุกอย่าง แค่ส่วนของ Table ใน SUMX เราใช้ FILTER สร้างตารางจำลองขึ้นมาให้เหลือเฉพาะ Transaction ที่มาจากช่องทาง Online เท่านั้น เพื่อที่ผลลัพธ์มันจะได้เอาจำนวน SalesQuantity * UnitPrice เฉพาะ Row ที่มาจากช่องทางออนไลน์ไง

    TotalRevenue = SUMX(fSales,fSales[SalesQuantity]*RELATED(dProduct[UnitPrice]))
    TotalOnlineRevenue = SUMX(FILTER(fSales,RELATED(dStores[StoreType])="Online"),
    fSales[SalesQuantity]*RELATED(dProduct[UnitPrice]))
    Power BI ตอนที่ 11: เรียนรู้ DAX Table Function - FILTER 72

    พอเรามี Measure 2 ตัวแล้ว เราก็สามารถสร้าง %Portion ที่น่าสนใจได้ เช่น

    Power BI ตอนที่ 11: เรียนรู้ DAX Table Function - FILTER 73

    และนี่ก็เป็นตัวอย่างการใช้ FILTER ครับ เดี๋ยวบทความหน้าเรามาต่อกันที่ ALL, DISTINCT, VALUES และผองเพื่อนกันครับ รับรองว่าลึกซึ้งขึ้นไปอีกครับ

    ทั้งหมดนี้ เพื่อปูทางไปสู่ฟังก์ชันที่ลึกซึ้งที่สุดอันนึงใน DAX นั่นก็คือ CALCULATE ครับ!!

    สารบัญ Series Power BI

    ใครสนใจอยากเรียนเป็นคลิปวีดีโอ ผมมี

  • เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365

    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365

    ผมเชื่อว่าหลายคนที่ใช้ Excel นั้นย่อมเคยต้องการให้ Excel ทำงานจัดการข้อมูลในลักษณะนี้ เช่น

    • คัดกรองข้อมูลให้เหลือสิ่งที่ต้องการเท่านั้น (Filter)
    • จัดเรียงข้องมูลใหม่ตามต้องการ (Sort)
    • ตัดข้อมูลซ้ำออกให้เหลือเฉพาะที่ไม่ซ้ำ (Remove Duplicates)

    ตั้งแต่อดีตที่ผ่านมา จริงๆ Excel ก็มีเครื่องมือที่พร้อมที่จะทำงานเรื่องเหล่านี้อยู่แล้ว ใน Ribbon เครื่องมือ Data เช่น Filter, Sort, Remove Duplicates และผมก็เชื่อว่ามันเป็นเครื่องมือที่หลายๆ คนน่าจะพอใช้กันเป็นอยู่แล้วล่ะ

    อย่างไรก็ตามเครื่องมือเหล่านั้นแม้จะใช้ง่าย แต่ก็มีจุดอ่อนสำคัญคือ มันเป็นเครื่องมือที่ต้องให้เรากดปุ่มสั่งใหม่ทุกครั้ง เช่น จะ Filter แบบไหน Sort ยังไง รวมถึง Remove Duplicates ข้อมูลชุดไหน แปลว่ามันยังต้องมี Step ที่ต้องการมนุษย์มา “ทำงาน Manual” บางอย่างอยู่

    ใน Excel ยุคใหม่ขึ้นมาหน่อย ก็ได้มีเครื่องมือ Power Query เข้ามาช่วยแก้ปัญหานี้ เพราะมันก็ Filter ข้อมูลได้ Sort ได้ Remove Duplicates ได้ (และทำอย่างอื่นได้อีกเยอะแยะ) และที่สำคัญคือ มันกด Refresh เพื่อทำซ้ำ Step ทุกอย่างที่กำหนดไว้ได้! อย่างไรก็ตาม มันก็ยังต้องมี Step การกด Refresh อีกทีนึงอยู่ดี (ยกเว้นใช้ VBA ช่วย)

    ดังนั้นถ้าหากเราต้องการความอัตโนมัติขั้นสุดยอด วิธีที่ทำได้ก็คงหนีไม่พ้น “การเขียนสูตร” ซึ่งบอกเลยว่าการเขียนสูตรเพื่อ Filter/Sort/Remove Duplicates นั้นเคยเป็นเรื่องที่ยากมากกกกกกกกกกๆๆๆๆๆ มาโดยตลอด (คิดดูว่าถ้าจะ Filter ข้อมูลจริงๆ มันก็คล้ายๆ จะต้อง VLOOKUP หรือ INDEX+MATCH นั่นแหละ และปกติสูตรพวกนี้ก็จะเจอแต่ตัวแรกอีก ยากจะตายกว่าจะเอามาครบทุกตัวได้)

    จนกระทั่งมีสูตรชุดใหม่เกิดขึ้นมา เป็นสูตรในกลุ่ม Dynamic Array ซึ่งเป็นความสามารถใหม่ของ Excel 365 ที่จริงๆ มีหลายตัว แต่ผมจะขอแนะนำให้รู้จักแค่ 3 ตัวก่อน นั่นคือ FILTER, SORT และ UNIQUE ครับ

    ** ใครใช้ Excel 365 แล้วยังไม่มี ฟังก์ชัน FILTER, SORT และ UNIQUE ให้ใช้ ลองเช็คดูนะครับว่าอัปเดทเป็น version ล่าสุดรึยัง? วิธีอัปเดทดูได้ที่นี่

    เรามาดูข้อมูลตัวอย่างกัน

    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 74

    โหลดข้อมูลตัวอย่างได้ที่นี่

    มาดูการทำงานทีละฟังก์ชันก่อนนะ

    ก่อนอื่นมาดูตัวที่เข้าใจง่ายก่อน นั่นคือ UNIQUE

    UNIQUE เอาไว้คัดมาเฉพาะตัวที่ไม่ซ้ำกัน

    วิธีใช้งานแบบง่ายที่สุดคือ

    =UNIQUE(rangeข้อมูล)

    ซึ่งง่ายมากๆๆๆๆ

    ถ้าไม่มีฟังก์ชัน UNIQUE เราต้องเขียนสูตรผสมฟังก์ชันต่างๆ ออกมายาวเป็นกิโล ที่ทั้งยาวและยาก คนทั่วไปอ่านไม่เข้าใจแน่นอน เช่น ในรูปนี้

    =IFERROR(INDEX($B$2:$B$15,MATCH(0,COUNTIFS($I$2:I2,$B$2:$B$15),0)),"")
    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 75

    แต่พอมี UNIQUE แล้ว เหลือแค่นี้ =UNIQUE(B2:B15) !!

    ผลลัพธ์จะได้ข้อมูลแบบไม่ซ้ำกันเลย แบบนี้ และผลลัพธ์จะงอกออกมาเท่ากับจำนวนข้อมูลด้วย

    ถ้ามีสินค้าเพิ่มขึ้นในข้อมูลดิบ เช่น ผมเพิ่มเจลล้างมือลงไป ผลลัพธ์ของ UNIQUE ก็จะเพิ่มมาทันที!!

    Dynamic Array กับการงอกผลลัพธ์แบบ Spill

    การที่ผลลัพธ์งอกอัตโนมัติแบบนี้ มีศัพท์เทคนิคเรียกว่า Spill นะครับ ซึ่งเป็น Concept ใหม่ของ Array Formula ใน Excel 365 ที่เรียกว่า “Dynamic Array” โดยที่สูตรจะอยู่ช่องซ้ายบนของพื้นที่ที่ Spill เท่านั้น (คล้ายๆ Merge Cell) ถ้าคลิ๊กที่ช่องอื่นสูตรจะเป็นสีเทา

    =UNIQUE(E2:E15)
    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 76

    โดยถ้าพื้นที่ที่จะงอกมีข้อมูลอื่นขวางอยู่มันจะขึ้น Spill Error ว่า #SPILL! แบบนี้

    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 77

    กลับมาดูเรื่อง UNIQUE ต่อกัน

    การใช้งานแบบเต็มความสามารถของ UNIQUE คือ

    =UNIQUE(array, [by_col] , [exactly_once] )
    • array คือ range ข้อมูลต้นฉบับ
    • [by_col] ถ้าเป็น TRUE คือจะคิด Unique by column คือจะกำจัดตัวซ้ำที่อยู่ในแถวเดียวกันออก (ซึ่งปกติค่านี้จะเป็น FALSE คือ ให้เอาที่ซ้ำกันในคอลัมน์เดียวกันออก) ซึ่งผมว่าแทบไม่ค่อยได้ใช้หรอก
    • ส่วน [exactly_once] ถ้าใส่เป็น TRUE คือจะคัดให้เหลือเฉพาะข้อมูลที่โผล่มาครั้งเดียวใน Data Source เท่านั้น อันนี้เดี๋ยวลองกับวันที่ให้ดู (ปกติอันนี้จะเป็น FALSE)
    =UNIQUE(B2:B15,FALSE,TRUE)
    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 78

    ผลลัพธ์ออกมาเป็น 4 หมื่นกว่าๆ เพราะยังไม่ได้ปรับ Number Format ดังนั้นให้ลากครอบแล้วปรับ Number Format ให้เป็น Date ซะ (เลือกพื้นที่เผื่อเอาลงมาเยอะๆก็ได้)

    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 79

    สังเกตว่าไม่มีวันที่ 1/2/2020 และ 7/2/2020 เพราะมันไม่ได้มีแค่ตัวเดียว

    SORT เอาไว้เรียงข้อมูลตามที่ต้องการ

    แบบง่ายสุดก็คือ

    =SORT(range ข้อมูล)

    เช่น

    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 80

    แต่การใช้งานแบบเต็มความสามารถ คือ

    =SORT(array, [sort_index], [sort_order], [by_col])
    • array คือ range ข้อมูลต้นฉบับ
    • [sort_index] คือ จะเรียงตามคอลัมน์ที่เท่าไหร่ (ปกติเรียงตามคอลัมน์แรก)
    • [sort_order] ถ้าเป็น 1 คือ น้อยไปมาก ส่วน -1 คือ มากไปน้อย (ปกติจะเป็น 1)
    • [by_col] คือ ถ้าเป็น TRUE คือจะเรียงตามแนวนอน (ปกติเป็น FALSE) อันนี้ไม่ค่อยได้ใช้อีกนั่นแหละ

    ตัวอย่างเช่น

    ถ้าผม Sort ทั้งพื้นที่เหลือง แต่ให้เรียงตามคอลัมน์ที่ 3 ของพื้นที่เหลือง (ก็คือ ลูกค้า) ก็จะได้ดังนี้

    =SORT(A2:D15,3,1)
    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 81

    FILTER เอาไว้คัดเลือกให้เหลือเฉพาะสิ่งที่ต้องการ

    =FILTER(array,include,[if_empty])
    • array คือ range ข้อมูลต้นฉบับที่จะนำมา Filter
    • include คือ range ของเงื่อนไขโดยจะเอาเฉพาะค่าที่เป็น TRUE มาแสดง (สามารถใส่ condition ใน Range ที่ไม่อยู่ใน array ได้)
    • [if_empty] คือ ถ้าไม่มีผลลัพธ์เหลือเลยจะให้ขึ้นว่าอะไร

    ตัวอย่างเช่น

    =FILTER(C2:E15,D2:D15="sales ค","ไม่มีข้อมูล")
    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 82

    array คือพื้นที่สีเหลือง

    include เขียนว่า D2:D15=”sales ค” ซึ่งจริงๆ ถ้า Highlight แล้วกด F9 ดูจะได้เป็นค่า TRUE/FALSE ดังนี้

    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 83

    เจ้าฟังก์ชัน FILTER นี่จะเอาเฉพาะรายการที่เป็น TRUE มาเท่านั้น ก็เลยได้แค่ item อันที่ 2 กับ 11 นั่นเอง

    ถ้าจะ Filter หลายเงื่อนไข เราต้องรู้จักว่า การเอาเงื่อนไขคูณกัน จะเป็นเงื่อนไขเป็น AND (TRUE * TRUE ได้ 1 นอกนั้นเป็น 0)

    เช่น ถ้าอยากได้เฉพาะรายการของ sales ก และ อาหาร เท่านั้น ก็เขียนได้ว่า

    =FILTER(C2:E15,(D2:D15="sales ก")*(E2:E15="อาหาร"))
    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 84

    ใช้ฟังก์ชันผสมผสานกัน

    ความโดดเด่นของวิธีการเขียนสูตรใน Excel เมื่อเทียบกับวิธีอื่นๆ คือเราสามารถใช้ฟังก์ชันหลายอันผสมกันได้ และฟังก์ชันขี้โกงเหล่านี้ก็ใช้ผสมกันได้แน่นอน

    ตัวอย่างเช่น ถ้าผมใช้ UNIQUE กับ SORT ซ้อนกันจะได้แบบนี้

    การเขียนฟังก์ชันซ้อนกันในสูตรเดียว

    การเขียน

    =SORT(UNIQUE(D2:D15))

    เป็นการเขียนฟังก์ชันซ้อนกันในสูตรเดียว เหมาะกับคนที่เขียนสูตรคล่องๆ แล้ว

    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 85

    การเขียนฟังก์ชันแยก Cell กัน แต่อ้างอิงข้อมูลที่ Spill

    อย่างไรก็ตามถ้าเราต้องการเขียน UNIQUE ก่อน แล้วค่อย SORT แยกออกมาต่างหาก ก็สามารถทำได้ โดยการอ้างอิงไปที่ช่องซ้ายบนของพื้นที่ Spill แล้วตามด้วยเครื่องหมาย# เพื่อให้ Excel เข้าใจว่าเป็นการอ้างอิงตัวที่ Spill ทั้งชุด ไม่ได้อ้างอิงแค่ Cell เดียว เช่น

    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 86

    เดี๋ยวลองผสมกัน 3 ตัวเลย

    ใส่ Filter เลือก sales ก ก่อน

    ที่ K8 =FILTER(E2:F15,D2:D15=K3)
    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 87

    จากนั้นใส่ Sort ให้เรียงจากน้อยไปมาก ตามชื่อสินค้า

    ที่ K8 =SORT(FILTER(E2:F15,D2:D15=K3))
    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 88

    Tips : ถ้ารู้สึกยังไม่ถูกใจ เพราะราคายังไม่เรียงด้วย แปลว่าต้อง Sort หลาย Step ซึ่งจริงๆใช้ฟังก์ชัน SORTBY จะง่ายกว่า แต่ผมยังไม่ได้สอน 555 ไม่เป็นไร ใช้ SORT ก็ทำได้แต่ต้องใส่ซ้อนกัน เช่น SORT index 2 ก่อน แล้วค่อย Sort index 1 ครอบทีหลังดังนี้

    ที่ K8 =SORT(SORT(FILTER(E2:F15,D2:D15=K3),2),1)
    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 89

    จากนั้นใส่ UNIQUE เพื่อกำจัดตัวซ้ำ

    ที่ K8 =UNIQUE(SORT(SORT(FILTER(E2:F15,D2:D15=K3),2),1))
    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 90

    ลองเปลี่ยน sales ก เป็นคนอื่นบ้าง เช่น sales ค

    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 91

    ตัวอย่างการพลิกแพลงสูตร

    ซึ่งหากเรามีความรู้เรื่องฟังก์ชันอื่นๆ ด้วย เราก็สามารถทำอะไรที่พลิกแพลงได้กว่านี้มาก

    ตัวอย่างการสร้าง Dropdown List ที่มี Item เพิ่มตามข้อมูลที่เปลี่ยนไป

    ให้เราเขียน Dynamic Array ทิ้งไว้ แล้วค่อยอ้างอิงเข้าไปใน Data Validation

    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 92

    หากอยากให้สามารถเห็นข้อมูลใหม่ที่อาจเพิ่มในอนาคตได้

    ก็ทำให้ตารางเป็น Table ซะสิ เพราะความสามารถที่เด่นที่สุดของ Table คือการขยายอาณาเขตตัวเองได้เวลามีข้อมูลเพิ่มด้านขวาหรือด้านล่าง

    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 93

    ตัวอย่าง เลียนแบบ Pivot Table แบบมีทั้ง Row และ Column

    เช่นสามารถได้ตารางที่ใกล้เคียง Pivot Table เลย โดยในนี้เพิ่มฟังก์ชัน TRANSPOSE ที่เอาไว้พลิกสลับแนวนอนเป็นแนวตั้ง และมีการใช้ SUMIFS มาช่วย โดยระบุ Criteria แบบ Array เป็นตัวที่ Spill

    ที่ M5 : =SORT(UNIQUE(C2:C15))
    ที่ N4 : =TRANSPOSE(SORT(UNIQUE(E2:E15)))
    ที่ N5 : =SUMIFS(H2:H15,C2:C15,M5#,E2:E15,N4#,D2:D15,M1)
    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 94

    ตัวอย่าง เลียนแบบ Pivot Table แบบมี row 2 ชั้น

    โดยเลือกมาบางคอลัมน์ด้วย CHOOSE ผสม Array Constant และหาผลสรุปด้วย SUMIFS ผสมกับเลือก Criteria บางส่วนของที่ Spill ด้วย INDEX

    เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365 95
    ที่ K5 : =SORT(FILTER(CHOOSE({1,2},C2:C15,E2:E15,H2:H15),D2:D15=K1))
    ที่ M5 : =SUMIFS(H2:H15,C2:C15,INDEX(K5#,0,1),E2:E15,INDEX(K5#,0,2),D2:D15,K1)

    สรุป

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

    และถ้าย้อนกลับไปตอนไม่มีฟังก์ชันพวกนี้ให้ใช้ สูตร Array Formula จะยากกว่านี้หลายสิบเท่า เผลอๆ ต้องเขียนสูตรยาวหลายบรรทัด กว่าจะได้คำตอบที่เทียบเท่ากับสูตร Dynamic Array บรรทัดเดียว

    ดังนั้นลองเลือกดว่าจะลองหัดใช้สูตรใหม่นี้หรือไม่ และถ้าจะใช้ ประเด็นที่ต้องพิจารณาคือ หากสิ่งไฟล์ไปให้คนอื่นที่มี Excel Version เก่า ก็จะเปิดไฟล์มาแล้ว Error นะ ดังนั้นระวังให้ดีด้วยนะครับ *o*

  • เลิกใช้ Merge Cell กันเถอะ (แล้วจะให้ทำยังไงแทน?)

    เลิกใช้ Merge Cell กันเถอะ (แล้วจะให้ทำยังไงแทน?)

    “มาเลิกใช้ Merge Cell กันเถอะ!” นี่คือความในใจที่อยากจะตะโกนบอกคนใช้ Excel ทุกคนเลย 555

    แต่ผมไม่ได้มาห้ามเฉยๆ นะ เพราะในบทความผมมีวิธีหลีกเลี่ยงที่พอจะช่วยลดปัญหาของ Merge Cell มาบอกด้วยล่ะ

    หากผมจะบอกว่า “การ Merge Cell คือต้นกำเนิดของความเลวร้ายทั้งปวงใน Excel” มันอาจจะดูแรงเกินไปนิด แต่มันก็ใกล้เคียงล่ะ มาดูกันว่าทำไม…

    ปัญหาของการ Merge Cell

    หากเรามีการใช้ Merge Cell ที่ตัวข้อมูลดิบที่เป็น Input จะพบว่ามันก่อให้เกิดปัญหามากมาย

    Merge Cell
    • Merge แบบหัวตาราง 2 ชั้น (กรอบชมพูในรูปบน)
      • ทำให้เลือก Sort/Filter หัวตารางลำบาก ต้องเลือกทั้งแถวที่สองแล้วกด Filter เอาถึงจะเลือกหัวตารางชั้นล่างได้ ซึ่งยุ่งยากมาก
        เลิกใช้ Merge Cell กันเถอะ (แล้วจะให้ทำยังไงแทน?) 96
      • เอาข้อมูลเข้าไปวิเคราะห์ใน Pivot Table ก็ไม่ได้อีก (เพราะถือว่ามีชื่อ Field ว่าง)
        เลิกใช้ Merge Cell กันเถอะ (แล้วจะให้ทำยังไงแทน?) 97
    • การ Merge ที่ Data ข้างใน (กรอบแดงในรูปบน) จะทำให้
      • ไม่สามารถ Sort/Filter ข้อมูลที่มีการ Merge Cell ได้เลิกใช้ Merge Cell กันเถอะ (แล้วจะให้ทำยังไงแทน?) 98
    • Copy Paste ข้อมูลลงบน Merge Cell โดยที่ขนาดไม่เท่าเดิมก็ไม่ได้
      เลิกใช้ Merge Cell กันเถอะ (แล้วจะให้ทำยังไงแทน?) 99
    • แถมยังเป็นการเว้นช่องว่างเอาไว้ในฐานที่มนุษย์เข้าใจแต่คอมพิวเตอร์ไม่เข้าใจ (Computer เข้าใจว่าข้อมูลอยู่ที่ช่องซ้ายบนเท่านั้น นอกนั้นเป็นช่องว่าง)
    • เลิกใช้ Merge Cell กันเถอะ (แล้วจะให้ทำยังไงแทน?) 100
    • การเขียนสูตรเพื่อเลือกข้อมูลช่องที่ถูก Merge แต่ไม่ใช่ช่องซ้ายบนก็ยากอีก

    ทำไมคนยังใช้ Merge Cell?

    จะเห็นว่าปัญหามากมายนั้นเกิดจากการใช้ Merge Cells แต่ทำไมคนถึงใช้มันอีกล่ะ??

    คำตอบที่ผมพบจากการสอบถามเพื่อนๆ ในเพจ สามารถสรุปเหตุผลได้สั้นๆ ก็คือ เป็น “เพราะมันสวยดี”

    ผมขอบอกเลยว่า ความงามที่ทำให้เกิดปัญหาตามมานั้น ย่อมไม่ใช่ความงามที่แท้ ดังนั้นผมขอแนะนำให้หลีกเลี่ยงการ Merge Cell ถ้าไม่จำเป็นจริงๆ

    ผมเชื่อว่า คนที่ใช้ Merge Cell ส่วนใหญ่ไม่รู้ด้วยว่ามันจะส่งผลให้มีปัญหาในอนาคตแค่ไหน เพราะอาจจะไม่ค่อยเข้าใจการใช้ Sort/Filter/Table/Pivot Table

    ทำไม Excel ถึงไม่ยอมให้เรา Sort/Filter/Pivot ข้อมูลที่ Merge?

    ต้องเข้าใจด้วยว่าการที่เรา Merge ข้อมูลมันไม่ได้กระจายไปทุกช่อง แต่มันอยู่ที่ช่องซ้ายบนสุดแค่ช่องเดียว ดังนั้นช่องอื่นจะถือว่าเป็นช่องว่างทั้งหมด พอเป็นแบบนั้น มันก็เลยไม่อยากให้เรา Filter ยังไงล่ะ เดี๋ยวเข้าใจผิด

    เวลาพูดว่าอย่า Merge Cell ที่ห้ามจริงๆ หมายถึงตัว Data Input ไม่ใช่ Report Output

    หลักการที่ถูกต้องคือ แยกข้อมูลส่วน Input กับ Output ออกจากกันซะ ส่วน Input ที่เป็นข้อมูลดิบ ให้ทำให้อยู่ในลักษณะ Database ให้มากที่สุด (แต่ถ้ากรอกไม่ไหวจริงๆ ก็ใช้ Power Query ช่วย Fill Down/Unpivot แปลงหน้าตาได้ ถ้าทำเป็น) ส่วน Output ถ้าอยากจะ Merge ก็แล้วแต่ ไม่มีใครว่า (ยกเว้นวันจะต้องไปเป็น input ของชาวบ้านอีกที)

    แปลว่า ถ้าเราจะ Merge เพื่อความสวยงาม ให้ทำที่ Output ซึ่งก็คือตัว Report ไม่ใช่ Input ที่เป็นแหล่งข้อมูลดิบ

    วิธีที่พอจะช่วยหลีกเลี่ยง Merge Cell (ถ้ายังอยากทำ)

    กรณีจะ Merge แนวนอน ให้ใช้ Center Across Selection แทน

    เทคนิคนี้เป็นตัวที่สามารถสร้างผลลัพธ์ที่หน้าตาจะเหมือนกับ Merge Cell มากๆ (แต่ใช้รวม cell ได้แต่แนวนอน ใช้รวมแนวตั้งไม่ได้) มันคือการจัด Format ให้กับข้อมูลในแนวนอน โดยให้ข้อความมาอยู่ตรงกลางของพื้นที่ที่เลือกได้

    ดังนั้นหากคุณต้องการจะ Merge Cell แค่แถวเดียว ให้เปลี่ยนมาใช้ Center Across Selection จะดีกว่ากันมากๆ เลย

    วิธีทำก็แค่เลือกข้อมูล แบบที่ยังไม่ต้องMerge

    เลิกใช้ Merge Cell กันเถอะ (แล้วจะให้ทำยังไงแทน?) 101

    จากนั้นก็คลิ๊กขวา Format Cell หรือกด Ctrl+1 ก็ได้

    จากนั้นเลือก Alignment -> Horizontal : Center Across Selection

    เลิกใช้ Merge Cell กันเถอะ (แล้วจะให้ทำยังไงแทน?) 102

    ผลที่ได้จะเหมือนกับการ Merge Cell เลย แต่ Cell ไม่ได้ Merge (เห็นมะว่ายังคลิ๊กเลือก cell แยกกันได้) ส่วนข้อมูลจริงจะยังคงอยู่ที่ช่องซ้ายสุดของพื้นที่ช่องเดียวเหมือนเดิม

    เลิกใช้ Merge Cell กันเถอะ (แล้วจะให้ทำยังไงแทน?) 103

    ดังนั้นสรุปว่าถ้าจะ Merge Cell แนวนอนจริงๆ ก็ให้ใช้ Center Across Selection แทนนะ แต่ถ้าเลือกได้จริงๆ ก็อย่าไปทำมันเลยทั้งคู่นั่นแหละ ให้พิมพ์ข้อมูลให้ครบทุกช่องดีกว่า เพราะอย่างที่บอกไปว่าการ Merge ข้อมูลมันไม่ได้อยู่ครบทุกช่อง ไอ้เจ้า Center Across Selection ก็มีข้อมูลอยู่แต่ช่องซ้ายสุดเหมือนกัน เดี๋ยวก็มีปัญหาอีก

    กรณีจะ Merge แนวตั้ง ให้พิมพ์ให้ครบทุกช่องเถอะ ไม่มีทางเลือก

    การ Merge แนวตั้ง ใช้ Center Across Selection ไม่ได้นะ และไม่น่าจะมีวิธีที่ดีไปกว่านี้แล้วล่ะ เสียใจด้วย

    กรณี Merge หัวตาราง พอมีทางช่วยได้

    กรณีที่เรามีหัวตาราง 2 ชั้น มันทำให้ใช้ PivotTable ไม่ได้โดยสิ้นเชิง ดังนั้นวิธีแก้ที่ดีที่สุดคือ ทำหัวตารางให้มีแค่ชั้นเดียวพอ

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

    และอย่าลืมทำลายข้อมูลที่ Merge อยู่ให้หมด (วิธีกำจัด Merge Cell ที่ง่ายที่สุดคือเลือกคลุมทั้งหมด แล้วกดปุ่ม Merge Cell อีกรอบ มันจะปลดออกหมดเลย) แล้วกรอกให้ครบทุกช่องซะ อย่าปล่อยว่างเลยและตัวสรุปรวมท้ายตารางให้ลบทิ้งไปก่อนทั้งบรรทัดเลย

    เลิกใช้ Merge Cell กันเถอะ (แล้วจะให้ทำยังไงแทน?) 104

    จากนั้น Copy Paste Value ซะแล้วแก้บางคอลัมน์ที่อ่านไม่รู้เรื่องให้ถูกต้อง (ตัวที่ Merge ทั้งหลาย)

    เลิกใช้ Merge Cell กันเถอะ (แล้วจะให้ทำยังไงแทน?) 105

    จากนั้นพอจะใช้งานจริง แล้วค่อยเลือกที่ช่อง C3 แล้วสั่ง Freeze Pane ซะแบบนี้

    เลิกใช้ Merge Cell กันเถอะ (แล้วจะให้ทำยังไงแทน?) 106

    พอ Scroll Mouse ลงมา ไอ้ส่วนหัวตารางสองชั้นสวยๆ ของเราก็จะยังอยู่

    เลิกใช้ Merge Cell กันเถอะ (แล้วจะให้ทำยังไงแทน?) 107

    แต่วิธีนี้เราจะได้ความสามารถของการ Sort/Filter กลับคือนมา และยังสามารถทำข้อมูลเป็น Table และใช้ PivotTable ได้ด้วย ทั้งนี้เพราะเราสร้างหัวตาราง 1 บรรทัดให้อยู่ติดกับตัวข้อมูลไว้แล้วนั่นเอง

    เลิกใช้ Merge Cell กันเถอะ (แล้วจะให้ทำยังไงแทน?) 108

    เอายังไงกับตัวสรุปรวมท้ายตาราง

    หากเราต้องการสรุปข้อมูลจริงๆ ควรจะใช้ Pivot Table ทำมากกว่าการมาเขียนสูตรเอาท้ายตาราง แต่ถ้าต้องการให้มีการสรุปข้อมูลอยู่ที่ท้ายตารางจริงๆ ผมแนะนำให้ใช้ความสามารถของ Table ครับ

    ก่อนอื่นให้เลือกข้อมูลช่องใดช่องหนึ่งแล้วกด Insert->Table หรือ Ctrl+T เพื่อแปลงข้อมูลเป็น Table ซะ ซึ่งตอนแรกมันจะยังไม่มีตัวสรุปท้ายตารางให้

    เลิกใช้ Merge Cell กันเถอะ (แล้วจะให้ทำยังไงแทน?) 109

    ถ้าอยากให้มีสรุปท้ายตาราง แค่ติ๊กเลือก Total Row ตามรูป ก็จะมีบรรทัดสรุปโผล่มา

    เลิกใช้ Merge Cell กันเถอะ (แล้วจะให้ทำยังไงแทน?) 110

    จากนั้นเราสามารถเลือกแต่ละคอลัมน์ได้ว่าจะให้สรุปด้วยวิธีไหน เช่น SUM COUNT AVERAGE MAX MIN

    เลิกใช้ Merge Cell กันเถอะ (แล้วจะให้ทำยังไงแทน?) 111

    เราได้ตารางที่หน้าตาไม่ได้แย่เลย มีหัวตาราง 2 ชั้นเหมือนเดิม มีบรรทัดสรุป แค่เนื้อในต้องพิมพ์ให้ครบทุกช่องเท่านั้นเอง เพื่อที่จะได้ Sort/Filter/Pivot ได้ตามปกติครับ

    เลิกใช้ Merge Cell กันเถอะ (แล้วจะให้ทำยังไงแทน?) 112

    และทั้งหมดนี้ก็คือเทคนิค ที่พอจะช่วยหลีกเลี่ยงการทำ Merge Cell ได้นะครับ ถ้าทำตามนี้รับรองว่าชีวิตดีขึ้นแน่นอน ^^

  • ฐานข้อมูลตำบล อำเภอ จังหวัด รหัสไปรษณีย์ ของประเทศไทย V3: ข้อมูลสมบูรณ์มากขึ้น

    ฐานข้อมูลตำบล อำเภอ จังหวัด รหัสไปรษณีย์ ของประเทศไทย V3: ข้อมูลสมบูรณ์มากขึ้น

    สืบเนื่องจากที่ผมได้พยายามทำ “ฐานข้อมูลส่วนกลาง” หรือที่ผมจะเรียกว่า “Common Database” ที่หลายๆ คนก็น่าจะอยากใช้เหมือนกัน เช่น ฐานข้อมูลตำบล อำเภอ จังหวัด ภาค ทั้งภาษาไทยและภาษาอังกฤษ เพื่อที่เพื่อนๆ จะได้ไม่ต้องมาเสียเวลาทำเหมือนผมอีก

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

    ที่บอกว่าครบถ้วน เพราะผมมีการ crosscheck หลาย source มากๆ ถ้าอันไหนไม่ตรงกันจะเปิด wiki ดูทีละเขต ทีละอำเภอเลย (รายละเอียดของ source อยู่ในไฟล์นะ) ที่ต้อง cross check เพราะไม่มีแหล่งใดถูกต้องสมบูรณ์เลย ขนาดว่าของราชบัณฑิตยังมีชื่อไทยผิดพลาดหลายจุด (ทำให้อังกฤษผิดตาม)

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

    เอาล่ะ ใครอยากโหลดฐานข้อมูลที่ผมทำไว้ก็เข้าไปได้ที่

    Download ฐานข้อมูลตำบล

    ฐานข้อมูลตำบล อำเภอ จังหวัด รหัสไปรษณีย์ ของประเทศไทย V3: ข้อมูลสมบูรณ์มากขึ้น 113

    Version History

    • 16/3/2020 version 1 – ไฟล์ตั้งต้น มีตำบล อำเภอ จังหวัด ทั้งไทยและอังกฤษ
    • 17/3/2020 version 2 – เพิ่มเรื่องรหัสไปรษณีย์ / แก้ชื่อภาษาอังกฤษของ ต.โคกกะเทียม เป็น Khok Kathiam
    • 7/11/2021 version 3 – แก้ข้อมูลชื่อตำบลภาษาอังกฤษของอุบลราชธานีเลื่อน / แก้ชื่อ eng สมุทรปราการ กับ พังงา ตาม ISO 3166-2:TH แก้ชื่อ โพนพิสัย, กัลยาณิวัฒนา / แก้ district id เวียงเก่าเป็น 4029 / แก้ post code เฝ้าไร่

    ปล. เพื่อนๆ สามารถเอาข้อมูลนี้ไปใช้ได้เลย ไม่ต้องขออนุญาตผมนะครับ

    ปล. 2แน่นอนว่าฐานข้อมูลที่ผมทำมันไม่ใช่ database official อะไรทั้งสิ้น ดังนี้ใครเจอที่ผิดช่วยแจ้งที่ inbox เพจ เทพเอ็กเซลด้วย https://www.facebook.com/thepexcel/

    ปล. 3 พวกข้อมูลอื่นๆ ที่มีหลายคนขอมากันเยอะๆ เช่น Latitude Longitude จริงๆ ก็มีแล้วล่ะ แต่ยังไม่ค่อยสมบูรณ์ ก็เลยขอเวลาจัดการข้อมูลให้ดีกว่านี้ก่อนค่อยเอามาปล่อยต่ออีกทีนะครับ

  • สูตรสำเร็จรูปสำหรับสร้าง Date Table ด้วย DAX และ Power Query M Code

    สูตรสำเร็จรูปสำหรับสร้าง Date Table ด้วย DAX และ Power Query M Code

    จากที่ผมได้เคยอธิบายไปว่า Date Table มีความสำคัญต่อการทำ Data Model เป็นอย่างยิ่ง โดยเฉพาะการใช้ฟังก์ชัน Date Intelligence ยิ่งจำเป็นต้องใช้ Date Table เลยล่ะ

    แปลว่า Data Model ของทุกคนควรมี Date Table ซึ่งกลายเป็นเรื่องที่ทุกๆ คนต้องทำเหมือนๆ กันหมด

    ดังนั้นจะดีกว่ามั้ย ถ้าเราสามารถมีสูตรสำเร็จรูปอะไรซักอย่าง ที่สามารถ Copy Paste ไปใช้สร้าง Date Table ได้เลย? และนั่นคือที่มาของบทความนี้ครับ

    ทีนี้การสร้าง Date Table นั้นทำได้ 2 วิธี คือใช้ DAX กับใช้ M Code ของ Power Query เรามาดูแต่ละวิธีกันครับ

    สร้าง Date Table ด้วย DAX

    แค่กด New Table ใน Power BI แล้วใส่ code นี้ลงไป

    dDateTable = 
    VAR MyCalendar=CALENDARAUTO()
    
    RETURN
    
    ADDCOLUMNS (MyCalendar,
    "Year",YEAR([Date]),
    "Quarter","Q" & QUARTER([Date]),
    "Month",MONTH([Date]),
    "Day",DAY([Date]),
    "MonthName",FORMAT([Date],"mmmm"),
    "YearMonth",FORMAT([Date],"yyyy-mm"),
    "YearMonthName",FORMAT([Date],"yyyy-mmm"),
    "WeekDayNum",WEEKDAY([Date],2),
    "WeekDayName",FORMAT([Date],"dddd"),
    "DateText",FORMAT([Date],"yyyy-mm-dd"),
    "Start of Month",EOMONTH([Date],-1)+1,
    "End of Month",EOMONTH([Date],0)
    )

    โดยที่ตาราง fSales มีข้อมูลรายการวันที่สั่งซื้อสินค้าอยู่ในคอลัมน์ OrderDate

    ดังนั้นให้เปลี่ยนคอลัมน์วันที่ ที่จะใช้อ้างอิงได้จาก fSales[OrderDate] เป็นวันที่ใน Table ของคุณจริงๆ ได้เลย

    Tips: ผมมีการ comment ใส่ startYear และ endYear อีก 2 แบบไว้ (ถ้าจะใช้ก็เอา — ข้างหน้าออกเพื่อ uncomment)

    • แบบทางเลือก1 เอาไว้พิมพ์ปีที่ต้องการเริ่มและจบเอาเอง โดยที่ไม่ขึ้นกับ Field Data จริง
    • แบบทางเลือก2 (ที่ยาวๆ) ซึ่งไว้เทียบ Field วันที่กรณีมีมากกว่า 1 Field ด้วย

    แค่นี้ก็จะได้ Date Table มาใช้งานแล้วล่ะ

    Date Table

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

    สูตรสำเร็จรูปสำหรับสร้าง Date Table ด้วย DAX และ Power Query M Code 114
    FirstDateofMonth = STARTOFMONTH(dDate[Date])
    LastDateofMonth = ENDOFMONTH(dDate[Date])
    สูตรสำเร็จรูปสำหรับสร้าง Date Table ด้วย DAX และ Power Query M Code 115
    NumDaysinMonth = DATEDIFF(dDate[FirstDateofMonth],dDate[LastDateofMonth],DAY)+1

    หรือจะใช้ว่า

    NumDaysinMonth = INT(dDate[LastDateofMonth]-dDate[FirstDateofMonth]+1)

    ก็ได้

    สร้าง Date Table ด้วย Power Query M Code

    ให้เราสร้าง Blank Query (กด Get Data -> Blank Query) ขึ้นมาและใส่ Code นี้ลงไปใน Advanced Editor (กด View->Advanced Editor)

    Edit : 23/3/2021 แก้ไข DayCount อันเดิมใส่วันขาดไป 1 วัน

    (StartDate as date, EndDate as date) as table =>
    let
    displayRegion="en-GB",
    //displayRegion="th-TH",
    //StartDate=#date(2017, 1, 1),
    //EndDate=#date(2019,12,31),
    DayCount = Duration.Days(Duration.From(EndDate - StartDate))+1,
    Source = List.Dates(StartDate,DayCount,#duration(1,0,0,0)),
    #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Renamed Columns" = Table.RenameColumns(#"Converted to Table",{{"Column1", "Date"}}),
        #"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"Date", type date}}),
    #"Inserted Year" = Table.AddColumn(#"Changed Type", "Year", each Date.Year([Date]), Int64.Type),
    #"Inserted Quarter" = Table.AddColumn(#"Inserted Year", "Quarter", each "Q"& Text.From(Date.QuarterOfYear([Date])), type text),
    #"Inserted Month" = Table.AddColumn(#"Inserted Quarter", "Month", each Date.Month([Date]), Int64.Type),
    #"Inserted Month Name" = Table.AddColumn(#"Inserted Month", "Month Name", each Date.ToText([Date],"MMMM",displayRegion), type text),
    #"Inserted Day" = Table.AddColumn(#"Inserted Month Name", "Day", each Date.Day([Date]), Int64.Type),
    #"Inserted Day of Week" = Table.AddColumn(#"Inserted Day", "Day of Week", each Date.DayOfWeek([Date],1)+1, Int64.Type),
    #"Added YearMonthNum" = Table.AddColumn(#"Inserted Day of Week", "YearMonthNum", each Date.ToText([Date],"yyyyMM",displayRegion)),
    #"Added YearMonthText" = Table.AddColumn(#"Added YearMonthNum", "YearMonthText", each Date.ToText([Date],"yyyy-MMM",displayRegion))
    in
        #"Added YearMonthText"

    Tips: สังเกตว่าใน code มีการระบุรูปแบบ region ได้ ซึ่งผมใส่เป็น displayRegion=”en-GB” ไว้ ซึ่งจะเป็นภาษาอังกฤษครับ ถ้าจะให้เป็นภาษาไทยสามารถ uncomment // เปลี่ยน displayRegion=”th-TH” ได้นะครับ

    แล้วตั้งชื่อ Query ตามต้องการ เช่น CreateDateTable

    สูตรสำเร็จรูปสำหรับสร้าง Date Table ด้วย DAX และ Power Query M Code 116

    ผลลัพธ์ออกมาจะเป็น Function Query ให้เราใส่ Parameter วันเริ่มกับวันจบ (กดรูปปฏิทินได้นะ)

    ถ้าใส่แล้วกด invoke จะได้ตารางออกมาดังนี้

    สูตรสำเร็จรูปสำหรับสร้าง Date Table ด้วย DAX และ Power Query M Code 117

    แปลว่าถ้าอยากให้ตารางนี้ Dynamic ได้จะต้องไปแก้สูตรจาก

    = CreateDateTable(#date(2018, 1, 1), #date(2020, 12, 31))

    ให้เป็น

    = CreateDateTable(วันเริ่มต้น, วันสิ้นสุด)

    โดยอาจ Link สูตรวันเริ่มต้นจากการไป Date Start of Year ของซัก Field วันที่นึง เช่น

    วันเริ่มต้น= 
    Date.StartOfYear(List.Min(fSales[OrderDate]))
    วันสิ้นสุด=
    Date.EndOfYear(List.Max(fSales[OrderDate]))

    โดยที่ตาราง fSales มีข้อมูลรายการวันที่สั่งซื้อสินค้าอยู่

    สูตรสำเร็จรูปสำหรับสร้าง Date Table ด้วย DAX และ Power Query M Code 118

    แค่นี้เราก็จะได้ Date Table มาใช้ และยังคง Add อะไรเพิ่มได้อีกเช่นกัน โดยคลิกที่คอลัมน์ Date และไปที่ Add Column –> Date

    สูตรสำเร็จรูปสำหรับสร้าง Date Table ด้วย DAX และ Power Query M Code 119

    เช่น ผมจะใส่จำนวนวันในเดือน ก็กดปุ่มได้เลยแบบชิลๆ ไม่ต้องใส่สูตรอะไรทั้งนั้น

    สูตรสำเร็จรูปสำหรับสร้าง Date Table ด้วย DAX และ Power Query M Code 120
    สูตรสำเร็จรูปสำหรับสร้าง Date Table ด้วย DAX และ Power Query M Code 121

    เท่านี้เราก็สามารถสร้าง Date Table ได้ทั้ง 2 วิธีแล้ว และก็ยังเพิ่มคอลัมน์ได้ตามที่ต้องการด้วย

    ว่าแต่เพื่อนๆ ชอบแบบไหนมากกว่ากันครับ ^^

  • วิธีรวมไฟล์ใน Folder แบบไม่มีปัญหาเรื่องชื่อคอลัมน์ใน Power Query

    วิธีรวมไฟล์ใน Folder แบบไม่มีปัญหาเรื่องชื่อคอลัมน์ใน Power Query

    ปกติเวลาเราสั่งให้ Power Query รวมทุกไฟล์ใน Folder เดียวกัน แม้มันจะเอาข้อมูลรวมกันได้ แต่ก็อาจจะมีปัญหาเรื่องชื่อคอลัมน์ได้ในอนาคต

    สาเหตุเพราะ มันมีการระบุชื่อคอลัมน์ที่แตกออกมาอย่างชัดเจนในสูตร M Code ทำให้ หากในอนาคตมีคอลัมน์เพิ่มขึ้นหรือลดลง ก็จะมีปัญหาทันที (อย่างเช่นที่ผมบอกไว้ในหนังสือ Excel Power Up ว่า เมื่อไหร่ก็ตามที่มีการระบุชื่อคอลัมน์ในสูตร M Code นั้น จะอันตรายต่อการ Refresh ทันที)

    ลองทำดู

    โหลดไฟล์ประกอบได้ที่นี่

    ตัวอย่างเช่น ผมสั่งรวมข้อมูลจาก Folder ที่ชื่อ MyFolder และสร้าง Custom Column ดังนี้ เพื่อดึงข้อมูลจาก Excel ด้วยสูตรว่า

    =Excel.Workbook([Content],true)
    วิธีรวมไฟล์ใน Folder แบบไม่มีปัญหาเรื่องชื่อคอลัมน์ใน Power Query 122

    ผมแตกคอลัมน์ Custom ออกมาจะได้ดังนี้

    วิธีรวมไฟล์ใน Folder แบบไม่มีปัญหาเรื่องชื่อคอลัมน์ใน Power Query 123

    เดี๋ยวผมลบคอลัมน์ที่ไม่ใช้ทิ้งก่อน โดยจะเก็บแค่ ชื่อไฟล์ ชื่อ Item และ Data ไว้ โดยเลือกที่จะเอา แล้วสั่ง Remove Other Columns ซะ

    วิธีรวมไฟล์ใน Folder แบบไม่มีปัญหาเรื่องชื่อคอลัมน์ใน Power Query 124

    ปัญหาเรื่องชื่อคอลัมน์ เกิดขึ้นตอน Expand Data

    พอเรากด Expand Data ออกมา จะพบว่าสูตรที่ได้มีการระบุชื่อคอลัมน์ออกมาโต้งๆ เลย ว่า

    = Table.ExpandTableColumn(#"Removed Other Columns", "Data", {"วันที่", "ลูกค้า", "สินค้า", "ราคาต่อชิ้น", "จำนวนชิ้น", "วิธีการชำระเงิน"}, {"วันที่", "ลูกค้า", "สินค้า", "ราคาต่อชิ้น", "จำนวนชิ้น", "วิธีการชำระเงิน"})
    วิธีรวมไฟล์ใน Folder แบบไม่มีปัญหาเรื่องชื่อคอลัมน์ใน Power Query 125

    ถ้าเป็นแบบนี้ หากในข้อมูลต้นฉบับบางคอลัมน์หายไป หรือมีคอลัมน์เพิ่มเข้ามา จะมีปัญหาทันที!!

    ลองเพิ่ม/ลดคอลัมน์ดู

    จะพบว่าถ้าเพิ่มคอลัมน์ เช่น ยอดขาย มันจะไม่ถูดดึงมาด้วย (เพราะสูตรไม่ได้ระบุคอลัมน์นั้น)

    ถ้าลบคอลัมน์ซักอันนึง เช่น ผมเอาวิธีการชำระเงินออกออกจากทุกไฟล์ มันก็จะยังมีคอลัมน์ค้างอยู่เป็น null อย่างงั้นเลย (เพราะสูตรมีการระบุคอลัมน์นั้น)

    วิธีรวมไฟล์ใน Folder แบบไม่มีปัญหาเรื่องชื่อคอลัมน์ใน Power Query 126

    ถ้าปล่อยให้เป็นแบบนี้ การอัปเดทข้อมูลจะยากเกินไป

    แก้ปัญหาโดยแก้ M Code เล็กน้อย

    เราสามารถทำให้ชื่อ Column มีความ Dynamic ยืดได้หนดได้ โดยต้องแก้บางส่วนของ Code เดิมอันนี้

    = Table.ExpandTableColumn(#"Removed Other Columns", "Data", {"วันที่", "ลูกค้า", "สินค้า", "ราคาต่อชิ้น", "จำนวนชิ้น", "วิธีการชำระเงิน"}, {"วันที่", "ลูกค้า", "สินค้า", "ราคาต่อชิ้น", "จำนวนชิ้น", "วิธีการชำระเงิน"})

    จะเห็นว่า สีแดง มันคือ List ของชื่อคอลัมน์ทั้งหมด

    = Table.ExpandTableColumn(#"Removed Other Columns", "Data", List ของชื่อคอลัมน์)

    ซึ่ง List ของชื่อคอลัมน์เกิดจากการรวมชื่อคอลัมน์ทุก Table ดังนี้

    List.Union(List.Transform(#"Removed Other Columns"[Data],each Table.ColumnNames(_)))

    หลักการคือ เราจะใช้สูตร List.Transform โดยใช้ Table.ColumnNames(_) กับทุกๆ Table เพื่อให้แต่ละ Table คืนค่ามาเป็น List ของหัวตารางใน Table นั้นๆ จากนั้นใช้ List.Union มารวม item ทุกตัวเข้าด้วยกัน

    ใครอยากรู้ว่าทำไมสูตรนี้ถึงได้ผล สามารถอ่านได้ที่นี่ https://www.thepexcel.com/m-code-power-query-03-list/

    สรุปแล้วเราจะแก้สูตรเป็นดังนี้

    = Table.ExpandTableColumn(#"Removed Other Columns", "Data", List.Union(List.Transform(#"Removed Other Columns"[Data],each Table.ColumnNames(_))))

    เราก็จะได้ Column ที่ Expand ได้แบบ Dynamic สุดๆ เจ๋งป่ะ!

    วิธีรวมไฟล์ใน Folder แบบไม่มีปัญหาเรื่องชื่อคอลัมน์ใน Power Query 127

    ผมมั่นใจว่าถ้าเพื่อนๆ ใช้วิธีที่ผมบอกนี้ ตอนอัปเดทข้อมูลชีวิตจะง่ายขึ้นเยอะเลยครับ

    สุดท้าย อย่าเผลอไปกด Auto Detect Data Type นะครับ เดี๋ยวมันก็จะระบุชื่อคอลัมน์อีก ให้ทำเฉพาะคอลัมน์ที่จำเป็นเท่านั้น เช่น ตัวเลข วันที่ เวลา เป็นต้น

  • การใช้ Power Query จัดการข้อมูลที่มีหัวตาราง 2 ชั้น

    การใช้ Power Query จัดการข้อมูลที่มีหัวตาราง 2 ชั้น

    ปัญหาข้อมูลเน่าแบบ classic อันนึงเลยก็คือ ได้ข้อมูลเชิง Report มา และดันใส่หัวตาราง 2 ชั้นมาด้วย ทำให้ใช้ Unpivot ตรงๆ ไม่ได้

    คราวนี้จะทำยังไงดี มาดูกันครับ

    Download ข้อมูลที่มีหัวตาราง 2 ชั้นได้ที่เว็บสำนักงานสถิติแห่งชาติ

    จำนวนนักเรียน นิสิต นักศึกษาในระบบโรงเรียน ในสถานศึกษาของรัฐบาลและเอกชน จำแนกตามระดับการศึกษา และชั้น ปีการศึกษา 2556 – 2560

    หรือ http://statbbi.nso.go.th/staticreport/Page/sector/TH/report/sector_03_3_TH_.xlsx

    หลักๆ การจัดการข้อมูลใน Power Query จะมีแนวทางดังนี้

    ข้อมูลอยู่ในรูปแบบ Report ยังไม่ใช่ข้อมูลเชิง Database

    • ติดข้อมูลอื่นที่ไม่เกี่ยวมา เช่น header/footer -> filter, remove col, remove top/bottom rows
    • ข้อมูลเว้นว่างแบบละไว้ในฐานที่เข้าใจ -> fill down
    • ข้อมูล error -> replace error
    • ข้อมูลมีตัว Subtotal ติดมาด้วย -> หาทาง filter ออก
    • คอลัมน์เดียวกันปนมาหลายเรื่อง -> conditional column -> หาทาง filter ออก
    • หัวตาราง crosstab เชิง Report (เรื่องเดียวมีหลายคอลัมน์) -> Unpivot
    • หัวตาราง 2 ชั้น -> Transpose -> Fill Down -> Merge -> Unpivot

    ข้อมูลมีหลายตาราง

    • ข้อมูลแบบเดียวกัน เลยอยากเอามาต่อแถวกัน เช่น เป็นคนละช่วงเวลา คนละสินค้า -> Append
    • เป็นข้อมูลที่เกี่ยวข้องกัน อยากเอามาต่อคอลัมน์กัน เช่น ตารางจำนวนประชากรรายจังหวัด vs จำนวนอาชญากรรมรายจังหวัด -> Merge / Data Model

    เอาล่ะ มาเริ่มกันเลย

    ผมทำเป็นคลิปไว้แล้ว ลองเปิดดูได้เลยนะครับ

  • เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query

    หากคุณกำลังเจอข้อมูลเน่าเฟะ อย่าเพิ่งสิ้นหวัง…

    ทำอย่างไรเมื่อเจอข้อมูลที่อยู่ในรูปแบบที่แย่และไม่ ok เอาซะเลย และดันมีความจำเป็นต้องแก้ด้วย Power Query ซะด้วยสิ

    ในบทความนี้เราจะมาเผชิญความเน่าเฟะไปด้วยกันครับ

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

    ข้อมูลเน่าเฟะที่ได้มา

    สมมติว่าเราได้ข้อมูลหุ้นในตลาด SET100 ทุกตัวหน้าตาแบบนี้มา ซึ่งผมใช้ Python ดึงมารวมกันแบบไม่ได้ Clean ดีๆ ตั้งแต่แรก (จะได้มาฝึกทำใน Power Query ไง 555)

    ซึ่งดาวน์โหลดไฟล์ได้ที่นี่ (Google Drive / GitHub)

    ความยาก1 มี Topic แทรกอยู่ระหว่างบรรทัดอยู่เป็นระยะๆ เช่น ทรัพย์สินรวม หนี้สินรวม

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 128

    ความยาก2 จำนวนตัวเลขต่อ 1 Topic มี 4 ตัวบ้าง 5 ตัวบ้าง ไม่แน่นอน
    ซึ่งความเป็นจริงคือข้อมูลย้อนหลังจนถึงปีปัจจุบัน Y-4, Y-3, Y-2, Y-1, Y0 ซึ่งบาง Topic มี 4 บาง Topic มี 5

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 129

    หน้าตาผลลัพธ์ที่ต้องการ

    ผลลัพธ์ที่อยากได้ เราอยากเอา Topic ทั้งหมดขึ้นเป็นหัวตารางไล่ไปทางด้านขวา และหุ้นตัวนึง 1 บรรทัดคือข้อมูล 1 ปี ดังนั้นถ้ามีทั้งหมด 5 ปี หุ้นตัวนึงจะมี 5 บรรทัด

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 130

    เริ่มกำจัดความเน่าเฟะ

    สร้าง Topic แยกออกมาให้ได้

    หลังจากสั่ง Get Data from Table/Range เพื่อเอาข้อมูลเข้าสู่ Power Query

    ก่อนอื่น เราต้องคิดว่า ถ้าเราอยากเอา Topic ไปทำเป็นหัวตาราง เราต้องสั่ง Pivot เอา Topic ขึ้นไป

    และการจะทำ Pivot ได้ ก็ต้องมีคอลัมน์ Topic ขึ้นมาโดยเฉพาะซะก่อน โดย Topic จะต้องถมค่าแบบนี้ให้ได้

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 131

    การจะถมค่าได้ เราต้องเอาหัว Topic แต่ละบรรทัดมาให้ได้ก่อน แล้วค่อย Fill Down ลงมา

    แล้วการจะได้หัว Topic มาเราก็ต้องรู้ให้ได้ว่าอันไหนคือหัว Topic อันไหนไม่ใช่

    จากที่ลองไล่ดูแล้ว การจะได้หัว Topic มา น่าจะต้องดูว่าข้อมูลเป็นข้อความรึเปล่า? ถ้าเป็นข้อความน่าจะเป็นหัว Topic

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

    ดังนั้นเราจะสั่ง Duplicate Column Data ออกมาอันนึงก่อน โดยคลิ๊กขวาที่คอลัมน์ Data แล้ว Duplicate Column จากนั้นสั่งแปลงเป็น Decimal Number ซะ

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 132

    จะพบว่าอันไหนพอจะแปลงเป็นตัวเลขได้ มันก็จัดให้เรียบร้อย อะไรที่ทำไม่ได้ก็ค้างเป็น Error

    ถ้าไล่ดูจะเห็นว่ายังมีประเด็นค้างอยู่อีก 2 ตัว คือ วันที่ กับค่า N/A

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 133

    เนื่องจากค่า N/A ยังไงก็ใช้ไม่ได้ ดังนั้นผมจะย้อน Step กลับไปก่อนจะ Duplicated Column แล้วสั่ง Replace Value (Insert Step) แล้วทำให้ N/A ให้เป็น null ซะ

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 134

    จากนั้นสั่ง Duplicate คอลัมน์ Data ออกมา เพื่อจัดการแปลงเป็นวันที่ซะ โดยใช้ Using Locale เป็น Thai (เพราะวันที่ที่เป็น text นั้นเป็นรูปแบบไทย)

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 135

    จะเห็นว่ามันออกมาเป็นวันที่ได้แล้ว แต่ว่าดันติดวันที่เกินๆ มาด้วย (ด้วยความฉลาดที่มากเกินไป ดันมองว่าทศนิยมบางตัวเป็นวันที่ได้ 555)

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 136

    เพื่อให้จัดการค่าง่ายขึ้นผมจะ Replace Error ใน Data-Copy และ Data-Copy.1 ด้วย null ทั้งหมด

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 137

    จากนั้นผมสั่ง Conditional Column เพื่อให้เลือกเอา Data ให้เหลือคอลัมน์เดียว นั่นคือ ได้ Data Copy ว่าง ให้เอาจาก Data-Copy.1 แทน

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 138

    จะได้แบบนี้ ซึ่งดีขึ้นมาก

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 139

    ดังนั้นบรรทัดที่ยังเป็น null ในคอลัมน์ NumData จะตรงกับ Topic ที่อยากได้ในคอลัมน์ Data พอดีเลย ดังนั้นเราจะใช้ Conditional Column ได้

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 140

    สุดท้ายจะได้แบบนี้

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 141

    คราวนี้เราก็ Fill Down คอลัมน์ Topic ได้

    จากนั้นเลือกเก็บไว้แค่คอลัมน์ Symbol, Topic และ NumData พอ ด้วยการคลิ๊กเลือก 3 คอลัมน์ที่ต้องการแล้ว Remove Other Column

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 142

    จากนั้นเราสามารถ Filter เอาบรรทัด null ใน NumData ทิ้งได้เลย

    แต่จากการตรวจดู Data พบว่า บาง Topic ดันมี 4 ตัวบ้าง 5 ตัวบ้าง (ซึ่งไม่แปลก เพราะบางค่าของปีล่าสุดจะยังไม่มี) แต่ดันมี Topic ที่มี 3 ตัวด้วย! ซึ่งน่าจะเกิดจากการที่เดิมเป็น N/A แล้วผมสั่งให้เป็น Null

    กลับไปแก้ไข Step เก่าให้รัดกุมขึ้น

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 143

    ดังนั้นการ Replace ให้ N/A เป็น null ก่อนหน้านี้อาจไม่ใช่วิธีที่ดีแล้ว ดังนั้นเราจะไปแก้ให้ Replace N/A เป็นเลขซักตัวนึงที่เรามั่นใจว่าไม่มีทางใช่ข้อมูลจริงดีกว่า เช่น -99999

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 144

    คราวนี้เราจะได้บรรทัดกลับมาครบตามที่ควรจะเป็นแล้ว (และเรียงถูกต้องตาม sequence เดิม)

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 145

    แล้วเราค่อย Replace -99999 ของเราด้วย null ใหม่อีกที

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 146

    สร้างเลข Running ตาม Topic

    คราวนี้เราต้องการจะสร้างเลข Running 1,2,3,4,5 ตาม Topic แต่ละตัว (โดยบางตัวอาจมี 4, บางตัวอาจมี 5)

    ถ้าเรากด Add Index คอลัมน์ตรงๆ มันจะไม่ Reset ใหม่ตาม Topic แต่เราจะได้ Code ออกมาตามนี้

    = Table.AddIndexColumn(#"Replaced Value1", "Index", 1, 1)
    = Table.AddIndexColumn(ชื่อ Table ,ชื่อคอลัมน์,เลขตั้งต้น,เพิ่มทีละ)

    ซึ่งเดี๋ยวเราจะจำเอาไว้เลียนแบบตอนทำเรื่อง Group by ต่อไป

    เพื่อให้เราสามารถ Add Index เฉพาะกลุ่มได้ ดังนั้นเราจะใช้ Group By แบบ All Row มาช่วย ดังนี้

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 147

    เราจะได้ผลลัพธ์ออกมาเป็น Table ซึ่งถ้าคลิ๊กดูจะเป็น Table ที่มีครบทุกคอลัมน์เลย แต่มีการ Group ให้เหลือตามที่เรา Group By เท่านั้น

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 148

    ซึ่งที่เราจะทำคือเราจะ Add Index คอลัมน์ โดยการใส่ Custom Function แบบนี้

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 149
    =Table.AddIndexColumn(ชื่อ Table ,ชื่อคอลัมน์,เลขตั้งต้น,เพิ่มทีละ)
    =Table.AddIndexColumn([Data],"running",1,1)

    ซึ่งในคอลัมน์ NewData เราจะได้ Table ใหม่ ซึ่งมีคอลัมน์ running เพิ่มขึ้นมา

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 150

    แต่ถ้าเราอยากให้ไล่จาก -4,-3,-2,-1,0 แทน 0,1,2,3,4 ก็ต้องแก้สูตรเป็น

    =Table.AddIndexColumn([Data],"running",-4,1)
    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 151

    คราวนี้เราจะลบคอลัมน์ Data ทิ้ง เพราะไม่ใช้แล้ว

    หลังจากนั้นกด Expand คอลัมน์ NewData ออกมาโดยเอาแค่ NumData กับ Running ดังรูป

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 152
    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 153

    เราจะสั่ง Pivot คอลัมน์ Topic ไปเป็นหัวตาราง แต่ว่าข้อมูลมันจะยัง Sum ไม่ได้เพราะยังไม่ได้เปลี่ยน NumData ให้เป็นตัวเลข

    ดังนั้นให้เปลี่ยนประเภทข้อมูล NumData ให้เป็นตัวเลขก่อนครับ (ถึงจะเลือกการ Sum ใน Step ถัดไปได้)

    จากนั้นค่อยเลือกคอลัมน์ Topic แล้วสั่ง Pivot Column

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 154

    ผลลัพธ์จะออกมาเป็นแบบที่อยากได้แล้ว

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 155

    ความเน่าเฟะที่ยังหลงเหลือ

    แต่ถ้าตรวจดูความเรียบร้อย ดันมีคอลัมน์งอกเกินมา ซึ่งเป็นผลมาจาก Symbol บางตัว

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 156

    ดังนั้นต้องย้อน Step กลับไปดูว่าพลาดตรงไหน

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 157

    จะพบว่า ดันมี Text จำพวก N/A ที่เราตั้งใจแปลงเป็น -99999 แต่ดันมี Text อื่นอีก เช่น N.A. และ –

    ดังนั้นเราต้องย้อน Step กลับไป Replace Value ให้ N.A. และ – เป็น -99999 ด้วย (แบบ Insert Step นะ)

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 158

    จากนั้นก็ Replace – ด้วย -99999 อีกที แต่ให้ติ๊กว่าต้องเจอแบบ Entire Cell Content ด้วยนะ ไม่งั้นมันแทนเครื่องหมายติดลบด้วยซวยเลย

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 159

    ถ้าเรากลับไปดู Step สุดท้าย จะพบว่าคอลัมน์ที่งอกเกินมาได้หายไปแล้ว

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 160

    จัดการวันที่

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 161

    เหลือปัญหาสุดท้ายคือ Data Type ของวันที่งบการเงิน แค่กดเปลี่ยน Data Type เป็น Date ก็จบเลย เพราะเลขเป็น 4 หมื่นกว่าอยู่แล้ว

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 162

    แก้คอลัมน์ Running ให้เป็น Year

    เดิม Running เราเป็น -4,-3,-2… สมมติว่าเราจะทำให้เป็น Y-4, Y-3, Y-2 ก็ทำได้

    ให้ไปที่คอลัมน์ Running -> Transform -> Format -> Add Prefix แล้วใส่คำว่า Y

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 163

    จากนั้นเปลี่ยนชื่อคอลัมน์เป็น Year ซะก็จบละ

    จบแล้ว สำเร็จ!!

    ในที่สุด เราก็ได้ฐานข้อมูลที่ต้องการแล้ว ดังนั้นกด Close & Load to.. ออกมาเป็น Table หรือจะเอาเข้า Pivot Table เลยก็ย่อมได้

    เทคนิคการเผชิญหน้ากับข้อมูลเน่าเฟะด้วย Power Query 164

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

  • ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 3 : แหล่งฝึกฝน Logic

    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 3 : แหล่งฝึกฝน Logic

    ในตอนนี้เราจะมาแนะนำแหล่งเรียนรู้ แหล่งฝึกฝน Logic เพื่อที่พวกเราจะได้มีโอกาสฝึกคิดมากขึ้น เป็นการเพิ่ม Exp ด้าน Logic นั่นเอง ซึ่งเป็นตอนต่อของเนื้อหาสองตอนก่อน คือ

    • ในตอนแรกเป็นการเกริ่นนำว่า Logic เป็นเรื่องที่พัฒนาได้ แค่ยอมรับและฝึกฝนในลำดับที่เหมาะสมกับความสามารถตนเอง และค่อยพัฒนาไปเจอแบบที่ซับซ้อนมากขึ้นเรื่อยๆ
    • ในตอน 2 เป็นการใช้ Logic กับ Excel ซึ่งจริงๆ จะเห็นว่าไม่ได้ใช้ความรู้ Logic ที่ซับซ้อนเท่าในวิชาคณิตศาสตร์ (ที่ต้องพิสูจน์ความสมเหตุสมผล) แต่ใช้แค่พวก AND, OR อะไรมากกว่า (แต่อาจต้องใช้ Systems Thinking หรือความรู้เชิงระบบเพิ่มเติมอีก ซึ่งจะพูดถึงในอนาคต)

    เอาล่ะเพื่อไม่ให้เสียเวลา เรามาเริ่มดูแหล่งเรียนรู้เรื่อง Logic กันดีกว่า

    รวมแหล่งฝึกฝน Logic

    เกมแนว Puzzle ต่างๆ (เล่นคนเดียว)

    ผมขอไล่จากที่ดูง่ายไปยากละกันนะครับ (Judgement ส่วนตัวนะ อย่าซีเรียส)

    ปริศนาแนว Logic Grid Puzzle

    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 3 : แหล่งฝึกฝน Logic 165

    เกมแนวนี้มักจะให้ข้อมูลเป็น Hint มาว่า ใครทำอะไร/ใครคู่กับอะไร? แต่จะให้แบบไม่ครบสมบูรณ์ เราต้องปะติดปะต่อเหตุการณ์แล้วทำการตัด choice ที่เป็นไปไม่ได้ออก จนกว่าจะเจอคำตอบที่ต้องการ

    ตัวอย่างแบบง่ายๆ เช่น

    มีคน 4 คน คือ นาย A, B, C, D และมีสัตว์เลี้ยงทั้งหมด 4 ประเภท คือ แมว, หมา, ปลา, นก โดยที่มีคำใบ้ (Hint) คือ

    1. สัตว์เลี้ยงของนาย A บินไม่ได้
    2. สัตว์เลี้ยงของ C และ D มี 4 ขา
    3. สัตว์เลี้ยงของ D ไม่เห่า

    โจทย์ต้องการให้หาว่า : ใครคือเจ้าของสัตว์เลี้ยงประเภทไหน?

    ซึ่งถ้าเราพิจารณาจาก Hint เฉยๆ จะพบว่าข้อมูลมันไม่เป็นระเบียบ อาจจะอ่านแล้วงง จับต้นชนปลายไม่ถูก แต่ว่าหากเรานำข้อมูลที่ได้จาก Hint มาใส่ตารางที่ออกแบบมาดีๆ เกมแนวนี้จะง่ายขึ้นมากๆ

    เราอาจเริ่มโดยใส่สัญลักษณ์เพื่อให้เห็นภาพมากขึ้น เช่น N คือแน่ใจว่าไม่ใช่, Y=แน่ใจว่าใช่

    ชื่อคน\สัตว์เลี้ยงแมวหมาปลานก
    AN (Hint1)
    B
    CN (Hint2)N (Hint2)
    DN (Hint3)N (Hint2)N (Hint2)

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

    ชื่อคน\สัตว์เลี้ยงแมวหมาปลานก
    AN (step1)N
    BN (step1)
    CN (step1)NN
    DY (step1)NNN

    ไล่ต่ออีก… ไปเรื่อยๆ จนครบ

    ชื่อคน\สัตว์เลี้ยงแมวหมาปลานก
    AN (step1)N (step2)Y (step3)N
    BN (step1)N (step2)N (step3)Y (step4)
    CN (step1)Y (step2)NN
    DY (step1)NNN

    สรุป

    ชื่อคน\สัตว์เลี้ยงแมวหมาปลานก
    AY
    BY
    CY
    DY

    กรอบความคิด (Framework) ที่ดีช่วยได้มาก

    ดังนั้นจะเห็นว่าถ้ามีระบบหรือกรอบความคิด (Framework) ที่ดี มันก็ช่วยให้เราหาคำตอบได้ง่ายขึ้นเยอะ ซึ่งผมคิดว่าเป็นเทคนิคที่สำคัญอย่างนึงเลยครับในชีวิตจริงของเราเลยล่ะครับ ^^

    ถ้าเจอโจทย์ในชีวิตจริง ก็พยายามหา Framework หรือวาดตารางออกมา โดยจับคู่ทุกมิติให้ครบ เราจะได้คิดให้ครบทุกกรณี เช่นมี 4 เรื่อง ก็ต้องจับคู่ได้ =COMBIN(4,2) = 6 แบบ

    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 3 : แหล่งฝึกฝน Logic 166

    เกมแนวนี้ส่วนตัวผมขอแนะนำ https://www.brainzilla.com/logic/logic-grid/ เพราะเว็บนี้ออกแบบการเล่นให้ง่ายขึ้นมาก เพราะเมื่อเรากดติ๊กว่ามั่นใจว่าถูกในช่องแล้วมันจะ auto ตัดตัวที่ไม่ใช่ทิ้งในแถวและคอลัมน์เดียวกันให้ด้วย

    Minesweeper

    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 3 : แหล่งฝึกฝน Logic 167

    ในสมัยก่อนเครื่อง Computer ทุกเครื่องจะมีเกม Minesweeper ซึ่งต้องหาว่าระเบิดอยู่ตรงไหน ซึ่งผมว่าก็ฝึก logic การตัด choice ได้ดีเลยครับ แต่ Minesweeper มันต้องอาศัยโชคอยู่นิดๆ ในบางจังหวะนะ 555

    เดี๋ยวนี้เหมือนจะไม่มีลงมากับเครื่องแล้ว ดังนั้น ใครสนใจก็เล่นได้ที่นี่ http://minesweeperonline.com/

    เกมแนวหา Sequence ที่ถูกต้อง

    เกมแนวนี้ต้องคิด Sequence ที่ถูกต้องในการแก้ปัญหา ยกตัวอย่างเช่น

    เกม Tower of Hanoi

    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 3 : แหล่งฝึกฝน Logic 168

    เป็นเกมที่ต้องย้าย Disc ไปยังแท่นที่สามให้ได้ โดยมีกติกาว่า เราไม่สามารถเอา Disc ใหญ่วางบน Disc เล็กได้ มันจึงต้อคิดให้ดีว่าจะย้าย Disc ยังไงก่อนหลัง

    ผมแนะนำให้เล่นที่นี่ครับ มีความยากหลายระดับ https://www.transum.org/Maths/Investigation/Tower_Of_Hanoi/

    (ปล. ในเว็บเดียวกันมี Puzzle อีกเพียบเลย https://www.transum.org/Software/Puzzles/)

    Sudoku

    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 3 : แหล่งฝึกฝน Logic 169

    Sudoku เป็นเกม Puzzle ยอดฮิต ที่ให้เราใส่เลข 1-9 ลงไปในช่องสี่เหลี่ยม
    โดยมีกติกาว่าห้ามมีเลขซ้ำกันในแถว ในคอลัมน์ และในบล๊อคย่อย 3×3

    ดังนั้นหลักการคือพยายามหาตัวที่มั่นใจที่สุดใส่ลงไปให้ได้ก่อน แล้วก็จะมีข้อมูลมากขึ้นจนสามารถตัด choice ของตัวเลขได้เอง

    เว็บที่แนะนำก็นี่เลย https://sudoku.com/ ดีตรงที่ถ้าเรายังไม่มั่นใจ มีเครื่องมือให้ทดเลขเอาไว้ก่อนได้ด้วย (กดตรง Note) ซึ่งการทดจะทำให้แก้ปริศนาได้ง่ายขึ้นเยอะ

    เกมกระดาน (แข่งกัน)

    Chess (หมากรุก)

    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 3 : แหล่งฝึกฝน Logic 170

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

    หมากรุกมีหลาย version เพราะแต่ละประเทศอาจมีกติกาของตัวเอง เช่น ของไทยเราก็มีหมากรุกไทยด้วย แต่แบบที่เป็นที่นิยมสุดๆ ในโลกก็ต้องหนีไม่พ้นหมากรุกสากลอย่างแน่นอน

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

    เว็บที่แนะนำคืออันนี้ https://www.chess.com/ เพราะมีครบตั้งแต่โหมดเล่นคนเดียว เล่นออนไลน์ และถ้ายังเล่นไม่เป็นก็มี Tutorial สอน

    รวมถึงมี Puzzle ให้แก้ด้วยด้วย (ตรง Puzzle นี่แหละที่พอจะช่วยฝึก logic ได้)

    สำหรับคนที่อยากเล่นหมากรุกไทยมากกว่า ก็มีแฟนเพจแนะนำเว็บนี้มาครับ https://www.playok.com/th/makruk/

    Go (โกะ/หมากล้อม)

    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 3 : แหล่งฝึกฝน Logic 171

    หากว่าหมากรุกคือบอร์ดเกมยอดฮิตแล้ว อีกเกมนึงที่ฮิตและโด่งดังมากในลำดับถัดไปก็คือ Go (โกะ) หรือหมากล้อมนั่นเอง

    หมากล้อมเป็นเกมที่กำเนิดมาจากประเทศจีนหลายพันปีก่อน และได้แพร่หลายไปยังเกาหลีและญี่ปุ่น และสุดท้ายก็แพร่หลายไปทั่วโลกในที่สุด

    หมากล้อมเป็นเกมที่มีตัวหมากแค่แบบเดียว (ไม่เหมือนหมากรุกที่มีหลายแบบ) และมีกติกาที่เรียบง่ายและจำง่ายกว่าหมากรุก แต่กลับเป็นเกมที่มีความลึกซึ้งและซับซ้อนมากๆ

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

    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 3 : แหล่งฝึกฝน Logic 172

    ในสมัยก่อนการจะเขียนโปรแกรม Computer ให้เล่นหมากล้อมเก่งนี่ยากมากๆ (ยากและซับซ้อนกว่าหมากรุกเยอะ) เพราะกระดานโกะเป็นกระดานสี่เหลี่ยมจตุรัสที่มีเส้นอยู่ด้านละ 19 เส้นตัดกันเป็น 361 จุด แล้วผู้เล่นสามารถลงหมากที่จุดตัดไหนก็ได้ ดังนั้นมันจึงมีทางเดินที่เป็นไปได้มากมายมหาศาล

    จะว่าไปแล้วผมเองก็ไม่แน่ใจว่าโกะ มันฝึก Logic ด้วยรึเปล่า (หรือฝึกอย่างอื่นมากกว่า?) ซึ่งผมดันเล่นโกะไม่เก่งด้วยสิ ใครที่เล่นโกะบ่อยๆ ฝากช่วย Comment หน่อยนะครับว่ามันฝึกอะไรให้เราได้บ้าง แต่ที่แน่ๆ ผผมว่าคนเล่นโกะเก่งๆ เนี่ยมีดูฉลาดเอามากๆ เลยล่ะ ^^

    สำหรับเว็บที่แนะนำคืออันนี้ครับ https://online-go.com/ ซึ่งมีทั้งให้เล่น และมีสอนเล่นและก็ยังมี Puzzle ให้ฝึกคิดด้วย

    ป.ล. เมื่อปี 2015 ที่ผ่านมา Computer ชื่อ AlphaGo เพิ่งจะสามารถเอาชนะแชมป์โลกที่เป็นมนุษย์ได้ด้วยแนวทางการคิดแบบ Deep Learning (Machine Learning แบบนึงที่เลียนแบบ Concept การคิดของสมองมนุษย์) ซึ่งคอมพิวเตอร์ได้ฝึกโกะด้วยการเรียนรู้จากข้อมูลหมากตัวอย่างจนเก่งในระดับนึง และสุดท้ายก็แข่งกับตัวเองด้วยจำนวนตามหาศาลในเวลาอันรวดเร็วจนเก่งขึ้นเรื่อยๆ สุดท้ายก็แซงมนุษย์ที่เก่งที่สุดในโลกได้ในที่สุด (ในขณะที่ฝั่งหมากรุกนั้น Computer สามารถชนะมนุษย์ได้ตั้งแต่ปี 1996 แล้ว เพราะมันไม่ลึกซึ้งเท่า จึงเขียนโปรแกรมให้คิดดักได้ทุกทางอย่างง่ายๆ เลย)

    เกมที่ Excel Wizard เล่น

    ใครยังไม่จุใจ ลองไปหาเกมที่คุณ Bo แห่ง Excel Wizard แนะนำก็ได้ครับ ตามนี้เลย

    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 3 : แหล่งฝึกฝน Logic 173
  • Power BI ตอนที่ 10: เรียนรู้ DAX เบื้องต้น

    Power BI ตอนที่ 10: เรียนรู้ DAX เบื้องต้น

    ในบทความนี้เราจะมาเรียนรู้การใช้ DAX เบื้องต้นกันครับ เดี๋ยวจะสอนแบบที่ว่า ไม่เคยใช้ DAX เลยก็สามารถเข้าใจได้นะ ก่อนอื่นเรามาลองดู Data ของตารางหลัก นั่นก็คือ fSales กันก่อนครับ

    Power BI ตอนที่ 10: เรียนรู้ DAX เบื้องต้น 174

    เกิดอะไรขึ้นเมื่อลาก Field ตัวเลขลง Visual

    สิ่งที่เราควรรู้คือ เราสามารถลาก Field ที่เป็นตัวเลข (สังเกตว่าที่ Field มีสัญลักษณ์ Sigma อยู่) อย่างเช่น SalesQuantity ลง Visual ได้เลย และเราก็สามารถเลือกวิธีสรุปข้อมูลได้เช่นจะให้ Sum, Count, Average, Max, Min หรือแม้แต่ Distinct Count

    Power BI ตอนที่ 10: เรียนรู้ DAX เบื้องต้น 175

    เวลาใน Values เรากดที่ลูกศรลงของ SalesQuantity ก็จะเห็นวิธีสรุปที่เลือกได้มากมายดังนี้

    Power BI ตอนที่ 10: เรียนรู้ DAX เบื้องต้น 176

    ค่า Default ของการลากข้อมูลตัวเลขลงมาก็คือการ Sum แต่เราสามารถเปลี่ยนวิธีการสรุปข้อมูลได้ตาม Choice ที่เห็นในรูปข้างบน (เช่นเดียวกับใน PivotTable ของ Excel นั่นแหละ)

    ทั้งหมดที่ทำข้างบนนี้ เป็นสิ่งที่ไม่ควรทำ!

    การลาก Field ลงมาที่ Visual ตรงๆ เพื่อให้เกิดการสรุปแบบอัตโนมัติแบบนี้ เป็นการสร้าง Measure แบบที่เรียกว่า Implicit Measure ซึ่งเป็นสิ่งที่กูรูเรื่อง DAX บอกว่าเป็นสิ่งที่ไม่ควรทำ โดยที่เค้าแนะนำให้เราตั้งใจสร้าง Measure โดยเขียนสูตรการคำนวณขึ้นมาเองด้วย DAX จะดีกว่า

    ข้อดีของการสร้าง Measure ขึ้นมาเอง

    • Number format ติดตัวอยู่ที่ Measure
    • ชื่อไม่สับสน (ปกติถ้าลากด้วยวิธีการ Sum มันจะใช้ชื่อ Field มาให้เลย โดยที่ไม่มีคำว่า Sum โผล่มาด้วย ทำให้อาจจะสับสนได้ว่ามันสรุปด้วยวิธีไหน)
    • เขียนการคำนวณที่ซับซ้อนได้
    • เวลาเอาเข้า Power BI Service แล้วไม่มีปัญหากับการกด Analyze in Excel

    ดังนั้น มาเริ่มสร้าง Measure (Explicit Measure) กันเถอะ!!

    คำนวณ Total Sales Quantity

    การสร้าง Measure ขึ้นมาใหม่ ให้กดปุ่ม New Measure

    Power BI ตอนที่ 10: เรียนรู้ DAX เบื้องต้น 177

    แล้วเขียนสูตรในรูปแบบ

    ชื่อMeasure=สูตรของMeasure

    Tips : หากเราอยู่ที่ Table ไหนแล้วกดสร้าง Measure ขึ้นมา Measure ก็จะถือว่ามีที่อยู่ใน Table นั้น (เรียกว่า Home Table) แต่เราสามารถย้าย Measure ไปอยู่ที่ Table ไหนก็ได้ (คือการเปลี่ยน Home Table) โดยที่จริงๆ แล้วไม่ได้มีผลเรื่องการคำนวณอะไรทั้งสิ้น

    การที่จะได้ Total Sales Quantity ซึ่งก็คือจำนวนชิ้นของสินค้าที่ขายได้ทั้งหมด เราก็ต้องเอาข้อมูลในคอลัมน์ SalesQuantity มาสรุปด้วยวิธี SUM จริงมั้ยครับ? ดังนั้นสูตรใน Measure นี้ก็คือการ SUM ง่ายๆ ธรรมดาๆ เลย

    TotalSalesQuantity=SUM(fSales[SalesQuantity])

    Tips : จำได้มั้ยว่าเราควรจะอ้างอิงคอลัมน์ด้วย ชื่อตาราง[ชื่อคอลัมน์]

    ใส่ Number Format ให้กับ Measure

    ข้อดีนึงของการสร้าง Measure ก็คือ เราสามารถกำหนด Number Format ฝังไว้กับ Measure ไว้เลย

    Power BI ตอนที่ 10: เรียนรู้ DAX เบื้องต้น 178

    ไม่ว่าจะลาก Measure นั้นลงไปที่ Visual ใดก็ตาม เราก็จะได้ Number format นั้นไปเลย โดยไม่ต้องมานั่งเปลี่ยนใหม่ทุกครั้ง

    Power BI ตอนที่ 10: เรียนรู้ DAX เบื้องต้น 179

    ดังนั้นแม้มันจะเป็นการคำนวณง่ายๆ โง่ๆ อย่าง SUM ก็ทำ Explicit Measure ให้เป็นนิสัยเถอะครับ ^^

    คำนวณ Total Revenue

    บอกลา VLOOKUP

    ต่อไปสมมติว่าเราอยากจะคำนวณยอดขาย สิ่งที่เราต้องทำคือเอา SalesQuantity มาคูณกับ UnitPrice ในแต่ละแถว

    แต่ปัญหาก็คือ Unit Price มันดันอยู่อีกตารางนึง ซึ่งถ้าเป็น Excel เราคงต้องใช้สูตรแนว VLOOKUP ดึงข้อมูลมาก่อนใช่มะ?

    แต่ใน DAX เราสามารถสร้าง New Column แล้วใช้ฟังก์ชันที่ชื่อว่า RELATED ดึงข้อมูลจากอีกตารางนึงมาได้เลย ข้อแม้คือต้องผูก Relationship แล้วเท่านั้น (และต้อง active ด้วย) ซึ่งวิธีเขียนสูตรมันง่ายมากกว่า VLOOKUP หลายร้อยเท่า เพราะแค่เลือกว่าต้องการข้อมูลในคอลัมน์ไหนแค่นั้นเอง (ห๊ะ!)

    Power BI ตอนที่ 10: เรียนรู้ DAX เบื้องต้น 180

    นี่ไง เราได้ผลลัพธ์มาอย่างง่ายดาย แบบเรียบรู้ด้วยเวลาไม่ถึง 10 วินาที (ตอนเรียน VLOOKUP ครั้งแรกยากขนาดไหนคิดดู)

    Power BI ตอนที่ 10: เรียนรู้ DAX เบื้องต้น 181

    แบบนี้ถ้าอยากได้ยอดขายต่อ 1 แถว ก็สร้าง New Column ขึ้นมาด้วยสูตรว่า

    LineRevenue = fSales[SalesQuantity]*fSales[UnitPrice]
    Power BI ตอนที่ 10: เรียนรู้ DAX เบื้องต้น 182

    และถ้าอยากได้ Total Revenue เราก็สามารถเอา LineRevenue มา SUM กันได้ ดังนั้นเราจะสร้าง New Measure ได้ว่า

    TotalRevenue = SUM(fSales[LineRevenue])

    เริ่มรู้จัก Row Context

    ก่อนหน้านี้ผมได้มีการพูดถึง Filter Context ไว้ว่า แม้วิธีสรุปจะเหมือนกัน (Measure เหมือนกัน) แต่สามารถแสดงค่าผลลัพธ์ใน Visual ต่างกัน เพราะมี Filter Context หรือวิธีการ Filter ข้อมูลก่อนที่จะคำนวณ Measure ที่ต่างกัน

    ในทำนองเดียวกัน ถ้าเราสังเกตผลลัพธ์แต่ละบรรทัดของ LineRevenue ก็จะเห็นว่าผลลัพธ์ออกมาต่างกัน ทั้งๆ ที่สูตรเขียนเหมือนกันแท้ๆ

    เหตุการณ์นี้เกิดขึ้นได้เพราะว่าตอนคำนวณมันมี Row Context อยู่ ซึ่งเป็นตัวที่บ่งบอกว่าตัวมันกำลังคำนวณข้อมูลที่ Row ไหนอยู่ มันจึงรู้ว่า สูตร fSales[SalesQuantity] นั้นให้อ้างอิงจากข้อมูลที่อยู่ในแถวของตัวเองเท่านั้น ซึ่งการคำนวณมันจะทำซ้ำๆ ทีละแถวจนกว่าจะครบทุกแถวในตาราง (การทำซ้ำ เรียกว่า Iterate) ซึ่งเราจะเห็นพฤติกรรมนี้ในสูตรอย่าง SUMX ด้วย

    สำหรับ Row Context ในเบื้องต้นนี้ไม่น่าจะงงอะไร เพราะมันคล้ายกับการที่เราเขียนสูตรใน Table ของ Excel มากๆ เลย จนคิดว่ามันไม่ได้มีอะไรพิสดารในการที่จะรู้ว่ากำลังคำนวณ Row ไหนอยู่ แต่เดี๋ยวพอเราเจอ Concept ที่ซับซ้อนขึ้นอย่าง SUMX และ CALCULATE เราจะได้เห็นความสำคัญของมันจริงๆ อีกทีนึงครับ

    New Column หรือ New Measure ?

    ถึงจุดนี้หลายคนอาจจะเริ่มสงสัยแล้วว่าเมื่อไหร่ต้อง New Column เมื่อไหร่ถึงจะ New Measure??

    หลักการคือ

    • ถ้าจะสร้างให้มีคอลัมน์เพิ่มมาจริงๆ ในตารางก็ต้อง New Column ซึ่ง New Column จะถูกสร้างให้มีตัวตนอยู่จริงๆ ในตารางของเรา และมักถูกใช้ใน Visual ได้ในฐานะ Category ในแกนต่างๆ ด้วย
    • ถ้าเราต้องการสร้างผลสรุป (เหมือนตอนลากเข้าไปสรุปใน PivotTable ด้วย Sum) เราก็จะใช้ Measure ซึ่ง Measure จะไม่มีตัวตนจนกว่าเราจะลากลงไปใน Visual

    ความต่างในเชิง Performance

    • การที่ New Column ถูกสร้างให้มีตัวตนจริงๆ ซึ่งเกิดการคำนวณขึ้นตอนที่ Refresh Data (ซึ่งเป็นขั้นตอนสร้าง Data Model) ซึ่งกิน Memory และ Disk Space จริงๆ
    • ส่วน Measure จะถูกคำนวณตอนที่ User ใช้งาน Report แล้วกดโน่นนี่นั่น ซึ่งจะทำให้ Filter Context เปลี่ยนไป ก็จะต้องมีการคำนวณใหม่

    แปลว่ามันคือการเลือก ว่าจะช้าตอนกด Refresh และเปลือง ram+space (ก็สร้าง Column) หรือจะช้าตอน User กดเล่น Report นิดหน่อย (สร้าง Measure)

    ซึ่งโดยทั่วไปเค้าจะคิดกันว่า ถ้าสร้าง Measure ได้ก็สร้าง Measure ไป เพราะมันคำนวณเร็วมาก จะได้ไม่เปลือง Ram และ Space (ลองดูก็ได้ครับ มันไม่ได้ช้าอะไรเลยตอนกดเล่น)

    สร้าง Measure TotalRevenue ตรงๆ โดยไม่ต้องมีคอลัมน์ช่วยเลยก็ได้

    ในความเป็นจริงแล้วเราสามารถสร้าง Measure TotalRevenue ที่คำนวณการ Sum LineRevenue โดยไม่ต้องมี UnitPrice และ LineRevenue เลยก็ได้

    ทั้งนี้เราจะใช้ฟังก์ชัน SUMX มาช่วย ซึ่งมีหลักการทำงานดัง slide นี้

    Power BI ตอนที่ 10: เรียนรู้ DAX เบื้องต้น 183

    หรือพูดอีกอย่างได้ว่า ก็คือ SUMX สามารถจำลองการคำนวณอะไรก็ได้โดยทดไว้ในหัวมัน โดยที่มันจะสร้างการคำนวณ <expression> ในแต่ละแถวของตาราง <table>* (ตรงนี้แหละคือ Row Context ที่มันรู้ว่าต้องวิ่งคำนวณ iterate ซ้ำๆ ในแต่ละแถวของ Table ไหนจนครบตาราง) จากนั้นก็เอาผลลัพธ์ในแต่ละแถวที่ทดไว้ทั้งหมดมา SUM กัน (เพราะเราใช้ SUMX)

    *ซึ่ง<table> นี่ในอนาคตเราจะได้เรียนรู้ว่า มันสามารถระบุเป็นตารางที่ไม่ได้มีอยู่จริงใน Data Model ก็ได้ เพราะเราจะใช้ DAX สร้างตารางด้วยสูตรเช่น FILTER, DISTINCT, ALL, CALCULATETABLE ได้

    เช่นจำลอง fSales[SalesQuantity]*fSales[UnitPrice] แต่ละแถวของตาราง fSales

    TotalRevenueSUMX =
    SUMX ( fSales, fSales[SalesQuantity] * fSales[UnitPrice] )

    และไหนๆ ก็ไหนๆ แล้ว เราสามารถเขียน RELATED ในส่วนของ Expression ของ SUMX เพื่อที่จะได้ไม่ต้องสร้างคอลัมน์ fSales[UnitPrice] ด้วยซ้ำ (จะได้ไม่เปลืองที่) จะได้ว่า

    TotalRevenueSUMX =
    SUMX(fSales,fSales[SalesQuantity]*RELATED(dProduct[UnitPrice]))

    ซึ่งค่าที่ได้จะออกมาเท่ากับ TotalRevenue ตัวเดิมที่เราทำไว้เป๊ะเลยครับ

    Power BI ตอนที่ 10: เรียนรู้ DAX เบื้องต้น 184

    ลบ Column และ Measure ที่ไม่จำเป็นซะ

    ดังนั้นแปลว่า ใน fSales เราไม่จำเป็นต้องมีคอลัมน์ UnitPrice กับ LineRevenue อีกต่อไป ก็สามารถคลิ๊กขวา Delete ทิ้งได้เลย

    Power BI ตอนที่ 10: เรียนรู้ DAX เบื้องต้น 185

    ซึ่งพอกดลบคอลัมน์แล้ว Measure TotalRevenue ที่เคยอ้างอิงถึงคอลัมน์เหล่านั้นก็จะพังตามไปด้วย (ไม่แปลก) ก็ให้ลบ Measure เดิมทิ้งไปด้วยเช่นกันนะ

    สร้าง Total Cost of Goods Sold

    ในทำนองเดียวกับ TotalRevenueSUMX เราก็สามารถคำนวณ Total Cost of Goods Sold ได้ด้วย concept เดียวกันเลย แค่เปลี่ยนจาก UnitPrice เป็น UnitCost เอง

    จะได้ว่า

    TotalCOGS = 
    SUMX(fSales,fSales[SalesQuantity]*RELATED(dProduct[UnitCost]))

    สร้าง TotalGrossProfit

    Total Gross Profit เกิดจาก Total Revenue ลบด้วย Total Cost of Goods Sold ดังนั้นก็สามารถเขียนสูตรง่ายๆ โดยอ้างอิง Measure เดิมที่มีอยู่แล้วได้เลยว่า

    TotalGrossProfit = [TotalRevenueSUMX]-[TotalCOGS]

    Tips : จำได้มั้ยว่า ถ้าอ้างอิง Measure ให้ระบุแค่ [ชื่อmeasure] ไม่ต้องใส่ชื่อ Table นะ ตรงนี้ให้ทำเป็นนิสัยเลย เดี๋ยวมันจะส่งผลในอนาคตอย่างมากตอนเรียนเรื่อง CALCULATE ครับ

    เปลี่ยนชื่อ Measure ก็ไม่ทำให้สูตรพังนะ

    ชื่อ Measure เดิม TotalRevenueSUMX มันดูทุเรศไปหน่อย ให้เราคลิ๊กขวา Rename เป็น TotalRevenue เฉยๆ แหละดีกว่า ซึ่งพอทำแล้วสูตรทั้งหมดก็ยังใช้ได้อยู่นะครับ

    โดยสูตร TotalGrossProfit = [TotalRevenueSUMX]-[TotalCOGS]
    จะกลายเป็น TotalGrossProfit = [TotalRevenue]-[TotalCOGS] ให้เองเลย

    สร้าง Gross Profit Margin

    ทีนี้เราจะมาคำนวณว่ากำไรที่ได้มันเป็นกี่ % เมื่อเทียบกับยอดขาย สิ่งที่เราจะทำก็คือเอา TotalGrossProfit มาหารด้วย TotalRevenue ซึ่งเขียนได้ว่า

    GrossProfitMargin=[TotalGrossProfit]/[TotalRevenue]

    จริงมั้ยครับ?

    แต่ใน DAX มีฟังก์ชันการหารโดยเฉพาะชื่อว่า DEVIDE ซึ่งดีกว่าการหารตรงๆ ที่มันดัก Error กรณีตัวส่วนเป็น 0 ให้แล้วด้วย ดังนั้นเราจะเขียนแบบนี้เลย

    GrossProfitMargin = DIVIDE([TotalGrossProfit],[TotalRevenue])

    จากนั้นอย่าลืมปรับ Format เป็น % ด้วยล่ะ ผลลัพธ์ใน Visual จะได้เห็นเลขเป็น % ไปด้วย

    Power BI ตอนที่ 10: เรียนรู้ DAX เบื้องต้น 186

    สรุป DAX เบื้องต้น

    สรุปแล้ว สุดท้ายที่เราทำในบทนี้คือการสร้าง Measure ขึ้นมา 5 ตัว ดังนี้

    TotalSalesQuantity=SUM(fSales[SalesQuantity])
    TotalRevenue=SUMX(fSales,fSales[SalesQuantity]*RELATED(dProduct[UnitPrice]))
    TotalCOGS =SUMX(fSales,fSales[SalesQuantity]*RELATED(dProduct[UnitCost]))
    TotalGrossProfit = [TotalRevenue]-[TotalCOGS]
    GrossProfitMargin = DIVIDE([TotalGrossProfit],[TotalRevenue])

    ซึ่งทั้งหมดนี้คือ Measure ล้วนๆ ที่ไม่ต้องการคอลัมน์พิเศษอะไรเลยด้วยซ้ำ

    สำหรับ DAX เบื้องต้นของบทความนี้ก็ขอจบเพียงเท่านี้ เดี๋ยวต่อไปเราจะเริ่มรู้จัก พวก CALCULATE, FILTER, ALL ที่จะสามารถเปลี่ยน Filter Context ได้ ซึ่งใกล้จะได้เห็นพลังของสูตรแบบ DAX ที่แท้จริงแล้วล่ะ!

    สารบัญ Series Power BI

    ใครสนใจอยากเรียนเป็นคลิปวีดีโอ ผมมี

  • ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 2

    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 2

    ในตอนที่แล้วเราได้เรียนรู้คร่าวๆ ไปแล้วว่าคนเราสามารถพัฒนาให้ Logic ดีขึ้นได้ ในบทความนี้เราจะมาฝึกแปลงความคิด หรือข้อความธรรมดาๆ ให้เป็นข้อความเชิง Logic กัน

    การอ้างเหตุผลที่เกี่ยวข้องกับใน Excel นั้น จะเป็นการอ้างเหตุผลประเภท Deductive Reasoning แปลไทยว่า การให้เหตุผลแบบนิรนัย ซึ่งก็คือการสรุปจากเหตุที่มีไปหาผล (หรือ Top-Down) ซึ่งจะเป็นแนวทางแบบเดียวกับวิชาคณิตศาสตร์

    ซึ่งจะต่างกับ Inductive Reasoning ซึ่งใช้ผลลัพธ์ที่สังเกตจากหลายๆ เหตุการณ์ แล้วหารูปแบบหา Pattern จากนั้นนำมาสรุปเป็นกฎหรือสาเหตุ พูดง่ายๆ คือ สรุปจากผลไปหาเหตุ (หรือ Bottom-Up) ซึ่งจะเป็นแนวทางของวิชาวิทยาศาสตร์

    ดังนั้นเราจะมาลงลึกด้วยการอ้างเหตุผลแบบ Deductive Reasoning กันครับ เพราะมันคือรูปแบบที่เราใช้กันใน Excel นี่แหละ

    วิธีการแปลงข้อความในชีวิตประจำวันให้เป็น TRUE/FALSE Statement

    เอาล่ะขั้นต่อไปที่เราจะต้องทำให้ได้ คือการหัดแปลงข้อความธรรมดาๆ ให้กลายเป็นตัวแปรสัญลักษณ์ทาง Logic ให้ได้ก่อน

    ทีนี้มันจะมีอยู่ 2 ส่วนหลักๆ คือ

    1. ประพจน์ หรือ Propositions : ส่วนประโยคย่อยที่ให้ค่าออกมาเป็น TRUE/FALSE ได้ แปลว่ามันมีความแน่นอนชัดเจน ไม่ใช่ความคิดเห็น ไม่ใช่ประโยคคำถาม
      • ใครตอบก็จะต้องได้ TRUE/FALSE แบบเดียวกัน (กรณีใช้ Excel แสดงว่าคนตอบก็คือ Excel นั่นแหละ)
      • ถ้าเป็นใน Excel เราเรียกว่าเป็นข้อมูลประเภท Logic
      • ซึ่งค่า TRUE/FALSE มักจะเกิดจากการใช้เครื่องหมายเปรียบเทียบ ไม่ว่าจะเทียบตัวเลข หรือเทียบข้อความก็ตาม เช่น A1>1000, A2=”แมว”
    2. คำเชื่อม Logic : เราต้องหัดดูให้ออกว่า คำเชื่อมในประโยคมันเป็นเงื่อนไขแบบไหน AND, OR, NOT, IF…Then… (ถ้า แล้ว), ก็ต่อเมื่อ ซึ่งใน Excel ก็จะมีตัวเชื่อม Logic ให้เหมือนกันดังนี้

    ตารางค่าความจริงเมื่อใช้ตัวเชื่อม logic

    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 2 187

    ตารางค่าความจริงที่คนใช้ Excel ควรจะแม่นก็คือตัวที่ผมใส่สีเหลืองไว้ สรุปคือ

    • เงื่อนไขแบบและ (AND) จะใช้กรณีที่เงื่อนไขย่อยทั้งหมดจะต้องเป็นจริงเท่านั้น (จึงจะให้ผลลัพธ์เป็นจริง) ถ้าให้เทียบก็เหมือนคนที่เรื่องมาก spec เยอะ ต้องได้ทุกอย่าง
    • เงื่อนไขแบบหรือ (OR) จะใช้กรณีที่เงื่อนไขย่อยอย่างน้อยตัวใดตัวหนึ่งต้องเป็นจริง (จึงจะให้ผลลัพธ์เป็นจริง) ซึ่งในทีนี้จะเป็นจริงหลายตัวก็ได้ ถ้าให้เทียบก็เหมือนคนสบายๆ อะไรก็ได้
      • Tips : จะมีอีกตัวคล้ายกันคือ XOR (Exclusive OR) ที่แปลว่าให้เลือกได้แค่อย่างเดียวเท่านั้น ห้ามเป็นจริงทั้งคู่ แต่ใน Excel เรามักจะไม่เจอแบบนี้เท่าไหร่
    • NOT คือการกลับจริงเป็นเท็จ เท็จเป็นจริง อันนี้ง่ายมาก เขียนได้ว่า (NOT P หรือ ~P ก็ได้)
    • นอกนั้นเป็นเรื่องของกลุ่มเงื่อนไข (Condition) ที่จะพูดถึงถัดไป

    Gang เงื่อนไขให้ Logic ดี

    ทีนี้มันจะมี Gang เงื่อนไขระหว่างสองเหตุการณ์ ซึ่งบางทีอาจเกิดความสับสนได้ ดังนั้นเราจะมาพิจารณาดูกันดีๆ นะครับ

    ถ้าเอาจริงๆ มันจะมี 3 ตัว ซึ่งผมไม่ค่อยอยากแปลเป็นไทยมากนัก เพราะอาจเข้าใจผิด คือ

    1. if…A…then…B : ถ้ามีเหตุ A เกิดขึ้นก็เพียงพอที่จะทำให้เกิดผล B ขึ้นแน่นอน (เขียนได้ว่า A->B)
    2. B only if A : ผล B เกิดขึ้นมาได้ จำเป็นต้องมีเหตุ A
      (แต่ว่า มีเหตุ A อาจไม่มีผล B ก็ได้ เพราะเหตุอาจไม่เพียงพอ)
      ดังนั้นสรุปได้แค่ว่ามี B ต้องมี A แน่ๆ จึงเชียนได้ว่า B->A
      เช่น “ไฟไหม้ จำต้องต้อง (only if) มีออกซิเจน” สามารถสรุปได้ว่า
      เทียบเท่ากับ if ไฟไหม้ then มีออกซิเจน (ดังนั้นจะมองในรูป if..then.. ก็ได้)
    3. A if and only if B : A และ B ต่างเป็นตัวที่ทำให้เกิดอีกตัวนึงทั้งคู่ (A<->B)
      เช่น ผมจะได้รับปริญญา ก็ต่อเมื่อ(if and only if) ผมเรียนจบ
      แปลว่า ถ้าเรียนจบ ก็ได้รับปริญญาชัวร์
      ถ้าได้รับปริญญา ก็แสดงว่าเรียนจบชัวร์
      (มองได้ทั้ง 2 ทาง)

    แต่ใน Excel เราจะเป็นแบบ if …A… then ….B…. (ทิศเดียว) ดังนั้นมาดูรายละเอียดกันครับ

    IF…Then…. เชิง Logic

    if A then B (ซึ่งเขียนได้อีกแบบว่า A->B)

    แปลว่าเมื่อมีเหตุ A จะเกิดผลลัพธ์ B ขึ้นอย่างแน่นอน
    ตรงนี้ตีความหมายได้หลายอย่าง อ่านดีๆ นะ

    • เหตุ A เพียงพอแล้วที่จะ Trigger (เหนี่ยวไก) ทำให้เกิดผล B ได้เลย
    • ถ้าไม่เกิดผล B แสดงว่าเหตุ A ไม่ได้เกิดขึ้น (เพราะถ้า A เกิดขึ้น B ต้องเกิดแน่นอน)
    • ไม่ได้แปลว่า ถ้า A ไม่เกิด แล้ว B จะไม่เกิดไปด้วยนะ (เพราะ B อาจจะเกิดจากเหตุอื่นก็ได้ เพราะ A เป็นสาเหตุที่เพียงพอ แต่ไม่ใช่สาเหตุที่จำเป็น)

    ตัวอย่าง: ทั้งหมดคือความหมายเดียวกัน (ผมสอบผ่าน=A, ผมได้รางวัล=B)

    • ถ้าผมสอบผ่าน ผมจะได้รางวัล (A->B)
    • ผมจะได้รางวัล ถ้าผมสอบผ่าน (แค่สลับประโยค แต่ logic เดิม) (A->B)
    • ถ้าผมไม่ได้รับรางวัล แสดงว่าผมสอบไม่ผ่าน (Not B->Not A) (เพราะถ้าสอบผ่าน มันต้อง trigger ให้เกิดการรับรางวัลไง)

    IF ใน Excel

    ซึ่งเงื่อนไข if…then…ที่อธิบายข้างบนนี่ คล้ายกับฟังก์ชัน IF ใน Excel มากๆ เลย นั่นคือ
    ถ้าเงื่อนไขเป็นจริงแล้วจะให้ผลเป็นอะไร ซึ่งผลนั้นจะเกิดขึ้นเสมอเมื่อเงื่อนไขเป็นจริง (เงื่อนไขคือเหตุที่เพียงพอแล้ว ที่จะทำให้เกิดผล)

    อย่างไรก็ตาม ในฟังก์ชัน IF ของ Excel เราจะต้องระบุผลกรณีที่เงื่อนไขไม่จริงด้วย ว่าจะให้แสดงผลลัพธ์ยังไง

    พูดง่ายๆ คือใน Excel เป็นแบบ if…then…else…
    ถ้า…เงื่อนไข…then…จะทำอะไรถ้าเงื่อนไขเป็นจริง…
    else…จะทำอะไรถ้าเงื่อนไขเป็นเท็จ

    =IF(logical_test,value_if_true,[value_if_false])
    =IF (เงื่อนไข,ผลลัพธ์กรณีจริง,[ผลลัพธ์กรณีไม่จริง])

    Tips: ถ้าเราไม่ระบุกรณี else มันจะให้ค่ากลับมาเป็น FALSE ซึ่งเดี๋ยวก็งงอีก

    Tips2: ใน Excel เรามักใส่ผลลัพธ์กรณี false ให้ไม่เหมือน true (ไม่งั้นจะใช้ if ทำไม จริงมะ?)
    แต่ถ้าในเชิง Logic จริงๆ กรณีเงื่อนไขไม่จริง ผลลัพธ์อาจจะไม่ใช่ตัวที่ตรงข้ามกับ value_if_true ก็ได้นะ มันอาจจะเป็นอะไรก็ได้เลย หรืออาจะเหมือน true ก็ได้

    ปัญหาตัวอย่าง

    ปัญหาตัวอย่าง1

    “ถ้าทำยอดขายได้มากกว่า 1000 เธอจะได้โบนัส”

    • A = (เธอ)ทำยอดขายได้มากกว่า 1000
    • B = เธอได้โบนัส
    • สรุป Logic เป็น : if A then B
      หรือเขียนว่า A ->B ก็ได้ แต่ผมจะใช้ if…then… เพื่อให้คล้าย Excel ที่สุด
    • if ทำยอดขายได้มากกว่า 1000 then เธอได้โบนัส
      (assume ว่าถ้าทำไม่ได้ ก็ถือว่าไม่ได้โบนัสไป)
    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 2 188

    ปัญหาตัวอย่าง2

    “ร้านนี้ไม่อนุญาตให้คนอายุต่ำกว่า 18 ปีเข้า”

    ถ้าดูจริงๆ เราสามารถพูดอีกแบบในความหมายเดียวกันว่า

    “ถ้าเธออายุต่ำกว่า 18 ปี เธอจะเข้าร้านนี้ไม่ได้”

    • A = เธออายุต่ำกว่า 18 ปี
    • B = เธอเข้าร้านนี้ไม่ได้
    • สรุป Logic : if A then B
    • if เธออายุต่ำกว่า 18 ปี then เธอเข้าร้านนี้ไม่ได้
      (assume ว่าถ้าอายุไม่ต่ำกว่า 18 ก็ถือว่าเข้าได้)
    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 2 189

    ปัญหาตัวอย่าง3

    “ร้านนี้ลดราคาให้เฉพาะคนมีบัตรสมาชิก ที่มาซื้อของในวันอังคารเท่านั้น”

    • A=มีบัตรสมาชิก
    • B=ซื้อของวันอังคาร
    • C=ลดราคา
    • สรุป Logic : if A and B then C
    • เพราะว่าต้องมีบัตรสมาชิกด้วย และซื้อวันอังคารด้วยทั้งสองเงื่อนไข จึงต้องใช้ AND
    • ซึ่งใน Excel ใช้เป็น AND(เงื่อนไข1,เงื่อนไข2)
    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 2 190

    ปัญหาตัวอย่าง4

    “คุณต้องฝากเงินตั้งแต่ 10000 ขึ้นไปถึงจะได้ดอกเบี้ยพิเศษ ยกเว้นว่าคุณจะเป็นลูกค้า VIP (ก็จะได้ดอกพิเศษเสมอ)”

    • A = ฝากเงินตั้งแต่ 10000 ขึ้นไป
    • B = เป็นลูกค้า VIP
    • C = ได้ดอกเบี้ยพิเศษ
    • สรุป Logic : if A or B then C
    • เพราะว่าฝากเงินเยอะก็ได้ เป็น VIP ก็ได้ อย่างน้อยอันใดอันหนึ่ง จึงต้องใช้ OR
    • ซึ่งใน Excel ใช้เป็น OR(เงื่อนไข1,เงื่อนไข2)
    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 2 191

    ปัญหาตัวอย่างแบบซับซ้อน

    “จะเป็น Model ที่นี่ได้นะ ถ้าเป็นผู้ชาย จะต้องสูงเกิน 180 ถ้าเพศอื่นๆ จะต้องสูงเกิน 170”

    ตรงนี้ทำได้หลายแบบมากๆ นะ ถ้าวาดรูปแล้วจะเห็นชัดขึ้น

    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 2 192
    • A=เป็นผู้ชาย
    • B=สูงเกิน 180
    • C=สูงเกิน 170
    • D=เป็น Model ได้

    สังเกต

    • การที่ Diagram เข้าไปยังชั้นถัดไป เปรียบเสมือนเงื่อนไขแบบ AND หรือจะใช้ IF ซ้อนกันก็ได้
    • การที่ Diagram เป็นคนละเส้นทางที่ไปสู่ผลลัพธ์เหมือนกัน (การได้เป็น Model จริงๆมี 2 เส้นทาง คือสายบนกับสายล่าง จริงมะ?) เปรียบเสมือนเงื่อนไขแบบ OR

    สรุป Logic

    • แบบ if ซ้อนกัน : if A then (if B then D) else (if C then D)
    • แบบ AND OR : if (A and B) or (not A and C) then D
    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 2 193

    สูตรซับซ้อนไปอ่านไม่รู้เรื่องเลย ทำไงดี

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

    แต่ถ้าเรายังไม่คล่อง เราก็สามารถแยกผลลัพธ์ทดเอาไว้ทีละส่วนก่อนก็ได้ เช่น

    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 2 194

    จะเห้นว่ามันดูง่าย และเข้าใจง่ายขึ้นตั้งเยอะ จริงมะ?

    แนวทางฝึกฝนเพิ่มเติม

    ลองสมมติสถานการณ์แล้วเขียนออกมาเป็นสูตร IF ให้ได้ ทำบ่อยๆ เดี๋ยวก็คล่องครับ

    จะ Comment โจทย์แล้วให้เพื่อนๆ มาลองตอบก็ได้นะครับ ^^

    สรุปเรื่อง Logic vs Excel

    ถ้าจะมองจริงๆ เรื่องเกี่ยวกับ Logic ใน Excel มันมีแค่นี้แหละ เราไม่ต้องไปพิสูจน์เรื่องความสมเหตุสมผล ไม่ต้องไปพิสูจน์สัจนิรันดร์อะไรเหมือนตอนเรียนวิชาตรรกศาสตร์เลย

    ใน Excel เราแค่เขียนเงื่อนไข if…then…else ให้เป็น อาจมีผสม AND OR NOT บ้างเท่านั้นเอง เราต้องเช็คตัวเองว่าแยกเงื่อนไข AND OR ได้รึยัง?

    หลักสำคัญคือการแปลงสิ่งที่คิดจากข้อความธรรมดาให้เป็นข้อมูลเชิง Logic ซึ่งอย่าลืมว่าการใช้เครื่องหมายเปรียบเทียบ เป็นวิธีนึงที่จะได้การจะได้ค่า TRUE/FALSE ได้นะ หัดใช้เยอะๆ ล่ะ

    สำหรับเรื่อง Logic ในตอนหน้าจะเป็นตอนสุดท้าย จะเป็นการแนะนำแหล่งที่เอาไว้ฝึกฝนความคิดเชิง Logic ให้เก่งขึ้น ซึ่งอาจมีเกม มีเว็บต่างๆ แนะนำให้อีกทีครับ ^^

    ความคิดเชิงระบบ ปัญหาใหญ่อีกเรื่อง

    จากที่ได้ทำบทความเรื่อง Logic มาสองตอน ผมคิดว่าปัญหาใหญ่อีกอย่างที่คนใช้ Excel เผชิญอยู่ คือ ความคิดเชิงระบบ หรือ Systems Thinking ด้วย ซึ่งก็คือแนวคิดที่ว่าอะไรสัมพันธ์กันยังไง อะไรเป็น Input Output ฟันเฟืองย่อยๆ ทำงานต่อกันเป็นภาพรวมยังไง?

    อย่าลืมว่าใน Excel แต่ละช่อง cell นั้นสามารถเป็นทั้ง Output ในช่องตัวเอง และเป็น Input สำหรับช่องอื่นต่อไปได้ด้วย ดังนั้นความคิดเชิงระบบก็เป็นอีกเรื่องที่จำเป็นมากครับ

    ซึ่งเดี๋ยวผมจะพยายามสรุปให้อีกทีในบทความต่อๆ ไปนะครับ รอติดตามได้

  • ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 1

    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 1

    จากที่ผม post ถามไปในเพจว่า คิดว่าพื้นฐานวิชา Math (คณิตศาสตร์) ที่ไม่ดี มีผลกับการทำให้ใช้ Excel ไม่ดีหรือไม่? ผลโหวตประมาณครึ่งต่อครึ่งคิดว่าน่าจะเป็นการที่ Logic ไม่ดีมากกว่าที่มีผลทำให้ใช้ Excel ได้ไม่ดี และนอกจาก Logic ก็อาจมีผลมากจากด้าน Motivation ด้วย

    ซึ่งผมก็เห็นด้วยนะครับ ดังนั้นเข้าสู่ประเด็นสำคัญดีกว่าว่า นั่นคือ เราจะทำยังไงให้เราเป็นคนที่มี Logic หรือพูดเต็มๆว่ามี Logical Thinking (ความคิดเชิงตรรกะ) ดีขึ้น? และมันเป็นเรื่องที่ฝึกฝนได้รึเปล่า สอนได้รึเปล่า? หรือ Logic มันติดตัวมาแต่เด็กได้แค่ไหนแค่นั้นแหละ?

    Logical Thinking คืออะไร?

    ก่อนอื่นมานิยามกันก่อนว่าการคิดเชิงตรรกะคืออะไร จะได้เข้าใจตรงกันเนอะ

    Logical Thinking คือการคิดอย่าง “มีเหตุผล” หรือพูดง่ายๆ คือ Make Sense โดยมีการเชื่อมโยงและสร้างโครงสร้างของสาเหตุและผลลัพธ์ขึ้นมา (เหตุนี้ ประกอบกับเหตุนี้ ทำให้เกิดผลนี้)

    โดยที่การที่บอกว่ามีเหตุผลเนี่ย สำคัญเลยคือต้องไม่ขึ้นกับ Judgement ของใครคนใดคนหนึ่งเนอะ ดังนั้นต้องพยายามเอาตัวตนของเราหรือของคนใดคนหนึ่งออกไปจากการอ้างเหตุผลนะครับ

    Logic มันเป็นเรื่องที่พัฒนาได้รึเปล่า?

    หากมีซักคนนึงในโลกนี้ (อย่างเช่นเพื่อนหรือคนรู้จักของคุณ) ที่คุณเห็นด้วยว่าคนนั้นมี Logic ดีขึ้นกว่าแต่ก่อน (โดยเฉพาะอย่างยิ่งถ้าใช้เวลาไม่นานเกินไป) แสดงว่า Logic มันเป็นสิ่งที่พัฒนาได้จริงมะ?

    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 1 195
    รูปจาก https://learningperformance.com/growth-mindset-vs-fixed-mindset/

    ถ้าเรามีความเชื่อมั่นว่าทักษะต่างๆ ในตัวเราสามารถพัฒนาและเติบโตขึ้นได้จริง เราก็จะ “ลงมือพัฒนามัน” จนดีขึ้นได้จริงๆ นั่นแหละ ความคิดแบบที่เชื่อมั่นในพรแสวง (ไม่ใช่พรสวรรค์) ว่าเราสามารถเติบโตและพัฒนาได้ เรียกว่า Growth Mindset ซึ่งเป็นแนวความคิดที่ดีและน่าส่งเสริมมากๆ

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

    ดังนั้นมาเป็นคนที่มี Growth Mindset ดีกว่านะครับ อย่าจำกัดตัวเองเลย

    ถ้ามันพัฒนาได้ แล้วทำไงล่ะ?

    ถ้าคุณลองไปค้นหาใน internet หรือลองถามเพื่อนคนที่คิดว่าเป็นคนที่ Logic ดีนะ ผมเชื่อว่าคุณจะได้รับคำตอบประมาณนี้ครับ

    • ฝึกแก้ปริศนาบ่อยๆ (ลองอ่านบทสัมภาษณ์คุณ Bo แห่ง Excel Wizard อันนี้ก็ได้ ว่าเค้าชอบเล่น Sudoku และแก้ปริศนาต่างๆ มาก จึงทำให้เก่งสูตร Excel ขนาดนี้)
    • ฝึกวิชา Math ซึ่ง Math แท้จริงก็คือการแก้ปริศนาแบบนึงนะ การสอน Math แบบให้ท่องสูตรต่างๆ แบบที่สอนกันในโรงเรียนทั่วไป มันไม่ใช่ Math ที่ถูกต้องเลย เศร้า…
    • เล่นเกมกระดานต่างๆ เช่น หมากฮอส หมากรุก
    • ฝึกการคิดด้วยคำถามว่า Why? บ่อยๆ และฝึกหาข้อโต้แย้ง หาตัวอย่างที่ทำให้การอ้างเหตุผลนั้นเป็นจริง เป็นเท็จ ให้ได้
    • มองด้วยสายตาที่เป็นสากลและปราศจากตัวตน พูดง่ายทำยาก แต่ให้ลองฝึกสมมติดูก็ได้ว่าถ้าเป็นคน No Name มาอ้างเหตุผลแบบนั้นแล้วมัน Make Sense รึเปล่า? และอีกอย่างคือพยายามศึกษาแนวคิดคนอื่นให้มากขึ้น (เช่นอาจคุยกับคนกลุ่มใหม่ๆ) เพื่อให้มุมมองเรากว้างและเป็นสากลมากขึ้น
    • ศึกษาตัวอย่างการอ้างเหตุผลแบบผิดๆ หรือที่เรียกว่า ตรรกะวิบัติ (fallacy) หรือ Bias ต่างๆ
      • เอาแบบง่ายๆ เลยนะ สมมติความจริงคือ ถ้าฝนตกแล้วถนนจะเปียก
      • ปรากฏว่าเดินไปเจอผลลัพธ์ว่า ถนนเปียก เราเลยสรุปว่า ฝนตก
      • ซึ่งผิด!! เพราะว่าการที่มีผลลัพธ์ว่าฝนตก อาจจะมาจากสาเหตุอื่นก็ได้ เช่น มีคนรดน้ำต้นไม้ อะไรแบบนี้ (หรืออาจมาจากฝนตกจริงๆ ก็ได้)
      • ตรรกวิบัติแบบนี้เรียกว่า Affirming the consequent ซึ่งเกิดขึ้นบ่อยมากๆ ดังนั้นเราอย่าเผลอเป็นคนแบบนั้น
      • ไว้ใครชอบเรื่องตรรกะวิบัติ ไว้ผมจะขอพูดถึงมันเต็มๆ อีกทีละกัน

    และถ้าถามผมในฐานะของคนที่ชอบ Excel ผมก็จะตอบเพิ่มอีกข้อว่า “การฝึกแก้ปัญหาใน Excel ก็ช่วยให้ Logic ดีขึ้นได้นะ”

    อ้าว ไหงมันเป็นไก่กับไข่แบบนี้?

    ก็ไหนตอนแรกบอกว่าถ้า Logic ดีแล้ว Excel จะเก่งขึ้น แต่นี่ดันบอกว่าให้ฝึก Excel แล้ว Logic จะดีขึ้น ตกลงจะต้องทำไงแน่?

    เปรียบเทียบกับเกมจะได้เห็นภาพ

    สำหรับมุมมองของผมเอง ถ้าใครเคยอ่านบทความเก่าๆของผม จะเห็นว่า ผมก็เคยเปรียบเทียบการพัฒนาตนเองกับเกมแนว RPG (แนวที่ตัวละครพัฒนาความสามารถได้เรื่อยๆ) ในบทความข้างล่างนี้

    ซึ่งเรื่อง Logic นี่ก็คล้ายกันครับ ผมมอง Logic เหมือนค่าพลังในเกมนั่นแหละ และผมมองว่างานใน Excel คือ Mission ที่เราต้องทำ ซึ่งต้องการพลัง Logic ในระดับนึง ไม่งั้นจะผ่านไปไม่ได้

    Logic คือค่าพลังติดตัวของเราเอง ไม่เกี่ยวกับตัวโปรแกรม Excel ซึ่งเป็น Tool (อาวุธ) ที่จะเพิ่มพลังพิเศษหรือ Ability ให้เรา (เช่น การใช้ Pivot Table, IF, VLOOKUP, Remove Duplicates, ความสามารถ Power Query

    ซึ่งถึงรู้ว่าพวกนี้ทำงานยังไง (จากการอ่าน การอบรม) แต่ถ้าเอาไปใช้ไม่ถูกเพราะค่าพลังยังไม่พอก็อาจทำงานไม่สำเร็จ ( คำว่าค่าพลังอาจไม่ใช่แค่ Logic นะ เช่น อาจต้องมี systematic thinking ด้วย ต้องมี creative thinking ด้วย)

    Mission ง่ายเกินไป

    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 1 196
    รูป Poring
    Monster ระดับกระจอกสุดใน Ragnarok
    จาก http://write.ratemyserver.net/

    สมมติว่าตอนแรกเรามีค่าพลัง Logic คือ 10 และงานที่เราต้องทำคือ Excel Mission ระดับ D ซึ่งเป็นงานที่ง่ายหน่อย แค่มีพลัง Logic ระดับ 3 ก็น่าจะผ่านไปได้

    พอเราจบ Mission เราก็จะได้รับ Experience ทำให้ค่าพลังเราสูงขึ้น แต่เนื่องจากว่างาน Mission D มันไม่ท้าทายด้าน Logic เอาซะเลย ค่าพลัง Logic ของเราก็จะเพิ่มขึ้นแค่นิดเดียวเท่านั้น เช่น อาจเพิ่มแค่ 0.5 กลายเป็น 10.5

    Tips: ตรงนี้จะต่างจากในเกมตรงที่ หลายๆ เกมจะยอมให้เราเลือกว่าจะเอา Exp มาอัปพลังด้านไหนที่ต้องการก็ได้ แต่ชีวิตจริงค่าพลังเราจะพัฒนาได้ดีก็ต่อเมื่อเราฝึกเรื่องนั้น เช่น ฝึก Excel คงไม่สามารถทำให้ Skill การพูดเก่งขึ้นจริงมะ 555

    Mission ยากจัด

    ทำอย่างไรเราถึงจะมี Logic ดีขึ้น? ตอนที่ 1 197
    รูป Baphomet เป็น Boss ตัวนึงในเกม Ragnarok จากเว็บ https://tenor.com/view/ragnarok-baphomet-satan-gif-15267504

    ในทำนองเดียวกัน ถ้าเราไปเจองานที่ยากเกินไป เช่นต้องไปทำ Mission ระดับ S ซึ่งต้องการพลัง Logic ในระดับ 80 ขึ้นจึงจะพอมีสิทธิ์ผ่านไปได้

    แต่การที่ให้เราซึ่งมีพลัง Logic ระดับแค่ 10.5 มาทำงานนี้ มันไม่มีทางชนะเลยครับ มันยากเกินไป สู้จบมีแต่ Game Over และท้อแท้มากกว่า และทำงานไป Exp ก็ไม่ได้ด้วย เพราะไม่รู้เรื่องอะไรเลย แบบนี้ก็ไม่ Work จริงมั้ย?

    Mission ที่เหมาะกับตัวเองดีที่สุด

    สมมติว่าเราไปเจอ Mission ที่เหมาะกับตัวเองแล้ว นั่นคือ Mission Class C ที่ต้องการพลัง Logic ประมาณ 12 ซึ่งการที่เรามีพลัง Logic อยู่ประมาณ 10.5 แบบนี้แหละเป็นตัวที่เราพอมีสิทธิ์ทำสำเร็จ ซึ่งอาจต้องใช้เวลาซักนิดนึง เพราะมันมีความท้าทายกว่าพลังที่เรามีเล็กน้อย แต่ถ้าทำสำเร็จ เราจะได้รับค่าพลัง Logic ที่เพิ่มขึ้นเยอะพอสมควร อาจจะเปลี่ยนจาก 10.5 เป็น 15 หรือ 20 ได้เลย

    และถ้าเราฝึกฝนมากพอ พลัง Logic เราก็จะเยอะพอที่จะทำ Mission Class S ผ่านได้จริงมะ?

    ถ้างานที่ต้องทำมันมีแต่งานที่ยากเกินไปล่ะ?

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

    สรุป

    ที่เขียนมาซะยืดยาว ก็คือจะบอกว่า งาน Excel ก็มีทั้งแบบที่ใช้ Logic ง่ายๆ ก็ทำได้ และแบบที่ต้องเป็นคนที่ Logic ดีมากๆ จึงจะทำได้ (ก็เหมือนกับเกมปริศนา ที่มีทั้งแบบยากและง่าย อย่าง Sudoku เกมเดียวกันแท้ๆ ก็ยังมีทั้งแบบยากแบบง่ายเลย)

    ดังนั้นเราต้องฝึกฝน Logic ของเราด้วยงานในระดับที่เหมาะสมกับเรา ให้เรามีความคิดเชิง Logic ที่ดีขึ้นในระดับนึงซะก่อน จึงจะไปเผชิญหน้ากับงานที่ยากมากๆ ได้นั่นเอง

    เดี๋ยวตอนต่อไปจะมาดูแนวทางการฝึกฝนใน Excel กันว่าจะทำไงดี เพื่อจะฝึกให้เราเป็นคนที่ Logic ดีขึ้นได้ครับ รอติดตามได้เลย!

  • Power BI ตอนที่ 09: สร้าง Date Table ด้วย DAX

    Power BI ตอนที่ 09: สร้าง Date Table ด้วย DAX

    ในตอนที่แล้วเราได้สร้าง Data Model ให้เป็น Star Schema ได้แล้ว เหลืออีกขั้นตอนนึงในการทำให้ Data Model ของเราสมบูรณ์ยิ่งขึ้น นั่นก็คือการสร้าง Date Table นั่นเอง

    แม้ว่าในความเป็นจริงแล้วเราสามารถลาก Field วันที่จาก Fact Table ลงไปใน Visual ได้เลย แต่ทว่านั่นเป็นสิ่งที่เหล่าผู้เชี่ยวชาญไม่แนะนำให้ทำ เพราะมันจะสร้างตารางวันที่จำลองที่มองไม่เห็นขึ้นมาเต็มไปหมด วิธีที่ถูกต้องคือสร้าง Dimension Table ที่เป็นตารางวันที่ขึ้นมาต่างหาก

    การสร้าง Date Table นอกจากจะลดปัญหาที่บอกข้างบนแล้ว ยังช่วยให้ฟังก์ชัน DAX ตระกูล Time Intelligence ทั้งหมดทำงานได้อย่างถูกต้องอีกด้วย เช่นการคิดเลขสะสมตั้งแต่ต้นปี (Year-to-Date) หรือ การคิดเทียบกับช่วงเดียวกันในปีที่แล้ว (Same period last year) แต่ว่าการเขียนสูตรพวก Time Intelligence เราจะยังไม่พูดถึงมันตอนนี้นะ

    บทความนี้จะเป็นการสอนทีละ Step ส่วนใครอยากใช้สูตรสำเร็จรูป สร้าง Date Table พรวดเดียวทุกคอลัมน์เลย ให้ทำตามบทความอีกอันนึงคืออันนี้ครับ

    เริ่มสร้าง Date Table ด้วย DAX แบบ New Table

    การจะสร้างตารางขึ้นมาใหม่ด้วย DAX (ซึ่งก็คือการเขียนสูตรใน Power BI) เราต้องเลือกคำสั่ง ใน Ribbon Modeling -> New Table ขึ้นมา

    Power BI ตอนที่ 09: สร้าง Date Table ด้วย DAX 198

    วิธีการเขียนสูตรคือ

    ใส่ชื่อตาราง=สูตร

    Date Table แบบง่าย ด้วย CALENDARAUTO

    dDate = CALENDARAUTO()

    เขียนสูตรข้างบนแล้วกด Enter เลย

    การเขียนสูตรแบบนี้ Power BI จะสร้างตารางชื่อ dDate ออกมาแบบนี้

    Power BI ตอนที่ 09: สร้าง Date Table ด้วย DAX 199

    โดยที่

    • วันเริ่มต้น คือ วันที่ 1 มกราคม ของปีเดียวกับวันที่ที่น้อยสุดใน Data เรา
    • วันสิ้นสุด คือ วันที่ 31 ธันวาคม ของปีเดียวกับวันที่ที่มากสุดใน Data เรา

    ซึ่งสูตรนี้จะใช้ได้ดี กรณีที่วันที่ใน Data เรามีแต่เรื่องที่เราต้องการ เช่น เป็นวันซื้อขายของ

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

    สร้าง Date Table ตามวันที่เราต้องการ

    ถ้าเราอยากจะกำหนดวันเอง เราจะใช้ฟังก์ชันชื่อ CALENDAR เฉยๆ โดยที่จะต้องระบุวันเริ่มกับวันสิ้นสุด โดยมีรูปแบบดังนี้

    dDate = CALENDAR ( <StartDate>, <EndDate> )

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

    = CALENDAR ( 
    DATE ( ปีเริ่ม, 1, 1 ), 
    DATE ( ปีจบ, 12, 31 ) 
    )

    ซึ่งปีเริ่ม เราอาจหาจาก YEAR(MIN(fSales[DateKey])) ได้
    และปีจบคือ YEAR(MAX(fSales[DateKey]))

    Tips : วิธีมาตรฐานที่ดีในการเขียนสูตร DAX

    • อ้างอิง Column : อ้างอิงด้วย ‘TableName'[ColumnName]
    • อ้างอิงMeasure : อ้างอิงด้วย [MeasureName]

    นี่คือสาเหตุที่เราอ้างอิง Datekey ใน fSales ด้วย fSales[DateKey] นะครับ

    และตอนเขียนสูตรจริงๆ เราสามารถพิมพ์ชื่อตารางก่อน แล้วมันจะ list คอลัมน์ของตารางนั้นมาให้เลือกเองครับ แบบนี้จะสะดวกกว่า

    Power BI ตอนที่ 09: สร้าง Date Table ด้วย DAX 200

    ซึ่งพอทุกอย่างรวมกันจะเขียนได้ว่า

    dDate = 
    CALENDAR (
    DATE ( YEAR(MIN(fSales[DateKey])), 1, 1 ),
    DATE ( YEAR(MAX(fSales[DateKey])), 12, 31 )
    )

    การตั้งตัวแปรขึ้นมาใน DAX

    โดยที่หากเราต้องการให้สูตรอ่านง่ายขึ้น เราสามารถใช้ VAR มาตั้งเป็นตัวแปร และใช้ RETURN เพื่อบอกว่าต้องการจะแสดงผลลัพธ์อะไรได้ ในรูปแบบว่า

    VAR ตัวแปร1=สูตรตัวแปร1
    VAR ตัวแปร2=สูตรตัวแปร2
    RETURN สูตรผลลัพธ์

    เช่น

    dDate = 
    VAR myStartDate=DATE ( YEAR(MIN(fSales[DateKey])), 1, 1 )
    VAR myEndDate=DATE ( YEAR(MAX(fSales[DateKey])), 12, 31 )
    RETURN
    CALENDAR (myStartDate,myEndDate)

    Tips1 : เราสามารถทำให้สูตรอ่านง่ายขึ้น ด้วยการ copy สูตรไปใส่เว็บ DAX Formatter

    dDate =
    VAR myStartDate =
        DATE ( YEAR ( MIN ( fSales[DateKey] ) )11 )
    VAR myEndDate =
        DATE ( YEAR ( MAX ( fSales[DateKey] ) )1231 )
    RETURN
        CALENDAR ( myStartDatemyEndDate )

    Tips2 : ถึงมันจะใช้คำว่า VAR ที่มาจากคำว่า Variable ที่แปลว่าตัวแปร แต่ในความเป็นจริงมันไม่ได้เป็นตัวแปรแบบภาษา Computer ปกติ แต่ว่ามันจะคำนวณค่าจาก สูตรตัวแปร1 เก็บไว้ใน ตัวแปร1 ในลักษณะที่เป็นค่าคงที่

    นั่นคือจะบันทึกเป็นค่า Constant โดยจะถูก Evaluate หรือคำนวณครั้งเดียวตอนที่ประกาศใน VAR (ไม่ได้คำนวณขณะตอนถูกเรียกใช้ใน RETURN)

    คราวนี้เราจะได้คอลัมน์ Date ขึ้นมาคอลัมน์นึงแล้ว ต่อไปเราจะใช้ DAX สร้างคอลัมน์อื่นๆ ขึ้นมานะครับ ซึ่งต่อไปน่าจะง่ายกว่าสร้างตารางแล้วครับ

    Mark as Date Table

    เพื่อให้ตารางที่สร้างขึ้นมาใหม่ สามารถทำงานรองรับฟังก์ชัน Time Intelligence ได้ เราจะต้องมีการระบุให้ชัดเจนว่าตารางนี้คือ Date Table อย่างเป็นทางการด้วย

    Power BI ตอนที่ 09: สร้าง Date Table ด้วย DAX 201

    หลังจากนั้นให้เลือกว่าคอลัมน์ไหนคือวันที่ (ซึ่งก็มีอยู่อันเดียวคือ Date)

    Power BI ตอนที่ 09: สร้าง Date Table ด้วย DAX 202

    Power BI จะทำการตรวจสอบว่าคอลัมน์วันที่ของเราถูกต้องหรือไม่ ซึ่งจะต้องมีวันครบทุกวันเรียงต่อกัน และมีค่าไม่ซ้ำกันด้วย โดยที่ถ้าเราสร้าง Table นี้มาจาก DAX ยังไงก็ไม่พลาดหรอก ก็จะสามารถกด ok ได้เลย

    สร้างคอลัมน์เพิ่มเติมด้วย DAX แบบ New Column

    จริงๆ แล้วแค่ Mark as Date Table ก็สามารถทำให้เราใช้ Time Intelligent ได้แล้ว แต่เราจะสร้างคอลัมน์เพิ่ม เพื่อให้มี Dimension ต่างๆ เอาไปใช้ใน Visual เพิ่มเติม เช่น ปี ไตรมาศ เดือน วัน วันประจำสัปดาห์ เป็นต้น

    เริ่มจากตัวง่ายสุดคือปี ซึ่งเราจะกด New Column

    Power BI ตอนที่ 09: สร้าง Date Table ด้วย DAX 203

    แล้วเขียนสูตรว่า

    Year=YEAR(dDate[date])

    ซึ่ง dDate[Date] ก็คือการอ้างอิงคอลัมน์ Date ในตาราง dDate นั่นเอง

    แค่นี้เราก็จะมีคอลัมน์ Year เพิ่มขึ้นมา เหมือนกับการสร้างคอลัมน์ใน Table ของ Excel เลย

    Power BI ตอนที่ 09: สร้าง Date Table ด้วย DAX 204

    จากนั้นเราก็ใส่คอลัมน์เพิ่มเรื่อยๆ ดังนี้

    • MonthNum = MONTH(dDate[Date])
    • DayNum = DAY(dDate[Date])

    ซึ่งจะเห็นว่าฟังก์ชันพวกนี้เหมือนกับใน Excel เลย

    อย่างไรก็ตามใน DAX ก็มีหลายฟังก์ชันที่คล้ายๆ กับ Excel แต่ก็ไม่เหมือนเป๊ะ เช่น ใน Excel เราสามารถใช้ฟังก์ชัน TEXT เพื่อเปลี่ยนวันที่เป็นชื่อเดือนหรือชื่อวันได้ แต่ใน DAX เราจะใช้ฟังก์ชันชื่อว่า FORMAT แทน (เปลี่ยนแค่ชื่อฟังก์ชันแหละ)

    • MonthName = FORMAT(dDate[Date],”mmmm”)
    • DayName = FORMAT(dDate[Date],”dddd”)
    • YearMonth = FORMAT(dDate[Date],”yyyymm”)

    แถมฟังก์ชัน FORMAT ยังสามารถรองรับการหา Quarter ได้ด้วยตัว q เลย ไม่ต้องมานั่ง ROUNDUP เหมือนใน Excel

    • Quarter = FORMAT(dDate[Date],”q”)

    ถ้าเขียนแค่นี้ก็จะออกมาเป็น text คำว่า 1-4 เลย แต่ถ้าอยากให้มีตัว Q ด้วย (จะได้ดูดีขึ้น) ก็สามารถใช้ & มาช่วยธรรมดาๆ เช่น

    • Quarter = “Q”&FORMAT(dDate[Date],”q”)

    สรุปแล้ว ณ ตอนนี้เรามีคอลัมน์ดังนี้

    Power BI ตอนที่ 09: สร้าง Date Table ด้วย DAX 205

    สรุปสูตรทั้งหมด

    New Table

    dDate =
    VAR myStartDate=DATE ( YEAR(MIN(fSales[DateKey])), 1, 1 )
    VAR myEndDate=DATE ( YEAR(MAX(fSales[DateKey])), 12, 31 )
    RETURN
    CALENDAR (myStartDate,myEndDate)

    New Column

    • Year = YEAR(dDate[Date])
    • MonthNum = MONTH(dDate[Date])
    • DayNum = DAY(dDate[Date])
    • MonthName = FORMAT(dDate[Date],”mmmm”)
    • DayName = FORMAT(dDate[Date],”dddd”)
    • YearMonth = FORMAT(dDate[Date],”yyyymm”)

    ลาก Relationship เพิ่ม

    step ต่อไปเราจต้องสร้าง Relationship ระหว่างตาราง dDate กับ fSales ทั้งนี้เพราะว่าชื่อคอลัมน์มันไม่ตรงกันนั่นเอง แต่การสร้าง Relationship ก็ไม่ยากเลย แค่อยู่ในหน้า Model แล้วลากจาก Field วันที่ 2 อันเชื่อมกัน (ลากจากตาราง fSales ไป dDate หรือจาก dDate ไป fSales ก็ได้)

    Power BI ตอนที่ 09: สร้าง Date Table ด้วย DAX 206

    ลองสร้าง Visual

    สมมติว่าเราอยากจะแสดงยอดจำนวนสินค้า (Sales Quantity) รายเดือน เราก็เลยใส่ MonthName ลงไปใน Table

    Power BI ตอนที่ 09: สร้าง Date Table ด้วย DAX 207

    สิ่งที่เกิดขึ้นก็คือ ชื่อเดือนดันเรียงตามตัวอักษร! ไม่ได้เรียงตามลำดับเดือนตามปฏิทินที่ควรจะเป็น ซึ่งไม่มีใครในโลกเค้าเรียงแบบนี้กัน งงตายพอดี

    Sort by Column

    วิธีแก้ไข เราต้องกลับไปที่หน้า Data ของตาราง dDate แล้วไปกำหนดว่า MonthName จะให้มีการเรียงตาม Field ไหน ซึ่งวิธีทำคือให้เลือก Field MonthName ก่อน แล้วไปที่ Sort by Column จากนั้นเลือกว่าจะให้เรียงตามตัวไหน ซึ่งมันก็คือ MonthNum นั่นเอง

    Power BI ตอนที่ 09: สร้าง Date Table ด้วย DAX 208

    หลังจากกด Sort by Column แล้ว ผลลัพธ์ใน Visual ก็จะเปลี่ยนไปเรียงตามลำดับเดือนในปฏิทินทันทีครับ (ค่อยยังชั่ว)

    Power BI ตอนที่ 09: สร้าง Date Table ด้วย DAX 209

    สำหรับบทนี้จบเท่านี้ก่อน

    ในตอนหน้าเราจะมาเรียนรู้การเขียน DAX Measure แบบพื้นฐาน เช่น SUMX, RELATED, DIVIDE กัน ซึ่งผมมองว่าตอนหน้าจะทำให้เปิดโลกคนใช้ Excel มาสู่คนใช้งาน DAX อย่างแท้จริงกันซักทีครับ

    สารบัญ Series Power BI

    ใครสนใจอยากเรียนเป็นคลิปวีดีโอ ผมมี

  • Power BI ตอนที่ 08: สร้าง Data Model ที่เหมาะสม

    Power BI ตอนที่ 08: สร้าง Data Model ที่เหมาะสม

    ในที่สุดก็มาถึงตอนที่เป็น 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 ซึ่งมีหน้าตาแบบนี้ครับ

    Power BI ตอนที่ 08: สร้าง Data Model ที่เหมาะสม 210

    Star Schema คือรูปแบบที่มีตารางหลัก (เรียกว่าตาราง Fact) อยู่ตรงกลาง แล้วล้อมรอบลากเส้นเชื่อมกับตารางอ้างอิง (เรียกว่าตาราง Dimension)

    Tips : ความสัมพันธ์บนเส้นจะมีเลข 1 กับ * ซึ่งมีความหมายดังนี้
    (สมมติว่าดูตาราง Product ที่มีตัวเชื่อมกับตาราง fSales เป็น ProductID)

    • 1 คือ ฝั่งที่มีค่า Field ที่เป็น Key ไม่ซ้ำกัน (มี 1 ตัว)
      • อยู่ฝั่ง Dimension เพราะฝั่งนั้น ProductID จะไม่มีทางซ้ำกัน
    • * คือ ฝั่งที่มีค่า Field ที่เป็น Key ซ้ำกันได้
      • อยู่ฝั่ง Fact เพราะ ProductID มีสิทธิ์ซ้ำกันได้ เพราะการขายของแต่ละครั้งก็ขายสินค้าเดียวกันได้จริงมะ

    ทีนี้ถ้าเรามาดู Data Model ของเรา ณ ตอนนี้…

    Power BI ตอนที่ 08: สร้าง Data Model ที่เหมาะสม 211

    มันก็คล้ายๆ Star Schema อยู่นะ แต่กลายเป็นว่าตาราง Dimension มันซ้อนกันหลายชั้นเลย ออกมาจะคล้ายๆ แบบนี้ เค้าเรียกกันว่าเป็น Model แบบ Snowflake

    Power BI ตอนที่ 08: สร้าง Data Model ที่เหมาะสม 212

    ปั้นเกล็ดหิมะให้เป็นดาว

    ดังนั้นสิ่งที่เราจะต้องทำคือ แก้ Data Model ของเราจาก Snowflake ให้เป็น Star Schema โดยการรวบตาราง Dimension ที่ซ้อนๆ กันอยู่ให้เหลือแค่ชั้นเดียวพอ ดังนี้

    Power BI ตอนที่ 08: สร้าง Data Model ที่เหมาะสม 213

    และวิธีที่จะทำแบบนั้นได้ก็คือการใช้คำสั่ง Merge ใน Power Query นั่นเองครับ ซึ่ง Merge เป็นวิธีการที่สามารถดึงข้อมูลจากอีกตารางนึงมาใส่ในอีกตารางนึงได้ (มองว่าคล้ายๆ VLOOKUP ก็ได้นะ แต่มันไม่เหมือนเป๊ะ)

    ดังนั้นเราจะกด Home -> Edit Queries เพื่อเข้าไปแก้ไข Query ของเราซะ

    เอาตาราง Geography ไปไว้ในตาราง Stores

    เลือกที่ตารางที่ต้องการจะเอาอันอื่นมารวมด้วย นั่นคือตาราง Stores แล้วเลือก Merge Queries ดังรูป

    Power BI ตอนที่ 08: สร้าง Data Model ที่เหมาะสม 214

    ตอนแรกข้อมูลคอลัมน์ Geography จะออกมาเป็น Table ก่อน ให้เรากด Expand Data ออกมาว่าจะเอา Field ไหนบ้างดังรูป

    Power BI ตอนที่ 08: สร้าง Data Model ที่เหมาะสม 215

    จากนั้นมันจะแตกข้อมูล 3 คอลัมน์นั้นออกมา ต่อไปให้เราลบ Field ชื่อ GeographyKey ออกจากตาราง Stores ซะ เพราะไม่ต้องใช้แล้ว (ก็เราดึงข้อมูลจากตาราง Geography มาแล้วนี่ เลยไม่ต้องมีตัวเชื่อมแล้ว)

    แล้วก็เปลี่ยนชื่อ Query ให้เป็น dStores ซะ (ใส่ตัว d นำหน้าจะได้เห็นว่าเป็น Dimension)

    จากนั้นสิ่งที่เราต้องทำต่อคือ ตั้งค่าว่าไม่ต้องเอาตาราง Geography ออกไปใน Model แล้วโดยการคลิ๊กขวาแล้วเลือกให้เครื่องหมายถูกหน้า Enable Load หายไปซะ (แปลว่าไม่ต้องโหลด)

    Power BI ตอนที่ 08: สร้าง Data Model ที่เหมาะสม 216

    ถ้าเราเคยโหลดข้อมูลออกไปใน Data Model แล้วมาเอา Enable Load ออก มันจะขึ้นข้อความมาเตือนว่าข้อมูลจะหายไปนะ

    Power BI ตอนที่ 08: สร้าง Data Model ที่เหมาะสม 217

    ซึ่งก็ให้กด continue ไป เพราะเราต้องการให้ตารางนั้นหายไปนี่แหละ ถูกแล้ว

    เอาตาราง ProductSubcategory ไปไว้ในตาราง Product

    ต่อไปเราก็จะทำคล้ายๆ เดิม คือ เลือกตาราง Product ก่อน แล้วไปที่ Merge Query กับ ProductSubcategory ก่อน โดยตัวเชื่อมคือ ProductSubcategoryKey

    Power BI ตอนที่ 08: สร้าง Data Model ที่เหมาะสม 218

    จากนั้น Expand Data ออกมา เหมือนเดิมจะพบว่าชื่อ Field ProductSubcategory ดันมี .1 ติดมา เป็นเพราะเดิมทีชื่อมันซ้ำกับชื่อตาราง มันเลยงง ดังนั้นให้ดับเบิ้ลคลิ๊กเปลี่ยนชื่อ Field เอา .1 ออกไปด้วยนะ เดี๋ยวไม่สวย

    Power BI ตอนที่ 08: สร้าง Data Model ที่เหมาะสม 219

    พอเรามีข้อมล 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
    Power BI ตอนที่ 08: สร้าง Data Model ที่เหมาะสม 220

    จากนั้นกด Close & Apply

    จะเห็นว่าตอนนี้เราได้ Data Model แบบ Star Schema เรียบร้อยแล้ววว

    Power BI ตอนที่ 08: สร้าง Data Model ที่เหมาะสม 221

    แล้ว 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 ตอนที่ 07: เริ่ม Get Data ตั้งแต่ไฟล์ยังว่างเปล่า

    Power BI ตอนที่ 07: เริ่ม Get Data ตั้งแต่ไฟล์ยังว่างเปล่า

    เอาล่ะ ในที่สุดก็ถึงเวลาที่จะเรียนรู้การดึง Data เข้า Power BI ด้วยเครื่องมือ Get Data/Transform Data หรือก็คือ Power Query นั่นเอง (ใครได้อ่านหนังสือ Excel Power Up! มาก็น่าจะเข้าใจได้เร็วกว่านะครับ เพราะมันคือตัวเดียวกันเลย)

    ซึ่งในบทความนี้ผมมีไฟล์ Data ให้โหลดเป็นไฟล์ zip 1 อัน
    (โหลดจาก Google Drive / โหลดจาก GitHub)

    ซึ่งถ้าแตกออกมาจะมี Folder อยู่ 1 อันชื่อว่า Contoso

    • ในนั้นจะมีไฟล์ Excel 1 ไฟล์ที่มีหลาย sheet โดยแต่ละ Sheet คือตาราง Reference ทั้งหมดที่ต้องใช้
    • และมีไฟล์ CSV อยู่ 3 ไฟล์ เป็นข้อมูล Transaction 3 ปี (ไฟล์ละปี)
    Power BI ตอนที่ 07: เริ่ม Get Data ตั้งแต่ไฟล์ยังว่างเปล่า 222

    ไอเดียหลักคือเดี๋ยวเราจะเอา Data ทั้งหมดเข้า Power Query โดยตาราง Reference ใน Excel จะเอาเข้าแยกเป็นคนละ Query กันทั้งหมด

    ส่วนไฟล์ CSV เราจะเอาเข้าโดย Get Data from Folder เพราะเผื่อในอนาคตมีไฟล์ CSV เพิ่มอีกจะได้กด Refresh เพื่อดูดจาก Folder ได้เลย

    เริ่มดึงตาราง Reference จากไฟล์ Excel

    ให้เปิด Power BI เเปล่าๆ แล้ว Get Data จาก Excel ชื่อ RefTable.xlsx ได้เลย

    จากนั้นติ๊กเลือกทุก Sheet แล้วกด Transform ได้เลย (การเลือกติ๊กถูกข้างหน้าหลายอันพร้อมกัน แปลว่า เอาแต่ละอันแยกกันเป็นคนละ Query รายละเอียดลองอ่านได้ที่นี่)

    Power BI ตอนที่ 07: เริ่ม Get Data ตั้งแต่ไฟล์ยังว่างเปล่า 223

    แล้วมันก็จะเปิด Query Editor ขึ้นมา เราก็จะเห็นว่ามี Query จากทุกๆ ตารางเรียบร้อยแล้ว (แยกตารางละ 1 Query) และเราจะพบว่ามันจัดการเรื่อง Header ให้เราเสร็จแล้ว ไม่มีปัญหาอะไร

    ทั้งนี้เพราะว่าในแต่ละ Sheet มีตารางอยู่อันเดียว และตารางบรรทัดบนสุดเป็นหัวตารางเรียบร้อย จึงไม่จำเป็นต้องทำเป็น Table ก็สามารถดึงมาใช้ได้โดยไม่ยากลำบากนัก

    ใครทำกับข้อมูลจริงของตัวเองแล้วยากลำบาก ต้องลองอ่านบทความการดึงข้อมูลจาก Excel อันนี้ดู จะได้เข้าใจว่าการดึงข้อมูลจาก Excel ทำงานยังไง

    Power BI ตอนที่ 07: เริ่ม Get Data ตั้งแต่ไฟล์ยังว่างเปล่า 224

    เริ่มดึงตาราง Transaction หลัก

    ต่อไปเราจะเริ่มดึงข้อมูลจากตาราง Transaction หลัก (จากไฟล์ CSV ทั้งหมดใน Folder Contoso) โดยขณะอยู่ใน Query Editor ก็กดที่ New Source -> More -> Folder ได้เลย

    จากนั้นให้ Browse เลือก Folder Contoso ที่ผมเตรียมไว้ให้ แล้วกด Transform Data จะได้แบบนี้ ซึ่งมันได้ List ไฟล์ทุกอันที่อยู่ Folder นั้น (และ Sub Folder ถ้ามี) มาให้แล้ว

    Power BI ตอนที่ 07: เริ่ม Get Data ตั้งแต่ไฟล์ยังว่างเปล่า 225

    สิ่งที่เราต้องการเอามารวม มีแค่ไฟล์ CSV เท่านั้น ดังนั้นเราต้องทำการ Filter เลือก Extension แค่ .csv เท่านั้น (สังเกตที่สูตรด้วยว่า มันเอานามสกุล .csv ถ้าใครไม่เห็นสูตร ให้ไปที่ View-> Formula Bar นะ)

    Power BI ตอนที่ 07: เริ่ม Get Data ตั้งแต่ไฟล์ยังว่างเปล่า 226

    หลังจาก Filter แล้วให้กดปุ่ม Combine ที่มุมคอลัมน์ Content ดังรูป เพื่อสั่งให้มันรวมทุกไฟล์เข้าด้วยกัน

    ถ้าดู Preview แล้วไม่มีปัญหาอะไรก็กด ok ได้เลย และนี่คือหน้าตาผลลัพธ์ที่ออกมา (ถ้าของจริงที่มีข้อความภาษาไทยด้วย ต้องระวังเรื่อง encoding ดีๆนะ)

    Tips : การรวมทุกไฟล์ใน Folder เข้าด้วยกัน มันจะทำตาม Step ที่ระบุใน Transform Sample File ด้านซ้ายมือ หากเราไปแก้ Step ในนั้น ผลลัพธ์สุดท้ายก็จะเปลี่ยนไปด้วย

    Power BI ตอนที่ 07: เริ่ม Get Data ตั้งแต่ไฟล์ยังว่างเปล่า 227

    ตรงคอลัมน์ DateKey จะเห็นว่ามันยังเป็น text อยู่ ไม่ใช่วันที่ เดี๋ยวเราจะทำการเปลี่ยนให้เป็นวันที่ซะ โดยกด Using Locale… เพื่อระบุรูปแบบวันที่ของไฟล์ input แบบเป๊ะๆ จะได้ไม่พลาด (ถ้าเดิมไม่ใช่ Text จะกด Using locale ไม่ได้ผลนะ ถ้าของเดิมถูกเปลี่ยนเป็นวันที่ไปแล้วแต่ผิดรูปแบบ ให้ปรับกลับเป็น Text โดย Replace Current Step ก่อน)

    Power BI ตอนที่ 07: เริ่ม Get Data ตั้งแต่ไฟล์ยังว่างเปล่า 228

    ถ้าลองสำรวจดูจะพบว่าไฟล์ csv นี้บันทึกวันที่เป็น text มาในรูปแบบ dd/mm/yyyy ค.ศ. ดังนั้นต้องเลือกเป็น Date แบบ English (United Kingdom) ประเทศอังกฤษนะ ไม่ใช่อเมริกา

    Power BI ตอนที่ 07: เริ่ม Get Data ตั้งแต่ไฟล์ยังว่างเปล่า 229

    จากนั้นผลลัพธ์จะแปลงเป็นวันที่ได้ถูกต้อง (แต่จะเห็น Format ของวันที่ใน Query Editor ตามที่ตั้งใน Control Panel ซึ่งแต่ละคนอาจไม่เหมือนกัน ของผมตั้งเป็น Thai เลยออกมาเป็น พ.ศ.)

    Power BI ตอนที่ 07: เริ่ม Get Data ตั้งแต่ไฟล์ยังว่างเปล่า 230

    ทีนี้เราไม่ต้องการคอลัมน์ Source.Name แล้วก็ลบทิ้งไปซะ

    และเปลี่ยนชื่อ Query เป็น fSales ด้วย (ชื่อ Query จะกลายเป็นชื่อ Table ใน Data Model นะ)

    Power BI ตอนที่ 07: เริ่ม Get Data ตั้งแต่ไฟล์ยังว่างเปล่า 231

    เอาข้อมูลเข้า Data Model

    ตอนนี้เราได้ข้อมูลครบทุก Table ที่จำเป้นแล้ว ก็สามารถกด Close & Apply เพื่อเอาตารางทั้งหมดเข้าสู่ Data Model ซะที

    Power BI ตอนที่ 07: เริ่ม Get Data ตั้งแต่ไฟล์ยังว่างเปล่า 232

    คราวนี้ให้ลองกดไปที่หน้า Model เราก็จะเห็นว่า Power BI มันสร้างความสัมพันธ์ให้เราเองเลย (ทั้งนี้เพราะว่าชื่อ Field ที่เป็น Key เชื่อมตารางแต่ละคู่นั้นใช้ชื่อ Field เดียวกัน)

    ใครที่ตารางดูเละเทะ ดูไม่รู้เรื่อง ให้ลองกดปุ่ม Reset Layout ด้านขวาล่างดูครับ

    Power BI ตอนที่ 07: เริ่ม Get Data ตั้งแต่ไฟล์ยังว่างเปล่า 233

    เอาล่ะ ตารางพวกนี้ก็เข้าไปใน Data Model ครบหมดแล้ว ในตอนนี้ก็ขอจบเพียงเท่านี้ก่อนนะครับ

    เตรียมตัวจัดหน้าตา Data Model ในตอนหน้า

    ในตอนหน้า เราจะมาทำความเข้าใจเพิ่มเติมว่า Data Model ที่ดีที่สุดใน Power BI จะต้องเป็นรูปแบบใด และเราจะใช้ Power Query ช่วยจัดหน้าตาของตาราง ให้มาอยู่ในรูปแบบของ Data Model ที่ต้องการได้ยังไง?

    สำหรับตอนนี้ใครทำแล้วติดตรงไหนก็ถามได้เลยนะครับ

    สารบัญ Series Power BI

    ใครสนใจอยากเรียนเป็นคลิปวีดีโอ ผมมี

  • Power BI ตอนที่ 06: การปรับแต่งสีใน Visual ด้วย Conditional Format

    Power BI ตอนที่ 06: การปรับแต่งสีใน Visual ด้วย Conditional Format

    ในตอนนี้เราจะมาเรียนรู้เรื่องการปรับแต่งสีใน Visual ด้วย Conditional Format ซึ่งก็จะยังจะใช้ไฟล์เดิมกับตอนที่ 4 มาทำงานต่อนะครับ (ตอนสุดท้ายแล้วล่ะ) เดี๋ยวตอนหน้าเราจะเริ่มทำตั้งแต่ไฟล์ Power BI เปล่าๆ แล้ว Get Data กันใหม่ จาก Excel และ Folder ที่มี CSV หลายไฟล์อยู่ในนั้นนะครับ ความมันส์ที่แท้จริงกำลังจะมาถึงแล้ว 555

    สีโดยพื้นฐานของ Power BI นั้นมาจาก Theme

    เราสามารถเปลี่ยน Theme สีได้ในเมนู Home แล้วเลือก Switch Theme ซึ่งมี Theme Gallery ให้ Download ด้วยนะ (ต้องโหลดไฟล์ นามสกุล .json มาจาก gallery ใน internet แล้วกด import theme ในโปรแกรมแล้วเลือกไฟล์ที่โหลดมา)

    Power BI ตอนที่ 06: การปรับแต่งสีใน Visual ด้วย Conditional Format 234

    พอเราเปลี่ยน Theme ปุ๊ป สีต่างๆ ก็จะเปลี่ยนทั้งชุดเลย

    Power BI ตอนที่ 06: การปรับแต่งสีใน Visual ด้วย Conditional Format 235

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

    Conditional Format สุดเจ๋ง

    คราวนี้ผมสร้างกราฟแผนที่บ้าง โดยเลือก RegionCountryName มาดูโดยให้ TotalSales เป็น Size (ยิ่งขายได้ยอดเยอะ วงกลมก็จะยิ่งใหญ่)

    ป.ล. กราฟแผนที่ต้องใช้ Internet ด้วยนะ ไม่งั้นมันไม่ขึ้น

    Power BI ตอนที่ 06: การปรับแต่งสีใน Visual ด้วย Conditional Format 236

    ผมคิดว่า ในเมื่อเราดูยอดขายจากขนาดวงกลมได้แล้ว ผมเลยอยากให้สีของวงกลมแสดงถึงอัตรากำไร หรือ ProfitMargin บ้าง จะได้เห็นข้อมูลได้หลายมิติมากขึ้น (ซึ่งผมได้สร้าง Measure ไว้แล้วแต่แรกว่า เกิดจาก TotalProfit/TotalSales )

    นี่แหละถึงคราวที่จะต้องใช้ Conditional Format แล้ว!!

    Visual ส่วนใหญ่จะซ่อน Conditional Format ไว้

    เราสามารถกำหนดสีตามค่าใน Measure ที่ต้องการได้ โดยใช้ Conditional Format มาช่วย ซึ่งในหลายๆ Visual มันก็หลบๆ ซ่อนๆ อยู่ในแปรงทาสี เช่น ในส่วน Data Color ของกราฟแผนที่ตัวนี้ ซึ่งสามารถกดที่ … (จุด 3 อัน) หรือจะกดคลิ๊กขวาที่พื้นที่ว่างก็ได้ แล้วกด Conditional Formatting (โคตรงงว่าคนออกแบบมันจะซ่อนเมนูนี้ไว้ทำไมฟะ…)

    Power BI ตอนที่ 06: การปรับแต่งสีใน Visual ด้วย Conditional Format 237

    สมมติผมอยากให้มันไล่สีจากสีนึงไปอีกสี ผมก็สามารถใช้แบบ Color Scale ได้ และที่สำคัญคือเราสามารถกำหนดให้มันไล่สีโดยยึดจาก Measure ชื่อ ProfitMargin ได้ (แม้ Measure นี้ไม่ได้อยู่ใน Visual แต่แรกด้วยซ้ำ)

    ซึ่งมี tips เล็กๆ น้อยๆ ว่าให้เลือก Diverging ด้วยเพื่อให้เราสามารถกำหนดสีตรงกลางได้ (ถ้าไม่กำหนด สีจะค่อนข้างเน่า ไม่สวย)

    Power BI ตอนที่ 06: การปรับแต่งสีใน Visual ด้วย Conditional Format 238

    แค่นี้เราก็สามารถให้มันสามารถแสดงสีที่ต่างกันโดยขึ้นกับกำไรได้แล้ว แบบนี้ก็จะเห็นชัดขึ้นว่าประเทศแถวยุโรปมีหลายตัวที่กำไรดี (สีเขียว)

    Power BI ตอนที่ 06: การปรับแต่งสีใน Visual ด้วย Conditional Format 239

    ในทำนองเดียวกันกราฟแท่งมันก็ซ่อน Conditional Format ไว้อยู่ในแปรงทางสี จุด 3 อัน เหมือนกัน คราวนี้ผมเปลี่ยนเป็นแบบ Rules แทน Color Scale บ้าง เพื่อกำหนดได้เลยว่าค่ามากกว่าเท่าไหร่ น้อยกว่าเท่าไหร่ ให้เป็นสีอะไร

    Power BI ตอนที่ 06: การปรับแต่งสีใน Visual ด้วย Conditional Format 240

    Visual ที่แสดง Conditional Format ชัดๆ

    Visual ที่มีเมนู Conditional Format ให้เห็นชัดๆ เลย ในแปรงทาสีก็คือพวกตาราง Table กับ Matrix นี่แหละ ซึ่งปรับ Conditional Format ได้หลากหลายกว่าแบบที่ซ่อนอยู่ เช่น จะทำเป็น Data Bar หรือ Icon Set ก็ได้

    Power BI ตอนที่ 06: การปรับแต่งสีใน Visual ด้วย Conditional Format 241

    และแน่นอนว่าเรายังสามารถตั้ง Conditional Format Based on Measure อื่นได้ เช่น Profit Margin

    Power BI ตอนที่ 06: การปรับแต่งสีใน Visual ด้วย Conditional Format 242

    ไม่ใช้ Conditional Format ก็ได้

    ถ้าเราอยากกำหนดสีให้แต่ละ Category เอง โดยไม่ใช้ Conditional Format ก็ได้นะ

    สมมติว่าเราอยากจะเน้นการนำเสนอไปที่ Camera and Camcorders เราอาจจะปรับสีของมันให้เด่นอยู่อันเดียวก็ได้ โดยไปที่แปรงทาสี แล้ว Data Color จากนั้นให้ติ๊กเลือก Show all เพื่อให้สามารถกำหนดสีของแต่ละแท่งได้อย่างอิสระนั่นเอง

    Power BI ตอนที่ 06: การปรับแต่งสีใน Visual ด้วย Conditional Format 243

    บทนี้จบแล้วล่ะ

    เอาล่ะ คิดว่าทุกคนน่าจะพอเห็นภาพแล้วว่า การทำ Report เบื้องต้นทันทำอะไรได้ ซึ่งจริงๆ ยังทำได้อีกเยอะมาก เช่น Page Tool Tips / Bookmark / Button แต่เดียวเราค่อยมาว่ากันทีหลัง

    เดี๋ยวบทถัดไปเราจะมาเริ่มสร้างงานจากไฟล์เปล่าๆ กันล่ะ เพื่อที่จะดูว่า กว่าจะมาเป็นไฟล์ Power BI ที่พร้อมให้เล่นได้ เราต้องผ่านอะไรมาบ้าง ^^

    สารบัญ Series Power BI

    ใครสนใจอยากเรียนเป็นคลิปวีดีโอ ผมมี

  • Power BI ตอนที่ 05: วิธีการ Drill เพื่อเจาะลึกข้อมูลใน Report

    Power BI ตอนที่ 05: วิธีการ Drill เพื่อเจาะลึกข้อมูลใน Report

    ในบทความที่แล้ว เราได้ลงมือสร้าง Report แรกกันไปแล้ว คราวนี้เราจะลองมาใช้ฟังก์ชันในการเจาะลึกข้อมูลเพื่อที่จะได้ค้นพบ insights อะไรบางอย่างมากขึ้น โดยใช้ไฟล์เดิมจากบทความที่แล้วมาทำนะครับ (จะทำต่อจากเดิม หรือโหลดไฟล์ตั้งต้นมาทำในบทนี้เลยก็ได้)

    สร้าง Hierarchy

    สิ่งที่ควรทำใน Step แรกก็คือการสร้าง Hierarchy ให้กับ Field ซะก่อน ว่า Field ไหนเป็นแม่ลูกกัน เวลากดเจาะลึกแม่ก็จะเห็นรายละเอียดลูกได้เลย และเวลาลากไปใช้ใน Visual ลากทีเดียวจะไปทั้งแม่และลูกได้เลย ทำให้เกิดความสะดวกขึ้น

    ยกตัวอย่างเช่น ProductCategory เป็นแม่ซึ่งมีลูกคือ ProductSubCategory แบบนี้ใน Field ด้านขวาเราก็สามารถสร้าง Hierarchy ได้โดยการลากลูกไปหาแม่ได้เลย

    Power BI ตอนที่ 05: วิธีการ Drill เพื่อเจาะลึกข้อมูลใน Report 244

    พอปล่อยปุ๊ปก็จะได้ Hierarchy ขึ้นมาเลยแบบนี้

    Power BI ตอนที่ 05: วิธีการ Drill เพื่อเจาะลึกข้อมูลใน Report 245

    ข้อสังเกตคือ Field เดิมก็ยังอยู่นะ ไม่ได้หายไปไหน

    ที่นี้เราสามารถสร้าง Hierarchy ซ้อนอีกชั้นได้ เช่น ลาก ProductName ไปเป็นลูกอีกทีที่ Hierarchy ตัวเดิม (ลากเข้าตัวที่มีคำว่า Hierarchy นะ) ก็จะได้แบบนี้

    Power BI ตอนที่ 05: วิธีการ Drill เพื่อเจาะลึกข้อมูลใน Report 246

    ทีนี้สมมติเราสร้างกราฟแท่ง เพื่อแสดง ProductCategory Hierarchy แสดงคู่กับ TotalSales ก็จะได้แบบนี้

    Power BI ตอนที่ 05: วิธีการ Drill เพื่อเจาะลึกข้อมูลใน Report 247

    จะเห็นว่า Field มันเช้าไปทั้ง Set เลย โดยที่จะแสดงตัวแม่ใหญ่สุดก่อน

    Go to Next Level

    ถ้าอยากจะแสดง Level ถัดไป ให้กดปุ่มลูกศรชี้ลงคู่ (Go to Next Level)

    Power BI ตอนที่ 05: วิธีการ Drill เพื่อเจาะลึกข้อมูลใน Report 248

    มันก็จะแสดงข้อมูลระดับ ProductSubCategory แทน (ถ้ากดอีกทีก็จะลงลึกเข้าไปอีก)

    Power BI ตอนที่ 05: วิธีการ Drill เพื่อเจาะลึกข้อมูลใน Report 249

    Drill Up

    ถ้าจะย้อนกลับขึ้นมาที่ระดับแม่ ก็ให้กด icon ลูกศรขึ้น (Drill Up) ก็จะกลับขึ้นมาได้

    สรุปคือ

    • กดลูกศรคู่ชี้ลง เพื่อลงไป 1 Level = เรียกว่า Go to Next Level
    • กดลูกศรขึ้น เพื่อขึ้นมา 1 Level = เรียกว่า Drill Up

    Drill Down

    ทีนี้บางทีการแสดง Level ลูกทั้งหมดเลย มันก็จะเยอะเกินไปจนดูไม่รู้เรื่อง เราสามารถเปิดโหมด Drill Down เพื่อทำการเจาะลง Level ลูกเฉพาะที่เราคลิ๊กได้

    วิธีเปิดโหมด Drill Down คือกดลูกศรลงอันเดียว จะได้ลูกศรลงแบบสีดำทึบดังรูป (แปลว่าตอนนี้อยู่ในโหมด Drill Down เรียบร้อยแล้ว)

    Power BI ตอนที่ 05: วิธีการ Drill เพื่อเจาะลึกข้อมูลใน Report 250

    คราวนี้ถ้าเราคลิ๊กเข้าไปที่แท่งใดแท่งหนึ่ง มันจะเจาะลึกเฉพาะลูกของแท่งนั้นเท่านั้น (ไม่ได้แสดงลูกทุกอันแบบเดียวกับ Go to Next Level) ซึ่งจะทำให้คนอ่าน Report สามารถ Focus เฉพาะอันที่สนใจได้

    เช่นถ้าผมคลิ๊กเข้าไปที่ Cameras and camcorders จะได้ดังรูป

    Power BI ตอนที่ 05: วิธีการ Drill เพื่อเจาะลึกข้อมูลใน Report 251

    Expand all down one level

    คราวนี้ถ้าเราอยากจะแสดงทั้งแม่และลูกคู่กันเลย ถ้าตอนนี้เราอยู่ที่ตัว Category แล้ว สามารถกกดปุ่ม Expand all down one level ได้ (Mode drill down จะค้างอยู่หรือไม่ก็ได้ ไม่เกี่ยวกัน)

    Power BI ตอนที่ 05: วิธีการ Drill เพื่อเจาะลึกข้อมูลใน Report 252

    คราวนี้มันจะแสดงระดับลูกออกมา แต่มี Label แม่มาอยู่คู่ด้วย

    Power BI ตอนที่ 05: วิธีการ Drill เพื่อเจาะลึกข้อมูลใน Report 253

    วิธีทำ Label 2 ชั้น

    ส่วนตัวแล้ว ผมจะชอบปรับให้ Label แกน X แสดงเป็น Label 2 ชั้น จะได้ดูง่ายขึ้น วิธีทำก่อนอื่นให้กด … เพื่อ Sort ให้เรียงตาม Label แกน X ไม่ใช่เรียงตาม Value (ตอนแรกมันเรียงจาก Value มากไปน้อย)

    Power BI ตอนที่ 05: วิธีการ Drill เพื่อเจาะลึกข้อมูลใน Report 254

    คราวนี้มันจะเอาตัวแม่เดียวกันมาอยู่ใกล้กัน แต่ก็ยังดูยากอยู่ ต้องปรับอีกนิดนึง

    Power BI ตอนที่ 05: วิธีการ Drill เพื่อเจาะลึกข้อมูลใน Report 255

    ให้ไปที่แปรงทาสี แล้วไปที่ X-Axis แล้วเลือก Concatenate Label เป็น Off ซะ แบบนี้มันจะแสดง Label 2 ชั้น ซึ่งดูง่ายกว่า

    Power BI ตอนที่ 05: วิธีการ Drill เพื่อเจาะลึกข้อมูลใน Report 256

    จบก่อนดีกว่า เริ่มยาวละ

    ในตอนหน้าเราจะมาเรียนรู้เรื่องการปรับสีของ Visual ตามค่าที่กำหนด ซึ่งเราจะใช้ Conditional Format มาช่วยเรื่องนี้ได้ครับ รอติดตามได้เลย

    และเช่นเดิม ใครคำถามอะไรก็ comment ได้เลยนะครับ

    สารบัญ Series Power BI

    ใครสนใจอยากเรียนเป็นคลิปวีดีโอ ผมมี

  • Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI

    Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI

    ในบทความนี้เดี๋ยวเราจะได้มาลองสร้าง Report ใน Power BI Desktop กันซักทีครับ โดยที่ผมเองเอา Dataset ดั้งเดิม ชื่อ Contoso มาจากที่นี่ (เพราะขี้เกียจทำเอง 555) แต่ว่าเนื่องจากไฟล์มันใหญ่เกินไปปป (มี Transaction ประมาณ 2 ล้านกว่าๆ) ผมเลยคิดว่าคงไม่เหมาะกับการที่จะให้เพื่อนๆ โหลดไฟล์นั้นตรงๆ

    สรุปแล้วโหลดไฟล์นี้ไปใช้นะ

    ผมก็เลย Random Transaction เอามาแค่ 1 ใน 10 ก็คิดว่าน่าจะพอแล้ว (ประมาณ 2 แสน) และผมก็ตัดคอลัมน์หลายๆ อย่างที่ไม่จำเป็นออกไปด้วย

    สรุปแล้วก็โหลดไฟล์ Power BI อันนี้ที่ Google Drive ได้เลย
    (หรือถ้าข้างบนไม่ได้ก็โหลดอันนี้ที่ GitHub )

    ผมผูก Data Model และเขียนสูตร DAX ที่จำเป็นให้หมดแล้วด้วย

    เริ่มต้นที่ผลลัพธ์

    ตอนแรกคิดว่าจะสอนให้ทุกท่านทำตั้งแต่ขั้นตอน Get Data แล้วมาทำ Data Model มาเขียน DAX จากนั้นค่อยทำ Report ตาม Step ที่ผมบอกไว้ในบทที่แล้ว

    แต่เนื่องจากผมคิดว่าวิธีที่ดีกว่าคือให้ทุกคนได้รู้ก่อนว่าเป้าหมายปลายทางของเราคือแบบไหน (เหมือนหลักการ Begin with the End in Mind ในหนังสือ 7 Habits ไง) ดังนั้นผมจะทำขั้นตอนทุกอย่างให้เสร็จสรรพแล้ว เหลือแต่การสร้าง Visual เท่านั้นที่เราจะมาทำในบทความนี้

    เมื่อเราเข้าใจการสร้าง Report ว่ามันทำอะไรได้โดยเบื้องต้นแล้ว หลังจากนั้นค่อยกลับไปทำตั้งแต่ขั้นตอน Get Data กันอีกทีในตอนถัดไปครับ

    สรุปคือ เพื่อนๆ อย่าเพิ่งทำของยากอย่าง Query Editor กับ DAX เรามาเรียนของง่ายอย่าง Report กันก่อนดีกว่า จะได้มีกำลังใจนะ 555

    ลองเปิดไฟล์ดู

    หลังจากเปิดไฟล์มาทุกคนจะเจอหน้า Report ที่ว่างเปล่า แต่ว่ามี Field ที่ใช้งานได้อยู่ด้านขวามือเรียบร้อยแล้ว ดังนี้

    Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI 257

    ซึ่งไฟล์นี้ผมได้มีการผูก Data Model ไว้เรียบร้อยหมดแล้วดังนี้ (คลิ๊กที่ icon Model ซ้ายมือเพื่อดู Data Model)

    Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI 258

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

    นอกจากนั้นผมยังเขียน Measure ให้หมดแล้ว (ที่เป็น icon รูปเครื่องคิดเลข) ถ้าอยากวิเคราะห์เรื่องไหนก็ลากเรื่องนั้นลง Report ได้เลยเช่นกัน

    Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI 259

    ลงมือสร้าง Report แรก

    เมื่อ Data Model พร้อม DAX พร้อม งั้นการสร้าง Report ก็ง่ายสุดๆ วิธีการสร้างก็คือเลือกรูปแบบ Visual ที่ต้องการ จากนั้นก็ลาก Field ที่ต้องการจะวิเคราะห์ลงไปเป็น Axis/Category และลาก Measure ที่ต้องการจะวัดลงไปใน Value แค่นั้นก็จบแล้ว

    Visual แรก

    สมมติอยากทราบยอดขายราย Product Category โดยแสดงเป็นกราฟแท่ง…

    เราก็เลือกกราฟแท่งก่อน จากนั้นลาก ProductCategory จากตาราง dProduct ลงมา และลาก TotalSales จากตาราง fSales ลงมา

    Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI 260

    สมมติว่าอยากแบ่งสีตามปีที่ขาย ก็ลาก Year จาก dDate ลงมาที่ Legend ก็ได้ (ลากมาที่ Legend คือแบ่งหลายๆ สี)

    Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI 261

    เห็นมั้ยว่าตอนนี้เราสามารถสร้างกราฟ โดยใช้ข้อมูลจาก 3 ตาราง ที่มีความสัมพันธ์กันโดยไม่ต้องมีการ VLOOKUP อะไรเลยนะ คือ

    • TotalSales จาก fSales (เป็น DAX Measure ที่คำนวณจาก Data บน fSales)
    • ProductCategory จาก dProduct (เป็น Field ดิบบน dProduct)
    • Year จาก dDate (เป็น DAX New Column = Field บน dDate)

    วิธีเปลี่ยนตัวหนังสือให้ใหญ่ขึ้น

    ความรู้สึกแรกของผมของการสร้างกราฟใน Power BI คือ ทำไม Font มันตัวเล็กจังฟะ?

    ทั้งนี้เป็นเพราะ View ที่เราดูมันถูก Resize ให้ Fit หน้าจอ มันก็เลยย่อลงครับ (ถ้าจะดูแบบขนาดที่แท้จริง ต้องไปที่ View -> Page View -> Actual Size

    Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI 262

    แต่ว่าในบางทีเราก็อยากจะดูแบบ Fit to Page นี่แหละ แต่อยากจะขยาย Font ให้ใหญ่ขึ้นอยู่ดี วิธีทำที่ง่ายสุดคือเลือก Visual ที่ต้องการ แล้วไปที่แปรงทาสี แล้ว search คำว่า Text Size เพื่อ Filter option ให้เหลือแค่เรื่อง Text Size จากนั้นค่อยเปลี่ยนขนาดตามต้องการ

    Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI 263

    ลองใส่ Visual ที่สองเพื่อลอง Interaction

    ที่นี้ให้เราลองสร้าง Visual อีกอัน เป็น Pie Chart ก็ได้ (จริงๆ ผมเกลียด Pie Chart นะ 555) แล้วให้แสดง TotalSales แบ่งโดย ContinentName ที่ลากจาก dStore

    Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI 264

    ทีนี้ลองคลิ๊กที่กราฟแท่งเล่นๆ เช่น ผมคลิ๊ก Computer ปี 2013 จะเห็นว่ามันมี Interaction กับกราฟ Pie Chart ด้วย (แบบนี้เรียกว่าการ Highlight)

    Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI 265

    ถ้ากดซ้ำไปที่เดิมอีกทีจะเป็นการยกเลิกการเลือก (สีจางๆ ทั้งหมดจะหายไป)

    ถ้ากด Ctrl+Click ไปเรื่อยๆ เช่น Ctrl+Click Computer ปี 2012 ด้วย จะเป็นการเพิ่มการเลือก เป็นรวมทั้ง Computer ปี 2012 และ 2013

    ทีนี้ผมเลือก Computer และ Camera ทั้งปี 2012 และ 2013 เลย จะเห็นว่าส่วน Highlight ใหญ่ขึ้นตาม

    Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI 266

    ถ้าเราอยากให้ Interaction เปลี่ยนจากการ Highlight เป็น Filter แทน ก็สามารถทำได้โดยให้เลือกที่กราฟต้นทางก่อน (คือกราฟแท่ง) แล้วไปที่ Format -> Edit Interactions จากนั้นที่มุมของกราฟปลายทาง (กราฟ pie) ให้เลือกรูปแบบการ Filter ที่มีรูปกรวยแทน

    Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI 267

    การทำแบบนี้เป้นการกำหนดว่า เมื่อกดที่กราฟแท่ง จะมี interaction ไปที่กราฟ pie แบบ filter (ซึ่งเรากำหนด interaction แยกกันสำหรับ Visual แต่ละคู่ได้อย่างอิสระ)

    Card = Visual แสดงตัวเลขชัดๆ

    ทีนี้เราจะสร้าง Visual ที่ง่ายๆ แต่มีประโยชน์อย่าง Card กันครับ ซึ่ง Card เหมาะกับการนำไปแสดงตัวเลขที่มีความสำคัญ เช่น ยอดขาย ต้นทุน กำไร เป็นต้น

    Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI 268

    คราวนี้กด + ด้านล่างเพื่อสร้างหน้าใหม่ได้แล้วล่ะ (หน้าเดิมเต็มละ)

    Table / Matrix เอาไว้สำหรับคนชอบผลลัพธ์เป็นตาราง

    สำหรับคนรัก PivotTable อย่างผม Visual ที่ผมชอบมากที่สุดอันนึงก็คือ Table/Matrix นั่นเอง

    มาลองดู Table ก่อน

    ให้สร้าง Table โดยใส่ Field ดังรูปลงไปใน Value มันจะสร้างตารางโดยใช้ field เหล่านั้นไปเรื่อยๆ

    ผมมองว่า Table เหมือนกับเราใช้ PivotTable โดยมีแค่ Rows กับ Values
    โดยเอา Field ไปไว้ที่ Rows (ซ้อนได้เรื่อยๆ) แล้วเอา Measure ลากเข้า Value ของ Pivot เพื่อทำการสรุปข้อมูล

    Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI 269

    ถ้าเป็น Matrix ล่ะ?

    ถ้าเป็น Matrix มันก็จะคล้ายกับ Pivot Table ที่มีทั้ง Rows Columns และ Values

    Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI 270

    โดยที่เราก็ยังสามารถเปลี่ยนตำแหน่งของ Values มาไว้ที่ Rows ได้เช่นเดียวกับ Pivot ใน Excel เลย แต่ใน Power BI เราต้องมาปรับที่เมนูแปรงทาสี ให้ Show on row

    Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI 271

    เพื่อนๆ น่าจะเห็นแล้วว่ามันคล้ายกับ Pivot Table มากๆ เลย ดังนั้นคนที่ใช้ Pivot Table เป็นก็น่าจะใช้ Power BI ได้ไม่ยากเนอะ

    แล้วตัวเลขที่แสดงบน Visual คำนวณมาจากไหน?

    จากที่เคยบอกไปในบทที่ 2 ว่า Pivot Table ใน Excel มีวิธีคำนวณค่าจาก Filter Context ผมก็จะบอกว่าใน Power BI ก็เช่นกันครับ สิ่งที่แสดงอยู่ใน Visual ทุกอย่าง ถูกคำนวณมาจากการที่ Visual ตัวนั้นมีการ Filter ในบริบทที่แตกต่างกัน (Filter Context) นั่นเอง

    Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI 272

    อย่างเช่น เลข 109,797,472.43 ที่ผมวงไว้ ก็มาจากการ Filter Product Category ใน เป็น Computers และ Filter Year เป็น 2013 จากนั้นค่อยคำนวณ TotalSales (ที่เคยสอนไว้ว่า Filter ก่อนแล้วค่อยคำนวณ จำได้มะ?)

    แต่คราวนี้ถ้าคิดดีๆ มันเป็นการ Filter ข้ามตารางนะ ไม่ได้ Filter ในตาราง fSales ตรงๆ ซะหน่อย!!

    การ Filter ที่เกิดขึ้นเป็นแบบนี้ครับ

    • เรา Filter ProductCategory ในตาราง dProduct เป็น Computers
    • เรา Filter Year ในตาราง dDate เป็น 2013

    สิ่งที่เกิดขึ้นคือ การ Filter มันวิ่งข้าม Relationship ใน Model มาทำการ Filter ตาราง fSales ของเราด้วย!! ทำให้ผลลัพธ์ที่คำนวณได้มาจากจำนวน Record หรือจำนวนแถวที่ลดลงนั่นเอง

    Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI 273

    สังเกตว่าถ้ามองใน Data Model ของเรา ที่เส้น Relationship จะมีลูกศรที่บอกทิศทางของการ Filter ด้วยว่ายอมให้ไปทิศทางไหน

    แปลว่าหากเราสั่ง Filter จาก dProduct มันจะมา Filter ข้อมูลบนตาราง fSales ได้ (เพราะทิศทาง Filter ยอมให้ทำ) ซึ่งตรงกับ Visual ของเราที่ใช้ Measure ชื่อ TotalSales ซึ่งสร้างมาจากข้อมูลบนตาราง fSales นั่นเอง ค่าตัวเลขมันจึงเปลี่ยนไปได้

    Tips : สำหรับคนที่อยากรู้ว่า TotalSales สูตรคืออะไร สามารถคลิ๊กที่ Measure ได้นะครับ จะเห็นว่าสูตรเป็นแบบนี้

    TotalSales = SUMX(fSales,fSales[SalesQuantity]*RELATED(dProduct[UnitPrice]))

    ตอนนี้คุณอาจยังไม่เข้าใจสูตรนี้ แต่ว่ามันคือการคำนวณโดย
    เอาจำนวน SalesQuantity * UnitPrice ให้ออกมาเป็นผลลัพธ์ในแต่ละบรรทัด
    จากนั้นแล้วค่อย SUM ผลลัพธ์ทุกบรรทัดในตาราง fSales ครับ

    และถ้าทำการ Filter ย้อนทางจะเกิดอะไรขึ้น?

    แต่ถ้าเราดันลาก ข้อมูลมาจากตาราง dStore เช่น EmployeeCount แล้วลากมาสรุปด้วยการ Sum โดยที่ดันลาก Field หลัก มาจากตารางอื่น เช่น Year จาก dDate เราจะเห็นผลลัพธ์แบบนี้

    Power BI ตอนที่ 04: สร้าง Report แรก ใน Power BI 274

    เราจะได้เลขที่ดูซ้ำๆ กันหมดเลย (และเท่ากับตัว Total รวมด้วย) เป็นเพราะว่าการ Filter มันทำงานข้าม Relationship แบบย้อนลูกศรไม่ได้ ก็แปลว่าไม่มีการ Filter เกิดขึ้นนั่นเอง

    วันนี้พอก่อนดีกว่า

    สำหรับบทความนี้ก็เช่นเคยครับ ใครมีคำถามอะไรก็ถามได้เลยนะ เดี๋ยวตอนหน้าเรามาเล่นเรื่องการ Drill Through และพวก Report Tool Tips กันครับ

    สารบัญ Series Power BI

    ใครสนใจอยากเรียนเป็นคลิปวีดีโอ ผมมี

  • Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop

    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop

    เอาล่ะในบทความนี้จะเริ่มมาแตะที่ตัว Power BI กันซะที แต่ต้องบอกก่อนว่าเป็นการอธิบายภาพรวมให้เข้าใจขั้นตอนก่อนนะ เดี๋ยวเราจะลงมือทำกันจริงๆ ในบทความต่อไปครับ

    แต่เตือนเลยว่าบทความนี้ยาวหน่อยนะครับ อยากให้ทุกคนเห็นภาพว่าจะต้องเจออะไรบ้างน่ะ

    ปล. ในบทความนี้ผมเอา Dataset จากคลิปนี้ของ ExcelisFun มาดัดแปลง (ตัดทิ้งบางส่วน) เล็กน้อยเพื่อทำรูปประกอบนะครับ จริงๆ คลิปของ อ. Mike ก็สอนได้ครบถ้วนมากๆ แล้ว ใครไม่มีปัญหาด้านภาษาอังกฤษนี่ผมแนะนำให้ดูเป็นอย่างยิ่งเลยนะ

    ขั้นตอนในการทำงานใน Power BI มีดังนี้

    หลังจากที่โหลดโปรแกรม Power BI Desktop และ install เสร็จหมดแล้ว การทำงานที่ดีใน Power BI ควรจะมีขั้นตอนดังนี้ (ถ้าทำแบบชุ่ยๆ เร็วๆ อาจจะไปทำ Report เลย โดยไม่ Transform Data / ไม่ผูก Model/ ไม่เขียน DAX เลยก็ได้นะ ถ้า Data มันง่ายมากๆ)

    แต่สำหรับบทความนี้เราจะพูดถึงขั้นตอนแบบที่ครบถ้วนจริงๆ ให้ทุกท่านเห็นภาพก่อน

    1. Get Data / Transform Data เพื่อเอาข้อมูลเข้า Power BI
    2. สร้าง Data Model ผูก Relationship ระหว่างตาราง Data
    3. เขียนสูตร DAX เพื่อสร้าง Column/Measure/Table ที่จำเป็น
    4. สร้าง Report ด้วย Visual หรือ กราฟต่างๆ

    หลังจากนั้นเราสามารถกด Publish งาน จาก Power BI Desktop ขึ้น Power BI Service เพื่อไปทำขั้นตอนอื่นๆ ที่ต้องการความสามารถในการ Online ของ Power BI Service ซึ่งผมจะยังไม่พูดถึง ณ ตอนนี้นะ ตัวอย่างเช่น

    • สร้าง Dashboard จาก Report (ถ้าต้องการ)
      • หมายเหตุ :
      • หน้ารายงานที่เราทำจาก Power BI Desktop เรียกว่า Report ซึ่ง Dashboard จะเป็นอีกอันนึงที่มีใน Power BI Service เท่านั้น
      • โดย Dashboard สามารถรวมเอากราฟจาก Report หลายๆ อันไปไว้ใน Dashboard เดียวได้
    • Publish to web สามารถเอาผลงานเอาไปไว้บนเว็บ (ฟรี แต่ไม่มี security)
    • Collaborate แชร์ให้เพื่อนๆ หรือ เอาทำให้ดูในมือถือได้ (เสียตัง)

    เดี๋ยวเรามาดูทีละขั้นตอนกัน

    Step 1: Get Data / Transform Data

    จุดประสงค์/เป้าหมาย

    • Get Data เชื่อมต่อกับแหล่งข้อมูล Edit Queries/Transform ดัดแปลงข้อมูลให้อยู่ในรูปแบบที่เหมาะสม จากนั้นเอาข้อมูลที่ดัดแปลงแล้วเข้าสู่ Data Model ของ Power BI ต่อไป
    • ทั้งนี้เพื่อให้เวลาเรา Refresh ที่ตัว Power BI แล้วเจ้าขั้นตอน Get Data/Transform จะถูกทำซ้ำอีกครั้ง หากข้อมูลที่เราไปเชื่อมต่อด้วยเปลี่ยนไป เราก็จะได้ Data ที่อัปเดทล่าสุดเข้าสู่ Power BI นั่นเอง
    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 275

    ซึ่งในขั้นตอนนี้เป็นการใช้ความสามารถของ คำสั่ง Get Data (เชื่อมต่อข้อมูล) และ Query Editor (Transform หน้าต่อข้อมูล) ซึ่งมันก็คือ Power Query ที่ผมเคยได้แนะนำไว้แล้วตั้งแต่ตอนที่เราใช้ Excel นั่นเอง

    ดังนั้นถ้าใครได้ศึกษา Power Query ไม่ว่าจะหาความรู้เอง อ่านบทความในเว็บผม หรือ อ่านหนังสือ Excel Power Up! มาแล้วก็ตามก็จะมีความรู้ที่จำเป็นครบเกือบทั้งหมดแล้ว

    ความต่างของ Power Query ใน Power BI กับ Excel ?

    หลักๆ ต่างกันใน 2 ประเด็น คือ

    Power BI จะไม่มีการ Get Data จาก Table/Range ให้เลือก

    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 276

    ดังนั้นถ้าจะใช้ Power BI ดึงข้อมูลจาก Excel ก็ต้องเลือก icon Excel นั่นแหละ) แต่อย่างอื่นก็มีหมด และมีมากกว่าด้วยซ้ำ

    ความต่างในขั้นตอนการเอาข้อมูลออกไปใช้

    ใน Excel เวลาเรา Transform ข้อมูลเสร็จแล้ว และจะเอา Data ออกจาก Power Query ไปใช้ใน Excel เราจะเลือกคำว่า Close & Load to… ซึ่งสามารถเลือกได้ว่าจะเอาข้อมูลออกไปใช้เป็นอะไร เช่น Table / Pivot Table / Connection Only และจะ Load เข้า Data Model หรือไม่? พูดง่ายๆ คือใน Excel เลือกผลลัพธ์ได้หลายแบบ

    แต่ใน Power BI มันมีแค่ Close & Apply เท่านั้น ซึ่งแปลว่าใน Power BI จะให้เอาข้อมูลออกไปใช้ใน Data Model เท่านั้น ไม่มีวิธีอื่นให้เลือก

    ทางเลือกเดี๋ยวที่ยังพอทำได้ คือให้คลิ๊กขวาที่ Query จะเลือกว่า Enable Load หรือไม่? ถ้าเอาที่ติ๊ก Enable Load ออกไปซะ (ไม่ Enable Load) มันก็จะไม่เอา Data ออกไปใน Model ซึ่งเทียบเท่ากับการเลือก Connection Only ใน Excel นั่นเอง

    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 277

    วิธีดูผลลัพธ์ Data ที่ออกจาก Power Query ไปสู่ Power BI จริงๆ ให้กดที่ Data ตรงนี้

    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 278

    แล้วมันจะแสดง Data ของตารางที่เราเลือกจากแถบด้านขวาทันที (ดูได้ทีละตาราง)

    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 279

    เดี๋ยวเราไว้ค่อยดูรายะเอียดตอนทำจริงๆ อีกทีนะครับ อันนี้เป็นภาพรวมเฉยๆ

    Step 2 : สร้าง Data Model

    ขั้นตอนนี้จะเป็นขั้นตอนในการสร้างความสัมพันธ์ระหว่างตารางข้อมูลหลายๆ อัน ซึ่งตารางแต่ละอันมาจากผลลัพธ์ของการ Close & Apply ซึ่งเป็นขั้นตอนสุดท้ายของ Step 1 : Get Data /Transform นั่นเอง

    วิธีเข้าไปดูหน้าตาของ Model ให้กดตรงนี้

    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 280

    คำว่าตารางหลายตารางที่มีความสัมพันธ์กัน เช่น

    • เรามีตารางหลักเป็นข้อมูลบันทึกการขายของเอาไว้สมมติชื่อว่าตาราง ftransactions ซึ่งในตารางนี้อาจมีการบันทึกว่า ProductID (รหัสสินค้า) คืออะไร
    • แต่ว่าข้อมูลอ้างอิงของสินค้านั้นๆ เช่น ProductName (ชื่อสินค้า) , Category (ประเภทสินค้า) อยู่อีกตารางนึงเช่น dProduct
    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 281

    Tips การเรียกชื่อตาราง

    • ตารางหลักที่เป็นการบันทึกรายละเอียด action ที่เกิดขึ้นจริงๆ เช่นการซื้อขายของ แบบนี้จะเรียกว่า Fact Table เลยมักจะตั้งชื่อตารางนำหน้าด้วยตัว f เช่น fTransacrions
    • ตารางอ้างอิง ที่เป็นการขยายความว่าสินค้าชื่ออะไร ประเภทอะไร พนักงานอยู่ทีมไหน ลูกค้าอยู่จังหวัดไหน แบบนี้ทำให้ Report สามารถเห็นมิติต่างๆ มากขึ้น เลยเรียกว่า Dimension Table เลยมักจะตั้งชื่อตารางนำหน้าด้วยตัว d เช่น dProduct

    การที่เราสามารถสร้างความสัมพันธ์ระหว่างตารางหลายๆ อันได้ จะทำให้เราทำหลายๆ เรื่องได้ ในขณะที่หากมีตารางเดียวจะทำไม่ได้ (หรือทำได้ลำบากกว่า)

    ความต่างระหว่างการมี Data Model กับ การมีตารางเดียว

    ลาก่อน VLOOKUP

    หากเป็นการทำงานด้วย PivotTable แบบโบราณ หากเราอยากคำนวณยอดขายรวมโดยแบ่งตาม Product Category… สิ่งที่เราจะต้องทำคือใช้ VLOOKUP เอาข้อมูลจาก dProduct กลับมายัง fTransactions ก่อน เพื่อให้มี Field ที่ต้องการเช่น Category ไปใช้ใน PivotTable ได้จริงมั้ย??

    แต่ถ้าเราใช้ Concept ของ Data Model เราแค่ลากเส้นผูกความสัมพันธ์ระหว่างสองตารางใน Model ซะ (ถ้าชื่อ Field เหมือนกัน มันลากเส้นเชื่อมให้เราเองด้วย!) จากนั้นเราจะสามารถใช้ Field จาก ProductTable ใน Visual ของ Power BI ได้เลย โดยไม่ต้อง LOOKUP ค่ามาที่ตารางหลัก (ซึ่งใน Excel ตั้งแต่ 2013 ขึ้นไปก็มี PivotTable แบบ Data Model ให้ใช้ ซึ่งทำแบบนี้ได้เหมือนกัน เผื่อใครไม่รู้!!)

    หลายเรื่องที่ซับซ้อนก็ทำได้

    นอกเหนือจากการใช้ Field ได้โดยไม่ต้อง VLOOKUP แล้ว การออกแบบ Data Model ที่ถูกต้องยังทำได้อีกหลายเรื่อง เช่น

    • เขียนสูตร DAX เพื่อวิเคราะห์เรื่องที่ซับซ้อนในมิติต่างๆ ได้มากมาย เช่น ยอดขายเฉลี่ยต่อรายลูกค้าเทียบกับปีที่แล้ว
    • สามารถวิเคราะห์ปัญหาแนวๆ Actual vs Budget/Target ได้
    • สามารถวิเคราะห์ปัญหากรณีมี Date หลายตัว เช่น วันสั่งของ วันส่งของ วันรับเงิน

    ซึ่งการวิเคราะห์ที่ซับซ้อนขึ้นเหล่านี้ จะช่วยสร้าง Insights ดีๆ ให้กับ Business ได้มากอย่างที่ไม่เคยเห็นมาก่อนครับ นี่แหละถึงเรียกว่า Business Intelligence ไง!!

    Step 3 : เขียนสูตร DAX

    จากการที่ในขั้นตอนที่แล้วที่ผมบอกว่า Data Model สามารถช่วยสร้างหลายเรื่องที่ซับซ้อนได้เช่น ยอดขายเฉลี่ยต่อรายลูกค้าเทียบกับปีที่แล้ว จริงๆ แล้วมีแค่ Data Model อย่างเดียวมันยังไม่พอหรอก สิ่งที่ต้องมีอีกอย่างเพื่อคำนวณเรื่องที่ซับซ้อนได้นั่นก็คือ การสร้าง Measure ซึ่งต้องเขียนสูตรด้วยภาษา DAX นั่นเอง (แม้ว่า Power BI จะมี Quick Measure ซึ่งเป็นสูตรสำเร็จรูปง่ายๆ ให้ใช้ แต่ในที่สุดคุณก็ต้องเรียนรู้ DAX อยู่ดี)

    การคำนวณทุกอย่างใน Power BI ต่างก็ต้องเขียนสูตร DAX ทั้งนั้น โดยที่สูตร DAX นั้นแทบจะเหมือนกับฟังก์ชันต่างๆ ใน Excel เลยล่ะ

    ที่ต่างคือ DAX มีฟังก์ชันหลายตัวเพิ่มขึ้นมา และ DAX จะไม่มีฟังก์ชันกลุ่ม Lookup ใน Excel เพราะมันใช้คนละ Concept กันในการหาข้อมูล

    ดังนั้นใครเขียนสูตร Excel เป็นแล้วก็จะใช้ DAX เป็นไปเยอะแล้วล่ะ สบายใจได้นิดนึง 55

    โดยที่ DAX มันเอาไว้สร้างสิ่งต่างๆ เหล่านี้ได้ (ซึ่งผมแนะนำให้คลิ๊กไปที่หน้า Data ก่อนจะสะดวกกว่า)

    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 282
    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 283
    • New Measure : คือการสร้างวิธีคำนวณข้อมูลสรุปขึ้นมาใหม่ (จินตนาการว่าเกิดมาเพื่อเอาไปใส่ในช่อง Value ของ PivotTable ก็ได้)
      • ดังนั้นมันเป็นไปได้ตั้งแต่ฟังก์ชันง่ายๆ เช่น SUM, AVERAGE,… ไปจนถึงการเขียนสูตรที่ซับซ้อนมากขึ้นที่ยาวหลายสิบบรรทัดก็เป็นได้
      • อ่อ! สูตรในรูปข้างบนนี่ก็คือ Measure แบบนึงนะ ที่เอาไว้หาค่ายอดขายรายวันเฉลี่ยต่อภูมิภาค เห็นมะว่ามีหลายอย่างซ้อนกันอยู่ และมีฟังก์ชันที่ไม่รู้จักเพียบเลย
      • Tips : ใน Power BI มี Quick Measure ที่สามารถสร้างสูตร DAX อัตโนมัติได้จากรูปแบบมาตรฐานที่มีมาให้ เราสามารถใช้มันแล้วนำมาดัดแปลงได้ตามต้องการครับ
    • New Column : คือการสร้างคอลัมน์ในตารางเพิ่ม (หรือเรียกว่า Calculated Column) ซึ่งตรงนี้จะเป็นส่วนที่เหมือนการเขียนสูตรใน Table ของ Excel มากๆ เลย
      • ตัวอย่างเช่น ตาราง dDate ตอนแรกผมมีแต่วันที่ คราวนี้ผมสามารถสร้างเดือน เพิ่มด้วย New Column ได้ด้วยการเขียนสูตร MONTH อ้างอิงวันจากคอลัมน์ Date เหมือนที่ทำใน Table ของ Excel เลยเห็นมะ
        Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 284
    • New Table : เราสามารถใช้สูตร DAX สร้างผลลัพธ์ที่เป็นตารางออกมาได้ด้วย ซึ่ง DAX มีหลายฟังก์ชันที่ให้ผลลัพธ์เป็นตารางนะครับ
      • ตัวอย่างเช่น ตาราง dDate เป็นตารางวันที่ซึ่งสามารถใช้ DAX เขียนขึ้นมาโดยให้มีวันเริ่มปีจาก Order แรกสุดจนถึงวันสิ้นปีของ Order สุดท้ายได้
        Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 285

    Tips : สังเกตว่าในสูตร DAX สามารถใช้ VAR ตั้งชื่อตัวแปรได้ด้วย ซึ่งเป็นอะไรที่เจ๋งมากๆ เดี๋ยวเราไว้พูดรายละเอียดเรื่องนี้ทีหลัง เพราะความจริงลึกๆ แล้วมันเป็นค่าคงที่ต่างหาก ไม่ใช่ตัวแปร…

    Step 04 : สร้าง Report

    ถ้าเราทำ Data Model และ DAX เสร็จหมดแล้ว เราก็จะสามารถสร้าง Report ได้ซักที ซึ่งใน Power BI 1 ไฟล์ จะสามารถมี Report ได้หลายหน้า (เรียกว่า Page) กดเพิ่มได้เรื่อยๆ

    ใน 1 หน้า เราสามารถสร้างกราฟ หรือตาราง ซึ่งเรียกรวมๆ ว่า Visual ได้มากมายหลายแบบ ซึ่งวิธีการสร้าง ก็คล้ายๆ การสร้าง Pivot Table/Pivot Chart ใน Excel เลยครับ คือให้ลาก Field ลงไปในกราฟนั่นเอง

    Visual มากมายหลายแบบ

    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 286

    ใน Power BI มีกราฟหลายตัวที่เหมือนกับ Excel เช่นพวก กราฟแท่ง กราฟเส้น Pie/โดนัท Scatter รวมถึง Visual ที่เป็นตารางคล้ายๆ Pivot Table ด้วย (ใน Power BI เรียกว่า Table กับ Matrix) รวมถึงพวก Slicer

    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 287

    แต่ก็มีกราฟอีกหลายอันที่ Excel ไม่มี เช่นพวก Card, KPI, Gauge, Treemap, กราฟแผนที่, Funnel Chart, Waterfall Chart รวมถึงกราฟแปลกๆ อย่าง Key Influencer ด้วย

    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 288
    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 289

    สร้างกราฟด้วยการถามคำถามก็ได้

    นอกจากนี้ Power BI ยังรองรับการสร้างกราฟด้วยวิธีให้เราพิมพ์คำถามเข้าไปด้วย เดี๋ยวมันจัดการเป็นกราฟให้เอง! (แต่ส่วนตัวผมว่ามันไม่ค่อย work อ่ะ เราลากเองเร็วกว่า 55)

    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 290

    ความเจ๋งของกราฟใน Power BI คือ ความ interactive ของกราฟ

    ความเห็นส่วนตัวของผม หากให้แข่งกันทำ Dashboard ระหว่างใช้ Power BI กับ Excel สิ่งที่ทำให้ Power BI ชนะในการแข่งครั้งนี้ก็คือ interaction ระหว่างกราฟ (เพราะถ้าแข่งเรื่อง Power Query / Data Model / DAX จริงๆ แล้ว Excel ก็มีเหมือน Power BI)

    ใน Excel นั้นเราสามารถใช้ Slicer ในการควบคุม Pivot Table/Pivot Chart ได้ (ซึ่งก็เจ๋งอ่ะนะ) แต่ว่าสำหรับ Power BI นั้น เราสามารถกดที่กราฟนึงแล้วส่งผลไปที่อีกกราฟนึงได้!!

    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 291

    แถมยังกำหนดลักษณะของ interaction ได้ด้วยว่าให้กดแล้ว Filter อีกกราฟไปเลย หรือจะแค่ Highlight บางส่วนของอีกกราฟ (แบบรูปข้างบน) ซึ่งผมว่ามันเจ๋งมากๆ เลย (เดี๋ยวเรามาลงรายละเอียดเรื่องนี้กันอีกทีนะ)

    นอกจาก Interaction แล้ว ยังมี Tool Tips ซึ่งสามารถให้แสดงข้อมูลพิเศษขึ้นมาเวลาเอา Mouse มา Hover เหนือกราฟ แถมยังแสดงข้อมูลที่ Hover เป็นกราฟจากอีกหน้าได้อีก!!

    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 292

    นอกจากนี้ยังทำอะไรได้อีกเยอะมากๆ เช่น Conditional Format ที่ผูกกับ Measure ได้ ก็สามารถสร้างตารางที่ Highlight สีแบบรูปข้างล่างนี้ตารางกลางได้ (ตารางซ้ายคือ Custom Visual ที่จะพูดถึงในส่วนถัดไป)

    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 293

    แถมยังสร้าง Bookmark ให้จำการ Filter/Visibility บน Page ไว้ได้อีก ซึ่งสามารถเอาไปประยุกต์อะไรเจ๋งๆ ได้อีกไม่รู้จบ

    กราฟที่มียังไม่โดนใจ ทำไง?

    ถ้าสังเกตุ เราสามารถเขียนภาษา R หรือ Python เพื่อสร้าง Visual ใน Power BI ได้ด้วย (ุถ้าเขียนเป็นนะ 555)

    แต่ถ้าเราเขียนภาษา R, Python ไม่เป็น เราก็ยังสามารถ Import Custom Visual มาใช้ได้ฟรีๆ ด้วย และบางตัวก็เจ๋งมากๆๆ

    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 294

    หลายๆ ตัวที่ผมคิดว่าเจ๋งมาก และฟรีด้วย เช่น Synoptic Panel และ Infographic Designer

    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 295
    เราสามารถเอารูปมาทำเป็น Layout เชิงพื้นที่ เพื่อแสดงสถานะของแต่ละพื้นที่ได้
    Power BI ตอนที่ 03: ภาพรวมการใช้งาน Power BI Desktop 296
    เราสามารถสร้าง Infographic เจ๋งๆ ลงไปใน Report ได้ โดยใส่ Shape กับ Icon ที่ต้องการ

    พรรณนาความเจ๋งได้ไม่หมด จบก่อนดีกว่า

    ผมว่าบทความนี้ยาวมากแล้วล่ะ เอาเป็นว่าถ้าเพื่อนๆ อ่านแล้วสงสัยอะไร ก็ Comment ถามได้เลยนะครับ จะพยายามตอบเต็มที่ครับ 🙂

    สารบัญ Series Power BI

    ใครสนใจอยากเรียนเป็นคลิปวีดีโอ ผมมี

  • Power BI ตอนที่ 02: พื้นฐาน Excel ที่สำคัญก่อนจะเรียนรู้ Power BI

    Power BI ตอนที่ 02: พื้นฐาน Excel ที่สำคัญก่อนจะเรียนรู้ Power BI

    จะเข้าใจ Power BI ได้ พื้นฐาน Excel ที่สำคัญก่อนจะเรียนรู้ Power BI ในความคิดเห็นส่วนตัวของผมก็คือ เราควรจะมีความเข้าใจเรื่อง PivotTable ใน Excel ซะก่อน

    ทั้งนี้เพราะพื้นฐานหลายๆ อย่างมันเหมือนกัน และการดูค่าใน Excel สามารถตรวจสอบผลลัพธ์ง่ายกว่า ดังนั้นผมจะขออธิบายการทำงานของ Pivot Table ใน Excel คร่าวๆ ก่อน เพื่อให้พวกเรามีพื้นฐานที่จำเป็นและมีความเข้าใจที่ถูกต้องว่ามันเกิดอะไรขึ้นกันแน่ใน PivotTable

    ข้อมูลตัวอย่าง

    สมมติผมมีข้อมูลดิบเป็น Table อันนี้ แล้วเอาเข้าไปสรุปใน PivotTable โดยคลิ๊กที่ Table แล้วกด Insert Pivot Table แล้วกด ok

    ข้อมูล 1 บรรทัดคือการขายของ 1 Transaction ซึ่งมีสินค้าได้ 1 ประเภท แต่สามารถขายได้หลายชิ้น ดังนั้นยอดขายต่อ Transaction จึงเท่ากับ ราคาต่อชิ้น * จำนวนชิ้น

    Power BI ตอนที่ 02: พื้นฐาน Excel ที่สำคัญก่อนจะเรียนรู้ Power BI 297

    เรื่อง Basic ที่เราควรรู้คือ

    • หัวตารางทุกอันจะกลายมาเป็น Field List ให้เราเลือก
    • ข้างใต้ Field List จะมีพื้นที่ 4 Block อยู่ หน้าที่เราคือลาก Field ลงมาที่ Block เหล่านั้น
    • หากลาก Field ที่มาที่ Value
      • กรณีเป็นตัวเลขจะเกิดการ Sum โดยอัตโนมัติ
      • กรณีเป็นข้อความจะเกิดการ Count โดยอัตโนมัติ
      • สามารถเปลี่ยนวิธีสรุปการคำนวณจาก Sum เป็นอย่างอื่นได้ ด้วยการคลิ๊กขวา Summarized Values By => Count, Average, Max, Min…
    • หากลาก Field ไปไว้ที่ Row มันจะมีการแจกแจงข้อมูลใน Field นั้นแบบไม่ซ้ำกันโดยแยกกันอยู่คนละแถว
    • หากลาก Field ไปไว้ที่ Column มันจะมีการแจกแจงข้อมูลใน Field นั้นแบบไม่ซ้ำกันโดยแยกกันอยู่คนละคอลัมน์
    • หากลาก Field ไปที่ Filter ก็จะสามารถ Filter ตามสิ่งที่ต้องการได้ ซึ่งจะส่งผลทั้งตาราง (อย่างไรก็ตามการลาก Field ไว้ที่ Row/Column ก็ Filter ได้เช่นกัน)

    ตัวอย่างการสรุปข้อมูลง่ายๆ

    สมมติว่าต้องการสรุปว่า Sales แต่ละคน ขายสินค้าแต่ละประเภท ได้ยอดขายรวมเฉพาะการชำระเงินแบบเงินสดรวมกี่บาท? สิ่งที่เราทำได้ คือ

    • ลากยอดขายไป Value (จะ Sum อัตโนมัติ)
    • ลากผู้ขายไปที่ Rows (จะแยกผู้ขายแบบไม่ซ้ำกันออกเป็นคนละแถว)
    • ลากสินค้าไปที่ Columns (จะแยกสินค้าแบบไม่ซ้ำกันเป็นคนละคอลัมน์)
    • ลากวิธีชำระเงินไป Filter แล้วเลือก เงินสด (จะสนใจเฉพาะข้อมูลแบบเงินสด)
    Power BI ตอนที่ 02: พื้นฐาน Excel ที่สำคัญก่อนจะเรียนรู้ Power BI 298

    การตีความตัวเลขที่แสดงมา

    ตรง cell ที่ผมเลือกไว้ แปลว่า sales ค ขายของเล่น ด้วยวิธีชำระเงินแบบเงินสด ได้ยอดขายรวม 1100 บาท นี่คือการตีความเชิง Business

    แต่วิธีที่ PivotTable คำนวณจริงๆ คือ เปรียบเสมือนว่ามันทำการ Filter ข้อมูล database ของเราให้ ผู้ขายเป็น sales ค, สินค้าเป็นของเล่น, วิธีชำระเงินเป็นเงินสด แล้วทำการ Sum ยอดขายได้ 1100 บาท ซึ่งเราสามารถพิสูจน์ได้โดยการดับเบิ้ลคลิ๊กเข้าไปที่เลข 1100 นั้น

    จะเห็นว่ามันสร้าง sheet ใหม่โดย Filter ข้อมูลตามที่ผมบอกไปเลย แล้วค่อยทำการ Sum ยอดขายที่เหลือจากการ Filter ซึ่งจะได้ 1100 บาทพอดี

    Power BI ตอนที่ 02: พื้นฐาน Excel ที่สำคัญก่อนจะเรียนรู้ Power BI 299

    พูดง่ายๆ คือมัน Filter ให้ครบทุกมิติก่อน จากนั้นค่อยคำนวณตามวิธีที่ระบุใน Values จากนั้นจึงค่อยแสดงค่าออกมานั่นเอง ซึ่ง Concept นี้สำคัญสุดๆๆๆๆๆๆ !!!

    Filter Context (บริบทการ Filter)

    ดังนั้นแปลว่า ค่าแต่ละช่องของตาราง Pivot ที่แสดงออกมา จริงๆ แล้วการคำนวณมีเงื่อนไขการ Filter ไม่เหมือนกันเลยซักช่อง เช่น

    Power BI ตอนที่ 02: พื้นฐาน Excel ที่สำคัญก่อนจะเรียนรู้ Power BI 300
    • ตำแหน่งเลข 1 คือ ผู้ขาย=sales ค, สินค้า=ของเล่น, วิธีชำระเงิน=เงินสด
    • ตำแหน่งเลข 2 คือ สินค้า=ของเล่น, วิธีชำระเงิน=เงินสด
    • ตำแหน่งเลข 3 คือ ผู้ขาย=sales ค, วิธีชำระเงิน=เงินสด
    • ตำแหน่งเลข 4 คือ วิธีชำระเงิน=เงินสด

    การที่แต่ละช่องอยู่ภายใต้เงื่อนไขการ Filter ที่ต่างกัน เรียกว่ามี Filter Context ที่ต่างกัน ซึ่งคำว่า Filter Context นั้นเป็น Concept ที่สำคัญสุดๆของ Power BI แล้ว

    การเข้าใจ Filter Context จะทำให้เข้าใจวิธีการคำนวณดีขึ้น

    สมมติผมคำนวณยอดขายเฉลี่ย ของสินค้าแต่ละประเภท โดยเลือกยอดขายแล้วสั่งเปลี่ยนวิธีสรุป Summarized Values by Average แทนการ Sum จะได้ดังนี้

    Power BI ตอนที่ 02: พื้นฐาน Excel ที่สำคัญก่อนจะเรียนรู้ Power BI 301

    ถามว่าค่า Average ยอดขายของของเล่น 367.4528 แปลว่าอะไร? มันก็คือยอดขายเฉลี่ยต่อ 1 Transaction กรณีที่สินค้าคือของเล่นนั่นเอง (หรือพูดว่า Filter สินค้าเป็นของเล่น แล้วค่อยหาค่าเฉลี่ยยอดขาย) อันนี้ทุกคนน่าจะตอบได้

    แต่ถ้าถามว่ายอดเฉลี่ยที่ Grand Total ที่แสดงออกมาเป็น 428.186 แปลว่าอะไร? หลายคนอาจจะตอบผิด!!

    หากคุณคิดว่ามันคือเอายอดเฉลี่ยของสินค้าแต่ละอันมาเฉลี่ยกัน อันนี้ผิดแน่นอน เพราะถ้าทำแบบนั้นจริง มันจะต้องได้ 479.135 ต่างหาก

    ความหมายของ ยอดเฉลี่ยที่ Grand Total 428.1866 แปลว่ายอดขายเฉลี่ยต่อ 1 Transaction กรณีที่ไม่ได้มีการ Filter สินค้าอะไรเลยต่างหากล่ะ!

    เพราะการคำนวณที่ Grand Total (กรณีที่ไม่ได้มี Filter มาจากหัว Filter หรือ Slicer อื่น) แปลว่ามันไม่มี Filter อะไรอยู่เลย ดังนั้นเมื่อ Average ยอดขายจึงจะได้ 428.186

    Power BI ตอนที่ 02: พื้นฐาน Excel ที่สำคัญก่อนจะเรียนรู้ Power BI 302

    ก่อนจะจากลา

    และนี่คือ Concept สำคัญที่จะทำให้เราเข้าใจการทำงานของการคำนวณใน Power BI มากขึ้น สำหรับบทความนี้ขอพอแค่นี้ก่อนดีกว่า เดี๋ยวไว้ต่อตอนหน้ากันครับ

    เหมือนเดิม ใครมีคำถามอะไร ถามทิ้งไว้ได้เลย!!

    สารบัญ Series Power BI

    ใครสนใจอยากเรียนเป็นคลิปวีดีโอ ผมมี

  • Power BI ตอนที่ 01: Power BI คืออะไร?

    Power BI ตอนที่ 01: Power BI คืออะไร?

    Power BI คืออะไร?

    ผมเชื่อว่าสำหรับคนที่ไม่รู้จักหรือไม่เคยใช้ Power BI มาก่อนเลยจะต้องมีคำถามนี้อยู่ในใจอย่างแน่นอน ดังนั้นก่อนที่ผมจะเริ่มสอนเรื่อง Power BI เอาเป็นว่าเรามาดูกันดีกว่าว่า Power BI มันคืออะไรกันแน่?

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

    คำอธิบายเพิ่มเติม

    • เนื่องจาก คำว่า BI ย่อมาจาก Business Intelligence ซึ่งแปลว่าการนำข้อมูลทางธุรกิจมาวิเคราะห์ ดังนั้น Power BI = การทำ Business Intelligence อย่างทรงพลังนั่นเอง 555
    • Power BI จะช่วยให้เราสามารถนำข้อมูลจากแหล่งต่างๆ มาวิเคราะห์และนำเสนอได้แบบเจ๋งๆ ในรูปแบบ Interactive Dashboard ผ่านกราฟและตัวเลขที่มีความหมาย เพื่อที่เราจะได้ค้นพบ Insights ดีๆ เพื่อนำไปพัฒนาธุรกิจของเราได้ต่อไป
    • Power BI ถูกสร้างขึ้นมา ให้เป็น Self-Service BI โดยคาดหวังว่า User ที่ไม่ใช่ IT สามารถใช้ Tool นี้เชื่อมต่อข้อมูลและสร้างรายงานเจ๋งๆ ได้เอง โดยไม่ต้องพึ่งพาให้ IT ทำให้ (เพราะ IT คงทำได้ไม่ทันใจ User ที่ความต้องการเปลี่ยนตลอดเวลาอย่างรวดเร็ว และไม่มีใครจะเข้าใจ Business ได้ดีเท่า User ) แปลว่ามันไม่ได้ใช้งานยากจนเกินไป
    • Power BI สร้างมาจากพื้นฐานของ Excel (มันพัฒนามาจาก Power Query, Power Pivot ของ Excel) ดังนั้นคนที่เคยใช้ Excel มาก็จะมีความคุ้นเคยกับหลายๆ อย่างใน Power BI พอสมควร
    • โปรแกรมอื่นๆ ที่เป็น Business Intelligence Tool คล้ายๆ กับ Power BI แต่เป็นของเจ้าอื่นที่ไม่ใช่ Microsoft ก็เช่น Tableau, Qlik Sense, SAS Visual Analytics, Google Data Studio
      • ถามว่าของใครเจ๋งสุด ต่างคนก็บอกว่าของตัวเองเจ๋งทั้งนั้นแหละ 555
      • ส่วนตัวผมเคยใช้แค่ของ Power BI กับ Qlik Sense เท่านั้น บอกได้ว่า Qlik Sense ตอนทำ Visual ง่ายกว่า Power BI แต่นอกนั้นผมว่า Power BI เจ๋งกว่า ทั้งการเตรียมข้อมูลผ่าน Power Query ได้ และยังเขียนสูตร DAX ได้ลึกซึ้งและเป็นภาษาที่คล้าย Excel มากกว่า จึงเหมาะกับคนรัก Excel อย่างผมมากกว่า

    การทำงานของ Power BI

    Power BI มีทั้งส่วนที่เป็น Power BI Desktop ซึ่งเป็นโปรแกรมคอมพิวเตอร์แบบที่ Install ในเครื่องคอมพ์ของเรา และ ส่วนที่เป็น Power BI Service ซึ่งเป็นบริการบนเว็บที่รันอยู่บน cloud เราจะใช้ทั้งสองส่วนทำงานร่วมกัน

    Power BI ตอนที่ 01: Power BI คืออะไร? 303
    • โดยวิธีการทำงานเรามักจะสร้างงานในโปรแกรม Power BI Desktop ซะก่อน เพื่อรวบรวมข้อมูล สร้าง Model และทำรายงานออกมา
    • พอสร้างงานเสร็จ สามารถส่งงานเข้าไปใน Power BI Service (บน Cloud) เพื่อแชร์ให้คนอื่นเห็นหรือช่วยกันสร้างรายงานก็ได้ และยังดูรายงานในมือถือผ่าน Power BI Mobile App ได้ด้วย (ส่วน Service)

    ความสามารถที่เพิ่มขึ้นเรื่อยๆ

    Power BI มีการอัปเดททุกเดือน มันจึงมีความสามารถมากขึ้นเรื่อยๆๆๆ ตามกาลเวลา (สามารถดูคลิปสรุปความสามารถใหม่ๆ ได้ที่ YouTube)

    Power BI ตอนที่ 01: Power BI คืออะไร? 304

    เรื่องราคา

    • โปรแกรม Power BI Desktop นั้นสามารถโหลดมาใช้ได้ฟรี ในขณะที่ Power BI Service มีทั้งแบบฟรีและแบบเสียเงิน
      • ถ้าจะแค่เอาข้อมูลจาก Power BI Desktop เอาไปแสดงเป็น Dashboard ในเว็บไซต์ (เรียกว่า Publish to Web) อันนี้ใช้ Power BI Service แบบฟรีก็ทำได้
        • เช่นที่ผมทำเรื่อง Power BI Dashboard สถิติหวย 30 ปี อันนี้เราสามารถทำได้ฟรีเลยนะ (แต่ต้องลงทะเบียนด้วย email ที่ไม่ใช่ email ฟรีซะก่อน เช่นใช้ email บริษัท ถึงจะเอาขึ้นเว็บได้)
          Power BI ตอนที่ 01: Power BI คืออะไร? 305
      • แต่ถ้าจะแชร์ข้อมูลกับเพื่อนในบริษัท หรือแชร์แบบ online ให้เพื่อนช่วยกันทำ Dashboard อันนี้ต้องใช้ Power BI Service แบบเสียตัง ซึ่งมีทั้งแบบ Pro และแบบ Premium (เจ๋งกว่าแบบโปร)
    • อย่างไรก็ตาม เราสามารถใช้ Power BI Desktop สร้าง Dashboard แล้ว save ไฟล์เป็นนามสกุล .pbix (ไฟล์ของ power bi โดยเฉพาะ) แล้วส่งให้เพื่อนไปเปิดดู/แก้ไขได้ฟรีๆ (คล้ายๆ กับส่งไฟล์ Excel อันนึงให้นั่นแหละ ซึ่งจะส่งให้ใครก็ได้จริงมะ?)

    องค์ประกอบของ Power BI

    Power BI Desktop มีความสามารถของ 3 เครื่องมือที่เคยมีใน Excel รวมกัน คือ 

    Get Data / Query Editor = Power Query เดิมใน Excel

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

    แค่ส่วนนี้ผมก็สามารถเขียนอธิบายเป็นหนังสือทั้งเล่มชื่อว่า Excel Power Up! แปลว่ามันมีลูกเล่นเยอะมากๆ ดังนั้นใน Part นี้ผมจะอธิบายแค่บางส่วนที่จำเป็น เช่น การรวบรวมข้อมูลจาก CSV/Excel/Folder เท่านั้น

    Data / Model = Power Pivot เดิมใน Excel

    ส่วนนี้จะเกี่ยวข้องกับ 2 เรื่องหลักๆ คือ Data Model และ การเขียนสูตร DAX (ชื่อของสูตรใน Power BI) ซึ่งส่งผลต่างจากการใช้ Excel หลักๆ 2 เรื่อง คือ

    • การมี Data Model ทำให้สามารถสร้างกราฟหรือ Pivot Table จากข้อมูลหลายตารางที่มีความสัมพันธ์ (Relationship) กันได้ โดยไม่ต้องใช้ VLOOKUP เพื่อดึงข้อมูลมาอยู่ในตารางเดียวกันอีกต่อไป
    • สามารถคำนวณสรุปข้อมูลผ่านสูตร DAX (คล้ายฟังก์ชันใน Excel แต่ก็มีหลายตัวที่ต้องศึกษาเพิ่ม และมี concept ใหม่หลายอย่างที่ Excel ไม่มีด้วย) ซึ่งจะทำให้สามารถสร้างสิ่งที่เรียกว่า Measure ซึ่งยืดหยุ่นและซับซ้อนกว่าการใช้ Pivot Table ปกติใน Excel มากๆๆๆๆๆ เช่น
      • สามารถคำนวณยอดขายเฉลี่ยรายวัน
      • ยอดขายรายลูกค้าเทียบกับช่วงเดียวกันในปีที่แล้ว
      • ชื่อสินค้าที่ขายดีที่สุด 3 อันดับของแต่ละพื้นที่เอามาเรียงคั่นด้วย comma

    Report = Power View เดิมใน Excel

    • นำเสนอข้อมูลในรูปแบบ Interactive Dashboard
    • มีกราฟ (เรียกว่า Visual) ให้เลือกหลากหลาย และโหลด Custom Visual เพิ่มได้เรื่อยๆ
    • ที่เจ๋งกว่า Excel คือ User สามารถกดที่กราฟนึงแล้วส่งผลไปที่อีกกราฟนึงได้ด้วย ทำให้การใช้งานง่ายขึ้นไปอีก
    • สร้าง Conditional Format ได้ซับซ้อนมาก เพราะสามารถอ้างอิงค่าจาก Measure ที่ซับซ้อนได้อีก

    ถ้า Power BI มันเจ๋งขนาดนี้แล้วจะใช้ Excel ไปทำไม?

    ผมคิดว่าถ้าเราต้องการผลลัพธ์เป็น Dashboard ปฏิเสธไม่ได้เลยว่า Power BI นี่เจ๋งกว่า Excel เกือบทุกอย่างเลยมั้ง (ผมยังนึกไม่ออกเลยว่า Excel ทำ Dashboard ชนะ Power BI ได้ยังไง)

    แต่ถ้าเราต้องการผลลัพธ์สุดท้ายเป็นตาราง เป็น Spreadsheet ผมว่า Excel มีความยืดหยุ่นมากกว่า โดยเฉพาะ Concept ของการอ้างอิง Cell (เช่น A1, C3) เนี่ย Power BI ไม่มีการอ้างอิง Cell มีแต่การอ้างอิง Field เท่านั้น

    นอกจากนี้ Excel ก็ทำเรื่องมหัศจรรย์ได้อีกหลายอย่างที่ Power BI ทำไม่ได้ เช่น การใช้ Solver เพื่อแก้ปัญหา Optimizations ในรูปแบบต่างๆ เป็นต้น

    ใครมีความคิดเห็นในประเด็นนี้ยังไงก็แชร์กันได้นะครับ

    ใครมีคำถาม ถามได้เลย

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

    สารบัญ Series Power BI

    ใครสนใจอยากเรียนเป็นคลิปวีดีโอ ผมมี

  • วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI

    ผมเองก็ได้นำเสนอข้อมูลเกี่ยวกับ Power Query มาเยอะพอสมควรว่ามันสามารถรวบรวมข้อมูลจากหลายแหล่ง และยังสามารถดัดแปลงหน้าตาข้อมูลให้อยู่ในรูปแบบที่เหมาะสมมากขึ้นได้

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

    การดึงข้อมูลจาก Excel นั้นจริงๆ มีหลากหลายรูปแบบ มีความซับซ้อนหลายระดับ (แบบยากสุดจริงๆ จะรองรับแบบสถานการณ์แบบง่ายสุดได้ด้วยครับ)

    ดึงข้อมูลจาก Excel 1 ไฟล์

    ต้องการแค่ 1 Table จาก Excel 1 ไฟล์

    การดึงข้อมูลจาก Table เดียวจากไฟล์ Excel ที่ต้องการนั้นง่ายที่สุดเลย นั่นก็คือ กด Get Data -> From File -> From Workbook แล้วเลือกไฟล์ Excel ที่ต้องการ และเลือก Table ที่ต้องการจากหน้าต่างด้านซ้ายมือ (สังเกตว่าสัญลักษณ์ของ Table กับ Sheet ไม่เหมือนกันนะ)

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 306

    Tips : การดึงข้อมูลจาก Table จะดีตรงที่ Power Query จะรู้จักหัวตารางโดยอัตโนมัติ เราจึงไม่ต้องมาปวดหัวกับเรื่องการจัดการหัวตารางเลย และหากบริเวณอื่นใน Sheet มีข้อมูลปนอยู่ ก็ไม่เป็นไรด้วย เพราะมันอ้างอิงข้อมูลจาก Table ที่เลือกเท่านั้น

    Excel 1 ไฟล์ 1 Sheet

    วิธีนี้เราก็เลือก Get Data -> From File -> From Workbook แล้วเลือกไฟล์ Excel ที่ต้องการ และเลือก Sheet ที่ต้องการจากหน้าต่างด้านซ้ายมือ

    การที่เราดึงข้อมูลที่เป็น Sheet (ไม่ได้เป็น Table) จะทำให้ Power Query อาจระบุหัวตารางไม่ถูกต้อง โดยมันจะดึงข้อมูลบรรทัดบนสุดที่ใช้งานมา แล้วพยายาม Promote Header ให้โดยอัตโนมัติ โดยถ้าช่องเป็นช่องว่างมันจะออกมาเป็นคำว่า Column1, Column2,…. ไปเรื่อยๆ ก่อน โดยจะดึงข้อมูลจนถึงช่องสุดท้ายที่มีการใช้งานใน Sheet นั้น

    นั่นคือถ้าข้อมูลบรรทัดแรกเป็นหัวตารางพอดี Power Query จะมีการ Promote Header ให้เองเลย นั่นแปลว่าถ้าข้อมูลใน Sheet มีแค่ข้อมูลที่เราต้องการตั้งแต่บรรทัดแรก ก็จะไม่มีปัญหาอะไรเลย

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 307

    ในทางกลับกัน หากว่าใน Sheet บรรทัดบนสุดไม่ใช่หัวตาราง แต่มีข้อมูลอื่นอยู่ดังนี้

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 308

    ข้อมูลที่ดึงมาก็จะเน่ามาก เราก็ควรจะต้องหาทางกด Remove Top Row (เช่น เอาบรรทัดบนออก 3 บรรทัดได้) แล้วค่อยกด Use First Row as Header อีกที

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 309

    และหากช่องสุดท้ายที่ใช้งานของ sheet นั้นดันไม่ใช่ข้อมูลที่อยากได้อีก เช่น

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 310

    เราก็ต้องหาทางตัด Column, Row ที่ไม่ใช้ออก ซึ่งอาจต้องหาทาง Filter ด้วยเงื่อนไขที่เหมาะสมเป็นต้น (ซึ่งบางทีมันก็ยุ่งยากมากๆ เลย)

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 311

    ดังนั้นถ้าจะดึงข้อมูลจาก Sheet ถ้าให้ง่าย ใน Sheet นั้นก็ควรมีแต่ข้อมูลที่อยากได้ ไม่ต้องมีอย่างอื่นปนมา มันก็จะง่ายที่สุดครับ (ถ้าจะมีข้อมูลปน ทำเป็น Table ง่ายกว่าเยอะ)

    Excel 1 ไฟล์ หลาย Table/หลาย Sheet

    ให้เราสั่ง Get Data จาก Excel 1 ไฟล์ตามปกติ ซึ่ง กรณีที่ใน Excel 1 ไฟล์ มีหลาย Table นั้นจริงๆ ก็สามารถจัดการได้ 2 แบบ คือ

    1. Table/Sheet แต่ละอันไม่ใช่ข้อมูลแบบเดียวกัน ดังนั้นเราก็ควรเอาไว้แยกคนละ Query กัน
    2. Table/Sheet แต่ละอันคือข้อมูลแบบเดียวกัน ดังนั้นเราควรเอามาต่อรวมใน Query เดียวกัน

    เรามาดูกรณีแรกกันก่อน ถ้าแบบนั้นคือให้เราติ๊กเลือก Multiple Items ก่อน จากนั้นค่อย Table/Sheet ที่ต้องการ

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 312

    พอกด Transform ปุ๊ป มันจะดึงแต่ละ Table/Sheet มาแยกเป็นคนละ Query กันเลย (สังเกตที่ list ของ query ที่อยู่ด้านซ้ายมือ)

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 313

    แต่ถ้าเป็นกรณีที่สอง (ซึ่งคงเป็นแบบที่หลายคนอยากรู้) ให้เรากดเลือกที่ตัวไฟล์หลักเลย (อย่าเลือกแต่ละ table/ แต่ละ sheet) เพื่อให้มันอ่านข้อมูลทั้งไฟล์มาว่ามี Table และ Sheet อะไรบ้าง

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 314

    สมมติว่าเราอยากได้เฉพาะ Table เท่านั้น ตรง Kind ก็ให้ Filter ให้เหลือแค่ Table ถ้าเราจะเอาเฉพาะ Sheet ก็ให้ Filter เหลือแค่ Sheet

    ซึ่งถ้าอยากเจาะจงชื่อ Table หรือชื่อ Sheet ก็ไป Filter ตรง Name เพิ่มได้ ว่าจะให้ขึ้นด้วยคำว่าอะไร หรือมีคำอะไรอยู่?

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 315

    พอเลือกสิ่งที่ต้องการได้ ก็สามารถกด Expand ข้อมูลตรงคอลัมน์ Data ออกมาได้เลย

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 316

    ถ้าข้อมูลเป็น Table ก็จะไม่มีปัญหาเรื่องหัวตาราง (จะจบเลย) ถ้าข้อมูลเป็น Sheet ก็จะต้องหาทางกำจัดหัวตารางที่ขึ้นมาซ้ำๆ อีกที

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 317

    รวม Excelหลายไฟล์ใน Folder

    รวม Excel หลายไฟล์ใน Folder แต่ละไฟล์มี Table ที่ต้องการชื่อเดียวกันเป๊ะ

    แบบนี้ก็จะจัดการค่อนข้างง่ายกว่าที่หลายคนคาดคิด นั่นคือแค่กด Get Data from File -> From Folder แล้วเลือก Folder ที่ต้องการ จากนั้นกด Transform Data ก่อน

    จากนั้นก็กด Expand ที่คอลัมน์ Content ได้เลย

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 318

    จากนั้นมันจะอ่านข้อมูลจากไฟล์ sample ที่เลือก (ปกติจะเลือกไฟล์แรก) ว่ามีอะไรบ้าง? ให้เราก็เลือก Table ที่ต้องการ (เช่น เราต้องการ Table ชื่อว่า SalesTableจาก Excel ทุกไฟล์)

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 319

    มันจะเอาข้อมูลจาก Table ใน Excel แต่ะไฟล์มารวมกันให้โดยอัตโนมัติเลย

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 320

    Tips: หากเราต้องการจะดัดแปลงไฟล์ก่อนจะเอามา Combine ด้วยการ Append ให้ไปทำการแก้ไขที่ Transform Sample File ก่อนครับ (เช่น พยายามทำให้คอลัมน์เหมือนๆ กัน)

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

    รวม Excel หลายไฟล์ใน Folder แต่ละไฟล์มี Table/Sheet ที่ต้องการเอามารวมกันหลายชื่อ (แต่ให้รวมเป็น Query เดียว)

    แบบนี้ให้กด Get File from Folder แล้วกด Transform ตามปกติ (ถ้ามีไฟล์อื่นปนมาก็ Filter ทิ้งออกไปได้) แล้วก็กด Expand ที่ Content

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 321

    เนื่องจากเราต้องการข้อมูลหลาย Table ให้เลือกที่ Folder แทนที่จะเลือกที่ Table แต่ละอัน แบบนี้มันจะ List ทั้ง Table/Sheet ที่มีออกมาทั้งหมด

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 322

    หน้าที่ของเราแค่ Filter เลือกให้เหลือเฉพาะสิ่งที่เราต้องการเอามารวมกัน เช่น Filter Kind เป็น Table ส่วน Name ก็อาจจะ Filter เฉพาะชื่อที่มีคำที่ต้องการ

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 323

    จากนั้นค่อยกด Expand ข้อมูลที่คอลัมน์ Data ออกมาอีกที

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 324

    ข้อมูลจากทุก Table ในทุกไฟล์ใน Folder ก็จะถูกนำมาต่อกันทั้งหมดทันที (ถ้ามีข้อมูลซ้ำ สามารถสั่ง Remove Duplicates อีกทีได้)

    วิธีดึงข้อมูลจาก Excel ไฟล์ย่อยมาทำรายงานสรุปใน Excel หลัก (อีกไฟล์) /Power BI 325

    สรุป สิ่งที่อยากบอกทุกท่าน

    เพื่อนๆ คงเห็นว่า กรณีถ้าข้อมูลต้นทางเป็น Table จะทำให้การรวมข้อมูลง่ายขึ้นมาก… ดังนั้น ถ้าทำเป็น Table ได้ก็ทำเถอะครับ ^^

  • หนังสือแนะนำ

    หนังสือแนะนำ

    ผมเองเป็นคนนึงที่ชอบอ่านหนังสือมากๆ ในบทความนี้ผมเลยรวบรวมหนังสือทั้งหนังสือ Excel และที่ไม่เกี่ยวกับ Excel แต่ได้อ่านแล้วชอบมากจริงๆ คิดว่าดีและมีประโยชน์ (ซึ่งจะแวะมาเพิ่มอัปเดทให้เรื่อยๆ ครับ)

    หนังสือแนะนำที่เกี่ยวกับ Excel

    Excel Insights: A Microsoft MVP guide to the best parts of Excel

    หนังสือเล่มนี้เพิ่งออกมาไม่นานนี้เอง เป็นการให้ Excel MVP 24 คนมาร่วมกันเขียน Tips/Trick ดีๆ เกี่ยวกับ Excel / Power Query ซึ่งผมได้ซื้อมาอ่านแล้วบอกได้เลยว่าเจ๋งมากๆ ครับ มีเทคนิคดีๆ หลายอย่างเลยล่ะ ใครสนใจพลาดไม่ได้เด็ดขาดครับ คิดดูว่ามันคือเรื่องเด็ดๆ ใน Excel จาก MVP 24 คนเชียวนะ!!

    หนังสือแนะนำ 326

    Slaying Excel Dragons: A Beginners Guide to Conquering Excel’s Frustrations and Making Excel Fun

    หนังสือนี้ค่อนข้างเก่าแล้ว (เพราะเป็น Excel 2010) แต่ความเก๋ายังคงอยู่ครบ โดยเฉพาะอย่างยิ่งหากคุณต้องการพื้นฐาน Excel แบบแน่นๆ เพราะมันเขียนโดย Mike Girvin เจ้าของ YouTube ช่อง ExcelisFun ซึ่งผมนับถือเป็นอาจารย์คนสำคัญนั่นเอง

    หนังสือแนะนำ 327

    Definitive Guide to DAX

    พูดง่ายๆ ว่านี่คือหนังสือเกี่ยวกับสูตร DAX (สูตรใน Power BI) ที่ดีที่สุดในโลก เพราะเขียนโดย ปรมาจารย์ DAX ชาวอิตาเลียนทั้งสองท่าน คือ Marco Russo และ Alberto Ferrari ซึ่งถือว่าเป็นคนที่เก่งเรื่อง DAX ที่สุดในโลกครับ ใครที่จะเอาจริงกับ Power BI ยังไงก็พลาดไม่ได้นะครับ เพราะจะเก่ง Power BI ได้ เรื่อง DAX เป็นสิ่งที่สำคัญมาก

    หนังสือแนะนำ 328

    หนังสือแนะนำที่ไม่เกี่ยวกับ Excel

    การเงินการลงทุน

    หนังสือของ Tact School ทุกเล่ม

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

    หนังสือแนะนำ 329

    พ่อรวยสอนลูก Rich Dad Poor Dad

    หนังสือทางการเงินที่เปลี่ยนชีวิตคนหลายคน เป็นหนังสือที่ยังไงก็ควรจะต้องลองอ่านซักครั้งในชีวิตครับ

    Thumbnail Seller Link
    พ่อรวยสอนลูก : Rich Dad Poor Dad
    Robert T. Kiyosaki (โรเบิร์ต ที. คิโยซากิ)
    www.mebmarket.com
    “””พ่อรวยสอนลูก”” หนังสือขายดีตลอดกาล จาก “”โรเบิร์ต ที. คิโยซากิ”” ที่ให้แนวคิดในการสร้างตัว สร้างชีวิต …
    Get it now

    Wink มั่งคั่งมากกว่าที่ตาเห็น

    เป็นหนังสือเล่มเล็กๆ ผลงานของ Roger Hamilton ผู้สร้างระบบ Wealth Dynamics ในหนังสือเล่มนี้เขียนเป็นเชิงนิยายหน่อยๆ เกี่ยวกับการสร้างมุมมองทางการเงินที่ดี เขียนเข้าใจง่าย อ่านสนุก แนะนำเลยครับ ผมชอบมาก อ่านแล้วความมั่งคั่งจะอยู่ไม่ไกลแน่นอน

    หนังสือแนะนำ 330

    Pop Science

    หนังสือของหมอเอ้ว ชัชพล

    จริงๆ หมอเอ้ว ชัชพล เขียนหนังสือไว้หลายเล่ม และหลายๆ เล่มก็เขียนออกมาได้ยอดเยี่ยมมากๆ

    หนังสือแนะนำ 331

    แต่ที่ส่วนตัวผมชอบมากกว่าเล่มอื่น ขอเลือกมา 3 เล่มดังนี้

    Computer

    AI ไม่ยาก

    แว่บแรกที่เห็นเล่มนี้ ผมก็มองข้ามมันไปเลย… (เพราะหน้าปกที่ดูแสนจะติ๊งต๊อง) แต่ทว่าหนังสือเล่มนี้กลับเป็นเรื่องเกี่ยวกับหลักการของ AI (ปัญญาประดิษฐ์) ที่เขียนด้วยภาษาที่เข้าใจง่ายที่สุดที่ผมเคยเจอมาแล้ว (ดันดูถูกหน้าปกมันเกินไป 555)

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

    Thumbnail Seller Link
    AI ไม่ยาก เล่ม 1 เข้าใจได้ด้วยเลขม. ปลาย (เนื้อหาภาษาไทย)
    จตุรพัชร์ พัฒนทรงศิวิไล
    www.mebmarket.com
    หนึ่งในเทคโนโลยีป่วนโลกในยุคนี้ก็คือ AI หรือปัญญาประดิษฐ์ ศาสตร์ชั้นสูงด้านคอมฯ ที่หลายคนกลัวจะมาแย่งงานมนุษย์ และคิดว่ายากจนวางมันบนหิ้งพระไม่กล้าแต…
    Get it now

    Practical SQL โดย Data Rockie

    นี่คือหนังสือภาษาไทยเกี่ยวกับภาษา SQL ซึ่งเอาไว้ดึงข้อมูลจาก Database ที่เขียนได้เข้าใจง่ายมาก

    ความเจ๋งคือแอดทอยมี Facebook Group เอาไว้ให้ผู้อ่านได้พูดคุยกัน และยังคอยอัปเดทเนื้อหาใน EBook นี้ให้ใหม่ล่าสุดและแก้ไขข้อผิดพลาดได้ด้วย สุดยอด!

    หนังสือแนะนำ 332

    ศาสนา / ปรัชญา

    ชาล้นถ้วย

    ผลงานของท่าน “ว.วชิรเมธี” ที่ได้รวมหลาก  “นิทานเซน” เจ๋งๆ เอาไว้มากมาย หลายเรื่องอ่านแล้วทึ่งในความนุ่มลึกในเชิงปรัชญามากๆ เลยครับ

    Thumbnail Seller Link
    ชาล้นถ้วย
    ว.วชิรเมธี
    www.mebmarket.com
    “หนังสือ “ชาล้นถ้วย” เล่มนี้ รวมหลากนิทานเซนที่แสดงถึงความ ลุ่มลึกทางจิตวิญญาณ พร้อมทั้งให้ความบันเทิงสนุกสนานเพลิดเพลิน และ แง่คิด…
    Get it now

    ใครมีหนังสืออะไรดีๆ อยากแนะนำก็ Comment บอกได้นะ

  • รวม Link สอน Excel  & Power BI ทั้งไทยและเทศแบบฟรีๆ

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ

    มักจะมีคนถามผมอยู่เสมอว่ามีแหล่งเรียนรู้ Excel อะไรดีๆ บ้าง? ผมเลยทำ รวม link สอน excel ทั้งไทยและเทศมาให้ดูกันครับ โดยใน list ในหน้านี้เป็นแหล่งเรียนรู้แบบที่สามารถศึกษาได้ฟรีเลยครับ
    (คนที่จริงจังมากขึ้นผมแนะนำให้ลองดู คอร์สออนไลน์ของผมได้ หรือ ถ้าเป็นหนังสือแนะนำอันนี้ )

    รวม Link สอน Excel ภาษาไทย

    ประเทศไทยเรามีแหล่งเรียนรู้ Excel ดีๆ เพียบ และบางเว็บมีเนื้อหาที่ดีมากๆ แต่หลายคนกลับไม่ค่อยรู้จัก ซึ่งเป็นเรื่องที่น่าเสียดายมาก ดังนั้นผมจึงตั้งใจรวบรวมเว็บที่สอน Excel ในทุกรูปแบบ ไม่ว่าจะเป็น Website, Facebook, Youtube เพื่อให้คนไทยได้เรียนรู้ Excel ได้อย่างเต็มที่ 

    ชื่อเว็บ / ผู้จัดทำหลัก รายละเอียดเน้น
    เทพเอ็กเซล ThepExcel

    ศิระ เอกบุตร (ระ)
    แหล่งเรียนรู้จากผมเอง (555) ที่พยายามอธิบายเรื่องที่ซับซ้อนโดยใช้ภาษาเข้าใจง่าย
    โดยครอบคลุมเนื้อหา Excel, Power Query และ Power BI

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335 FB Group
    Excel
    + PBI
    วิศวกรรีพอร์ต

    ณัฐวุฒิ ฉัตรวิริยะเจริญ (บิว)
    เน้นเรื่องการทำรายงาน ทั้งใน Excel และ Power BI ซึ่งนอกจากจะใช้ภาษาที่เข้าใจง่าย
    อ่านสนุก (เหมือนเพื่อนมาเล่าให้ฟัง) แล้วยังมีการให้ความรู้ดีๆ ในเรื่องของการ Presentation ด้วยครับ

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    Excel
    + PBI
    Excel Wizard

    Bo Rydobon (โบ=นามแฝง)
    ถ้าถามว่าในสายตาผมในประเทศไทย ใครคือคนที่เขียนสูตร Excel ได้เก่งและซับซ้อนมากที่สุด
    ผมคิดว่าคุณ Bo แห่ง Excel Wizard คนนี้ต้องติดระดับ Top3 แน่นอน
    (ป.ล. เมื่อ 29 Sep 2022 คุณโบแข่ง Excel Speed Run ระดับโลกแล้วชนะด้วย!)

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335 FB Group
    Excel
    ชมรมคนรัก Excel chat ถาม-ตอบปัญหา excel ที่รวดเร็วมากๆ มีคนมาช่วยตอบคำถามมากมายให้ฟรีๆ เลยครับ

    Line Open Chat
    Excel
    Pracert CBS

    รศ.ดร. ประเสริฐ คณาวัฒนไชย
    นอกจากจะมีเทคนิคการใช้ Excel มากมายแล้ว (มากจริงๆนะ) ยังมีสอนการใช้โปรแกรมอื่นๆ อีกเพียบ!!
    เช่น Word PowerPoint หรือแม้กระทั่งการเขียนโปรแกรม
    เช่น ภาษา R, Python ด้วย สุดยอดไปเลยครับ !!

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    Excel + Coding
    วิศวกรสร้างภาพ

    นพพร โพธิ์ยุทธนาสถิตย์ (บ๊อบ)
    เน้นการสอนแบบให้คนเรียนเห็นภาพ อธิบายด้วยภาพที่ทำให้เข้าใจง่ายขึ้นมาก

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334 FB Group
    Excel
    + PBI
    Excel Begin

    กิตติ ดิศกัมพล
    แนะนำวิธีจัดการข้อมูล และเทคนิคต่างๆ เกี่ยวกับ Excel, PowerQuery, mcode, PowerBI, DAX, การทำ Data Analytic, Dashboard, Data Model
    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    Excel
    Snasui

    สันติพงศ์ ณ สุย (snasui / คนควน)
    เว็บเต็มไปด้วยบทความและ VDO เรื่องเทคนิคและการใช้สูตร Excel เจ๋งๆ
    การใช้สูตรที่ดูเหมือนจะเป็นไปไม่ได้ก็สามารถเป็นไปได้ และเว็บบอร์ดที่มีคนเก่งๆ คอยตอบคำถามอีกเพียบ

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334
    Excel
    Excel for HR

    สำเริง ยิ่งถาวรสุข (อาจารย์เอก)
    มีเนื้อหาและคอร์สอบรมที่น่าสนใจ เช่น การทำแบบฟอร์มอิเล็กทรอนิกส์
    เพื่อใช้ติดต่อกับหน่วยงานราชการ เพื่อบริหารงานทรัพยากรบุคคล และอีกมากมาย

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334 FB Group
    Excel
    Excel NaNa

    พิชัย โชติธำรง (ตี๋)
    เน้นเรื่องการทดลองสร้างกราฟอย่างสร้างสรรค์ และวิธีการทำงานใหม่ๆ ใน Excel
    ใครรักการทำกราฟสวยๆ พลาดไม่ได้เด็ดขาด

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    Excel
    Learn Excel with Pichart

    พิชาติ ยาพันธ์ (ชาติ)
    อ.ชาติ สอน Excel ครอบคลุมในทุกๆ เรื่อง ตั้งแต่เนื้อหาพื้นฐานจนถึงขั้นสูง
    โดยเฉพาะถ้าใครสนใจเรื่องสินค้าคงคลัง หรือการใช้ VBA พลาดไม่ได้เลยครับ

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    Excel
    Excel Expert Training

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

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335 FB Group
    Excel
    เรียน Excel ฟรี
    Kwang Pachara
    กลุ่ม Facebook เรียน Excel ฟรี มีเทคนิค Excel มากกมาย
    FB Group
    Excel
    Zien Excel

    สมเกียรติ ช่วยมาก
    สอน Excel ด้วยสโลแกน “เติมเต็ม ตรงประเด็น ต่อยอดได้ชัวร์”

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    Excel
    Excel สายหวาน

    MD DataAddict (เมย์)
    เน้นการทำกราฟสวยๆ แบบสร้างสรรค์ ใครจะเชื่อว่า Excel จะทำกราฟได้หวานสมชื่อขนาดนั้น

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334
    Excel
    Plearning Excel

    Paopanga Taveesangpetch (แพรว)
    มีคลิปวีดีโอและเทคนิคมากมาย เน้นเนื้อหาง่ายๆ ให้มือใหม่ทำตามได้เลย

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    Excel
    Excel Smart Sheet Training

    วราพงษ์ แซ่ตั้ง (บอล)
    แชร์ความรู้ Excel & PowerBI ในรูปแบบ VDO & Image เพื่อแบ่งปันเทคนิคการใช้งาน

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334
    Excel
    9Expert Training

    ชไลเวท พิพัฒพรรณวงศ์
    เว็บนี้นอกจากมีบทความ Excel ก็ยังมีเนื้อหาในเรื่องใหม่ๆ อย่าง Power Platform ต่างๆ มากมายด้วยครับ

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    Excel
    + PBI
    มนุษย์ Excel

    Minor Teerawat
    เป็น Channel ที่เต็มไปด้วยเทคนิค Excel เจ๋งๆ
    เช่น สอนการใช้ Excel ดึงข้อมูลราคา สุ่มจับรางวัล สร้างเกมส์ ปฎิทิน นาฬิกาจับเวลา และอื่นๆ อีกมากมาย

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    Excel
    Power BI ง่ายนิดเดียว

    น้ำฝน ไชยลังกา (เล็ก)
    แบ่งปัน Business Intelligence & Analytic Tools ที่จะช่วยให้คุณสนุกไปกับการทำ Data
    มีเนื้อหา Power Platform ต่างๆ เช่น Power BI, Power Automate

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334
    PBI
    Power BI Thailandกลุ่มพูดคุยแลกเปลี่ยนความรู้เรื่อง Power BI มีคนเก่งๆ มาช่วยตอบมากมาย

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334 FB Group
    PBI
    Data Proteins

    กิตติพงศ์ เนียมเจริญ (บีม)
    สอนเรื่อง Power BI โดยมีตัวอย่างประยุกต์มากมายเลยครับ ตุณบีมเป็นคนเขียนหนังสือ Practical Data Visualization with Power BI ด้วยครับ

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    PBI
    Pichaya Channelเป็น Channel ที่เต็มไปด้วยเทคนิค Excel เจ๋งๆ
    ด้วยการสอนตะลุยโจทย์ยากๆ ใน FMWC ครับ

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    Excel

    รวม Link สอน Excel ภาษาอังกฤษ

    ต้องยอมรับเลยว่า แหล่งเรียนรู้ Excel ที่มีเนื้อหาเยอะที่สุด ละเอียดที่สุดก็ไม่พ้น “เว็บจากเมืองนอก” ไปได้หรอกครับ

    อ่อ! ไม่ต้องห่วงไป ถ้าเป็น web ที่เป็นแนว Video สอนเนี่ย ถึงภาษาอังกฤษไม่เก่งก็พอรู้เรื่องครับ เพราะเค้าทำให้ดูละเอียดเลยล่ะ แต่ก็ต้องยอมรับว่าคนที่จะสามารถดึงเอาประโยชน์จากเว็บเหล่านี้ได้มากกว่า ก็คือคนที่อ่าน/ฟัง ภาษาอังกฤษได้ดีครับ

    ดังนั้นจงให้ความสำคัญกับทักษะภาษาอังกฤษด้วยนะครับ (สำคัญมากจริงๆ)

    ซึ่งเว็บฝรั่งมีเยอะมากๆ ผมเลยขอแบ่งเป็น 2 กลุ่มคือ กลุ่มที่เน้น Excel (หรือรวมหลายเรื่อง) กับเน้นฝั่ง Power BI นะครับ

    ชื่อเว็บ / ผู้จัดทำหลักรายละเอียดเน้น
    Excel is Fun

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

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    Excel
    Financial Model WorldCupรวม Link เหล่าคนเก่งจาก
    Financial Model WorldCup
    https://www.youtube.com/@FMWC
    https://www.youtube.com/@DimEarly
    https://www.youtube.com/@docbrownexcels
    Excel
    SQL BI

    Marco Russo และ Alberto Ferrari
    แหล่งเรียนรู้เรื่อง PowerPivot, DAX Formula จากปรมาจารย์ DAX ชาวอิตาเลียนทั้งสองท่าน
    ซึ่งถือว่าเป็นคนที่เก่งเรื่อง DAX ที่สุดในโลก และเป็นผู้เขียนหนังสือ Definitive Guide to DAX ครับ
    ผมเรียนรู้ DAX จาก 2 คนนี้ จึงถือเป็นอาจารย์ของผมอีกคนเลยครับ

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 376 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 377 DAX Guide , DAX Pattern
    PBI
    How to Power BI

    Bas
    ช่องที่สอนเทคนิคลูกเล่นการใช้ Power BI ให้น่าสนใจ นำเสนอได้ดีมากๆๆ ที่สุดอันนึงที่เคยเห็นเลยครับ แนะนำมากๆ เลย

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    PBI
    Chris Webb’s BI Blog

    Chris Webb
    Blog รวมบทความเจาะลึกเกี่ยวกับ Power Query ที่ละเอียดที่สุดอันหนึ่งของโลกเลยครับ
    หลายบทความนี่เจาะลึก M Code ของ Power Query ได้น่าสนใจมาก

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333
    Power Query
    XELPLUS

    Leila Gharani
    Channel Youtube ที่ดูแล้วเข้าใจง่ายมาก นำเสนอได้ดี กระชับ มีเทคนิคที่น่าสนใจมากมาย

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    Excel
    Excel Jetเว็บนี้เน้นการประยุกต์การใช้สูตรที่หลากหลาย มีตัวอย่างการใช้ฟังก์ชันมากมาย (มากสุดๆ)
    มีสอนทั้งบทความและวีดีโอด้วย ใครอยากเก่งเรื่องสูตรก็แนะนำเลยครับ

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333
    Excel
    My Online Training Hub

    Mynda Treacy
    สอน Excel ได้เข้าใจง่าย มีทั้งบทความและ Youtube ที่สอนได้ดี
    มีเรื่อง Power Query / Power BI ด้วย

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    Excel
    + PBI
    Excel Campus

    Jon Acampora
    สอน Excel ได้เข้าใจง่าย ผู้สอนมี background ด้าน corporate finance มาก่อน
    มีทั้งบทความและ Youtube ที่สอนได้ดีมากๆ

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    Excel
    Chandoo

    Purna Duggirala
    เว็บนี้เก่งเรื่องการทำ Dashboard และ Visualization มากๆ ครับ เขียนเข้าใจง่ายด้วย

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    Excel
    + PBI
    Excel Easy

    Niels Weterings
    เว็บนี้มีเนื้อหาครอบคลุมทุกด้าน เน้นเรื่องการเขียนแบบเข้าใจง่ายๆ สั้นๆ ให้เห็นภาพรวม ซึ่งก็เข้าใจง่ายสมชื่อจริงๆ ครับ

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333
    Excel
    Contexture

    Debra Dalgleish
    เว็บนี้มีเทคนิคเจ๋งๆ เพียบ และมี script VBA สำคัญๆ ที่เอาไว้ใช้ในยามจำเป็นด้วยนะ

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    Excel
    Mr Excel

    Bill Jelen
    Excel เว็บบอร์ดที่มีคนเก่งๆ เยอะแยะ และสินค้าเกี่ยวกับ Excel มากมาย
    ช่อง youtube ก็มีเทคนิค Excel เยอะใช้ได้ครับ

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    Excel
    Decision Model

    Charles Williams
    เว็บนี้เน้นทุกอย่างไปที่วิธีทำให้ Excel คำนวณได้เร็วที่สุด! คนที่มีปัญหาเรื่องความเร็วพลาดไม่ได้เลยครับ

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333
    Excel
    Excel VBA IS FUN

    Daniel Clay Strong
    อันนี้คนทำเค้าชอบ Channel ExcelIsFun มาก เลยอยากทำเนื้อหาในสิ่งที่ ExcelIsFun ไม่มี นั่นคือ VBA

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    Excel
    ExcelForFreelancers

    Randy Austin
    ExcelForFreelancers ของคุณ Randy Austin สุดยอด VBA programer อันดับต้นๆของโลก

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335 FB Group
    Excel
    Excel Unusual

    George Lungu
    Science, Engineering, Games in Excel & VBA
    ตอนแรกคุณ Bo แห่ง Excel Wizard แนะนำมาว่าครั้งแรกที่เห็นต้องอ้าปากหวอ ผลงานของเค้าโหดมากๆ เจ๋งสุดๆ เลย!!

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334
    Excel
    Peltiertech

    Jon Peltier
    เว็บนี้เน้นเรื่องสอนการทำกราฟด้วยเทคนิคเจ๋งๆ คนรักการทำกราฟพลาดไม่ได้เลย

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333
    Excel
    E90E50 Charts รวมตัวอย่างการทำกราฟแบบสร้างสรรค์ (สุดๆ) บางอันอาจต้องใช้ VBA มาช่วยด้วย

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333
    Excel
    Guy in a cube

    Adam Saxton และ
    Patrick LeBlanc
    เป็นช่อง Youtube สอนเรื่องเกี่ยวกับ Power BI ได้สนุกดีครับ
    จัดทำโดยพนักงานของ Microsoft เองเลย
    แถมมีการสัมภาษณ์คนดังๆ ด้าน Power BI บ่อยๆ ด้วย มีประโยชน์มาก

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    PBI
    Radacad

    Reza Rad และ Leila Etaati
    มีบทความเจ๋งๆ เกี่ยวกับ Power BI แถมมี Ebook ให้อ่านฟรีด้วย ใครจะฝึกพวก Power BI ก็มาลองอ่านได้เลย

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    PBI
    The BI Accountant

    Imke Feldmann
    เป็น Blog ที่เน้นด้าน BI เช่นเดียวกับเว็บข้างบน หลายบทความก็เด็ดมากเช่นกัน
    มีการวิเคราะห์เรื่องทำยังไงให้ BI รันเร็วขึ้นด้วย

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333
    PBI
    Excel Guru

    Ken Puls
    Blog ของ Ken Puls ผู้เขียนหนังสือ Power Query ขายดีชื่อ M is for Data Monkey เว็บของเค้าก็มีบทความหลายอย่างที่น่าสนใจมาก

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333
    Excel
    + PBI
    Excelerator BI

    Matt Allington
    เว็บไซต์โดยคุณ Matt Excel MVP อีกท่านที่เชี่ยวชาญด้าน Power BI
    และเป็นผู้เขียนหนังสือ Supercharge Power BI อีกด้วย

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 334 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    PBI
    Curbal

    Ruth Pozuelo Martinez
    สอนเทคนิคต่างๆ เกี่ยวกับ Power BI, Power Query และ DAX

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    PBI
    Goodly

    Chandeep
    ช่องสอนใช้ Power BI ที่ดีและเข้าใจง่ายอีกช่องนึงเลยครับ

    รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 333 รวม Link สอน Excel & Power BI ทั้งไทยและเทศแบบฟรีๆ 335
    PBI

    ใครมีเว็บแนะนำก็บอกได้

    สุดท้ายนี้ ใครคิดว่ามีเว็บเจ๋งๆ อันไหน ที่ผมไม่ได้พูดถึง ก็ลอง comment แนะนำมาได้เลยนะครับ เพื่อนๆ จะได้รู้จักเว็บดีๆ คนทำจะได้มีกำลังใจทำต่อครับ ^^