ตัวอย่างที่ 1: รวม Product กับ Calendar Year
Product X Year = CROSSJOIN( VALUES('Product'[ProductName]), VALUES('Date'[CalendarYear]) )
ตารางที่มีทุกชื่อสินค้าคู่กับทุกปีที่มีข้อมูล
สร้างตารางที่มีทุก Combination ของแถวจากตารางที่รวมกัน
CROSSJOIN สร้างตารางใหม่โดยการรวมแถวทั้งหมดจากตารางที่ระบุ โดยสร้างทุก Combination ที่เป็นไปได้ (ทุกแถวจากตารางแรกจับคู่กับทุกแถวจากตารางที่สอง) ผลลัพธ์คือตารางที่มีจำนวนแถวเท่ากับผลคูณของจำนวนแถวของแต่ละตาราง
=CROSSJOIN(Table1, Table2, ...)
=CROSSJOIN(Table1, Table2, ...)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| Table | table | Yes | ตารางที่ต้องการนำมารวมกัน (สามารถระบุได้มากกว่า 1 ตาราง) |
เช่น ต้องการสร้างตารางทุก Combination ของ Product และ Scenario (Best/Worst Case) เพื่อวิเคราะห์ผลลัพธ์
สร้างตารางที่ใช้ในการทดสอบสูตรหรือโมเดลต่างๆ
Product X Year = CROSSJOIN( VALUES('Product'[ProductName]), VALUES('Date'[CalendarYear]) )
ตารางที่มีทุกชื่อสินค้าคู่กับทุกปีที่มีข้อมูล
Missing Combinations =
EXCEPT(
CROSSJOIN(VALUES(Store[StoreName]), VALUES(Product[ProductName])), SUMMARIZE(Sales, Store[StoreName], Product[ProductName]) )
ตาราง Store และ Product ที่ไม่มียอดขาย
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"}}) )
ตารางไพ่ 52 ใบ
CROSSJOIN ไม่สนใจ Relationship หรือคอลัมน์ที่ตรงกัน มันจะสร้างทุก Combination ของแถวทั้งหมด ส่วน NATURAL…JOIN จะรวมตารางโดยอาศัยคอลัมน์ที่ชื่อตรงกัน และความสัมพันธ์
ควรหลีกเลี่ยงการใช้กับตารางขนาดใหญ่มากๆ เพราะจำนวนแถวจะเพิ่มขึ้นแบบทวีคูณ (เช่น ตาราง A มี 1 ล้านแถว, ตาราง B มี 1 ล้านแถว -> CROSSJOIN จะได้ 1 ล้านล้านแถว) ทำให้ Memory เต็มได้ง่าย
CROSSJOIN เป็นฟังก์ชันที่สร้าง ผลคูณคาร์ทีเซียน (Cartesian Product) ของแถวทั้งหมดจากสองตารางหรือมากกว่านั้น ผลลัพธ์คือตารางใหม่ที่มีทุก Combination ที่เป็นไปได้ของแถวจากตารางต้นฉบับ
เช่น ถ้า Table A มี 3 แถว และ Table B มี 4 แถว CROSSJOIN(Table A, Table B) จะได้ตารางใหม่ที่มี 3 x 4 = 12 แถว