คําแนะนําความสัมพันธ์แบบกลุ่มต่อกลุ่ม

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

หมายเหตุ

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

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

ความเป็นจริงแล้วมีสถานการณ์แบบกลุ่มต่อกลุ่มสามแบบ ซึ่งสามารถเกิดขึ้นได้เมื่อคุณจําเป็นต้อง:

หมายเหตุ

ในตอนนี้ Power BI สนับสนุนความสัมพันธ์แบบกลุ่มต่อกลุ่ม สําหรับข้อมูลเพิ่มเติม ให้ดู ใช้ความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มใน Power BI Desktop

เชื่อมโยงมิติแบบกลุ่มต่อกลุ่ม

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

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

นี่คือไดอะแกรมแบบจําลองที่เรียบง่ายของสามตาราง

Diagram showing a model containing three tables. The design is described in the following paragraph.

ตารางแรกชื่อว่า Account ซึ่งมีสองคอลัมน์ AccountID และ Account ตารางที่สองชื่อว่า AccountCustomer ซึ่งมีสองคอลัมน์ AccountID และ CustomerID ตารางที่สามชื่อว่า Customer ซึ่งมีสองคอลัมน์ CustomerID และ Customer ไม่มีความสัมพันธ์ระหว่างตารางใด ๆ

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

Diagram showing that the model now contains four tables. One-to-many relationships have been added to relate all tables.

เพื่อช่วยอธิบายวิธีการทํางานของการเผยแพร่ตัวกรองความสัมพันธ์ ไดอะแกรมแบบจําลองได้รับการแก้ไขเพื่อแสดงแถวของตาราง

หมายเหตุ

ไม่สามารถแสดงแถวตารางในไดอะแกรมแบบจําลอง Power BI Desktop ได้ การดําเนินการนี้จะทําในบทความนี้เพื่อสนับสนุนการสนทนาด้วยตัวอย่างที่ชัดเจน

Diagram showing that the model now reveals the table rows. The row details for the four tables are described in the following paragraph.

รายละเอียดแถวสําหรับสี่ตารางอธิบายไว้ในหัวข้อย่อยต่อไปนี้:

  • ตาราง Account มีสองแถว:
    • AccountID 1 คือ Account-01
    • AccountID 2 คือ Account-02
  • ตาราง Customer มีสองแถว:
    • CustomerID 91 คือ Customer-91
    • CustomerID 92 คือ Customer-92
  • ตาราง AccountCustomer มีสามแถว:
    • AccountID 1 เชื่อมโยงกับ CustomerID 91
    • AccountID 1 เชื่อมโยงกับ CustomerID 92
    • AccountID 2 เชื่อมโยงกับ CustomerID 92
  • ตาราง Transaction มีสามแถว:
    • วันที่ 1 มกราคม 2019, AccountID 1, จํานวน 100
    • วันที่ 2 กุมภาพันธ์ 2019, AccountID 2, จํานวน 200
    • วันที่ 3 มีนาคม 2019, AccountID 1, จํานวน -25

มาดูกันว่าเกิดอะไรขึ้นเมื่อมีการคิวรีแบบจําลอง

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

Diagram showing two report visuals sitting side by side. The visuals are described in the following paragraph.

วิชวลแรกชื่อว่า Account Balance ซึ่งมีสองคอลัมน์: Account และ Amount ซึ่งแสดงผลลัพธ์ต่อไปนี้:

  • Account-01 ยอดเงินคงเหลือ 75
  • Account-02 ยอดเงินคงเหลือ 200
  • รวม 275

วิชวลที่สองชื่อว่า Customer Balance ซึ่งมีสองคอลัมน์: Customer และ Amount ซึ่งแสดงผลลัพธ์ต่อไปนี้:

  • Customer-91 ยอดเงินคงเหลือ 275
  • Customer-92 ยอดเงินคงเหลือ 275
  • รวม 275

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

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

