บริบททําให้คุณสามารถทําการวิเคราะห์แบบไดนามิก ซึ่งผลลัพธ์ของสูตรสามารถเปลี่ยนแปลงเพื่อแสดงการเลือกแถวหรือเซลล์ปัจจุบัน และข้อมูลใดๆ ที่เกี่ยวข้องด้วย การทําความเข้าใจบริบทและการใช้บริบทอย่างมีประสิทธิภาพเป็นสิ่งสําคัญมากในการสร้างสูตรที่มีประสิทธิภาพสูง การวิเคราะห์แบบไดนามิก และการแก้ไขปัญหาในสูตร
ส่วนนี้กําหนดชนิดบริบทที่แตกต่างกัน ได้แก่ บริบทแถว บริบทคิวรี และบริบทตัวกรอง ซึ่งจะอธิบายวิธีการประเมินบริบทสําหรับสูตรในคอลัมน์จากการคํานวณและใน PivotTable
ส่วนสุดท้ายของบทความนี้มีลิงก์ไปยังตัวอย่างโดยละเอียดซึ่งแสดงให้เห็นว่าผลลัพธ์ของสูตรเปลี่ยนแปลงไปตามบริบทอย่างไร
การทําความเข้าใจบริบท
สูตรใน Power Pivot อาจได้รับผลกระทบจากตัวกรองที่นําไปใช้ใน PivotTable ตามความสัมพันธ์ระหว่างตาราง และตัวกรองที่ใช้ในสูตร บริบทคือสิ่งที่ทําให้สามารถทําการวิเคราะห์แบบไดนามิกได้ การทําความเข้าใจบริบทเป็นสิ่งสําคัญสําหรับการสร้างและการแก้ไขปัญหาสูตร
มีบริบทชนิดต่างๆ ได้แก่ บริบทแถว บริบทคิวรี และบริบทตัวกรอง
บริบทของแถวอาจคิดว่าเป็น "แถวปัจจุบัน" ถ้าคุณได้สร้างคอลัมน์จากการคํานวณ บริบทของแถวจะประกอบด้วยค่าในแต่ละแถวและค่าในคอลัมน์ที่เกี่ยวข้องกับแถวปัจจุบัน นอกจากนี้ยังมีบางฟังก์ชัน (EARLIER และ EARLIEST) ที่ได้รับค่าจากแถวปัจจุบัน แล้วใช้ค่านั้นขณะดําเนินการกับทั้งตาราง
บริบทคิวรีอ้างอิงไปยังชุดย่อยของข้อมูลที่สร้างขึ้นโดยนัยสําหรับแต่ละเซลล์ใน 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 จะตั้งค่าบริบทภายในสูตร คุณสามารถใช้เพื่อแทนที่ตัวกรองที่นําไปใช้เป็นผลลัพธ์ของบริบทคิวรี
-
ฟังก์ชัน ALLEXCEPT ช่วยให้คุณสามารถเอาตัวกรองทั้งหมดออกยกเว้นตัวกรองที่คุณระบุ หัวข้อทั้งสองรวมถึงตัวอย่างที่ช่วยแนะนําคุณเกี่ยวกับการสร้างสูตรและการทําความเข้าใจบริบทที่ซับซ้อน
-
ฟังก์ชัน EARLIER และ EARLIEST ช่วยให้คุณวนรอบผ่านตารางโดยการคํานวณ ในขณะที่อ้างอิงค่าจากการวนรอบภายใน ถ้าคุณคุ้นเคยกับแนวคิดของการเกิดซ้ําและมีลูปภายในและด้านนอกคุณจะชื่นชมพลังที่ฟังก์ชัน EARLIER และ EARLIEST มีให้ ถ้าคุณเพิ่งเริ่มใช้แนวคิดเหล่านี้ คุณควรทําตามขั้นตอนในตัวอย่างอย่างระมัดระวังเพื่อดูว่าบริบทภายในและภายนอกถูกใช้ในการคํานวณอย่างไร
Referential Integrity
ส่วนนี้จะอธิบายแนวคิดขั้นสูงบางอย่างที่เกี่ยวข้องกับค่าที่หายไปในตาราง Power Pivot ที่เชื่อมต่อโดยความสัมพันธ์ ส่วนนี้อาจเป็นประโยชน์สําหรับคุณถ้าคุณมีเวิร์กบุ๊กที่มีหลายตารางและสูตรที่ซับซ้อน และต้องการความช่วยเหลือในการทําความเข้าใจผลลัพธ์
ถ้าคุณเพิ่งเริ่มใช้แนวคิดของข้อมูลที่สัมพันธ์กัน เราขอแนะนําให้คุณอ่านหัวข้อบทนํา ภาพรวมความสัมพันธ์ ก่อน
Referential Integrity และความสัมพันธ์ Power Pivot
Power Pivot ไม่จําเป็นต้องบังคับให้มี Referential Integrity ระหว่างสองตารางเพื่อกําหนดความสัมพันธ์ที่ถูกต้อง แต่แถวว่างจะถูกสร้างขึ้นที่ส่วนท้ายของ "หนึ่ง" ของความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่มแต่ละความสัมพันธ์ และใช้เพื่อจัดการแถวที่ไม่ตรงกันทั้งหมดจากตารางที่เกี่ยวข้อง ซึ่งทํางานเป็นการรวมภายนอกของ SQL อย่างมีประสิทธิภาพ
ใน PivotTable ถ้าคุณจัดกลุ่มข้อมูลตามด้านใดด้านหนึ่งของความสัมพันธ์ ข้อมูลที่ไม่ตรงกันใดๆ บนหลายด้านของความสัมพันธ์จะถูกจัดกลุ่มเข้าด้วยกันและจะถูกรวมไว้ในผลรวมที่มีส่วนหัวของแถวว่าง หัวเรื่องเปล่าจะเทียบเท่ากับ "สมาชิกที่ไม่รู้จัก"
การทําความเข้าใจสมาชิกที่ไม่รู้จัก
แนวคิดของสมาชิกที่ไม่รู้จักอาจคุ้นเคยกับคุณถ้าคุณทํางานกับระบบฐานข้อมูลหลายมิติ เช่น SQL Server Analysis Services ถ้าคํานั้นเป็นคําใหม่สําหรับคุณ ตัวอย่างต่อไปนี้จะอธิบายว่าสมาชิกที่ไม่รู้จักคืออะไร และมีผลต่อการคํานวณอย่างไร
สมมติว่าคุณกําลังสร้างการคํานวณที่รวมยอดขายรายเดือนสําหรับแต่ละร้านค้า แต่คอลัมน์ในตาราง ยอดขาย ไม่มีค่าสําหรับชื่อร้านค้า ระบุว่าตารางสําหรับ Store และ ยอดขาย เชื่อมต่อกันด้วยชื่อร้านค้า คุณจะคาดหวังว่าจะเกิดอะไรขึ้นในสูตร กลุ่ม PivotTable ควรหรือแสดงตัวเลขยอดขายที่ไม่เกี่ยวข้องกับร้านค้าที่มีอยู่อย่างไร
ปัญหานี้เป็นปัญหาที่พบได้ทั่วไปในคลังข้อมูล ซึ่งตารางข้อมูลจริงขนาดใหญ่จะต้องเกี่ยวข้องกับตารางมิติเชิงตรรกะที่มีข้อมูลเกี่ยวกับร้านค้า ภูมิภาค และแอตทริบิวต์อื่นๆ ที่ใช้สําหรับการจัดประเภทและคํานวณข้อเท็จจริง เมื่อต้องการแก้ไขปัญหา ข้อเท็จจริงใหม่ใดๆ ที่ไม่เกี่ยวข้องกับเอนทิตีที่มีอยู่จะถูกกําหนดให้กับสมาชิกที่ไม่รู้จักชั่วคราว นั่นคือสาเหตุที่ข้อเท็จจริงที่ไม่เกี่ยวข้องกันจะปรากฏเป็นกลุ่มใน PivotTable ภายใต้หัวเรื่องเปล่า
การรักษาค่าว่างกับแถวว่าง
ค่าว่างจะแตกต่างจากแถวว่างที่ถูกเพิ่มเพื่อให้เข้ากับสมาชิกที่ไม่รู้จัก ค่าว่างเป็นค่าพิเศษที่ใช้แทนค่า Null สตริงว่าง และค่าที่หายไปอื่นๆ สําหรับข้อมูลเพิ่มเติมเกี่ยวกับค่าว่างและชนิดข้อมูล DAX อื่นๆ ให้ดูที่ ชนิดข้อมูลในตัวแบบข้อมูล