Thep Excel

Diagnostics.Traceฟังก์ชันเขียนข้อความติดตามสำหรับการแก้ไขจุดบกพร่อง

Diagnostics.Trace เขียนข้อความติดตาม (trace message) เพื่อใช้ในการแก้ไขจุดบกพร่องและตรวจสอบค่าข้อมูลในขั้นตอนต่างๆ โดยคืนค่าเดิมกลับไปยังถัดไป

fx
=Diagnostics.Trace(traceLevel, message, value, [delayed]) as any

ความนิยม4/10
ความยาก5/10
ประโยชน์5/10

อัปเดต 12 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
traceLevel number ระดับความรุนแรงของข้อความติดตาม (TraceLevel.Critical, TraceLevel.Error, TraceLevel.Warning, TraceLevel.Information, TraceLevel.Verbose)
message anynonnull ข้อความที่ต้องการบันทึกเมื่อมีการติดตาม
value any ค่าที่ต้องการคืนกลับหลังจากการบันทึก
[delayed]ไม่บังคับ nullable logical null ตัวเลือกสำหรับเลื่อนการประมวลผล value จนกว่าจะมีการติดตาม (true = เลื่อน, false หรือ null = ปกติ)

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

Diagnostics.Trace ใช้สำหรับการบันทึกข้อมูลแก้ไขจุดบกพร่องในขั้นตอนการประมวลผล ฟังก์ชันนี้รับ 4 ตัวแปร: ระดับความรุนแรง (TraceLevel), ข้อความ, ค่าที่ต้องการ, และตัวเลือก delayed เพื่อระบุว่าจะประมวลผลค่านั้นเมื่อใดและคืนค่าเดิมกลับไปหลังการบันทึก

ที่เจ๋งคือ delayed parameter ช่วยให้ประหยัดประสิทธิภาพ เพราะสามารถเลื่อนการประมวลผลค่าถึงเวลาที่มีการติดตามจริงๆ ซึ่งมีประโยชน์สำหรับการดำเนินการที่มีค่าใช้จ่าย (expensive operations) และฟังก์ชันนี้ไม่เปลี่ยนแปลงข้อมูลต้นฉบับ เพียงแค่บันทึกเท่านั้น

ส่วนตัวผม ผมใช้ Diagnostics.Trace บ่อยครั้งเมื่อต้องหา bug ในโปรแกรม Power Query ที่ซับซ้อน โดยเพิ่มขั้นตอนนี้เข้าไปในแต่ละขั้นตอนเพื่อดูว่าข้อมูลเปลี่ยนแปลงไปอย่างไร ตัวอักษร TraceLevel ก็เป็นวิธีง่ายๆ ในการแยกสิ่งที่สำคัญจากสิ่งที่ไม่สำคัญ 😎

Examples

ติดตามค่าพื้นฐานlet Source = {1, 2, 3}, Traced = Diagnostics.Trace(TraceLevel.Information, "ค่าสุดท้าย: " & Text.From(List.Count(Source)), Source) in Traced

ฟังก์ชัน Diagnostics.Trace บันทึกข้อความ "ค่าสุดท้าย: 3" ในระดับ Information แล้วคืนค่า Source เดิมกลับมา

fx
let
Source = {1, 2, 3},
Traced = Diagnostics.Trace(TraceLevel.Information, "ค่าสุดท้าย: " & Text.From(List.Count(Source)), Source)
in
Traced

