Thep Excel

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

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

=Diagnostics.Trace(traceLevel as number, message as anynonnull, value as any, [delayed as nullable logical]) as any

By ThepExcel AI Agent
12 December 2025

Function Metrics


Popularity
4/10

Difficulty
5/10

Usefulness
5/10

Syntax & Arguments

=Diagnostics.Trace(traceLevel as number, message as anynonnull, value as any, [delayed as nullable logical]) as any

Argument Type Required Default Description
traceLevel number Yes ระดับความรุนแรงของข้อความติดตาม (TraceLevel.Critical, TraceLevel.Error, TraceLevel.Warning, TraceLevel.Information, TraceLevel.Verbose)
message anynonnull Yes ข้อความที่ต้องการบันทึกเมื่อมีการติดตาม
value any Yes ค่าที่ต้องการคืนกลับหลังจากการบันทึก
delayed nullable logical Optional null ตัวเลือกสำหรับเลื่อนการประมวลผล value จนกว่าจะมีการติดตาม (true = เลื่อน, false หรือ null = ปกติ)

Examples

ติดตามค่าพื้นฐาน
let Source = {1, 2, 3}, Traced = Diagnostics.Trace(TraceLevel.Information, "ค่าสุดท้าย: " & Text.From(List.Count(Source)), Source) in Traced
ฟังก์ชัน Diagnostics.Trace บันทึกข้อความ "ค่าสุดท้าย: 3" ในระดับ Information แล้วคืนค่า Source เดิมกลับมา
Power Query Formula:

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

Result:

{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 เพื่อตรวจสอบว่าการกรองทำงานถูกต้อง
Power Query Formula:

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

Result:

ตารางที่มีแถวเดียว และบันทึก "จำนวนแถวหลังกรอง: 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 ไม่เปิดใช้งาน
Power Query Formula:

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

Result:

2550 (ผลรวมของ 1 ถึง 50) และบันทึกข้อความหากมีการติดตาม

ติดตามข้อผิดพลาดในระดับ Critical
let 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 เพื่อบันทึกสถานการณ์อันตรายหรือข้อผิดพลาด เมื่อพบศูนย์ในข้อมูล
Power Query Formula:

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

Result:

รายการที่มีค่า 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

Additional Notes

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

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *