Thep Excel

CROSSJOIN – สร้างตารางผลคูณคาร์ทีเซียน (Cartesian Product)

CROSSJOIN สร้างตารางใหม่โดยการรวมแถวทั้งหมดจากตารางที่ระบุ โดยสร้างทุก Combination ที่เป็นไปได้ ผลลัพธ์คือตารางที่มีจำนวนแถวเท่ากับผลคูณของจำนวนแถวของแต่ละตาราง

=CROSSJOIN(<table1>, <table2>[, <table3>]...)

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
5/10

Difficulty
5/10

Usefulness
5/10

Syntax & Arguments

=CROSSJOIN(<table1>, <table2>[, <table3>]...)

Argument Type Required Default Description
table1 Table Yes ตารางตัวแรกที่ต้องการนำมาสร้าง Combination นี่คือตารางใดก็ได้ที่ส่งกลับมาจากนิพจน์ DAX (เช่น VALUES, SUMMARIZE, DATATABLE เป็นต้น)
table2 Table Yes ตารางตัวที่สองที่ต้องการนำมาสร้างผลคูณคาร์ทีเซียน ชื่อคอลัมน์ต้องไม่ซ้ำกับตาราง table1
table3 Table Optional ไม่มีตารางเพิ่มเติม ตารางตัวที่สาม ห้า หรือมากกว่า (ทำซ้ำได้ตามต้องการ) สำหรับการสร้าง Combination ของตารางมากกว่า 2 ตาราง

How it works

การสร้างตาราง Matrix สำหรับการวิเคราะห์ (What-If Analysis)

เช่น ต้องการสร้างตารางทุก Combination ของ Product และ Scenario (Best/Worst Case) เพื่อวิเคราะห์ผลลัพธ์

การสร้างตารางจำลอง (Simulation Table)

สร้างตารางที่ใช้ในการทดสอบสูตรหรือโมเดลต่างๆ

Examples

ตัวอย่างที่ 1: รวม Product กับ Calendar Year
Product X Year = CROSSJOIN( VALUES('Product'[ProductName]), VALUES('Date'[CalendarYear]) )
ถ้ามี 10 สินค้า และ 5 ปี จะได้ตาราง 50 แถว แสดงทุก Combination ของสินค้าและปี นี่มีประโยชน์สำหรับการทำให้เห็นว่าสินค้าไหนที่ขายในปีไหนบ้าง และปีไหนที่ไม่มีการขาย
DAX Formula:

Product X Year = CROSSJOIN( VALUES('Product'[ProductName]), VALUES('Date'[CalendarYear]) )

Result:

ตารางที่มีทุกชื่อสินค้าคู่กับทุกปีที่มีข้อมูล

ตัวอย่างที่ 2: หา Combination ที่ไม่มีขาย (Missing Sales)
Missing Combinations = EXCEPT( CROSSJOIN( VALUES(Store[StoreName]), VALUES(Product[ProductName]) ), SUMMARIZE(Sales, Store[StoreName], Product[ProductName]) )
สร้างตารางที่เป็นไปได้ทั้งหมด (CROSSJOIN) แล้วลบด้วยตารางที่มีขายจริง (SUMMARIZE) เพื่อหาช่องว่าง เช่น ถ้ามี 5 ร้านค้า และ 8 สินค้า ควรจะมี 40 Combination แต่ถ้าขายจริงมีแค่ 35 แถว แสดงว่ามี 5 Combination ที่ไม่มีขายอยู่
DAX Formula:

Missing Combinations = 
EXCEPT(
    CROSSJOIN(
        VALUES(Store[StoreName]), 
        VALUES(Product[ProductName])
    ),
    SUMMARIZE(Sales, Store[StoreName], Product[ProductName])
)

Result:

ตาราง Store และ Product ที่ไม่มียอดขาย