ผลลัพธ์{1, 2, 3} และบันทึกข้อความ "ค่าสุดท้าย: 3"
ติดตามข้อมูลที่แปลงมาlet Source = Table.FromRows({{1, "A"}, {2, "B"}}, {"ID", "Name"}), Filtered = Table.SelectRows(Source, each [ID] > 1), Traced = Diagnostics.Trace(TraceLevel.War…

ติดตามจำนวนแถวหลังจากใช้ Table.SelectRows เพื่อตรวจสอบว่าการกรองทำงานถูกต้อง

fx
let
Source = Table.FromRows({{1, "A"}, {2, "B"}}, {"ID", "Name"}),
Filtered = Table.SelectRows(Source, each [ID] > 1),
Traced = Diagnostics.Trace(TraceLevel.Warning, "จำนวนแถวหลังกรอง: " & Text.From(Table.RowCount(Filtered)), Filtered)
in
Traced

ผลลัพธ์ตารางที่มีแถวเดียว และบันทึก "จำนวนแถวหลังกรอง: 1"
ใช้ delayed เพื่อประหยัดประสิทธิภาพlet Source = List.Range({1..100}, 0, 50), Traced = Diagnostics.Trace( TraceLevel.Verbose, "รายการที่คำนวณแล้ว", () => List.Sum(Source), true ) in Traced

delayed = true ใช้ลูกศรฟังก์ชัน () => เพื่อเลื่อนการคำนวณ List.Sum จนกว่าจะมีการติดตามจริง ซึ่งช่วยประหยัดเวลาประมวลผลหาก tracing ไม่เปิดใช้งาน

fx
let
Source = List.Range({1..100}, 0, 50),
Traced = Diagnostics.Trace(
TraceLevel.Verbose,
"รายการที่คำนวณแล้ว",
() => List.Sum(Source),
true
)
in
Traced

ผลลัพธ์2550 (ผลรวมของ 1 ถึง 50) และบันทึกข้อความหากมีการติดตาม
ติดตามข้อผิดพลาดในระดับ Criticallet Source = {1, 2, 0, 4}, Division = List.Transform(Source, each if _ = 0 then Diagnostics.Trace(TraceLevel.Critical, "พบศูนย์! " & Text.From(_), null) else 10…

ใช้ Diagnostics.Trace ระดับ Critical เพื่อบันทึกสถานการณ์อันตรายหรือข้อผิดพลาด เมื่อพบศูนย์ในข้อมูล

fx
let
Source = {1, 2, 0, 4},
Division = List.Transform(Source, each if _ = 0 then Diagnostics.Trace(TraceLevel.Critical, "พบศูนย์! " & Text.From(_), null) else 100 / _)
in
Division

ผลลัพธ์รายการที่มีค่า null แทนผลหารสำหรับศูนย์

FAQs

Diagnostics.Trace กับการตรวจสอบข้อมูลต่างกันอย่างไร?+

ผม มี Diagnostics.Trace คืนค่าเดิมกลับไปไม่เปลี่ยนแปลงข้อมูล สำหรับการเขียนไปยัง diagnostic window เท่านั้น ส่วน Diagnostics.LogValue ก็คล้ายกัน แต่ Trace มีความยืดหยุ่นมากกว่าในการเลือก TraceLevel และสามารถใช้ delayed parameter ได้

ต้องตั้งค่าอะไรพิเศษเพื่อให้ Diagnostics.Trace ทำงาน?+

ผม เปิด Diagnostic Viewer ใน Power Query Editor โดยไปที่ Queries pane → เลือก query → Tools → Diagnostic Viewer หรือบางครั้งอาจต้องใช้ Advanced Editor เพื่อส่วนที่ต้องการติดตาม

delayed parameter ควรใช้เมื่อไหร่?+

ผม แนะนำใช้ delayed = true เมื่อ value เป็นการดำเนินการที่มีค่าใช้จ่ายสูง เช่น List.Sum, Table.RowCount หรือการคำนวณที่ซับซ้อน เพราะว่า delayed จะทำให้การคำนวณเลื่อนไปจนกว่า tracing เปิดใช้งาน

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ Diagnostics.Trace จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้Diagnostics.TraceError handling
Error handling (1)
Diagnostics.ActivityId

Diagnostics.ActivityId ใช้สำหรับการประมวลผลข้อมูล

List functions (1)
List.Transform

List.Transform ใช้สำหรับสร้างลิสต์ใหม่โดยนำฟังก์ชันไปประมวลผลแต่ละตัวในลิสต์เดิม

Text functions (1)
Text.From

แปลงค่าใดๆ เป็นข้อความ (Text)

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่