Thep Excel

GENERATEALL – รวมตารางแบบ GENERATE แต่คงผลลัพธ์กรณีตารางย่อยว่าง

GENERATEALL วนแถวของ Table1 แล้วประเมิน Table2 ต่อแถว จากนั้นรวมผลเป็นตารางเดียว คล้าย GENERATE แต่เหมาะเมื่ออยากคงผลลัพธ์กรณี Table2 ว่างในบางสถานการณ์

=GENERATEALL(<Table1>, <Table2>)

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
4/10

Difficulty
6/10

Usefulness
4/10

Syntax & Arguments

=GENERATEALL(<Table1>, <Table2>)

Argument Type Required Default Description
Table1 table Yes ตารางหลักที่ใช้วนทีละแถว
Table2 table Yes นิพจน์ตารางที่ถูกประเมินต่อแถวของ Table1 แล้วนำผลมารวมกัน

How it works

คงแถวของตารางหลักแม้ตารางย่อยไม่มีแถว

เหมาะกับงานตรวจสอบ/การวิเคราะห์ที่ไม่อยากให้แถวหายไปเมื่อไม่มีข้อมูลย่อย

สร้างตารางขยายเพื่อทำรายงานความครอบคลุม

เช่น ตรวจว่ารายการไหนไม่มีข้อมูลย่อย

Examples

ตัวอย่างที่ 1: ขยายสินค้าไปยังรายการขาย (คงกรณีไม่มีขาย)
Expanded (คงกรณีว่าง) = GENERATEALL( Products, FILTER(Sales, Sales[ProductID] = Products[ProductID]) )
แนวคิดคือขยาย Products ไปหาแถว Sales ที่ตรงกัน และคงกรณีที่ไม่มีแถวเพื่อใช้ตรวจความครอบคลุม
DAX Formula:

=Expanded (คงกรณีว่าง) =
GENERATEALL(
    Products,
    FILTER(Sales, Sales[ProductID] = Products[ProductID])
)

Result:

ได้ตารางขยายที่เหมาะกับการดูสินค้าที่อาจไม่มีรายการขาย

ตัวอย่างที่ 2: เปรียบเทียบกับ GENERATE (แนวคิด)
Expanded (Default) = GENERATE( Products, FILTER(Sales, Sales[ProductID] = Products[ProductID]) )
ถ้าต้องการไม่ให้แถวหลักหายไปในกรณีไม่มีข้อมูลย่อย ให้พิจารณา GENERATEALL
DAX Formula:

=Expanded (Default) =
GENERATE(
    Products,
    FILTER(Sales, Sales[ProductID] = Products[ProductID])
)

Result:

GENERATE อาจตัดแถวที่ไม่มีผลลัพธ์จากตารางย่อย

ตัวอย่างที่ 3: ใช้ร่วมกับ COUNTROWS เพื่อตรวจแถวที่ไม่มีข้อมูลย่อย
Has Sales Rows = ADDCOLUMNS( Products, "Sales Rows", COUNTROWS( FILTER(Sales, Sales[ProductID] = Products[ProductID]) ) )
อีกแนวทางหนึ่งคือเพิ่มคอลัมน์จำนวนแถว เพื่อหาสินค้าที่ไม่มีข้อมูลย่อย
DAX Formula:

Has Sales Rows =
ADDCOLUMNS(
    Products,
    "Sales Rows",
        COUNTROWS(
            FILTER(Sales, Sales[ProductID] = Products[ProductID])
        )
)

Result:

ได้จำนวนแถวขายต่อสินค้า (ใช้หาแถวที่เป็น 0)

FAQs

GENERATEALL ต่างจาก GENERATE เมื่อไรถึงเห็นผลชัด?

เมื่อ Table2 คืนผลว่าง (ไม่มีแถว) สำหรับบางแถวของ Table1 และคุณต้องการให้แถวหลักยังคงอยู่เพื่อการตรวจสอบ/รายงาน

ควรระวังอะไรเมื่อใช้ GENERATEALL?

ระวังจำนวนแถวผลลัพธ์และประสิทธิภาพ เพราะเป็นการสร้างตารางขยายจากการวนแถวของ Table1 และอาจทำให้ผลลัพธ์ใหญ่ได้มาก

Resources & Related

Additional Notes

GENERATEALL ทำงานคล้าย GENERATE คือวนทีละแถวใน Table1 แล้วประเมิน Table2 ต่อแถว จากนั้นรวมผลลัพธ์เป็นตารางเดียว แต่มีพฤติกรรมต่างกันเมื่อ Table2 ให้ผลว่าง (ไม่มีแถว) ในบางกรณี โดย GENERATEALL มักใช้เมื่อคุณต้องการรักษาการปรากฏของแถวจาก Table1 เพื่อการวิเคราะห์/ตรวจสอบ แม้ตารางย่อยจะไม่มีแถว

Leave a Reply

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