บริบทในสูตร DAX

นำไปใช้กับ
Excel for Microsoft 365 Excel 2024 Excel 2021 Excel 2019 Excel 2016

บริบททําให้คุณสามารถดําเนินการวิเคราะห์แบบไดนามิกได้ ซึ่งผลลัพธ์ของสูตรสามารถเปลี่ยนแปลงเพื่อแสดงการเลือกแถวหรือเซลล์ปัจจุบันและข้อมูลใดๆ ที่เกี่ยวข้อง การทําความเข้าใจบริบทและการใช้บริบทอย่างมีประสิทธิภาพมีความสําคัญมากสําหรับการสร้างสูตรที่มีประสิทธิภาพสูง การวิเคราะห์แบบไดนามิก และสําหรับการแก้ไขปัญหาในสูตร

ส่วนนี้กําหนดชนิดต่างๆ ของบริบท: บริบทแถว บริบทคิวรี และบริบทตัวกรอง ซึ่งจะอธิบายวิธีประเมินบริบทสําหรับสูตรในคอลัมน์จากการคํานวณและใน PivotTable

ส่วนสุดท้ายของบทความนี้มีลิงก์ไปยังตัวอย่างโดยละเอียด ซึ่งแสดงให้เห็นว่าผลลัพธ์ของสูตรเปลี่ยนแปลงไปอย่างไรตามบริบท

ทําความเข้าใจบริบท

สูตรใน Power Pivot อาจได้รับผลกระทบจากตัวกรองที่นําไปใช้ใน PivotTable ความสัมพันธ์ระหว่างตาราง และตัวกรองที่ใช้ในสูตร บริบทคือสิ่งที่ทําให้สามารถทําการวิเคราะห์แบบไดนามิกได้ การทําความเข้าใจบริบทเป็นสิ่งสําคัญสําหรับการสร้างและการแก้ไขปัญหาสูตร

บริบทมีหลายชนิด: บริบทแถว บริบทคิวรี และบริบทตัวกรอง

บริบทของแถวอาจถือได้ว่าเป็น "แถวปัจจุบัน" ถ้าคุณสร้างคอลัมน์จากการคํานวณ บริบทของแถวจะประกอบด้วยค่าในแต่ละแถวและค่าในแต่ละคอลัมน์ที่เกี่ยวข้องกับแถวปัจจุบัน นอกจากนี้ยังมีบางฟังก์ชัน (EARLIER และ EARLYLIEST) ที่รับค่าจากแถวปัจจุบัน แล้วใช้ค่านั้นขณะดําเนินการกับทั้งตาราง

บริบทคิวรีอ้างอิงถึงชุดย่อยของข้อมูลที่สร้างขึ้นโดยปริยายสําหรับแต่ละเซลล์ใน PivotTable โดยขึ้นอยู่กับส่วนหัวของแถวและคอลัมน์

บริบทตัวกรองคือชุดของค่าที่อนุญาตในแต่ละคอลัมน์ โดยยึดตามข้อจํากัดตัวกรองที่ถูกนําไปใช้กับแถวหรือที่กําหนดโดยนิพจน์ตัวกรองภายในสูตร

ด้านบนของหน้า

บริบทแถว

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

ตัวอย่างเช่น สมมติว่าคุณสร้างคอลัมน์จากการคํานวณ =[ค่าขนส่งสินค้า] + [ภาษี] ที่รวมสองคอลัมน์จากตารางเดียวกันเข้าด้วยกัน สูตรนี้จะทํางานเหมือนกับสูตรในตาราง Excel ซึ่งจะอ้างอิงค่าจากแถวเดียวกันโดยอัตโนมัติ โปรดสังเกตว่าตารางจะแตกต่างจากช่วง: คุณไม่สามารถอ้างอิงค่าจากแถวก่อนแถวปัจจุบันโดยใช้สัญกรณ์ของช่วง และคุณไม่สามารถอ้างอิงค่าเดียวใดๆ ในตารางหรือเซลล์ได้ คุณต้องทํางานกับตารางและคอลัมน์เสมอ

