Thep Excel

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

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

=CROSSFILTER(<LeftColumnName>, <RightColumnName>, <CrossFilterType>)

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
5/10

Difficulty
5/10

Usefulness
5/10

Syntax & Arguments

=CROSSFILTER(<LeftColumnName>, <RightColumnName>, <CrossFilterType>)

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

How it works

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

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

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

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

Examples

ตัวอย่างที่ 1: ปิดการกรองข้าม (None)
Sales (ไม่มีการกรองข้าม) = CALCULATE( [Sales Amount], CROSSFILTER( Sales[ProductID], Products[ProductID], None ) )
ใช้ None (หรือ 0) เพื่อไม่ให้ตัวกรองไหลผ่านความสัมพันธ์นี้ขณะประเมินมาตรวัด ตัวกรองจาก Products จะไม่ส่งผลกระทบต่อ Sales
DAX Formula:

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

Result:

ยอดขายรวม โดยปิดการกรองข้ามจากตาราง Products โดยสิ้นเชิง

ตัวอย่างที่ 2: เปิดการกรองสองทาง (Both)
Sales (กรองสองทาง) = CALCULATE( [Sales Amount], CROSSFILTER( Sales[ProductID], Products[ProductID], Both ) )
ใช้ Both (หรือ 2) เพื่อให้ตัวกรองไหลได้สองทาง (ปกติจะเป็นทางเดียว) ระวังเพราะอาจเปลี่ยนความหมายของโมเดล
DAX Formula:

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

Result:

ยอดขายรวม โดยตัวกรองไหลได้สองทาง

ตัวอย่างที่ 3: กำหนดทิศทางจากซ้ายไปขวา (OneWay_LeftFiltersRight)
Sales (Left→Right) = CALCULATE( [Sales Amount], CROSSFILTER( Products[ProductID], Sales[ProductID], OneWay_LeftFiltersRight ) )
ใช้ OneWay_LeftFiltersRight (หรือ 4) เพื่อบังคับให้ตัวกรองไหลจาก Products → Sales เฉพาะการคำนวณนี้
DAX Formula:

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

Result:

ยอดขายรวม โดยตัวกรองไหลจากซ้ายไปขวา

ตัวอย่างที่ 4: กำหนดทิศทางจากขวาไปซ้าย (OneWay_RightFiltersLeft)
Products (Right→Left) = CALCULATE( COUNTROWS(Products), CROSSFILTER( Products[ProductID], Sales[ProductID], OneWay_RightFiltersLeft ) )
ใช้ OneWay_RightFiltersLeft (หรือ 3) เพื่อบังคับให้ตัวกรองไหลจาก Sales → Products ซึ่งมีประโยชน์เมื่อต้องการผลกระทบแบบปลิวกลับ
DAX Formula:

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

Result:

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

ตัวอย่างที่ 5: การใช้งานจริง – ยอดขายทั้งหมดไม่สนใจสินค้า
Total All Sales = CALCULATE( SUM(Sales[Amount]), CROSSFILTER( Sales[ProductID], Products[ProductID], None ) )
แม้ว่าผู้ใช้เลือกสินค้าบางอันใน Slicer มาตรวัดนี้ก็จะคำนวณยอดขายทั้งหมดแทน เนื่องจากปิดการกรองข้าม
DAX Formula:

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

Result:

10500 (ยอดขายทั้งหมด ไม่เว้นบางสินค้า)

FAQs

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

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

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

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

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

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

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

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

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

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

Resources & Related

Additional Notes

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

ที่เจ๋งของ CROSSFILTER คือ มันออกแบบมาเฉพาะเพื่อแก้ปัญหาความสัมพันธ์ที่ “ไม่ทำงานทิศทางที่เราต้องการ” โดยไม่ต้องไปแก้โมเดลนั้นเอง – ปรับแต่งเฉพาะการคำนวณที่ต้องการและสิ้นสุดเมื่อออกจาก CALCULATE นั้น ส่วนตัวผมว่าฟังก์ชันนี้เป็นเหมือน “ลัดเล่นความสัมพันธ์” ที่ช่วยมากเมื่อการกรองข้ามตัวนี้ทำให้ผลลัพธ์ผิดได้ ✨

Leave a Reply

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