ใช้ความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มใน Power BI Desktop
ด้วยคาร์ดินาลลิตี้ความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มใน Power BI Desktop คุณสามารถรวมตารางที่ใช้คาร์ดินาลลิตี้ของกลุ่ม-ต่อ-กลุ่ม คุณสามารถสร้างรูปแบบข้อมูลที่มีสองแหล่งข้อมูลหรือมากกว่าได้อย่างง่ายดาย คาร์ดินาลลิตี้ความสัมพันธ์แบบกลุ่มต่อกลุ่มเป็นส่วนหนึ่งของความสามารถโมเดลแบบรวมที่ใหญ่ขึ้นใน Power BI Desktop สําหรับข้อมูลเพิ่มเติมเกี่ยวกับ โมเดลแบบรวม โปรดดู ใช้โมเดลแบบรวมใน Power BI Desktop
การแก้ไขปัญหาของคาร์ดินาลลิตี้ความสัมพันธ์แบบกลุ่มต่อกลุ่ม
ก่อนที่จะ มีคาร์ดินาลลิตี้ ความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่ม ความสัมพันธ์ระหว่างสองตารางถูกกําหนดใน Power BI อย่างน้อยหนึ่งคอลัมน์ของตารางที่เกี่ยวข้องกับความสัมพันธ์ต้องมีค่าที่ไม่ซ้ํากัน แต่บ่อยครั้งที่ไม่มีคอลัมน์ใดที่มีค่าที่ไม่ซ้ํากัน
ตัวอย่างเช่น สองตารางอาจมีคอลัมน์ที่มีชื่อว่า CountryRegion ค่าของ CountryRegion ไม่ได้เฉพาะในตารางใด เลย หากต้องการรวมตารางดังกล่าว คุณจะต้องสร้างการแก้ปัญหาชั่วคราว การแก้ไขปัญหาชั่วคราวอย่างหนึ่งอาจเป็นการแนะนําตารางเพิ่มเติมที่มีค่าที่ไม่ซ้ํากันที่จําเป็น ด้วยคาร์ดินาลลิตี้ความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่ม คุณสามารถรวมตารางดังกล่าวได้โดยตรง ถ้าคุณใช้ความสัมพันธ์กับคาร์ดินาลลิตี้ของ กลุ่ม-ต่อ-กลุ่ม
ใช้ความสัมพันธ์กับคาร์ดินาลลิตี้แบบกลุ่มต่อกลุ่ม
เมื่อคุณกําหนดความสัมพันธ์ระหว่างตารางสองตารางใน Power BI คุณจะต้องกําหนดคาร์ดินาลลิตี้ของความสัมพันธ์ ตัวอย่างเช่น ความสัมพันธ์ระหว่าง ProductSales และ ผลิตภัณฑ์—โดยใช้คอลัมน์ ProductSales[ProductCode] และ Product[ProductCode] จะกําหนดให้เป็น Many-1 เรากําหนดความสัมพันธ์ด้วยวิธีนี้เนื่องจากแต่ละผลิตภัณฑ์มียอดขายจํานวนมากและคอลัมน์ในตารางผลิตภัณฑ์ (ProductCode) เป็นคอลัมน์เฉพาะ เมื่อคุณกําหนดคาร์ดินาลลิตี้ความสัมพันธ์เป็น Many-1, 1-Many หรือ 1-1 Power BI จะตรวจสอบ ดังนั้นคาร์ดินาลลิตี้ที่คุณเลือกจะตรงกับข้อมูลจริง
ตัวอย่างเช่น ลองดูโมเดลง่ายๆ ในภาพนี้:
สมมติว่า ตาราง ผลิตภัณฑ์ แสดงเพียงสองแถวดังที่แสดง:
และสมมติว่าตาราง ยอดขาย มีเพียงสี่แถว รวมถึงแถวสําหรับผลิตภัณฑ์ C เนื่องจากข้อผิดพลาดของ Referential Integrity จึงไม่มีแถวของผลิตภัณฑ์ C ในตารางผลิตภัณฑ์
ProductName และ ราคา (จากตาราง ผลิตภัณฑ์) กับ Qty ทั้งหมดสําหรับแต่ละผลิตภัณฑ์ (จากตาราง ProductSales) จะแสดงดังภาพ:
ดังที่เห็นในภาพก่อน แถว ProductName ที่ว่างเปล่าจะเชื่อมโยงกับยอดขายสําหรับผลิตภัณฑ์ C แถวที่เว้นว่างนี้มีสาเหตุจากข้อควรพิจารณาต่อไปนี้:
แถวใด ๆ ในตาราง ProductSales ที่ไม่สอดคล้องกับแถวอยู่ในตาราง ผลิตภัณฑ์ มีปัญหา referential integrity ดังที่เราเห็นสําหรับผลิตภัณฑ์ C ในตัวอย่างนี้
แถว ใด ๆ ในตาราง ProductSales ที่คอลัมน์คีย์นอกเป็น Null
เนื่องด้วยเหตุผลดังกล่าว ในทั้งสองกรณีแถวที่เว้นว่างมีสาเหตุมาจากการขายที่ไม่ทราบ ProductName และ ราคา
บางครั้งที่ตารางถูกรวมเข้าด้วยกันโดยคอลัมน์สองคอลัมน์ แต่ไม่มีคอลมน์ใดที่เป็นค่าเฉพาะเลย ตัวอย่างเช่น พิจารณาสองตารางเหล่านี้:
ตาราง ยอดขาย แสดงข้อมูลการขายตาม รัฐ และแต่ละแถวมีจํานวนการขายสําหรับประเภทการขายในรัฐนั้น ๆ รัฐรวมถึง CA, WA และ TX
ตาราง CityData แสดงข้อมูลเกี่ยวกับเมืองรวมถึงประชากรและรัฐ (เช่น CA, WA และนิวยอร์ก)
ขณะนี้คอลัมน์สําหรับ รัฐ อยู่ในทั้งสองตาราง ซึ่งเหมาะสมที่จะต้องการรายงานทั้งยอดขายรวมตามรัฐและจํานวนประชากรทั้งหมดของแต่ละรัฐ อย่างไรก็ตาม มีปัญหา: คอลัมน์รัฐ ไม่มีค่าเฉพาะในตารางทั้งสอง
การแก้ไขปัญหาชั่วคราวก่อนหน้านี้
ก่อนหน้า Power BI Desktop รุ่นเดือนกรกฎาคม 2018 คุณไม่สามารถสร้างความสัมพันธ์โดยตรงระหว่างตารางเหล่านี้ได้ การแก้ปัญหาชั่วคราวทั่วไปคือ:
สร้างตารางที่สามที่มีเฉพาะ ID รัฐเฉพาะ อาจเป็นตารางทั้งหมดหรือตารางใดตารางหนึ่งจาก:
- ตารางจากการคํานวณ (กําหนดโดยใช้ Data Analysis Expressions [DAX])
- ตารางที่ยึดตามคิวรีที่กําหนดไว้ในตัวแก้ไข Power Query ซึ่งอาจแสดง ID เฉพาะที่ดึงมาจากตารางใดตารางหนึ่ง
- ชุดรวมต็มแบบเต็มรูปแบบ
จากนั้นเชื่อมโยงสองตารางเดิมเข้ากับตารางใหม่โดยใช้ความสัมพันธ์แบบ Many-1 ทั่วไป
คุณสามารถแสดงตารางการแก้ปัญหาชั่วคราว หรือคุณอาจซ่อนตารางการแก้ปัญหาชั่วคราว เพื่อให้ไม่ปรากฏในรายการ เขตข้อมูล ถ้าคุณซ่อนตาราง ความสัมพันธ์ Many-1 จะถูกตั้งค่าให้กรองทั้งสองทิศทาง และคุณสามารถใช้เขตข้อมูล รัฐ จากทั้งสองตารางได้ การกรองข้ามอย่างหลังจะเผยแพร่ไปยังตารางอื่น วิธีการดังกล่าวจะแสดงในรูปต่อไปนี้:
วิชวลที่แสดง รัฐ (จากตาราง CityData) พร้อมกับ จํานวนประชากร ทั้งหมด และ การขาย ทั้งหมด จะปรากฏดังนี้:
หมายเหตุ
เนื่องจากรัฐจาก ตาราง CityData ถูกใช้ในการแก้ปัญหาชั่วคราว จึงมีเพียงรัฐในตารางนั้นเท่านั้นที่แสดงในรายการ เพราะฉะนั้นจะไม่มี TX นอกจากนี้ สิ่งที่ไม่เหมือนกับความสัมพันธ์แบบ Many-1 ก็คือในขณะที่แถวทั้งหมดรวม การขาย ทั้งหมด (รวมถึงของ TX) รายละเอียดจะไม่รวมแถวที่เว้นว่างซึ่งครอบคลุมแถวที่ไม่ตรงกันดังกล่าว ในทํานองเดียวกัน จะไม่มีแถวที่เว้นว่างที่ครอบคลุม การขาย ซึ่งมีค่า Null สําหรับ รัฐ
สมมติว่าคุณยังเพิ่ม เมือง ไปยังวิชวลนั้นด้วย แม้ว่าจะทราบจํานวนประชากรต่อเมือง ยอดขายที่แสดงสําหรับเมืองจะเพียงแค่ทําซ้ํายอดขายสําหรับรัฐที่สอดคล้องกัน สถานการณ์นี้มักจะเกิดขึ้นเมื่อการจัดกลุ่มคอลัมน์ไม่เกี่ยวข้องกับหน่วยวัดการรวมบางรายการ ดังที่แสดงไว้ที่นี่:
สมมติว่าคุณกําหนดตาราง ยอดขาย ใหม่เป็นการรวมกันของ รัฐทั้งหมดที่นี่ และเราทําให้มองเห็นในรายการ เขตข้อมูล วิชวลเดียวกันจะแสดง รัฐ (ในตารางใหม่) จํานวนประชากรทั้งหมด และ ยอดขายทั้งหมด:
อย่างที่คุณเห็น TX —ด้วยข้อมูลการขาย แต่ไม่ทราบข้อมูลประชากร—และนิวยอร์ก—ที่มีข้อมูลประชากรที่ทราบแต่ไม่มีข้อมูลการขาย—จะรวมอยู่ด้วย การแก้ปัญหาชั่วคราวนี้ไม่เหมาะสม และมีหลายปัญหา สําหรับคาร์ดินาลลิตี้ความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่ม ปัญหาที่เกิดขึ้นได้รับการแก้ไข ดังที่อธิบายในส่วนถัดไป
สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้การแก้ไขปัญหาชั่วคราวนี้ โปรดดู คําแนะนําความสัมพันธ์แบบกลุ่มต่อกลุ่ม
ใช้คาร์ดินาลลิตี้ความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มแทนการแก้ปัญหาชั่วคราว
คุณสามารถเชื่อมโยงตารางได้โดยตรง เช่น ตารางที่เราอธิบายไว้ก่อนหน้านี้ โดยไม่ต้องพึ่งการแก้ปัญหาชั่วคราวที่คล้ายกัน สามารถตั้งค่าคาร์ดินาลลิตี้ความสัมพันธ์เป็นแบบ กลุ่มต่อกลุ่มได้แล้ว การตั้งค่านี้แสดงให้เห็นว่าไม่มีตารางใดที่มีค่าที่ไม่ซ้ํากัน สําหรับความสัมพันธ์ดังกล่าว คุณอาจยังคงควบคุมว่าตารางใดที่จะกรองตารางอื่น หรือคุณสามารถใช้การกรองแบบสองทิศทางที่แต่ละตารางจะกรองตารางอื่น
ใน Power BI Desktop คาร์ดินาลลิตี้จะใช้ กลุ่ม-ต่อ-กลุ่ม เป็นค่าเริ่มต้น เมื่อพบว่าไม่มีตารางใดที่มีค่าเฉพาะสําหรับคอลัมน์ความสัมพันธ์ ในกรณีดังกล่าว ข้อความเตือนยืนยันว่าคุณต้องการตั้งค่าความสัมพันธ์ และการเปลี่ยนแปลงไม่ใช่ผลที่ไม่ได้ตั้งใจจากปัญหาข้อมูล
ตัวอย่างเช่น เมื่อคุณสร้างความสัมพันธ์โดยตรงระหว่าง CityData และ ยอดขาย—ซึ่งตัวกรองควรโฟลว์จาก CityData ไปยัง การขาย - Power BI Desktop จะแสดง กล่องโต้ตอบ แก้ไขความสัมพันธ์ :
มุมมองความสัมพันธ์ที่ปรากฏจะแสดงความสัมพันธ์แบบกลุ่มต่อกลุ่มโดยตรงระหว่างสองตาราง ลักษณะของ ตารางในรายการ เขตข้อมูล และการทํางานที่ตามมาเมื่อสร้างวิชวลจะคล้ายกับเมื่อใช้การแก้ปัญหาชั่วคราว ในการแก้ปัญหาชั่วคราว จะมองไม่เห็นตารางพิเศษที่แสดงข้อมูล รัฐ ที่แตกต่างกัน ตามที่อธิบายไว้ก่อนหน้านี้ วิชวลที่แสดงข้อมูล รัฐประชากร และ การขาย จะแสดงขึ้นมา:
ความแตกต่างที่สําคัญระหว่างความสัมพันธ์ที่มีคาร์ดินาลลิตี้แบบกลุ่มต่อกลุ่มกับความสัมพันธ์แบบ Many-1 ทั่วไปมีดังนี้:
ค่าที่แสดงไม่รวมแถวว่างที่เป็นเหตุของแถวที่ไม่ตรงในตารางอื่น นอกจากนี้ ค่าที่ไม่ได้อธิบายสําหรับแถวที่คอลัมน์ถูกใช้ในความสัมพันธ์ในตารางอื่นจะเป็น Null
คุณไม่สามารถใช้
RELATED()
ฟังก์ชัน เนื่องจากมีแถวมากกว่าหนึ่งแถวที่อาจเกี่ยวข้องALL()
การใช้ฟังก์ชันบนตารางไม่ได้เป็นการลบตัวกรองที่ใช้กับตารางอื่นที่เกี่ยวข้องโดยความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่ม ในตัวอย่างก่อนหน้า หน่วยวัดที่กําหนดดังที่แสดงในที่นี้จะไม่ลบตัวกรองบนคอลัมน์ในตาราง CityData ที่เชื่อมโยง:วิชวลที่แสดงข้อมูล รัฐยอดขาย และ ยอดขายทั้งหมด จะเป็นดังภาพนี้:
ด้วยการคํานึงถึงความแตกต่างก่อนหน้านี้ ตรวจสอบให้แน่ใจว่าการคํานวณที่ใช้ ALL(<Table>)
เช่น % ของยอดรวม กําลังส่งกลับผลลัพธ์ที่เจาะจงไว้
ข้อควรพิจารณาและข้อจำกัด
มีข้อจํากัดบางอย่างสําหรับการวางจําหน่าย ความสัมพันธ์กับคาร์ดินาลลิตี้ แบบกลุ่มต่อกลุ่มและโมเดลแบบรวม
แหล่งที่มา Live Connect (หลายมิติ) ดังต่อไปนี้ไม่สามารถใช้กับโมเดลแบบรวมได้:
- SAP HANA
- SAP Business Warehouse
- SQL Server Analysis Services
- แบบจําลองความหมายของ Power BI
- บริการการวิเคราะห์ของ Azure
เมื่อทําการเชื่อมต่อกับแหล่งที่มาหลายมิติเหล่านี้โดยใช้ DirectQuery คุณจะไม่สามารถเชื่อมต่อกับแหล่งที่มา DirectQuery อีกแห่ง หรือรวมเข้ากับข้อมูลที่นําเข้าได้
ข้อจํากัดในการใช้ DirectQuery ที่ยังมีอยู่จะยังคงมีผลเมื่อใช้ คาร์ดินาลลิตี้แบบกลุ่ม-ต่อ-กลุ่ม ข้อจํากัดจํานวนมากเป็นข้อจํากัดต่อตาราง โดยขึ้นอยู่กับโหมดที่เก็บข้อมูลของตาราง ตัวอย่างเช่น คอลัมน์จากการคํานวณบนตารางที่นําเข้าสามารถอ้างอิงไปยังตารางอื่น แต่คอลัมน์ที่ได้รับการคํานวณบนตาราง DirectQuery จะยังคงถูกอ้างอิงไปยังคอลัมน์บนตารางเดียวกันเท่านั้น ข้อจํากัดอื่น ๆ มีผลกับโมเดลทั้งหมดหากมีตารางใดภายในโมเดลที่เป็น DirectQuery ตัวอย่างเช่น คุณลักษณะ QuickInsights และ Q&A จะไม่สามารถใช้งานได้บนโมเดลหากมีตารางใดภายในโมเดลมีโหมดที่เก็บข้อมูลของ DirectQuery
เนื้อหาที่เกี่ยวข้อง
สําหรับข้อมูลเพิ่มเติมเกี่ยวกับโมเดลแบบรวมและ DirectQuery ให้ดูบทความต่อไปนี้: