ฟังก์ชันคำนวณ DAX: ปัญหาและแนวทางแก้ไข

ฟังก์ชันคำนวณ DAX: ปัญหาและแนวทางแก้ไข

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

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

สารบัญ

ภาพรวมของฟังก์ชันคำนวณ DAX

ไม่กี่เดือนที่ผ่านมา ฉันได้นำเสนอLuckyTemplates ที่งานมันถูกเรียกว่า DAX Counterculture ซึ่งฉันได้ให้มุมมองทางเลือกบางอย่างเกี่ยวกับ DAX 

หนึ่งในหลักที่เกี่ยวข้องกับการใช้ฟังก์ชันคำนวณ ฉันได้พูดคุยเกี่ยวกับสาเหตุที่คุณไม่ควรใช้ CALCULATE โดยเฉพาะหากคุณยังใหม่กับ DAX 

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

ฉันยังได้ศึกษาการวัดอย่างรวดเร็ว ของ Microsoft สำหรับ Running Total เนื่องจากใช้ไม่ได้กับสถานการณ์แบบตารางเดียวและต้องการสคีมาแบบดาวเพื่อให้ทำงานได้อย่างถูกต้อง

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

คำนวณสูตร DAX

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

ฟังก์ชันคำนวณ DAX: ปัญหาและแนวทางแก้ไข

ในหน้าต่างการวัดด่วนที่จะป๊อปอัป ให้เลือกค่าเฉลี่ยต่อหมวดหมู่ในเมนูแบบเลื่อนลงการคำนวณ จากนั้นลาก? ค่าใน ช่องข้อความ ค่าพื้นฐานและเดือนในช่องประเภท

ฟังก์ชันคำนวณ DAX: ปัญหาและแนวทางแก้ไข

จากนั้นคลิกตกลงและคุณจะได้ภาพที่มีลักษณะดังนี้ 

ฟังก์ชันคำนวณ DAX: ปัญหาและแนวทางแก้ไข

ในแกน x คือควอเตอร์—ควอเตอร์ 1, 2, 3 และ 4 

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

ฟังก์ชันคำนวณ DAX: ปัญหาและแนวทางแก้ไข

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

ฟังก์ชันคำนวณ DAX: ปัญหาและแนวทางแก้ไข

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

ฟังก์ชันคำนวณ DAX: ปัญหาและแนวทางแก้ไข

ข่าวดีสำหรับ Average Per Category คือใช้งานได้จริงไม่ว่าคุณจะมีโมเดลตารางเดี่ยวหรือสกีมาแบบดาวก็ตาม

ในภาพเหล่านี้ เรากำลังใช้ Quarter จากตารางแรก...

ฟังก์ชันคำนวณ DAX: ปัญหาและแนวทางแก้ไข

 …ในขณะที่อันนี้ใช้ Quarter จากตารางวันที่ของเรา มันใช้งานได้ทั้งสองวิธี 

ฟังก์ชันคำนวณ DAX: ปัญหาและแนวทางแก้ไข

แต่ปัญหาเกี่ยวกับค่าเฉลี่ยต่อหมวดหมู่เป็นเพียงรหัส DAX 

ฟังก์ชันคำนวณ DAX: ปัญหาและแนวทางแก้ไข

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

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

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

รหัส DAX สำหรับค่าเฉลี่ยต่อหมวดหมู่

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

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

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

พวกเขายังเก็บฟังก์ชัน CALCULATE เพื่อดำเนินการภายในบริบทของ KEEPFILTERS เนื่องจากวิธีการทำงานของ AVERAGEX จึงใช้นิพจน์ที่สองและดำเนินการภายในบริบทของนิพจน์แรก 

มีปัญหาอะไรแล้ว?

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

การวัดผลด่วนเป็นแนวคิดที่ดี เช่น “ลองเขียนการวัดทั่วไปที่มีการคำนวณต่างๆ ให้คุณ เพราะคุณยังใหม่กับ DAX และคุณไม่รู้ทุกอย่างเกี่ยวกับ DAX” แต่ทำไมพวกเขาถึงสร้างพวกมันด้วยวิธีที่แปลกประหลาดและซับซ้อนเช่นนี้? 

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

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

