Thep Excel

EARLIERดึงค่าจากบริบทแถวด้านนอก (Outer Row Context)

EARLIER คืนค่าของคอลัมน์ใน Row Context ชั้นนอก (Outer Row Context) เพื่อให้คอลัมน์คำนวณสามารถอ้างอิงค่า “ของแถวปัจจุบัน” ระหว่างการวนซ้อน (เช่น FILTER ภายใน Calculated Column) ได้

fx
=EARLIER(<Column>[, <Number>])

ความนิยม4/10
ความยาก4/10
ประโยชน์4/10

อัปเดต 13 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
Column column คอลัมน์ที่ต้องการดึงค่าจาก Row Context ชั้นนอก
[Number]ไม่บังคับ number 1 ระดับของ Row Context ชั้นนอกที่จะอ้างอิง (1 = ชั้นนอกถัดไป)

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

EARLIER ใช้ใน Calculated Column เพื่อดึงค่าของคอลัมน์จาก Row Context ชั้นนอก (บริบทแถวก่อนหน้า) ในสถานการณ์ที่มีการวนซ้อน เช่น FILTER ภายในนิพจน์ของคอลัมน์คำนวณ ทำให้เราสามารถ “เทียบแถวปัจจุบัน” กับ “แถวอื่น ๆ” ได้

โดยทั่วไป ถ้าคุณสามารถแก้ด้วย VAR/ตัวแปร หรือใช้ Measure/ฟังก์ชันแบบ iterator ได้ จะอ่านง่ายกว่า แต่ EARLIER ยังจำเป็นในบางรูปแบบของงาน Calculated Column เช่นการทำอันดับหรือยอดสะสมแบบเทียบกับแถวปัจจุบัน

How it works

ทำยอดสะสมใน Calculated Column

คำนวณยอดสะสมต่อสินค้า โดยเทียบวันที่ของแถวอื่น ๆ กับวันที่ของแถวปัจจุบัน

ทำอันดับใน Calculated Column

หาลำดับของแถวโดยนับจำนวนแถวที่มีค่ามากกว่า/น้อยกว่าแถวปัจจุบัน

นับจำนวนรายการในกลุ่มเดียวกัน

นับจำนวนแถวที่มีคีย์/หมวดหมู่เดียวกับแถวปัจจุบัน

Examples

ตัวอย่างที่ 1: ยอดสะสมต่อสินค้า (Calculated Column)ยอดสะสม = SUMX( FILTER( Sales, Sales[ProductKey] = EARLIER(Sales[ProductKey]) && Sales[OrderDate]

FILTER วนในตาราง Sales และใช้ EARLIER เพื่อดึงค่า ProductKey/OrderDate ของ “แถวปัจจุบัน” ที่เป็น Row Context ชั้นนอก เพื่อกำหนดเงื่อนไขรวมยอด

fx
ยอดสะสม =
SUMX(
FILTER(
Sales,
Sales[ProductKey] = EARLIER(Sales[ProductKey])
&& Sales[OrderDate] <= EARLIER(Sales[OrderDate])
),
Sales[SalesAmount]
)

ผลลัพธ์ได้ยอดขายสะสมต่อ ProductKey เรียงตามวันที่ภายในตาราง Sales
ตัวอย่างที่ 2: อันดับราคาสินค้า (Calculated Column)อันดับราคา = COUNTROWS( FILTER( Product, Product[Price] > EARLIER(Product[Price]) ) ) + 1

นับจำนวนสินค้าที่มีราคา “มากกว่า” ราคาแถวปัจจุบัน แล้วบวก 1 เพื่อได้อันดับของแถวปัจจุบัน

fx
อันดับราคา =
COUNTROWS(
FILTER(
Product,
Product[Price] > EARLIER(Product[Price])
)
) + 1

ผลลัพธ์ได้อันดับ 1, 2, 3,… โดย 1 คือราคาสูงสุด (ตามตรรกะตัวอย่างนี้)
ตัวอย่างที่ 3: นับจำนวนรายการในหมวดเดียวกันจำนวนในหมวด = COUNTROWS( FILTER( Product, Product[Category] = EARLIER(Product[Category]) ) )

ใช้ EARLIER เพื่ออ้างอิง Category ของแถวปัจจุบัน แล้วให้ FILTER นับแถวที่อยู่หมวดเดียวกัน

fx
จำนวนในหมวด =
COUNTROWS(
FILTER(
Product,
Product[Category] = EARLIER(Product[Category])
)
)

ผลลัพธ์ได้จำนวนแถวของ Product ที่อยู่ใน Category เดียวกับแถวปัจจุบัน

FAQs

EARLIER กับ EARLIEST ต่างกันอย่างไร?+

EARLIER อ้างอิง Row Context ชั้นนอก “ตามระดับที่กำหนด” ส่วน EARLIEST ใช้เพื่ออ้างอิง Row Context ชั้นนอกสุด (บนสุด) เมื่อมีการวนซ้อนหลายชั้น

ทำไมบางครั้งใช้ EARLIER แล้วเกิด error?+

เพราะ EARLIER ต้องมี Row Context ชั้นนอกให้ย้อนกลับไปอ้างอิง ถ้าใช้ใน Measure หรือบริบทที่ไม่มีการสร้าง Row Context ซ้อนกัน จะไม่มี “ชั้นนอก” ให้ดึงค่า

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ EARLIER จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้EARLIEROther
Table manipulation (2)
ADDCOLUMNS

ADDCOLUMNS เป็นฟังก์ชัน table transformation ที่ใช้สำหรับเพิ่มคอลัมน์ใหม่ (Calculated Columns) เข้าไปในตารางที่มีอยู่เดิม โดยคำนวณค่าในแต่ละแถวผ่าน Row Context และส่งคืนตารางเดิมพร้อมคอลัมน์ใหม่ต่อท้าย

GENERATE

GENERATE วนทีละแถวใน Table1 แล้วประเมิน Table2 ในบริบทของแถวนั้น (row context) จากนั้นรวมผลทั้งหมดเป็นตารางเดียว ถ้า Table2 ว่างเปล่าในรอบไหน แถวนั้นจาก Table1 จะถูกตัดออก (ต่างจาก GENERATEALL)

Other (1)
EARLIEST

EARLIEST ดึงค่าคอลัมน์จาก row context ชั้นนอกสุดเมื่อสูตรสร้าง row context ซ้อน (เช่น FILTER, RANKX, SUMX ในคอลัมน์คำนวณ) ทำให้ยังเข้าถึงค่าดั้งเดิมของแถวที่กำลังประเมินได้แม้จะเข้าสู่บริบทใหม่

Filter (1)
WINDOW

WINDOW ดึงช่วงแถวภายในพาร์ทิชัน คืนค่าเป็นตาราง เหมาะกับการคำนวณแบบช่วง เช่น moving average, running sum, หรือ lead/lag analysis

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่