GENERATEALL วนแถวของ Table1 แล้วประเมิน Table2 ต่อแถว จากนั้นรวมผลเป็นตารางเดียว คล้าย GENERATE แต่เหมาะเมื่ออยากคงผลลัพธ์กรณี Table2 ว่างในบางสถานการณ์
=GENERATEALL(<Table1>, <Table2>)
=GENERATEALL(<Table1>, <Table2>)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| Table1 | table | Yes | ตารางหลักที่ใช้วนทีละแถว | |
| Table2 | table | Yes | นิพจน์ตารางที่ถูกประเมินต่อแถวของ Table1 แล้วนำผลมารวมกัน |
เหมาะกับงานตรวจสอบ/การวิเคราะห์ที่ไม่อยากให้แถวหายไปเมื่อไม่มีข้อมูลย่อย
เช่น ตรวจว่ารายการไหนไม่มีข้อมูลย่อย
Expanded (คงกรณีว่าง) = GENERATEALL( Products, FILTER(Sales, Sales[ProductID] = Products[ProductID]) )=Expanded (คงกรณีว่าง) =
GENERATEALL(
Products,
FILTER(Sales, Sales[ProductID] = Products[ProductID])
)
ได้ตารางขยายที่เหมาะกับการดูสินค้าที่อาจไม่มีรายการขาย
Expanded (Default) = GENERATE( Products, FILTER(Sales, Sales[ProductID] = Products[ProductID]) )=Expanded (Default) =
GENERATE(
Products,
FILTER(Sales, Sales[ProductID] = Products[ProductID])
)
GENERATE อาจตัดแถวที่ไม่มีผลลัพธ์จากตารางย่อย
Has Sales Rows = ADDCOLUMNS( Products, "Sales Rows", COUNTROWS( FILTER(Sales, Sales[ProductID] = Products[ProductID]) ) )Has Sales Rows =
ADDCOLUMNS(
Products,
"Sales Rows",
COUNTROWS(
FILTER(Sales, Sales[ProductID] = Products[ProductID])
)
)
ได้จำนวนแถวขายต่อสินค้า (ใช้หาแถวที่เป็น 0)
เมื่อ Table2 คืนผลว่าง (ไม่มีแถว) สำหรับบางแถวของ Table1 และคุณต้องการให้แถวหลักยังคงอยู่เพื่อการตรวจสอบ/รายงาน
ระวังจำนวนแถวผลลัพธ์และประสิทธิภาพ เพราะเป็นการสร้างตารางขยายจากการวนแถวของ Table1 และอาจทำให้ผลลัพธ์ใหญ่ได้มาก
GENERATEALL ทำงานคล้าย GENERATE คือวนทีละแถวใน Table1 แล้วประเมิน Table2 ต่อแถว จากนั้นรวมผลลัพธ์เป็นตารางเดียว แต่มีพฤติกรรมต่างกันเมื่อ Table2 ให้ผลว่าง (ไม่มีแถว) ในบางกรณี โดย GENERATEALL มักใช้เมื่อคุณต้องการรักษาการปรากฏของแถวจาก Table1 เพื่อการวิเคราะห์/ตรวจสอบ แม้ตารางย่อยจะไม่มีแถว