---
title: CROSSFILTER – กำหนดทิศทางการกรองข้ามความสัมพันธ์ชั่วคราว
url: https://www.thepexcel.com/functions/dax/relationship/crossfilter-dax/
type: function-explainer
program: DAX
syntax: "CROSSFILTER(<LeftColumnName>, <RightColumnName>, <CrossFilterType>)"
date: 2025-12-13
updated: 2025-12-24
scores:
  popularity: 5
  difficulty: 5
  usefulness: 5
---

# CROSSFILTER – กำหนดทิศทางการกรองข้ามความสัมพันธ์ชั่วคราว

> CROSSFILTER กำหนดทิศทางการกรองข้ามความสัมพันธ์ระหว่าง 2 คอลัมน์ชั่วคราว (มักใช้ใน CALCULATE) เพื่อคว

## คำอธิบาย

CROSSFILTER กำหนดทิศทางการกรองข้ามความสัมพันธ์ระหว่าง 2 คอลัมน์ชั่วคราว (มักใช้ใน CALCULATE) เพื่อควบคุมการไหลของตัวกรองหรือปิดการกรองข้ามในบางการคำนวณ

## Syntax

```excel
CROSSFILTER(&lt;LeftColumnName&gt;, &lt;RightColumnName&gt;, &lt;CrossFilterType&gt;)
```

**Variant**

```excel
CROSSFILTER(&lt;LeftColumnName&gt;, &lt;RightColumnName&gt;, &lt;CrossFilterType&gt;)
```

กำหนดทิศทางการกรองข้ามของความสัมพันธ์ระหว่าง 2 คอลัมน์

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| LeftColumnName | Yes | column |  | คอลัมน์ฝั่งซ้ายของความสัมพันธ์ (ปลายทางหนึ่งของความสัมพันธ์) ต้องเป็นคอลัมน์จริงในโมเดล |
| RightColumnName | Yes | column |  | คอลัมน์ฝั่งขวาของความสัมพันธ์ (ปลายทางอีกฝั่งหนึ่งของความสัมพันธ์) ต้องเป็นปลายทางที่มีความสัมพันธ์กับ LeftColumnName |
| CrossFilterType | Yes | text/number |  | ชนิดทิศทางการกรอง: None (0), OneWay (1), Both (2), OneWay_RightFiltersLeft (3), OneWay_LeftFiltersRight (4) |

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

### ปิดการกรองข้ามชั่วคราว

เช่น ต้องการคำนวณที่ไม่ให้ตัวกรองไหลผ่านความสัมพันธ์บางเส้น

_เหมาะกับ:_ disable-cross-filter

### เปลี่ยนทิศทางการกรองให้เหมาะกับการคำนวณ

เช่น ทำให้ตัวกรองไหลสองทางเฉพาะในมาตรวัดบางตัว

_เหมาะกับ:_ override-direction

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: ปิดการกรองข้าม (None)

```excel
Sales (ไม่มีการกรองข้าม) =
CALCULATE(
    [Sales Amount],
    CROSSFILTER(
        Sales[ProductID],
        Products[ProductID],
        None
    )
)
```

**ผลลัพธ์:** `ยอดขายรวม โดยปิดการกรองข้ามจากตาราง Products โดยสิ้นเชิง`

ใช้ None (หรือ 0) เพื่อไม่ให้ตัวกรองไหลผ่านความสัมพันธ์นี้ขณะประเมินมาตรวัด ตัวกรองจาก Products จะไม่ส่งผลกระทบต่อ Sales

### 2. ตัวอย่างที่ 2: เปิดการกรองสองทาง (Both)

```excel
Sales (กรองสองทาง) =
CALCULATE(
    [Sales Amount],
    CROSSFILTER(
        Sales[ProductID],
        Products[ProductID],
        Both
    )
)
```

**ผลลัพธ์:** `ยอดขายรวม โดยตัวกรองไหลได้สองทาง`

ใช้ Both (หรือ 2) เพื่อให้ตัวกรองไหลได้สองทาง (ปกติจะเป็นทางเดียว) ระวังเพราะอาจเปลี่ยนความหมายของโมเดล

### 3. ตัวอย่างที่ 3: กำหนดทิศทางจากซ้ายไปขวา (OneWay_LeftFiltersRight)

```excel
Sales (Left→Right) =
CALCULATE(
    [Sales Amount],
    CROSSFILTER(
        Products[ProductID],
        Sales[ProductID],
        OneWay_LeftFiltersRight
    )
)
```

**ผลลัพธ์:** `ยอดขายรวม โดยตัวกรองไหลจากซ้ายไปขวา`

ใช้ OneWay_LeftFiltersRight (หรือ 4) เพื่อบังคับให้ตัวกรองไหลจาก Products → Sales เฉพาะการคำนวณนี้

