การจัดการกับข้อผิดพลาดใน Power Query
ใน Power Query คุณสามารถพบข้อผิดพลาดสองชนิด:
- ข้อผิดพลาดระดับขั้นตอน
- ข้อผิดพลาดระดับเซลล์
บทความนี้มีคําแนะนําสําหรับวิธีแก้ไขข้อผิดพลาดทั่วไปที่คุณอาจพบในแต่ละระดับ และอธิบายเหตุผลของข้อผิดพลาด ข้อความแสดงข้อผิดพลาด และรายละเอียดข้อผิดพลาดสําหรับแต่ละระดับ
ข้อผิดพลาดระดับขั้นตอนป้องกันไม่ให้คิวรีโหลด และแสดงคอมโพเนนต์ข้อผิดพลาดในบานหน้าต่างสีเหลือง
- เหตุผลของข้อผิดพลาด: ส่วนแรกก่อนเครื่องหมายทวิภาค ในตัวอย่างข้างต้น เหตุผลของข้อผิดพลาดคือ Expression.Error
- ข้อความแสดงข้อผิดพลาด: ส่วนที่อยู่หลังจากเหตุผลโดยตรง ในตัวอย่างด้านบน ข้อผิดพลาดคือ ไม่พบคอลัมน์ 'คอลัมน์' ของตาราง
- รายละเอียดข้อผิดพลาด: ส่วนที่อยู่หลัง รายละเอียด: สตริงโดยตรง ในตัวอย่างด้านบน รายละเอียดของข้อผิดพลาดคือ คอลัมน์
ในทุกกรณี เราขอแนะนําให้คุณดูรายละเอียดเหตุผลของข้อผิดพลาด ข้อความแสดงข้อผิดพลาด และรายละเอียดข้อผิดพลาดเพื่อทําความเข้าใจสิ่งที่ทําให้เกิดข้อผิดพลาด คุณสามารถเลือกปุ่ม ไปที่ข้อผิดพลาด ถ้ามี เพื่อดูขั้นตอนแรกที่มีข้อผิดพลาดเกิดขึ้น
ข้อผิดพลาดนี้มักเกิดขึ้นเมื่อผู้ใช้ไม่สามารถเข้าถึงแหล่งข้อมูลได้ ผู้ใช้ไม่มีข้อมูลประจําตัวที่ถูกต้องในการเข้าถึงแหล่งข้อมูล หรือแหล่งข้อมูลถูกย้ายไปยังที่อื่น
ตัวอย่าง: คุณมีคิวรีจากไทล์ข้อความที่อยู่ในไดรฟ์ D และสร้างขึ้นโดยผู้ใช้ A ผู้ใช้ A แชร์คิวรีกับผู้ใช้ B ซึ่งไม่มีการเข้าถึงไดรฟ์ D เมื่อบุคคลนี้พยายามดําเนินการคิวรี พวกเขาได้รับ DataSource.Error เนื่องจากไม่มีไดรฟ์ D ในสภาพแวดล้อมของพวกเขา
วิธีแก้ไขที่เป็นไปได้: คุณสามารถเปลี่ยนเส้นทางไฟล์ของไฟล์ข้อความเป็นเส้นทางที่ผู้ใช้ทั้งสองมีสิทธิ์เข้าถึงได้ ในฐานะที่เป็นผู้ใช้ B คุณสามารถเปลี่ยนเส้นทางของไฟล์เป็นสําเนาภายในเครื่องของไฟล์ข้อความเดียวกัน ถ้าปุ่ม แก้ไขการตั้งค่า พร้อมใช้งานในบานหน้าต่างข้อผิดพลาด คุณสามารถเลือกและเปลี่ยนเส้นทางไฟล์ได้
ข้อผิดพลาดนี้มักจะถูกทริกเกอร์เมื่อขั้นตอนทําการอ้างอิงโดยตรงไปยังชื่อคอลัมน์ที่ไม่มีอยู่ในคิวรี
ตัวอย่าง: คุณมีคิวรีจากไฟล์ข้อความซึ่งหนึ่งในชื่อคอลัมน์คือ คอลัมน์ ในคิวรีของคุณ คุณมีขั้นตอนที่เปลี่ยนชื่อคอลัมน์นั้นเป็นวันที่ แต่มีการเปลี่ยนแปลงในไฟล์ข้อความต้นฉบับ และไม่มีส่วนหัวคอลัมน์ที่มีชื่อ คอลัมน์ อีกต่อไป เนื่องจากคอลัมน์ถูกเปลี่ยน เป็น วันที่ ด้วยตนเอง Power Query ไม่พบส่วนหัวของคอลัมน์ที่ ชื่อว่า Column ดังนั้นจึงไม่สามารถเปลี่ยนชื่อคอลัมน์ใดๆ ได้ ซึ่งแสดงข้อผิดพลาดที่แสดงในรูปต่อไปนี้
โซลูชันที่เป็นไปได้: มีหลายวิธีแก้ไขปัญหาสําหรับกรณีนี้ แต่ทั้งหมดขึ้นอยู่กับสิ่งที่คุณต้องการทํา สําหรับตัวอย่างนี้ เนื่องจากส่วนหัวของคอลัมน์ วันที่ ที่ถูกต้องแล้วมาจากไฟล์ข้อความของคุณ คุณเพียงแค่ลบขั้นตอนที่เปลี่ยนชื่อคอลัมน์ออก การดําเนินการนี้จะอนุญาตให้คิวรีของคุณทํางานโดยไม่มีข้อผิดพลาดนี้
เมื่อรวมหรือผสานข้อมูลระหว่างแหล่งข้อมูลหลายแหล่ง คุณอาจได้รับ ข้อผิดพลาด Formula.Firewall เช่นรายการที่แสดงในรูปภาพต่อไปนี้
ข้อผิดพลาดนี้อาจเกิดจากสาเหตุหลายประการ เช่น ระดับความเป็นส่วนตัวของข้อมูลระหว่างแหล่งข้อมูล หรือวิธีการรวมหรือผสานแหล่งข้อมูลเหล่านี้ สําหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการวิเคราะห์ปัญหานี้ ให้ไปที่ ไฟร์วอลล์ความเป็นส่วนตัวของข้อมูล
ข้อผิดพลาดระดับเซลล์จะไม่ป้องกันไม่ให้คิวรีโหลด แต่แสดงค่าข้อผิดพลาดเป็น ข้อผิดพลาด ในเซลล์ การเลือกช่องว่างสีขาวในเซลล์จะแสดงบานหน้าต่างข้อผิดพลาดภายใต้การแสดงตัวอย่างข้อมูล
หมายเหตุ
เครื่องมือการสร้างโพรไฟล์ข้อมูลสามารถช่วยให้คุณระบุข้อผิดพลาดระดับเซลล์ด้วยคุณลักษณะคุณภาพคอลัมน์ได้ง่ายขึ้น ข้อมูลเพิ่มเติม: เครื่องมือการสร้างโพรไฟล์ข้อมูล
เมื่อพบข้อผิดพลาดใด ๆ ในระดับเซลล์ Power Query มีชุดฟังก์ชันเพื่อจัดการข้อผิดพลาดโดยการเอาออก แทนที่ หรือเก็บข้อผิดพลาดไว้
สําหรับส่วนถัดไป ตัวอย่างที่ให้มาจะใช้คิวรีตัวอย่างเดียวกันกับจุดเริ่มต้น ในคิวรีนี้ คุณมี คอลัมน์ยอดขาย ที่มีหนึ่งเซลล์ที่มีข้อผิดพลาดที่เกิดจากข้อผิดพลาดในการแปลง ค่าภายในเซลล์นั้นเป็น NA แต่เมื่อคุณแปลงคอลัมน์นั้นเป็นจํานวนเต็ม Power Query ไม่สามารถแปลง NA เป็นตัวเลขได้ ดังนั้นจึงแสดงข้อผิดพลาดต่อไปนี้
หากต้องการลบแถวที่มีข้อผิดพลาดใน Power Query ก่อนอื่นให้เลือกคอลัมน์ที่มีข้อผิดพลาด บนแท็บ หน้าแรก ในกลุ่ม ลดแถว ให้เลือก ลบแถว จากเมนูดรอปดาวน์ เลือกลบข้อผิดพลาด
ผลลัพธ์ของการดําเนินการดังกล่าวจะให้ตารางที่คุณกําลังค้นหาแก่คุณ
ถ้าแทนที่จะลบแถวที่มีข้อผิดพลาด คุณต้องการแทนที่ข้อผิดพลาดด้วยค่าคงที่ คุณสามารถทําได้เช่นกัน หากต้องการแทนที่แถวที่มีข้อผิดพลาด ก่อนอื่นให้เลือกคอลัมน์ที่มีข้อผิดพลาด บนแท็บ แปลง ในกลุ่ม คอลัมน์ใดก็ตาม ให้เลือก แทนที่ค่า จากเมนูดรอปดาวน์ เลือกแทนที่ข้อผิดพลาด
ในกล่องโต้ตอบ แทนที่ข้อผิดพลาด ให้ใส่ค่า 10 เนื่องจากคุณต้องการแทนที่ข้อผิดพลาดทั้งหมดด้วยค่า 10
ผลลัพธ์ของการดําเนินการดังกล่าวจะให้ตารางที่คุณกําลังค้นหาแก่คุณ
Power Query สามารถทําหน้าที่เป็นเครื่องมือตรวจสอบที่ดีในการระบุแถวใด ๆ ที่มีข้อผิดพลาดแม้ว่าคุณไม่ได้แก้ไขข้อผิดพลาด นี่คือที่ที่ เก็บข้อผิดพลาด ไว้จะมีประโยชน์ เมื่อต้องการเก็บแถวที่มีข้อผิดพลาด ก่อนอื่นให้เลือกคอลัมน์ที่มีข้อผิดพลาด บนแท็บ หน้าแรก ในกลุ่ม ลดแถว ให้เลือก เก็บแถว จากเมนูดรอปดาวน์ เลือกเก็บข้อผิดพลาด
ผลลัพธ์ของการดําเนินการดังกล่าวจะให้ตารางที่คุณกําลังค้นหาแก่คุณ
เช่นเดียวกับข้อผิดพลาดในระดับขั้นตอน เราขอแนะนําให้คุณดูเหตุผลของข้อผิดพลาด ข้อความแสดงข้อผิดพลาด และรายละเอียดข้อผิดพลาดที่ระบุไว้ในระดับเซลล์อย่างละเอียดเพื่อทําความเข้าใจสิ่งที่ทําให้เกิดข้อผิดพลาด ส่วนต่อไปนี้อธิบายถึงข้อผิดพลาดระดับเซลล์ที่ใช้บ่อยที่สุดใน Power Query
โดยทั่วไปจะถูกทริกเกอร์เมื่อเปลี่ยนชนิดข้อมูลของคอลัมน์ในตาราง บางค่าที่พบในคอลัมน์ไม่สามารถแปลงเป็นชนิดข้อมูลที่ต้องการได้
ตัวอย่าง: คุณมีคิวรีที่มีคอลัมน์ที่ชื่อว่า ยอดขาย เซลล์หนึ่งในคอลัมน์นั้นมี NA เป็นค่าเซลล์ ในขณะที่เซลล์ที่เหลือมีจํานวนเต็มเป็นค่า คุณตัดสินใจที่จะแปลงชนิดข้อมูลของคอลัมน์จากข้อความเป็นจํานวนเต็ม แต่เซลล์ที่มี ค่า NA ทําให้เกิดข้อผิดพลาด
วิธีแก้ไขปัญหาที่เป็นไปได้: หลังจากระบุแถวที่มีข้อผิดพลาดแล้ว คุณสามารถปรับเปลี่ยนแหล่งข้อมูลเพื่อแสดงค่าที่ถูกต้องแทน NA หรือคุณสามารถใช้การดําเนินการแทนที่ข้อผิดพลาดเพื่อให้ค่าสําหรับค่า NA ใด ๆ ที่ทําให้เกิดข้อผิดพลาดได้
เมื่อพยายามใช้การดําเนินการที่ไม่ได้รับการสนับสนุน เช่น การคูณค่าข้อความด้วยค่าตัวเลข ข้อผิดพลาดจะเกิดขึ้น
ตัวอย่าง: คุณต้องการสร้างคอลัมน์แบบกําหนดเองสําหรับคิวรีของคุณโดยการสร้างสตริงข้อความที่มีวลี "Total Sales: " เชื่อมเข้าด้วยกันกับค่าจากคอลัมน์ Sales ข้อผิดพลาดเกิดขึ้นเนื่องจากการดําเนินการเรียงต่อกันสนับสนุนเฉพาะคอลัมน์ข้อความและไม่รองรับตัวเลขเท่านั้น
วิธีแก้ไขที่เป็นไปได้: ก่อนที่จะสร้างคอลัมน์แบบกําหนดเองนี้ ให้เปลี่ยนชนิดข้อมูลของ คอลัมน์ยอดขาย เป็นข้อความ
เมื่อทํางานกับข้อมูลที่ประกอบด้วยค่าที่มีโครงสร้างที่ซ้อนกัน (เช่น ตาราง รายการ หรือเรกคอร์ด) บางครั้งคุณอาจพบข้อผิดพลาดต่อไปนี้:
Expression.Error: We cannot return a value of type {value} in this context
Details: In the past we would have returned a text value of {value}, but we now return this error. Please see https://go.microsoft.com/fwlink/?linkid=2099726 for more information.
ข้อผิดพลาดเหล่านี้มักจะเกิดขึ้นจากสองสาเหตุ:
- เมื่อไฟร์วอลล์ความเป็นส่วนตัวของข้อมูลบัฟเฟอร์แหล่งข้อมูล ค่าที่ไม่ใช่สเกลที่ซ้อนกันจะถูกแปลงเป็นข้อผิดพลาดโดยอัตโนมัติ
- เมื่อคอลัมน์ที่กําหนดไว้ด้วย
Any
ชนิดข้อมูลมีค่าที่ไม่ใช่สเกล ค่าดังกล่าวจะถูกรายงานเป็นข้อผิดพลาดในระหว่างการโหลด (เช่น ในเวิร์กบุ๊กใน Excel หรือแบบจําลองข้อมูลใน Power BI Desktop)
วิธีแก้ไขปัญหาที่เป็นไปได้:
- ลบคอลัมน์ที่มีข้อผิดพลาดออก หรือตั้งค่าชนิดข้อมูลที่ไม่ใช่
Any
สําหรับคอลัมน์ดังกล่าว - เปลี่ยนระดับความเป็นส่วนตัวของแหล่งข้อมูลที่เกี่ยวข้องกับแหล่งข้อมูลที่อนุญาตให้รวมเข้าด้วยกันโดยไม่ต้องบัฟเฟอร์
- ลดรูปแบบโครงสร้างตารางก่อนที่จะทําการผสานเพื่อกําจัดคอลัมน์ที่มีค่าที่มีโครงสร้างที่ซ้อนกัน (เช่น ตาราง ระเบียน หรือรายการ)