บริบทของแถวจะติดตามความสัมพันธ์ระหว่างตารางต่างๆ โดยอัตโนมัติเพื่อกําหนดว่าแถวใดในตารางที่เกี่ยวข้องจะสัมพันธ์กับแถวปัจจุบันบ้าง

ตัวอย่างเช่น สูตรต่อไปนี้ใช้ฟังก์ชัน RELATED เพื่อดึงข้อมูลค่าภาษีจากตารางที่เกี่ยวข้อง โดยยึดตามภูมิภาคที่คําสั่งซื้อถูกจัดส่งไป ค่าภาษีถูกกําหนดโดยใช้ค่าสําหรับภูมิภาคในตารางปัจจุบัน ค้นหาภูมิภาคในตารางที่เกี่ยวข้อง แล้วรับอัตราภาษีสําหรับภูมิภาคนั้นจากตารางที่เกี่ยวข้อง

= [ค่าขนส่งสินค้า] + RELATED('Region'[TaxRate])

สูตรนี้เพียงแค่รับอัตราภาษีสําหรับภูมิภาคปัจจุบันจากตารางภูมิภาค คุณไม่จําเป็นต้องทราบหรือระบุคีย์ที่เชื่อมต่อตาราง

บริบทหลายแถว

นอกจากนี้ DAX ยังมีฟังก์ชันที่คํานวณซ้ําบนตารางอีกด้วย ฟังก์ชันเหล่านี้สามารถมีหลายแถวปัจจุบันและบริบทของแถวปัจจุบัน ในแง่ของการเขียนโปรแกรม คุณสามารถสร้างสูตรที่วนซ้ําผ่านลูปภายในและภายนอกได้

ตัวอย่างเช่น สมมติว่าเวิร์กบุ๊กของคุณมีตาราง ผลิตภัณฑ์ และตารางยอดขาย คุณอาจต้องการดูตารางยอดขายทั้งตาราง ซึ่งเต็มไปด้วยธุรกรรมที่เกี่ยวข้องกับผลิตภัณฑ์หลายรายการ และค้นหาปริมาณที่สั่งซื้อมากที่สุดสําหรับแต่ละผลิตภัณฑ์ในธุรกรรมหนึ่งครั้ง

ใน Excel การคํานวณนี้ต้องใช้ชุดข้อมูลสรุประดับกลาง ซึ่งจะต้องสร้างขึ้นใหม่ถ้าข้อมูลมีการเปลี่ยนแปลง ถ้าคุณเป็นผู้ใช้ระดับสูงของ Excel คุณอาจสามารถสร้างสูตรอาร์เรย์ที่จะทํางานได้ อีกวิธีหนึ่งคือ ในฐานข้อมูลเชิงสัมพันธ์ คุณสามารถเขียนการเลือกย่อยที่ซ้อนกันได้

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

=MAXX(FILTER(Sales,[ProdKey]=EARLIER([ProdKey])),Sales[OrderQty])

สําหรับรายละเอียดต่างๆ ของสูตรนี้ ให้ดูที่ฟังก์ชัน EARLIER

กล่าวโดยย่อ ฟังก์ชัน EARLIER จะจัดเก็บบริบทแถวจากการดําเนินการที่ทําก่อนหน้าการดําเนินการปัจจุบัน ฟังก์ชันจะเก็บชุดบริบทสองชุดไว้ในหน่วยความจําตลอดเวลา: บริบทชุดหนึ่งจะแสดงแถวปัจจุบันสําหรับการวนรอบภายในของสูตร และอีกชุดของบริบทจะแสดงแถวปัจจุบันสําหรับการวนรอบด้านนอกของสูตร DAX จะป้อนค่าระหว่างสองลูปโดยอัตโนมัติเพื่อให้คุณสามารถสร้างการรวมที่ซับซ้อนได้

ด้านบนของหน้า

บริบทของคิวรี

บริบทคิวรีอ้างอิงถึงชุดย่อยของข้อมูลที่ถูกเรียกใช้โดยปริยายสําหรับสูตร เมื่อคุณวางการวัดหรือเขตข้อมูลค่าอื่นๆ ลงในเซลล์ใน PivotTable เครื่องมือ Power Pivot จะตรวจสอบส่วนหัวของแถวและคอลัมน์ ตัวแบ่งส่วนข้อมูล และตัวกรองรายงานเพื่อระบุบริบท จากนั้น Power Pivot จะทําการคํานวณที่จําเป็นเพื่อเติมข้อมูลแต่ละเซลล์ใน PivotTable ชุดของข้อมูลที่ถูกดึงมาคือบริบทของคิวรีสําหรับแต่ละเซลล์

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

ตัวอย่างเช่น สมมติว่าคุณสร้างสูตรอย่างง่ายนี้ที่รวมค่าในคอลัมน์ กําไร ของตาราง ยอดขาย

=SUM('Sales'[Profit])

ถ้าคุณใช้สูตรนี้ในคอลัมน์จากการคํานวณภายในตาราง ยอดขาย ผลลัพธ์ของสูตรจะเหมือนกันสําหรับทั้งตาราง เนื่องจากบริบทคิวรีสําหรับสูตรจะเป็นชุดข้อมูลทั้งหมดของตาราง ยอดขาย เสมอ ผลลัพธ์ของคุณจะมีกําไรสําหรับทุกภูมิภาค ทุกผลิตภัณฑ์ ทุกปี และอื่นๆ

อย่างไรก็ตามโดยปกติแล้วคุณไม่ต้องการเห็นผลลัพธ์เดียวกันหลายร้อยครั้ง แต่คุณต้องการได้รับผลกําไรสําหรับปีใดปีหนึ่งประเทศหรือภูมิภาคใดประเทศหนึ่งหรือภูมิภาคใดผลิตภัณฑ์หนึ่งหรือการรวมกันของสิ่งเหล่านี้แล้วรับผลรวมทั้งหมด

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

ด้านบนของหน้า

ตัวกรองบริบท

บริบทตัวกรองจะถูกเพิ่มเมื่อคุณระบุข้อจํากัดตัวกรองบนชุดของค่าที่อนุญาตในคอลัมน์หรือตาราง โดยใช้อาร์กิวเมนต์ไปยังสูตร ตัวกรองบริบทจะนําไปใช้กับด้านบนของบริบทอื่น เช่น บริบทของแถวหรือบริบทของคิวรี

ตัวอย่างเช่น PivotTable จะคํานวณค่าสําหรับแต่ละเซลล์โดยยึดตามส่วนหัวของแถวและคอลัมน์ ตามที่อธิบายไว้ในส่วนก่อนหน้าเกี่ยวกับบริบทคิวรี อย่างไรก็ตาม ภายในการวัดหรือคอลัมน์จากการคํานวณที่คุณเพิ่มไปยัง PivotTable คุณสามารถระบุนิพจน์ตัวกรองเพื่อควบคุมค่าที่สูตรใช้ได้ นอกจากนี้ คุณสามารถเลือกล้างตัวกรองในบางคอลัมน์ได้

สําหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการสร้างตัวกรองภายในสูตร ให้ดูที่ ฟังก์ชันตัวกรอง

สําหรับตัวอย่างวิธีการล้างตัวกรองเพื่อสร้างผลรวมทั้งหมด ให้ดูที่ฟังก์ชัน ALL

สําหรับตัวอย่างวิธีการล้างและเลือกใช้ตัวกรองภายในสูตร ให้ดูที่ฟังก์ชัน ALLEXCEPT

ดังนั้น คุณต้องตรวจทานข้อกําหนดของหน่วยวัดหรือสูตรที่ใช้ใน PivotTable เพื่อให้คุณทราบบริบทของตัวกรองเมื่อแปลผลลัพธ์ของสูตร

ด้านบนของหน้า

การกําหนดบริบทในสูตร

เมื่อคุณสร้างสูตร Power Pivot สําหรับ Excel จะตรวจสอบไวยากรณ์ทั่วไปก่อน จากนั้นจะตรวจสอบชื่อของคอลัมน์และตารางที่คุณระบุกับคอลัมน์และตารางที่เป็นไปได้ในบริบทปัจจุบัน ถ้า Power Pivot ไม่พบคอลัมน์และตารางที่ระบุโดยสูตร คุณจะได้รับข้อผิดพลาด

บริบทจะถูกกําหนดตามที่อธิบายไว้ในส่วนก่อนหน้านี้ โดยใช้ตารางที่มีอยู่ในเวิร์กบุ๊ก ความสัมพันธ์ใดๆ ระหว่างตาราง และตัวกรองใดๆ ที่ได้นําไปใช้

ตัวอย่างเช่น ถ้าคุณเพิ่งนําเข้าข้อมูลบางอย่างลงในตารางใหม่และไม่ได้นําตัวกรองใดๆ มาใช้ คอลัมน์ทั้งชุดในตารางจะเป็นส่วนหนึ่งของบริบทปัจจุบัน ถ้าคุณมีหลายตารางที่เชื่อมโยงกันด้วยความสัมพันธ์ และคุณกําลังทํางานใน PivotTable ที่ถูกกรองด้วยการเพิ่มส่วนหัวของคอลัมน์และใช้ตัวแบ่งส่วนข้อมูล บริบทจะมีตารางที่เกี่ยวข้องและตัวกรองใดๆ บนข้อมูล

บริบทเป็นแนวคิดที่มีประสิทธิภาพที่อาจทําให้ยากต่อการแก้ไขปัญหาสูตร เราขอแนะนําให้คุณเริ่มต้นด้วยสูตรและความสัมพันธ์อย่างง่ายเพื่อดูวิธีการทํางานของบริบท แล้วเริ่มทดลองด้วยสูตรอย่างง่ายใน PivotTable ส่วนต่อไปนี้ยังแสดงตัวอย่างของวิธีที่สูตรใช้ชนิดบริบทที่แตกต่างกันเพื่อส่งกลับผลลัพธ์แบบไดนามิก

ตัวอย่างของบริบทในสูตร

  • ฟังก์ชัน RELATED จะขยายบริบทของแถวปัจจุบันเพื่อรวมค่าในคอลัมน์ที่เกี่ยวข้อง ซึ่งช่วยให้คุณดําเนินการค้นหา ตัวอย่างในหัวข้อนี้แสดงให้เห็นถึงปฏิสัมพันธ์ของการกรองและบริบทแถว
  • ฟังก์ชัน FILTER ช่วยให้คุณระบุแถวที่จะรวมในบริบทปัจจุบัน ตัวอย่างในหัวข้อนี้ยังแสดงวิธีการฝังตัวกรองภายในฟังก์ชันอื่นๆ ที่ดําเนินการรวม
  • ฟังก์ชัน ALL จะตั้งค่าบริบทภายในสูตร You can use it to override filters that are applied as result of query context.
  • ฟังก์ชัน ALLEXCEPT จะช่วยให้คุณเอาตัวกรองทั้งหมดออก ยกเว้นตัวกรองที่คุณระบุ ทั้งสองหัวข้อมีตัวอย่างที่จะแนะนําคุณเกี่ยวกับการสร้างสูตรและทําความเข้าใจบริบทที่ซับซ้อน
  • ฟังก์ชัน EARLIER และ EARLIEST จะช่วยให้คุณสามารถวนรอบผ่านตารางต่างๆ ได้โดยการทําการคํานวณ ในขณะที่อ้างอิงค่าจากการวนรอบภายใน ถ้าคุณคุ้นเคยกับแนวคิดของการเกิดซ้ําและลูปภายในและภายนอก คุณจะประทับใจกับพลังที่ฟังก์ชัน EARLIER และ EARLIEST มอบให้ ถ้าคุณไม่คุ้นเคยกับแนวคิดเหล่านี้ คุณควรทําตามขั้นตอนในตัวอย่างอย่างรอบคอบเพื่อดูวิธีการใช้บริบทภายในและภายนอกในการคํานวณ

ด้านบนของหน้า

Referential Integrity

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

ถ้าคุณไม่คุ้นเคยกับแนวคิดของข้อมูลที่สัมพันธ์กัน เราขอแนะนําให้คุณอ่านหัวข้อเบื้องต้นที่กล่าวคือ ภาพรวมความสัมพันธ์ ก่อน

Referential Integrity และความสัมพันธ์ของ Power Pivot

Power Pivot ไม่จําเป็นต้องบังคับให้มี Referential Integrity ระหว่างตารางสองตารางเพื่อกําหนดความสัมพันธ์ที่ถูกต้อง แถวว่างจะถูกสร้างขึ้นบนปลาย "หนึ่ง" ของความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่มแต่ละความสัมพันธ์แทน และจะถูกใช้เพื่อจัดการกับแถวที่ไม่ตรงกันทั้งหมดจากตารางที่เกี่ยวข้อง ซึ่งจะทํางานเป็นการรวมภายนอกของ SQL ได้อย่างมีประสิทธิภาพ

ใน PivotTable ถ้าคุณจัดกลุ่มข้อมูลตามด้านเดียวของความสัมพันธ์ ข้อมูลที่ไม่ตรงกันบนด้านหลายด้านของความสัมพันธ์จะถูกจัดกลุ่มเข้าด้วยกันและจะถูกรวมไว้ในผลรวมที่มีส่วนหัวของแถวว่าง ส่วนหัวว่างจะเทียบเท่ากับ "สมาชิกที่ไม่รู้จัก"

ทําความเข้าใจกับสมาชิกที่ไม่รู้จัก

แนวคิดของสมาชิกที่ไม่รู้จักอาจคุ้นเคยถ้าคุณเคยทํางานกับระบบฐานข้อมูลหลายมิติ เช่น SQL Server Analysis Services ถ้าคํานี้ยังใหม่สําหรับคุณ ตัวอย่างต่อไปนี้จะอธิบายว่าสมาชิกที่ไม่รู้จักคืออะไร และส่งผลต่อการคํานวณอย่างไร

สมมติว่าคุณกําลังสร้างการคํานวณที่รวมยอดขายรายเดือนสําหรับแต่ละร้าน แต่คอลัมน์ในตาราง ยอดขาย ไม่มีค่าสําหรับชื่อร้าน เนื่องจากตารางสําหรับ Store และ Sales เชื่อมต่อกันด้วยชื่อร้าน คุณคาดหวังว่าจะเกิดอะไรขึ้นในสูตร PivotTable ควรจัดกลุ่มหรือแสดงตัวเลขยอดขายที่ไม่เกี่ยวข้องกับร้านค้าที่มีอยู่แล้วอย่างไร

ปัญหานี้พบได้ทั่วไปในคลังข้อมูล ซึ่งตารางข้อมูลข้อเท็จจริงขนาดใหญ่ต้องสัมพันธ์กันในเชิงตรรกะกับตารางมิติที่มีข้อมูลเกี่ยวกับร้านค้า ภูมิภาค และแอตทริบิวต์อื่นๆ ที่ใช้สําหรับการจัดประเภทและการคํานวณข้อเท็จจริง ในการแก้ไขปัญหา ข้อเท็จจริงใหม่ใดๆ ที่ไม่เกี่ยวข้องกับเอนทิตีที่มีอยู่จะถูกมอบหมายให้กับสมาชิกที่ไม่รู้จักเป็นการชั่วคราว นั่นคือเหตุผลที่ข้อเท็จจริงที่ไม่เกี่ยวข้องกันจะปรากฏขึ้นโดยจัดกลุ่มใน PivotTable ภายใต้หัวเรื่องว่างเปล่า

การเอาค่าว่างกับแถวว่าง

ค่าว่างจะแตกต่างจากแถวว่างที่เพิ่มเพื่อรองรับสมาชิกที่ไม่รู้จัก ค่าว่างเป็นค่าพิเศษที่ใช้แทนค่า Null สตริงว่าง และค่าที่หายไปอื่นๆ สําหรับข้อมูลเพิ่มเติมเกี่ยวกับค่าว่าง และชนิดข้อมูล DAX อื่นๆ ให้ดู ชนิดข้อมูลในตัวแบบข้อมูล

ด้านบนของหน้า