ทางออกที่ง่ายกว่า

การใช้ฟังก์ชัน SUMMARIZE

ดังที่ฉันได้กล่าวไว้ก่อนหน้านี้ มีวิธีที่ดีกว่าและง่ายกว่าที่จะทำ

ขั้น แรกสร้างตัวแปรตารางโดยใช้VAR_Table จากนั้น เราจะใช้เพื่อหาตาราง สรุปตามเดือน สร้างคอลัมน์ค่า และสรุปค่าของเรา

สุดท้าย เราจะหาค่าเฉลี่ยของค่าของเราโดยใช้ฟังก์ชัน  AVERAGEX

ฟังก์ชันคำนวณ DAX: ปัญหาและแนวทางแก้ไข

รหัสนี้ง่ายกว่าและมีเหตุผลมากกว่ามาก ไม่รวมการคำนวณซึ่งคุณไม่ต้องการอยู่แล้ว 

คุณอาจเจอบทความในบล็อกที่วิพากษ์วิจารณ์ SUMMARIZE บล็อกกล่าวว่าวิธีการทำงานของ SUMMARIZE ภายในนั้นค่อนข้างซับซ้อน

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

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

การใช้ฟังก์ชัน GROUPBY

ไม่มีใครมีปัญหากับการใช้ฟังก์ชัน GROUPBY ดังนั้นเรามาเรียนรู้วิธีใช้กัน สร้างตัวแปรตารางอีกครั้งโดยใช้VAR_Table จากนั้น เราจัดกลุ่มเดือนและสร้างคอลัมน์ค่า

ต่อไป เราใช้โดยใช้CURRENTGROUPซึ่งเป็นวิธีการทำงานของ GROUPBY เรามารวมมูลค่าของเราแล้วหาAVERAGEX  อีก ครั้ง

รหัสของเราควรมีลักษณะดังนี้

ฟังก์ชันคำนวณ DAX: ปัญหาและแนวทางแก้ไข

การเปรียบเทียบผลลัพธ์: SUMMARIZE vs GROUPBY vs CALCULATE DAX Functions

มาดูกันว่าทางลัดที่เราทำกลับผลลัพธ์เหมือนเดิมหรือไม่ 

ดังที่คุณเห็นในภาพด้านล่าง ทั้ง SUMMARIZE ที่มีข้อความว่าBetter Average Per Categoryและ GROUPBY ที่มีข้อความว่าBetter Average Per Category 2จะส่งคืนตัวเลขเดียวกัน 

ฟังก์ชันคำนวณ DAX: ปัญหาและแนวทางแก้ไข

สูตรทั้งสองของเราส่งคืน 3.4K สำหรับ Q1, 3.6K สำหรับ Q2, 3.4K สำหรับ Q3 และ 3.5K สำหรับ Q4 และอีกครั้ง พวกเขาทำงานในรูปแบบข้อมูลตารางเดียวโดยใช้ Quarters สำหรับตารางของเรา

นอกจากนี้ยังทำงานในสคีมาแบบดาวที่เราใช้ Quarters ในตารางวันที่ของเรา 

ฟังก์ชันคำนวณ DAX: ปัญหาและแนวทางแก้ไข


มาตรการด่วน – วิธีใช้ในแบบจำลอง LuckyTemplates
การใช้ฟังก์ชันคำนวณภายใน LuckyTemplates
วิธีที่มีประสิทธิภาพในการใช้ฟังก์ชัน GROUPBY ใน LuckyTemplates

บทสรุป

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

ในความเป็นจริง อาจเป็นไปได้ว่าใน 80% - 90% ของกรณีนี้ ไม่มีเหตุผลที่จะต้องกังวลกับการใช้ CALCULATE เพื่ออะไรทั้งสิ้น คุณสามารถใช้ฟังก์ชัน SUMMARIZE และ GROUPBY ซึ่งง่ายกว่าและมีเหตุผลมากกว่าแทน

