---
title: HASONEVALUE – ตรวจสอบว่ามีค่าเดียวในบริบท
url: https://www.thepexcel.com/functions/dax/information/hasonevalue-dax/
type: function-explainer
program: DAX
syntax: "HASONEVALUE(<columnName>)"
date: 2025-12-13
updated: 2025-12-23
scores:
  popularity: 7
  difficulty: 4
  usefulness: 7
---

# HASONEVALUE – ตรวจสอบว่ามีค่าเดียวในบริบท

> HASONEVALUE ตรวจสอบว่า Column ที่ผ่านการ Filter มีเพียงค่าเดียวเท่านั้น Return TRUE หากตรงตามเงื่อนไ

## คำอธิบาย

HASONEVALUE ตรวจสอบว่า Column ที่ผ่านการ Filter มีเพียงค่าเดียวเท่านั้น Return TRUE หากตรงตามเงื่อนไข FALSE หากไม่ใช่ ใช้หลักเพื่อสร้าง Measure ที่ "ฉลาด" ตามการเลือก Filter ของผู้ใช้

## Syntax

```excel
HASONEVALUE(&lt;columnName&gt;)
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| columnName | Yes | Column Reference |  | ชื่อของคอลัมน์ที่ต้องการตรวจสอบ ต้องเป็นการอ้างอิงคอลัมน์ที่มีอยู่จริงในตัวแบบข้อมูล ไม่สามารถเป็น Expression หรือการคำนวณแบบเสมือน |

## เคสการใช้งาน

### การแสดงข้อความสรุปใน Grand Total

แสดงคำว่า "Total" เมื่ออยู่บนแถว Grand Total (เพราะไม่มีค่าเดียว)

_เหมาะกับ:_ conditional-display

### ควบคุมพฤติกรรมการคำนวณ

กำหนดให้ Measure ทำงานแบบหนึ่งเมื่อเลือกค่าเดียว และอีกแบบเมื่อเลือกหลายค่า

_เหมาะกับ:_ dynamic-measure

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: ตรวจสอบปีที่เลือก

```excel
Year Check =
IF(
    HASONEVALUE(Calendar[Year]),
    "ปีที่เลือก: " & VALUES(Calendar[Year]),
    "กรุณาเลือกปีเดียว"
)
```

**ผลลัพธ์:** `ถ้าเลือกปี 2024 เพียงปีเดียว จะแสดง "ปีที่เลือก: 2024" ถ้าเลือกหลายปีหรือไม่เลือก จะแสดง "กรุณาเลือกปีเดียว"`

ใช้ IF กับ HASONEVALUE เพื่อสร้างข้อความแบบมีเงื่อนไข ผ่านการเลือก Filter ของผู้ใช้

### 2. ตัวอย่างที่ 2: เปอร์เซ็นต์เทียบกับปีฐาน

```excel
YoY Percentage =
IF(
    HASONEVALUE(Calendar[Year]),
    DIVIDE(
        SUM(Sales[Amount]),
        CALCULATE(
            SUM(Sales[Amount]),
            Calendar[Year] = 2023
        )
    ),
    BLANK()
)
```

**ผลลัพธ์:** `เมื่อเลือกปีเดียว (เช่น 2024) จะแสดงเปอร์เซ็นต์เทียบกับปี 2023 เมื่อเลือกหลายปี จะแสดง BLANK (ว่างเปล่า)`

กรณีการใช้งานที่สำคัญคือ การคำนวณ Year-over-Year (YoY) ควรแสดงเฉพาะเมื่อผู้ใช้เลือกปีเดียว เพราะเมื่อเลือกหลายปี การเทียบกับปีฐานจะไม่มีความสำคัญและสร้างความสับสน

### 3. ตัวอย่างที่ 3: สลับระหว่างรายละเอียดกับรวม

```excel
Smart Detail Level =
IF(
    HASONEVALUE(Products[Category]),
    "เลือก: " & VALUES(Products[Category]) & " - " & SUM(Sales[Quantity]) & " หน่วย",
    "รวม " & DISTINCTCOUNT(Products[Category]) & " หมวดหมู่"
)
```

**ผลลัพธ์:** `หากเลือก Category "Electronics" จะแสดง "เลือก: Electronics - 5000 หน่วย" หากเลือกหลาย Category จะแสดง "รวม 3 หมวดหมู่"`

ประโยชน์สำคัญของ HASONEVALUE คือสามารถสลับระหว่างแสดงรายละเอียดสำหรับรายการเดียวและแสดงข้อมูลรวมสำหรับหลายรายการ ทำให้ Dashboard มีความยืดหยุ่น

### 4. ตัวอย่างที่ 4: ป้องกันการหารที่ไม่ถูกต้อง

```excel
Daily Average per Store =
IF(
    HASONEVALUE(Stores[StoreID]),
    DIVIDE(
        SUM(Sales[Amount]),
        COUNTROWS(VALUES(Dates[Date])),
        0
    ),
    BLANK()
)
```

**ผลลัพธ์:** `ถ้าเลือกสาขาเดียว จะแสดงยอดขายเฉลี่ยต่อวัน ถ้าเลือกหลายสาขา จะแสดง BLANK เพื่อป้องกันข้อมูลที่ผิดพลาด`

ในกรณีเลือกหลายสาขา หากเราหารยอดขายรวมด้วยจำนวนวัน ผลลัพธ์จะผิดเพราะแต่ละสาขามีจำนวนวันเท่า จึงควรแสดง BLANK() เพื่อป้องกันการตีความที่ผิด

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

- ใช้ HASONEVALUE เพื่อตรวจสอบเท่านั้น ถ้าต้องการค่าที่เลือกด้วย ให้ใช้ SELECTEDVALUE แทน ซึ่งจะสะดวกกว่า

- ผสมกับ IF เพื่อแสดงข้อเท็กซ์หรือค่าแตกต่างกันตามจำนวนค่า Filter ทำให้ Dashboard ตอบสนองต่อการเลือกของผู้ใช้

- HASONEVALUE ทำงานกับ Filter Context เท่านั้น ไม่ทำงานกับ Row Context ดังนั้นอยู่ใน Measure จึงเป็นที่เหมาะสม

- ใช้เป็นเงื่อนไขป้องกันการคำนวณที่ไม่มีความสำคัญ เช่น หาร หรือเปอร์เซ็นต์เมื่อระบบต้องการค่าเดียว

- กับ BLANK() เพื่อซ่อนข้อมูลที่สับสนเมื่อมีหลายค่า ทำให้ Dashboard สะอาดและเข้าใจง่าย

- ใช้กับหลากหลายคอลัมน์เพื่อสร้าง Measure ที่ "ฉลาด" ตอบสนองต่อการเลือก Filter ต่างๆ

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

**Q: HASONEVALUE ต่างจาก SELECTEDVALUE ยังไง?**

HASONEVALUE เพียงตรวจสอบว่ามีค่าเดียวหรือไม่ (Return TRUE/FALSE) ส่วน SELECTEDVALUE นอกจากตรวจสอบแล้ว ยังจะ Return ค่านั้นด้วย หรือ Return ค่า Default หากไม่มีค่าเดียว SELECTEDVALUE ใหม่กว่าและสะดวกกว่า แต่ HASONEVALUE ยังคงมีประโยชน์เมื่อต้องการตรวจสอบเท่านั้น

**Q: ใช้ HASONEVALUE กับ Calculated Column ได้ไหม?**

ได้ทางเทคนิค แต่ Calculated Column มีแต่ Row Context ไม่มี Filter Context เหมือน Measure ดังนั้นถ้าใช้ HASONEVALUE ใน Calculated Column มักจะ Return FALSE ตลอด เนื่องจากค่าทั้งหมดในคอลัมน์พิจารณาว่าผ่านมาทีละแถว ส่วนใหญ่ HASONEVALUE ใช้ใน Measure เพื่อตรวจสอบการเลือก Filter ของผู้ใช้

**Q: ถ้าไม่มีการ Filter Column เลย HASONEVALUE จะ Return อะไร?**

จะ Return FALSE เพราะในกรณีนั้น Column จะมีค่าหลายค่า (ทั้งหมดที่มีในตัวแบบข้อมูล) HASONEVALUE ตรวจสอบจำนวนค่าที่แตกต่างกัน ไม่ใช่จำนวนแถว

**Q: มี Expression ที่เทียบเท่า HASONEVALUE หรือไม่?**

ใช่ COUNTROWS(VALUES(columnName)) = 1 ให้ผลลัพธ์เดียวกันอย่างสมบูรณ์ แต่ HASONEVALUE ชัดเจนและเร็วกว่า เนื่องจากเป็นฟังก์ชันที่ออกแบบมาโดยเฉพาะสำหรับวัตถุประสงค์นี้

**Q: ใช้ HASONEVALUE กับหลายคอลัมน์พร้อมกันได้ไหม?**

ไม่ได้ โดยตรง HASONEVALUE รับเพียงคอลัมน์เดียว แต่สามารถใช้หลายครั้งในตัววัด เช่น IF(HASONEVALUE(Products[Category]) AND HASONEVALUE(Calendar[Year]), ...) เพื่อตรวจสอบหลายคอลัมน์

## ฟังก์ชันที่เกี่ยวข้อง

- selectedvalue
- countrows
- values
- hasanyvalue
- isinscope

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

- [Microsoft Learn - HASONEVALUE](https://learn.microsoft.com/en-us/dax/hasonevalue-function-dax) _(official)_
- [DAX Guide - HASONEVALUE](https://www.dax.guide/hasonevalue/) _(guide)_
- [SELECTEDVALUE - Alternative (ขอแนะนำ)](https://learn.microsoft.com/en-us/dax/selectedvalue-function-dax) _(official)_
- [COUNTROWS + VALUES Equivalent](https://learn.microsoft.com/en-us/dax/countrows-function-dax) _(official)_

---

_Source: [https://www.thepexcel.com/functions/dax/information/hasonevalue-dax/](https://www.thepexcel.com/functions/dax/information/hasonevalue-dax/)_