ทําตามทิศทางของตัวกรองความสัมพันธ์จากตาราง Customer ไปยังตาราง Transaction ซึ่งเห็นได้ชัดว่าความสัมพันธ์ระหว่าง ตาราง Account และ ตาราง AccountCustomer นั้นถ่ายทอดในทิศทางที่ไม่ถูกต้อง ทิศทางตัวกรองสําหรับความสัมพันธ์นี้ต้องได้รับการตั้งค่าเป็น ทั้งสอง

Diagram showing that the model has been updated. It now filters in both directions.

Diagram showing the same two report visuals sitting side by side. The first visual has not changed, while the second visual has.

ตามที่คาดไว้ ไม่มีการเปลี่ยนแปลงในวิชวล Account Balance

อย่างไรก็ตาม วิชวล Customer Balance แสดงผลต่อไปนี้:

  • Customer-91 ยอดเงินคงเหลือ 75
  • Customer-92 ยอดเงินคงเหลือ 275
  • รวม 275

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

บางคนอาจไม่คุ้นเคยกับความสัมพันธ์แบบจําลองอาจรวมผลลัพธ์ที่ไม่ถูกต้อง พวกเขาอาจถาม: เหตุใดยอดรวมของ Customer-91 และ Customer-92 จึงไม่เท่ากับ 350 (75 + 275)

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

คําแนะนําเชื่อมโยงมิติแบบกลุ่มต่อกลุ่ม

เมื่อคุณมีความสัมพันธ์แบบกลุ่มต่อกลุ่มระหว่างตารางชนิดมิติ เรามีคําแนะนําต่อไปนี้:

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

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

เชื่อมโยงข้อเท็จจริงแบบกลุ่มต่อกลุ่ม

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

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

Diagram showing a model containing two tables: Order and Fulfillment.

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

ตอนนี้เรามาดูแถวตารางกัน ในตารางเติมสินค้า โปรดสังเกตว่าคําสั่งอาจมีหลายการจัดส่ง (การไม่มีคําสั่งหมายถึงคําสั่งยังไม่ได้ปฏิบัติตาม)

Diagram showing that the model now reveals the table rows. The row details for the two tables are described in the following paragraph.

รายละเอียดแถวสําหรับสองตารางอธิบายไว้ในหัวข้อย่อยต่อไปนี้:

  • ตาราง คําสั่ง มีห้าแถว:
    • OrderDate 1 มกราคม 2019, OrderID 1, OrderLine 1, ProductID Prod-A, OrderQuantity 5, Sales 50
    • OrderDate 1 มกราคม 2019, OrderID 1, OrderLine 2, ProductID Prod-B, OrderQuantity 10, Sales 80
    • OrderDate 2 กุมภาพันธ์ 2019, OrderID 2, OrderLine 1, ProductID Prod-B, OrderQuantity 5, Sales 40
    • OrderDate 2 กุมภาพันธ์ 2019, OrderID 2, OrderLine 2, ProductID Prod-C, OrderQuantity 1, Sales 20
    • OrderDate 3 มีนาคม 2019, OrderID 3, OrderLine 1, ProductID Prod-C, OrderQuantity 5, Sales 100
  • ตาราง เติมสินค้า มีสี่แถว:
    • FulfillmentDate 1 มกราคม 2019, FulfillmentID 50, OrderID 1, OrderLine 1, FulfillmentQuantity 2
    • FulfillmentDate 2 กุมภาพันธ์ 2019, FulfillmentID 51, OrderID 2, OrderLine 1, FulfillmentQuantity 5
    • FulfillmentDate 2 กุมภาพันธ์ 2019, FulfillmentID 52, OrderID 1, OrderLine 1, FulfillmentQuantity 3
    • FulfillmentDate 1 มกราคม 2019, FulfillmentID 53, OrderID 1, OrderLine 2, FulfillmentQuantity 10

