---
title: Diagnostics.Trace – ฟังก์ชันเขียนข้อความติดตามสำหรับการแก้ไขจุดบกพร่อง
url: https://www.thepexcel.com/functions/power-query/error-handling/diagnostics-trace/
type: function-explainer
program: Power Query
syntax: "Diagnostics.Trace(traceLevel as number, message as anynonnull, value as any, [delayed as nullable logical]) as any"
date: 2025-12-12
updated: 2025-12-26
scores:
  popularity: 4
  difficulty: 5
  usefulness: 5
---

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

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

## คำอธิบาย

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

## Syntax

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

## Arguments

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

## ตัวอย่าง

### 1. ติดตามค่าพื้นฐาน

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

**ผลลัพธ์:** `{1, 2, 3} และบันทึกข้อความ "ค่าสุดท้าย: 3"`

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

### 2. ติดตามข้อมูลที่แปลงมา

```excel
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"`

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

### 3. ใช้ delayed เพื่อประหยัดประสิทธิภาพ

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

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

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

### 4. ติดตามข้อผิดพลาดในระดับ Critical

```excel
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 แทนผลหารสำหรับศูนย์`

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

## หมายเหตุเพิ่มเติม

- ผม แนะนำให้ใช้ TraceLevel.Information สำหรับข้อมูลปกติและ TraceLevel.Warning หรือ Error สำหรับสิ่งที่ผิดปกติ เพื่อให้สะดวกในการกรองข้อมูลหลังจากนั้น

- ส่วนตัวผม ชอบใช้ Diagnostics.Trace ร่วมกับ Text.From เพื่อแปลงค่าต่างๆ เป็นข้อความ เพราะว่า message ต้องเป็น anynonnull ซึ่งครอบคลุมได้หลายประเภท

- ผม เตือนว่า ฟังก์ชัน Diagnostics.Trace จะหยุดการทำงานหากลืมเพิ่ม delayed parameter สำหรับการดำเนินการที่ซับซ้อน เพราะว่าจะประมวลผลทั้งหมดแม้ว่าจะไม่มี tracing

## คำถามที่พบบ่อย

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

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

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

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

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

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

## แหล่งข้อมูลเพิ่มเติม

- [Microsoft Learn - Diagnostics.Trace](https://learn.microsoft.com/en-us/powerquery-m/diagnostics-trace) _(official)_
- [Power Query M Language Reference](https://learn.microsoft.com/en-us/powerquery-m/) _(official)_

---

_Source: [https://www.thepexcel.com/functions/power-query/error-handling/diagnostics-trace/](https://www.thepexcel.com/functions/power-query/error-handling/diagnostics-trace/)_