หากคุณต้องการสำรวจไฟล์ PBIX นี้ ฉันได้เผยแพร่ไปยัง Quick Measures Gallery แล้ว และตั้งชื่อไฟล์ว่าBetter Average Per Category เพียงเลื่อนลงมาจนสุดหน้าเพื่อค้นหาไฟล์ PBIX ที่คุณสามารถดาวน์โหลดและเล่นกับตัวคุณเองได้ 

สิ่งที่ดีที่สุด

เกร็ก เด็คเลอร์


ตนเองคืออะไรใน Python: ตัวอย่างในโลกแห่งความเป็นจริง

ตนเองคืออะไรใน Python: ตัวอย่างในโลกแห่งความเป็นจริง

ตนเองคืออะไรใน Python: ตัวอย่างในโลกแห่งความเป็นจริง

วิธีบันทึกและโหลดไฟล์ RDS ใน R

วิธีบันทึกและโหลดไฟล์ RDS ใน R

คุณจะได้เรียนรู้วิธีการบันทึกและโหลดวัตถุจากไฟล์ .rds ใน R บล็อกนี้จะครอบคลุมถึงวิธีการนำเข้าวัตถุจาก R ไปยัง LuckyTemplates

เยี่ยมชม N วันทำการแรก – โซลูชันภาษาการเข้ารหัส DAX

เยี่ยมชม N วันทำการแรก – โซลูชันภาษาการเข้ารหัส DAX

ในบทช่วยสอนภาษาการเข้ารหัส DAX นี้ เรียนรู้วิธีใช้ฟังก์ชัน GENERATE และวิธีเปลี่ยนชื่อหน่วยวัดแบบไดนามิก

แสดงข้อมูลเชิงลึกโดยใช้เทคนิคการแสดงภาพแบบไดนามิกแบบหลายเธรดใน LuckyTemplates

แสดงข้อมูลเชิงลึกโดยใช้เทคนิคการแสดงภาพแบบไดนามิกแบบหลายเธรดใน LuckyTemplates

บทช่วยสอนนี้จะครอบคลุมถึงวิธีการใช้เทคนิค Multi Threaded Dynamic Visuals เพื่อสร้างข้อมูลเชิงลึกจากการแสดงข้อมูลแบบไดนามิกในรายงานของคุณ

บทนำในการกรองบริบทใน LuckyTemplates

บทนำในการกรองบริบทใน LuckyTemplates

ในบทความนี้ ฉันจะเรียกใช้ผ่านบริบทตัวกรอง บริบทตัวกรองเป็นหนึ่งในหัวข้อหลักที่ผู้ใช้ LuckyTemplates ควรเรียนรู้ในขั้นต้น

เคล็ดลับที่ดีที่สุดในการใช้แอปใน LuckyTemplates Online Service

เคล็ดลับที่ดีที่สุดในการใช้แอปใน LuckyTemplates Online Service

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

วิเคราะห์การเปลี่ยนแปลงอัตรากำไรล่วงเวลา – การวิเคราะห์ด้วย LuckyTemplates และ DAX

วิเคราะห์การเปลี่ยนแปลงอัตรากำไรล่วงเวลา – การวิเคราะห์ด้วย LuckyTemplates และ DAX

เรียนรู้วิธีคำนวณการเปลี่ยนแปลงอัตรากำไรของคุณโดยใช้เทคนิคต่างๆ เช่น การแยกสาขาและการรวมสูตร DAX ใน LuckyTemplates

แนวคิด Materialization สำหรับแคชข้อมูลใน DAX Studio

แนวคิด Materialization สำหรับแคชข้อมูลใน DAX Studio

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

การรายงานทางธุรกิจโดยใช้ LuckyTemplates

การรายงานทางธุรกิจโดยใช้ LuckyTemplates

หากคุณยังคงใช้ Excel อยู่จนถึงตอนนี้ นี่เป็นเวลาที่ดีที่สุดในการเริ่มใช้ LuckyTemplates สำหรับความต้องการในการรายงานทางธุรกิจของคุณ

เกตเวย์ LuckyTemplates คืออะไร ทั้งหมดที่คุณต้องการรู้

เกตเวย์ LuckyTemplates คืออะไร ทั้งหมดที่คุณต้องการรู้

เกตเวย์ LuckyTemplates คืออะไร ทั้งหมดที่คุณต้องการรู้