ตัวอย่างที่ 3: สร้างตารางไพ่ (52 ใบ)
Deck of Cards = CROSSJOIN( DATATABLE("Suit", STRING, {{"Heart"}, {"Diamond"}, {"Spade"}, {"Club"}}), DATATABLE("Rank", STRING, { {"A"}, {"2"}, {"3"}, {"4"}, {"5…
รวม 4 ดอก x 13 แต้ม ได้ 52 ใบ ตัวอย่างนี้แสดงให้เห็นว่า CROSSJOIN ใช้สร้างชุดข้อมูล synthetic ที่ครอบคลุมทุก Combination ที่เป็นไปได้
DAX Formula:

Deck of Cards = 
CROSSJOIN(
    DATATABLE("Suit", STRING, {{"Heart"}, {"Diamond"}, {"Spade"}, {"Club"}}),
    DATATABLE("Rank", STRING, { {"A"}, {"2"}, {"3"}, {"4"}, {"5"}, {"6"}, {"7"}, {"8"}, {"9"}, {"10"}, {"J"}, {"Q"}, {"K"}})
)

Result:

ตารางไพ่ 52 ใบ

ตัวอย่างที่ 4: สร้างตารางราคาและปริมาณ
Price Volume Matrix = CROSSJOIN( DATATABLE("Price", REAL, {{10}, {20}, {30}, {40}}), DATATABLE("Volume", INTEGER, {{100}, {200}, {300}, {400}, {500}}) )
4 ระดับราคา × 5 ระดับปริมาณ = 20 แถว ใช้ประโยชน์เมื่อต้องการวิเคราะห์สถานการณ์ที่เป็นไปได้ทั้งหมด (Scenario Analysis)
DAX Formula:

Price Volume Matrix = 
CROSSJOIN(
    DATATABLE("Price", REAL, {{10}, {20}, {30}, {40}}),
    DATATABLE("Volume", INTEGER, {{100}, {200}, {300}, {400}, {500}})
)

Result:

ตารางแสดง 20 Combination ของ Price x Volume

FAQs

CROSSJOIN ต่างจาก NATURALINNERJOIN หรือ NATURALLEFTOUTERJOIN อย่างไร?

CROSSJOIN ไม่สนใจ Relationship หรือคอลัมน์ที่ตรงกัน มันจะสร้างทุก Combination ของแถวทั้งหมดโดยไม่คำนึงถึงค่าใดๆ ส่วน NATURAL…JOIN จะรวมตารางโดยอาศัยคอลัมน์ที่ชื่อตรงกัน และความสัมพันธ์ (Relationship) ของตารางในโมเดล

ควรหลีกเลี่ยง CROSSJOIN ตอนไหน?

ควรหลีกเลี่ยงการใช้กับตารางขนาดใหญ่มากๆ เพราะจำนวนแถวจะเพิ่มขึ้นแบบทวีคูณ (เช่น ตาราง A มี 1 ล้านแถว, ตาราง B มี 1 ล้านแถว -> CROSSJOIN จะได้ 1 ล้านล้านแถว) ทำให้ Memory เต็มได้ง่ายและประสิทธิภาพลดลงอย่างมาก

ชื่อคอลัมน์ซ้ำกันระหว่างตารางจะเกิดอะไร?

CROSSJOIN จะส่งข้อผิดพลาด (Error) หากชื่อคอลัมน์ซ้ำกัน ต้องใช้ ADDCOLUMNS หรือ SELECT เพื่อเปลี่ยนชื่อคอลัมน์ก่อนใช้ CROSSJOIN

CROSSJOIN กับ GENERATE ต่างกันอย่างไร?

CROSSJOIN สร้างผลคูณโดยไม่มีเงื่อนไข ส่วน GENERATE สามารถสร้าง Combination ตามเงื่อนไข (เช่น ใช้ CALCULATE เพื่อกรอง) ทำให้ GENERATE มีประสิทธิภาพดีกว่าเมื่อต้องการเลือก Combination บางส่วน

Resources & Related

Additional Notes

CROSSJOIN เป็นฟังก์ชันที่สร้าง ผลคูณคาร์ทีเซียน (Cartesian Product) ของแถวทั้งหมดจากสองตารางหรือมากกว่านั้น ผลลัพธ์คือตารางใหม่ที่มีทุก Combination ที่เป็นไปได้ของแถวจากตารางต้นฉบับ

เช่น ถ้า Table A มี 3 แถว และ Table B มี 4 แถว CROSSJOIN(Table A, Table B) จะได้ตารางใหม่ที่มี 3 x 4 = 12 แถว

จำนวนแถวผลลัพธ์ = (แถวของตาราง 1) × (แถวของตาราง 2) × (แถวของตาราง 3) …
จำนวนคอลัมน์ผลลัพธ์ = (คอลัมน์ของตาราง 1) + (คอลัมน์ของตาราง 2) + (คอลัมน์ของตาราง 3) …

Leave a Reply

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