มาดูกันว่าเกิดอะไรขึ้นเมื่อมีการคิวรีแบบจําลอง นี่คือภาพตารางที่เปรียบเทียบปริมาณการสั่งซื้อและการเติมสินค้าตามตารางคําสั่ง คอลัมน์ OrderID

Diagram showing a table visual with three columns: OrderID, OrderQuantity, and FulfillmentQuantity.

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

คําแนะนําเชื่อมโยงข้อเท็จจริงแบบกลุ่มต่อกลุ่ม

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

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

มาพิจารณาวิธีแก้ปัญหาที่ดีกว่ากัน

Diagram showing a model includes six tables: OrderLine, OrderDate, Order, Fulfillment, Product, and FulfillmentDate.

โปรดสังเกตการเปลี่ยนแปลงการออกแบบต่อไปนี้:

  • ขณะนี้โมเดลมีตารางเพิ่มเติมสี่ตาราง: OrderLine, OrderDate, Product, และ FulfillmentDate
  • ตารางเพิ่มเติมสี่ตารางเป็นตารางชนิดมิติ และมีความสัมพันธ์แบบหนึ่งต่อกลุ่มระหว่างตารางเหล่านี้กับตารางชนิดข้อเท็จจริง
  • ตาราง OrderLine มี คอลัมน์ OrderLineID ซึ่งแสดงค่า OrderID คูณด้วย 100 บวก กับค่า OrderLine ซึ่งเป็นตัวระบุที่ไม่ซ้ํากันสําหรับแต่ละบรรทัดคําสั่งซื้อ
  • ตารางคําสั่งและเติมสินค้ามีคอลัมน์ OrderLineID และไม่มีคอลัมน์ OrderID และ OrderLine อีกต่อไป
  • ขณะนี้ตาราง Fulfillment มีคอลัมน์ OrderDate และ ProductID
  • ตาราง FulfillmentDate เชื่อมโยงกับตาราง การเติมสินค้า เท่านั้น
  • คอลัมน์ตัวระบุที่ไม่ซ้ํากันทั้งหมดถูกซ่อนไว้

สละเวลาในการใช้หลักการออกแบบโครงร่างรูปดาวให้ประโยชน์ดังต่อไปนี้:

  • วิชวลรายงานของคุณสามารถ กรองหรือจัดกลุ่ม ตามคอลัมน์ที่มองเห็นได้จากตารางชนิดมิติ
  • วิชวลรายงานของคุณสามารถ สรุป คอลัมน์ใด ๆ ที่มองเห็นได้จากตารางชนิดข้อเท็จจริง
  • ตัวกรองที่ นําไปใช้กับตาราง OrderLine, OrderDate หรือ Product จะเผยแพร่ไปยังตารางชนิดข้อเท็จจริงทั้งสอง
  • ความสัมพันธ์ทั้งหมดเป็นแบบหนึ่งต่อกลุ่ม และแต่ละความสัมพันธ์เป็น ความสัมพันธ์แบบปกติ ปัญหาความสมบูรณ์ของข้อมูลจะไม่ได้รับการมาสก์ สําหรับข้อมูลเพิ่มเติม ดูความสัมพันธ์แบบจําลองใน Power BI Desktop (การประเมินผลความสัมพันธ์)

เชื่อมโยงความจริงเกรนที่สูงกว่า

สถานการณ์กลุ่มต่อกลุ่มนี้แตกต่างจากสถานการณ์ที่ได้อธิบายไว้แล้วในบทความนี้

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

Diagram showing a model including four tables: Date, Sales, Product, and Target.

ตาราง เป้าหมาย มีสามคอลัมน์: Category, TargetQuantity, และ TargetYear. แถวของตารางเผยถึงส่วนประกอบของหมวดหมู่ปีและผลิตภัณฑ์ อีกนัยหนึ่ง เป้าหมายที่ใช้เพื่อวัดประสิทธิภาพการขาย นั้นถูกตั้งค่าในแต่ละปีสําหรับผลิตภัณฑ์แต่ละประเภท

