แชร์ผ่าน


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

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

โน้ต

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

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

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

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

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

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

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

แผนภาพที่แสดงตารางแบบจําลองสามตาราง การออกแบบได้รับการอธิบายในย่อหน้าต่อไปนี้

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

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

แผนภาพที่แสดงว่าไดอะแกรมแบบจําลองประกอบด้วยสี่ตาราง เพิ่มความสัมพันธ์หนึ่งต่อกลุ่มในตารางทั้งหมด

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

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

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

  • ตาราง Account มีสองแถว:
    • AccountID 1 มีไว้สําหรับ Account-01
    • 2 มีไว้สําหรับ Account-02
  • ตาราง Customer มีสองแถว:
    • CustomerID 91 มีไว้สําหรับ Customer-91
    • CustomerID 92 มีไว้สําหรับ Customer-92
  • ตาราง AccountCustomer มีสามแถว:
    • AccountID 1 เชื่อมโยงกับ CustomerID91
    • AccountID 1 เชื่อมโยงกับ CustomerID92
    • 2 เชื่อมโยงกับ 92
  • ตาราง Transaction มีสามแถว:
    • Date 1 มกราคม 2019, AccountID1, Amount100
    • Date กุมภาพันธ์ 2562, AccountID2, Amount200
    • Date 3 มีนาคม 2019, AccountID1, Amount-25

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

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

แผนภาพที่แสดงวิชวลตารางสองภาพที่วางอยู่ข้าง ๆ กัน การอธิบายเกี่ยวกับวิชวลในย่อหน้าต่อไปนี้

วิชวลตารางแรก (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 ลูกค้าแต่ละรายในวิชวลนี้มียอดคงเหลือเท่ากับยอดรวม ผลลัพธ์นี้อาจถูกต้องหากลูกค้าทุกรายเป็นเจ้าของบัญชีร่วมกันของทุกบัญชี ซึ่งไม่ใช่กรณีในตัวอย่างนี้ มีปัญหาและเกี่ยวข้องกับการเผยแพร่ตัวกรอง ตัวกรองไม่ได้ไหลไปยังตาราง Transaction

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

แผนภาพที่แสดงว่าแบบจําลองได้รับการอัปเดตแล้ว ตอนนี้ตัวกรองเป็นแบบสองทิศทาง

แผนภาพที่แสดงวิชวลรายงานสองภาพที่เหมือนกันซึ่งวางอยู่ข้าง ๆ กัน วิชวลแรกไม่มีการเปลี่ยนแปลง ในขณะที่วิชวลที่สองมีการเปลี่ยนแปลง

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

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

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

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

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

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

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

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

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

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

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

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

ลองพิจารณาตัวอย่างที่เกี่ยวข้องกับตารางข้อเท็จจริงสองตาราง: Order และ Fulfillment ตาราง Order มีหนึ่งแถวต่อบรรทัดคําสั่ง และตาราง Fulfillment สามารถมีศูนย์แถวหรือมากกว่านั้นสําหรับแต่ละบรรทัดคําสั่ง แถวในตาราง Order แสดงคําสั่งขาย แถวในตาราง Fulfillment แสดงรายการคําสั่งซื้อที่มีการจัดส่งแล้ว ความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มเกี่ยวข้องกับคอลัมน์ OrderID ในแต่ละตาราง ด้วยการกระจายตัวกรองจากตาราง Order เท่านั้น (หมายความว่าตาราง Order จะกรองตาราง Fulfillment)

แผนภาพที่แสดงแบบจําลองที่มีสองตาราง: คําสั่งและการเติมสินค้า

มีการตั้งค่าคาร์ดินาลลิตี้ความสัมพันธ์เป็น Many-to-many เพื่อสนับสนุนการจัดเก็บค่าคอลัมน์ OrderID ที่ซ้ํากันในทั้งสองตาราง ในตาราง Order อาจมีค่า ID ซ้ําเนื่องจากคําสั่งอาจมีได้หลายบรรทัด ในตาราง Fulfillment อาจมีค่า ID ซ้ําเนื่องจากคําสั่งสามารถมีหลายบรรทัด และคําสั่งอาจมีหลายการจัดส่ง

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

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

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

  • ตาราง Order มีห้าแถว:
    • OrderDate 1 มกราคม 2019, OrderID1, OrderLine1, ProductIDProd-A, OrderQuantity5, Sales50
    • OrderDate มกราคม 2562, OrderID1, OrderLine2, ProductIDProd-B, OrderQuantity10, Sales80
    • OrderDate 2 กุมภาพันธ์ 2562, OrderID2, OrderLine1, ProductIDProd-B, OrderQuantity5, Sales40
    • OrderDate กุมภาพันธ์ 2 2562, OrderID2, OrderLine2, ProductIDProd-C, OrderQuantity1, Sales20
    • OrderDate มีนาคม 2562, OrderID3, OrderLine1, ProductIDProd-C, OrderQuantity5, Sales100
  • ตาราง Fulfillment มีสี่แถว:
    • FulfillmentDate มกราคม 1 2019, FulfillmentID50, OrderID1, OrderLine1, FulfillmentQuantity2
    • FulfillmentDate กุมภาพันธ์ 2562, FulfillmentID51, OrderID2, OrderLine1, FulfillmentQuantity5
    • FulfillmentDate กุมภาพันธ์ 2 2562, FulfillmentID52OrderID1, OrderLine1, FulfillmentQuantity3
    • FulfillmentDate 1 มกราคม 2019, FulfillmentID53, OrderID1, OrderLine2, FulfillmentQuantity10

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

แผนภาพที่แสดงวิชวลตารางที่มีสามคอลัมน์: OrderID, OrderQuantity และ FulfillmentQuantity

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

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

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

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

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

แผนภาพที่แสดงแบบจําลองที่ประกอบด้วยหกตาราง: OrderLine, OrderDate, Order, Fulfillment, Product, และ FulfillmentDate.

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

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

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

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

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

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

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

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

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

แผนภาพที่แสดงตารางข้อเท็จจริงของยอดขายและเป้าหมาย ตารางข้อเท็จจริงเป้าหมายมีสามคอลัมน์: TargetYear, Category, และ TargetQuantity.

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

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

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

ปลาย

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

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

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

แผนภาพที่แสดงวิชวลเมทริกซ์ซึ่งเผยปริมาณเป้าหมายปี 2020 เป็น 270 รายการ ซึ่งสร้างค่าที่ไม่ถูกต้องตามวันที่

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

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

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

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

แผนภาพที่แสดงวิชวลเมทริกซ์สองภาพ ครั้งแรกเผยเป้าหมายเดือนแรกของปี 2020 เป็น 270 ในขณะที่เป้าหมายที่สองเป็นค่าว่าง

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

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

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

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

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

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

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

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

แผนภาพที่แสดงวิชวลตารางสองภาพ กลุ่มแรกตามประเภทและกลุ่มที่สองตามสี วิชวลที่สองสร้างผลลัพธ์ที่ไม่ถูกต้อง

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

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

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

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

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

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

แผนภาพที่แสดงวิชวลตารางสองภาพ กลุ่มแรกตามประเภทและกลุ่มที่สองตามสี วิชวลที่สองสร้างผลลัพธ์ที่ถูกต้องของค่าว่าง

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

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

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

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

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

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