### 4. ตัวอย่างที่ 4: กำหนดทิศทางจากขวาไปซ้าย (OneWay_RightFiltersLeft)

```excel
Products (Right→Left) =
CALCULATE(
    COUNTROWS(Products),
    CROSSFILTER(
        Products[ProductID],
        Sales[ProductID],
        OneWay_RightFiltersLeft
    )
)
```

**ผลลัพธ์:** `จำนวนสินค้า โดยตัวกรองจาก Sales ส่งผลกระทบ`

ใช้ OneWay_RightFiltersLeft (หรือ 3) เพื่อบังคับให้ตัวกรองไหลจาก Sales → Products ซึ่งมีประโยชน์เมื่อต้องการผลกระทบแบบปลิวกลับ

### 5. ตัวอย่างที่ 5: การใช้งานจริง - ยอดขายทั้งหมดไม่สนใจสินค้า

```excel
Total All Sales =
CALCULATE(
    SUM(Sales[Amount]),
    CROSSFILTER(
        Sales[ProductID],
        Products[ProductID],
        None
    )
)
```

**ผลลัพธ์:** `10500 (ยอดขายทั้งหมด ไม่เว้นบางสินค้า)`

แม้ว่าผู้ใช้เลือกสินค้าบางอันใน Slicer มาตรวัดนี้ก็จะคำนวณยอดขายทั้งหมดแทน เนื่องจากปิดการกรองข้าม

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

- ใช้ None เมื่อต้อง "บอก" ตัวกรองให้ไปเงียบ สำหรับมาตรวัดที่ต้องคำนวณแบบอิสระ

- CROSSFILTER ปิดเมื่อออกจาก CALCULATE - มันชั่วคราว ไม่เสียหายต่อโมเดลแบบเป็นการถาวร

- ใช้ร่วมกับ CALCULATE ได้ลงตัว - ส่วนใหญ่คิดว่า CROSSFILTER = filter argument ของ CALCULATE

- บางทีสะดวกกว่า USERELATIONSHIP เมื่อต้องการเปลี่ยนทิศทาง เนื่องจาก USERELATIONSHIP ต้องใช้ความสัมพันธ์ที่ inactive อยู่แล้ว

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

**Q: CROSSFILTER ใช้ได้ที่ไหนบ่อยที่สุด?**

มักใช้ภายใน CALCULATE เป็นตัวกรอง (filter argument) เพื่อปรับทิศทางการกรองข้ามความสัมพันธ์ชั่วคราวสำหรับการคำนวณนั้น ๆ เท่านั้น

**Q: CROSSFILTER ต่างจาก USERELATIONSHIP อย่างไร?**

USERELATIONSHIP ใช้เปิดความสัมพันธ์ที่ "ไม่ active" ชั่วคราว ส่วน CROSSFILTER ใช้เปลี่ยนทิศทาง/ปิดการกรองข้ามของความสัมพันธ์ที่ "มี active อยู่แล้ว" ชั่วคราว หรือทั้ง 2 แบบรวมกันก็ได้

**Q: CROSSFILTER ใช้ OneWay vs OneWay_LeftFiltersRight แตกต่างไหม?**

OneWay (1) คือการใช้ตัวกรองตามความสัมพันธ์ปกติ ส่วน OneWay_LeftFiltersRight (4) หมายความว่าบังคับให้ฝั่งซ้ายกรองฝั่งขวา ส่วน OneWay_RightFiltersLeft (3) บังคับให้ฝั่งขวากรองฝั่งซ้าย

**Q: จะรู้ได้ไหมว่าต้องใช้ CrossFilterType ไหน?**

ลองคำนวณผลลัพธ์ด้วยตัวกรองต่างๆ แล้วดูว่าอันไหนให้ผลถูกต้อง ปกติ None มักใช้เพื่อ "เพิกเฉยต่อตัวกรองชั่วขณะ" และ Both มักใช้เมื่อต้องการตัวกรองแบบสองทาง

**Q: CROSSFILTER ส่งผล Permanent หรือ Temporary?**

Temporary เท่านั้น - มันใช้ได้แค่ภายในนิพจน์ CALCULATE หรือ CALCULATETABLE ที่ใช้ CROSSFILTER นั้น สิ้นสุดเมื่อออกจากฟังก์ชันนั้น

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

- calculate
- userelationship
- [FILTER – กรองตารางด้วยเงื่อนไขที่ซับซ้อน (Iterator Function)](https://www.thepexcel.com/functions/dax/filter/filter-dax/)
- treatas
- intersect
- related
- relatedtable
- removefilters

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

- [DAX Guide: CROSSFILTER](https://dax.guide/crossfilter/) _(guide)_
- [SQLBI - CROSSFILTER Article](https://sqlbi.com/articles/crossfilter/) _(guide)_

---

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