ใช้ความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มใน Power BI Desktop

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

Screenshot of a many-to-many relationship in the Edit relationship pane.

การแก้ไขปัญหาของคาร์ดินาลลิตี้ความสัมพันธ์แบบกลุ่มต่อกลุ่ม

ก่อนที่จะ มีคาร์ดินาลลิตี้ ความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่ม ความสัมพันธ์ระหว่างสองตารางถูกกําหนดใน Power BI อย่างน้อยหนึ่งคอลัมน์ของตารางที่เกี่ยวข้องกับความสัมพันธ์ต้องมีค่าที่ไม่ซ้ํากัน แต่บ่อยครั้งที่ไม่มีคอลัมน์ใดที่มีค่าที่ไม่ซ้ํากัน

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

ใช้ความสัมพันธ์กับคาร์ดินาลลิตี้แบบกลุ่มต่อกลุ่ม

เมื่อคุณกําหนดความสัมพันธ์ระหว่างตารางสองตารางใน Power BI คุณจะต้องกําหนดคาร์ดินาลลิตี้ของความสัมพันธ์ ตัวอย่างเช่น ความสัมพันธ์ระหว่าง ProductSales และ ผลิตภัณฑ์—โดยใช้คอลัมน์ ProductSales[ProductCode] และ Product[ProductCode] จะกําหนดให้เป็น Many-1 เรากําหนดความสัมพันธ์ด้วยวิธีนี้เนื่องจากแต่ละผลิตภัณฑ์มียอดขายจํานวนมากและคอลัมน์ในตารางผลิตภัณฑ์ (ProductCode) เป็นคอลัมน์เฉพาะ เมื่อคุณกําหนดคาร์ดินาลลิตี้ความสัมพันธ์เป็น Many-1, 1-Many หรือ 1-1 Power BI จะตรวจสอบ ดังนั้นคาร์ดินาลลิตี้ที่คุณเลือกจะตรงกับข้อมูลจริง

ตัวอย่างเช่น ลองดูโมเดลง่ายๆ ในภาพนี้:

Screenshot of ProductSales and Product table in Relationship view.

สมมติว่า ตาราง ผลิตภัณฑ์ แสดงเพียงสองแถวดังที่แสดง:

Screenshot of a Product table visual with two rows.

และสมมติว่าตาราง ยอดขาย มีเพียงสี่แถว รวมถึงแถวสําหรับผลิตภัณฑ์ C เนื่องจากข้อผิดพลาดของ Referential Integrity จึงไม่มีแถวของผลิตภัณฑ์ C ในตารางผลิตภัณฑ์

Screenshot of a Sales table visual with four rows.

ProductName และ ราคา (จากตาราง ผลิตภัณฑ์) กับ Qty ทั้งหมดสําหรับแต่ละผลิตภัณฑ์ (จากตาราง ProductSales) จะแสดงดังภาพ:

Screenshot of a Visual displaying the product name, price, and quantity.

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

  • แถวใด ๆ ในตาราง ProductSales ที่ไม่สอดคล้องกับแถวอยู่ในตาราง ผลิตภัณฑ์ มีปัญหา referential integrity ดังที่เราเห็นสําหรับผลิตภัณฑ์ C ในตัวอย่างนี้

  • แถว ใด ๆ ในตาราง ProductSales ที่คอลัมน์คีย์นอกเป็น Null

เนื่องด้วยเหตุผลดังกล่าว ในทั้งสองกรณีแถวที่เว้นว่างมีสาเหตุมาจากการขายที่ไม่ทราบ ProductName และ ราคา

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

  • ตาราง ยอดขาย แสดงข้อมูลการขายตาม รัฐ และแต่ละแถวมีจํานวนการขายสําหรับประเภทการขายในรัฐนั้น ๆ รัฐรวมถึง CA, WA และ TX

    Screenshot of a Sales table displaying sales by state.

  • ตาราง CityData แสดงข้อมูลเกี่ยวกับเมืองรวมถึงประชากรและรัฐ (เช่น CA, WA และนิวยอร์ก)

    Screenshot of a Sales table displaying city, state, and population.