Diagram showing the Target table has three columns: TargetYear, Category, and TargetQuantity.

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

เชื่อมโยงช่วงเวลาเกรนที่สูงขึ้น

ความสัมพันธ์ระหว่าง ตารางวันที่ และ เป้าหมาย ควรเป็นความสัมพันธ์แบบหนึ่งต่อกลุ่ม เนื่องจากค่าของ คอลัมน์ TargetYear เป็นวันที่ ในตัวอย่างนี้ แต่ละ ค่าคอลัมน์ TargetYear เป็นวันที่แรกของปีเป้าหมาย

เคล็ดลับ

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

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

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

Diagram showing a matrix visual revealing the year 2020 target quantity as 270.

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

พิจารณาข้อกําหนดหน่วยวัดต่อไปนี้ที่ใช้ฟังก์ชัน DAX ISFILTERED จะส่งกลับค่าเฉพาะเมื่อไม่มีการกรองคอลัมน์วันที่หรือเดือน

Target Quantity =
IF(
    NOT ISFILTERED('Date'[Date])
        && NOT ISFILTERED('Date'[Month]),
    SUM(Target[TargetQuantity])
)

ขณะนี้วิชวลเมทริกซ์ต่อไปนี้ใช้ หน่วยวัดปริมาณ เป้าหมาย ซึ่งแสดงให้เห็นว่าปริมาณเป้าหมายรายเดือนทั้งหมดเป็นค่า BLANK

Diagram showing a matrix visual revealing the year 2020 target quantity as 270 with blank monthly values.

เชื่อมโยงเกรนที่สูงกว่า (ไม่ใช่วันที่)

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

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

Diagram showing a model of the Target and Product tables. A many-to-many relationship relates the two tables.

ตอนนี้เรามาดูแถวตารางกัน

Diagram showing a model containing two tables: Target and Product. A many-to-many relationship relates the two Category columns.

ในตารางเป้าหมาย มีสี่แถว: สองแถวสําหรับแต่ละปีเป้าหมาย (2019 และ 2020) และสองประเภท (เสื้อผ้าและเครื่องประดับ) ในตาราง ผลิตภัณฑ์ มีสามผลิตภัณฑ์ สองเป็นประเภทเสื้อผ้าและหนึ่งเป็นประเภทอุปกรณ์เสริม หนึ่งในเสื้อผ้ามีสีเขียวและที่เหลืออีกสองนั้นเป็นสีน้ําเงิน

การจัดกลุ่มวิชวลของ ตารางตามคอลัมน์หมวดหมู่ จาก ตาราง ผลิตภัณฑ์ สร้างผลลัพธ์ดังต่อไปนี้

Diagram showing a table visual with two columns: Category and TargetQuantity. Accessories is 60, Clothing is 40, and the total is 100.

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

Diagram showing a table visual with two columns: Color and TargetQuantity. Blue is 100, Green is 40, and the total is 100.

วิชวลสร้างบิดเบือนข้อมูล เกิดอะไรขึ้นที่นี่

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

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

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

Target Quantity =
IF(
    NOT ISFILTERED('Product'[ProductID])
        && NOT ISFILTERED('Product'[Product])
        && NOT ISFILTERED('Product'[Color]),
    SUM(Target[TargetQuantity])
)

ขณะนี้วิชวลตารางต่อไปนี้ใช้ หน่วยวัดปริมาณ เป้าหมาย ซึ่งแสดงให้เห็นว่าปริมาณเป้าหมายของทุกสีทั้งหมดเป็นค่า BLANK

Diagram showing a table visual with two columns: Color and TargetQuantity. Blue is BLANK, Green is BLANK, and the total is 100.

การออกแบบแบบจําลองขั้นสุดท้ายมีลักษณะดังต่อไปนี้

Diagram showing a model with Date and Target tables related with a one-to-many relationship.

คําแนะนําเชื่อมโยงความจริงเกรนที่สูงกว่า

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

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

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