Many to many Relationship คือ

Skip to content

Many to Many (เมนี่ ทู เมนี่) คือ ความสัมพันธ์ระหว่างตาราง แบบเฉพาะโดยมีการเชื่อมชนิดข้อมูลโดยที่ แต่ละข้อมูลสามารถมีรายการได้หลากหลาย ซึ่งรูปแบบโครงสร้างสามารถยกตัวอย่างได้ดังนี้

  • Posts มีได้หลาย Categories และ ในทางกลับกัน Categories ก็มีความสัมพันธ์ได้หลาย Posts
  • Products มีได้หลาย Orders และ Orders ก็มีได้หลาย Products
  • Users มีได้หลาย Roles และแต่ละ Roles ก็มี Users ได้หลายคน

สรุป

การทำ Many to Many สามารถนำไปประยุกต์ทำข้อมูลที่ซับซ้อนให้ง่ายต่อการจัดการมากขึ้น แถม Laravel ยังทำ Function ให้เราเชื่อมต่อได้ง่ายอีกด้วย สำหรับใครที่ยังไม่ได้ดู One to One หรือ One to Many สามารถกลับไปดูก่อนได้เลยครับเพราะ ep ก่อนหน้าผมอธิบายส่วนอื่นไว้ด้วยเช่นกัน สามารถดูตัวอย่างเพิ่มเติมได้ที่ Laravel Document Many to Many

ข้ามไปยังเนื้อหาหลัก

เบราว์เซอร์นี้ไม่ได้รับการสนับสนุนอีกต่อไป

อัปเกรดเป็น Microsoft Edge เพื่อใช้ประโยชน์จากคุณลักษณะล่าสุด เช่น การอัปเดตความปลอดภัยและการสนับสนุนด้านเทคนิค

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

  • บทความ
  • 09/23/2022
  • 2 นาทีในการอ่าน

ในบทความนี้

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

Many to many Relationship คือ

คาร์ดินาลลิตี้ความสัมพันธ์แบบกลุ่มต่อกลุ่มใน Power BI Desktop ประกอบด้วยหนึ่งในสามคุณลักษณะที่เกี่ยวข้อง:

  • โมเดลแบบรวม: โมเดลแบบรวมอนุญาตให้รายงานมีการเชื่อมต่อข้อมูลตั้งแต่สองแบบขึ้นไป รวมถึงการเชื่อมต่อ DirectQuery หรือการนำเข้าในรูปแบบใด ๆ ก็ตาม สำหรับข้อมูลเพิ่มเติม โปรดดูการใช้โมเดลแบบรวมใน Power BI Desktop

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

  • โหมดการจัดเก็บข้อมูล: คุณสามารถระบุวิชวลที่ต้องการคิวรีไปยังแหล่งข้อมูลระบบ Back-end ได้ วิชวลที่ไม่ต้องใช้คิวรีจะถูกนำเข้าแม้ว่าจะมาจาก DirectQuery คุณลักษณะนี้จะช่วยปรับปรุงประสิทธิภาพ และลดการโหลดระบบ Back-end ก่อนหน้านี้ แม้กระทั่งวิชวลพื้นฐานอย่าง Slicers ก็เริ่มคิวรีที่ถูกส่งไปยังแหล่งระบบ Back-end สำหรับข้อมูลเพิ่มเติม โปรดดู โหมดการจัดเก็บข้อมูลใน Power BI Desktop

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

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

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

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

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

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

Many to many Relationship คือ

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

Many to many Relationship คือ

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

Many to many Relationship คือ

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

Many to many Relationship คือ

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

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

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

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

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

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

    Many to many Relationship คือ

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

    Many to many Relationship คือ

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

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

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

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

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

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

Many to many Relationship คือ

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

Many to many Relationship คือ

หมายเหตุ

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

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

Many to many Relationship คือ

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

Many to many Relationship คือ

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

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

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

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

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

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

Many to many Relationship คือ

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

Many to many Relationship คือ

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

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

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

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

    Many to many Relationship คือ

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

    Many to many Relationship คือ

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

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

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

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

  • SAP HANA
  • SAP Business Warehouse
  • SQL Server Analysis Services
  • ชุดข้อมูล Power BI
  • Azure Analysis Services

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

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

ขั้นตอนถัดไป

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

  • ใช้แบบจำลองแบบรวมใน Power BI Desktop
  • โหมดที่เก็บข้อมูลใน Power BI Desktop
  • ใช้ DirectQuery ใน Power BI
  • แหล่งข้อมูล Power BI