ขณะนี้คอลัมน์สําหรับ รัฐ อยู่ในทั้งสองตาราง ซึ่งเหมาะสมที่จะต้องการรายงานทั้งยอดขายรวมตามรัฐและจํานวนประชากรทั้งหมดของแต่ละรัฐ อย่างไรก็ตาม มีปัญหา: คอลัมน์รัฐ ไม่มีค่าเฉพาะในตารางทั้งสอง

การแก้ไขปัญหาชั่วคราวก่อนหน้านี้

ก่อนหน้า Power BI Desktop รุ่นเดือนกรกฎาคม 2018 คุณไม่สามารถสร้างความสัมพันธ์โดยตรงระหว่างตารางเหล่านี้ได้ การแก้ปัญหาชั่วคราวทั่วไปคือ:

  • สร้างตารางที่สามที่มีเฉพาะ ID รัฐเฉพาะ อาจเป็นตารางทั้งหมดหรือตารางใดตารางหนึ่งจาก:

    • ตารางจากการคํานวณ (กําหนดโดยใช้ Data Analysis Expressions [DAX])
    • ตารางที่ยึดตามคิวรีที่กําหนดไว้ในตัวแก้ไข Power Query ซึ่งอาจแสดง ID เฉพาะที่ดึงมาจากตารางใดตารางหนึ่ง
    • ชุดรวมต็มแบบเต็มรูปแบบ
  • จากนั้นเชื่อมโยงสองตารางเดิมเข้ากับตารางใหม่โดยใช้ความสัมพันธ์แบบ Many-1 ทั่วไป

คุณสามารถแสดงตารางการแก้ปัญหาชั่วคราว หรือคุณอาจซ่อนตารางการแก้ปัญหาชั่วคราว เพื่อให้ไม่ปรากฏในรายการ เขตข้อมูล ถ้าคุณซ่อนตาราง ความสัมพันธ์ Many-1 จะถูกตั้งค่าให้กรองทั้งสองทิศทาง และคุณสามารถใช้เขตข้อมูล รัฐ จากทั้งสองตารางได้ การกรองข้ามอย่างหลังจะเผยแพร่ไปยังตารางอื่น วิธีการดังกล่าวจะแสดงในรูปต่อไปนี้:

Screenshot of a hidden State table in Relationship view.

วิชวลที่แสดง รัฐ (จากตาราง CityData) พร้อมกับ จํานวนประชากร ทั้งหมด และ การขาย ทั้งหมด จะปรากฏดังนี้:

Screenshot showing a table with State, Population, and Sales data.

หมายเหตุ

เนื่องจากรัฐจาก ตาราง CityData ถูกใช้ในการแก้ปัญหาชั่วคราว จึงมีเพียงรัฐในตารางนั้นเท่านั้นที่แสดงในรายการ เพราะฉะนั้นจะไม่มี TX นอกจากนี้ สิ่งที่ไม่เหมือนกับความสัมพันธ์แบบ Many-1 ก็คือในขณะที่แถวทั้งหมดรวม การขาย ทั้งหมด (รวมถึงของ TX) รายละเอียดจะไม่รวมแถวที่เว้นว่างซึ่งครอบคลุมแถวที่ไม่ตรงกันดังกล่าว ในทํานองเดียวกัน จะไม่มีแถวที่เว้นว่างที่ครอบคลุม การขาย ซึ่งมีค่า Null สําหรับ รัฐ

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

Screenshot of a table showing State and city population and sales.

สมมติว่าคุณกําหนดตาราง ยอดขาย ใหม่เป็นการรวมกันของ รัฐทั้งหมดที่นี่ และเราทําให้มองเห็นในรายการ เขตข้อมูล วิชวลเดียวกันจะแสดง รัฐ (ในตารางใหม่) จํานวนประชากรทั้งหมด และ ยอดขายทั้งหมด:

Screenshot of a visual showing State, population, and sales visual.

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

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

ใช้คาร์ดินาลลิตี้ความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มแทนการแก้ปัญหาชั่วคราว

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

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

ตัวอย่างเช่น เมื่อคุณสร้างความสัมพันธ์โดยตรงระหว่าง CityData และ ยอดขาย—ซึ่งตัวกรองควรโฟลว์จาก CityData ไปยัง การขาย - Power BI Desktop จะแสดง กล่องโต้ตอบ แก้ไขความสัมพันธ์ :

Screenshot of the Edit relationship dialog box with Cardinality and Cross filter direction highlighted.

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

Screenshot of a State, Population, and Sales table.

ความแตกต่างที่สําคัญระหว่างความสัมพันธ์ที่มีคาร์ดินาลลิตี้แบบกลุ่มต่อกลุ่มกับความสัมพันธ์แบบ Many-1 ทั่วไปมีดังนี้:

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

  • คุณไม่สามารถใช้ RELATED() ฟังก์ชัน เนื่องจากมีแถวมากกว่าหนึ่งแถวที่อาจเกี่ยวข้อง

  • ALL()การใช้ฟังก์ชันบนตารางไม่ได้เป็นการลบตัวกรองที่ใช้กับตารางอื่นที่เกี่ยวข้องโดยความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่ม ในตัวอย่างก่อนหน้า หน่วยวัดที่กําหนดดังที่แสดงในที่นี้จะไม่ลบตัวกรองบนคอลัมน์ในตาราง CityData ที่เชื่อมโยง:

    Screenshot of a script example. The example is, Sales total = Calculate(Sum('Sales'[Sales]), All('Sales')).

    วิชวลที่แสดงข้อมูล รัฐยอดขาย และ ยอดขายทั้งหมด จะเป็นดังภาพนี้:

    Screenshot of a table visual showing State, Sales, and Sales total resulting from the formula.

ด้วยการคํานึงถึงความแตกต่างก่อนหน้านี้ ตรวจสอบให้แน่ใจว่าการคํานวณที่ใช้ ALL(<Table>)เช่น % ของยอดรวม กําลังส่งกลับผลลัพธ์ที่เจาะจงไว้

ข้อควรพิจารณาและข้อจำกัด

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

แหล่งที่มาของ Live เชื่อมต่อ (หลายมิติ) ดังต่อไปนี้ไม่สามารถใช้กับโมเดลแบบรวมได้:

  • SAP HANA
  • SAP Business Warehouse
  • SQL Server Analysis Services
  • แบบจําลองความหมายของ Power BI
  • บริการการวิเคราะห์ของ Azure

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

ข้อจํากัดในการใช้ DirectQuery ที่ยังมีอยู่จะยังคงมีผลเมื่อใช้ คาร์ดินาลลิตี้แบบกลุ่ม-ต่อ-กลุ่ม ข้อจํากัดจํานวนมากเป็นข้อจํากัดต่อตาราง โดยขึ้นอยู่กับโหมดที่เก็บข้อมูลของตาราง ตัวอย่างเช่น คอลัมน์จากการคํานวณบนตารางที่นําเข้าสามารถอ้างอิงไปยังตารางอื่น แต่คอลัมน์ที่ได้รับการคํานวณบนตาราง DirectQuery จะยังคงถูกอ้างอิงไปยังคอลัมน์บนตารางเดียวกันเท่านั้น ข้อจํากัดอื่น ๆ มีผลกับโมเดลทั้งหมดหากมีตารางใดภายในโมเดลที่เป็น DirectQuery ตัวอย่างเช่น คุณลักษณะ QuickInsights และ Q&A จะไม่สามารถใช้งานได้บนโมเดลหากมีตารางใดภายในโมเดลมีโหมดที่เก็บข้อมูลของ DirectQuery

สําหรับข้อมูลเพิ่มเติมเกี่ยวกับโมเดลแบบรวมและ DirectQuery ให้ดูบทความต่อไปนี้: