คําแนะนําความสัมพันธ์แบบกลุ่มต่อกลุ่ม
บทความนี้มุ่งเป้าหมายไปยังคุณในฐานะผู้สร้างแบบจําลองข้อมูลที่ทํางานกับ 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 เชื่อมโยงกับCustomerID
91 -
AccountID
1 เชื่อมโยงกับCustomerID
92 -
2 เชื่อมโยงกับ 92
-
- ตาราง
Transaction
มีสามแถว:-
Date
1 มกราคม 2019,AccountID
1,Amount
100 -
Date
กุมภาพันธ์ 2562,AccountID
2,Amount
200 -
Date
3 มีนาคม 2019,AccountID
1,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,OrderID
1,OrderLine
1,ProductID
Prod-A,OrderQuantity
5,Sales
50 -
OrderDate
มกราคม 2562,OrderID
1,OrderLine
2,ProductID
Prod-B,OrderQuantity
10,Sales
80 -
OrderDate
2 กุมภาพันธ์ 2562,OrderID
2,OrderLine
1,ProductID
Prod-B,OrderQuantity
5,Sales
40 -
OrderDate
กุมภาพันธ์ 2 2562,OrderID
2,OrderLine
2,ProductID
Prod-C,OrderQuantity
1,Sales
20 -
OrderDate
มีนาคม 2562,OrderID
3,OrderLine
1,ProductID
Prod-C,OrderQuantity
5,Sales
100
-
- ตาราง
Fulfillment
มีสี่แถว:-
FulfillmentDate
มกราคม 1 2019,FulfillmentID
50,OrderID
1,OrderLine
1,FulfillmentQuantity
2 -
FulfillmentDate
กุมภาพันธ์ 2562,FulfillmentID
51,OrderID
2,OrderLine
1,FulfillmentQuantity
5 -
FulfillmentDate
กุมภาพันธ์ 2 2562,FulfillmentID
52OrderID
1,OrderLine
1,FulfillmentQuantity
3 -
FulfillmentDate
1 มกราคม 2019,FulfillmentID
53,OrderID
1,OrderLine
2,FulfillmentQuantity
10
-
มาดูกันว่าเกิดอะไรขึ้นเมื่อมีการคิวรีแบบจําลอง นี่คือภาพตารางที่เปรียบเทียบปริมาณการสั่งซื้อและการเติมสินค้าตามตาราง Order
OrderID
คอลัมน์
วิชวลแสดงผลลัพธ์ที่ถูกต้อง อย่างไรก็ตาม ประโยชน์ของแบบจําลองจะถูกจํากัดเนื่องจากคุณสามารถกรองหรือจัดกลุ่มตามตาราง Order
OrderID
คอลัมน์ได้เท่านั้น
คําแนะนําเชื่อมโยงข้อเท็จจริงแบบกลุ่มต่อกลุ่ม
โดยทั่วไปเราไม่แนะนําให้คุณเชื่อมโยงตารางข้อเท็จจริงสองตารางโดยตรงโดยใช้คาร์ดินาลลิตี้แบบกลุ่มต่อกลุ่ม เหตุผลหลักคือเหตุผลหลักคือเนื่องจากแบบจําลองจะไม่มีความยืดหยุ่นในลักษณะที่วิชวลรายงานของคุณกรองหรือจัดกลุ่ม ในตัวอย่าง สามารถมีได้เฉพาะวิชวลเพื่อกรองหรือจัดกลุ่มตามตาราง Order
OrderID
คอลัมน์ เหตุผลอื่นเกี่ยวข้องกับคุณภาพของข้อมูลของคุณ หากข้อมูลของคุณมีปัญหาด้านการทํางาน อาจเป็นไปได้ว่าบางแถวอาจถูกละเว้นในระหว่างการคิวรี เนื่องจากคาร์ดินาลลิตี้แบบกลุ่มต่อคน และ ความสัมพันธ์แบบจํากัด
แทนที่จะเป็นตารางข้อเท็จจริงที่เกี่ยวข้องโดยตรง เราขอแนะนําให้คุณใช้ Schema รูปดาว การออกแบบ นั่นหมายความว่าคุณเพิ่มตารางมิติ ตารางมิติเหล่านี้เชื่อมโยงกับตารางข้อเท็จจริงโดยใช้ความสัมพันธ์แบบหนึ่งต่อกลุ่ม วิธีการออกแบบนี้มีความแข็งแกร่งเนื่องจากมีตัวเลือกการรายงานที่ยืดหยุ่นได้อย่างมีประสิทธิภาพ ซึ่งช่วยให้คุณกรองหรือจัดกลุ่มโดยใช้คอลัมน์ตารางมิติ และสรุปคอลัมน์ของตารางข้อเท็จจริงใด ๆ ที่เกี่ยวข้อง
มาพิจารณาวิธีแก้ปัญหาที่ดีกว่ากัน
โปรดสังเกตการเปลี่ยนแปลงการออกแบบต่อไปนี้:
- ขณะนี้แบบจําลองมีตารางเพิ่มเติมสี่ตาราง:
OrderLine
,OrderDate
,Product
, และFulfillmentDate
- ตารางเพิ่มเติมสี่ตารางคือตารางมิติทั้งหมดที่ความสัมพันธ์แบบหนึ่งต่อกลุ่มเชื่อมโยงกับตารางข้อเท็จจริง
- ตาราง
OrderLine
ประกอบด้วยคอลัมน์OrderLineID
ซึ่งจัดเก็บค่าOrderID
ที่คูณด้วย 100 บวกกับค่าคอลัมน์OrderLine
ซึ่งเป็น ID สําหรับแต่ละบรรทัดคําสั่งซื้อ - ตาราง
Order
และตารางFulfillment
แต่ละตารางประกอบด้วยคอลัมน์OrderLineID
และไม่มีคอลัมน์OrderID
และOrderLine
อีกต่อไป - ขณะนี้ตาราง
Fulfillment
ประกอบด้วยคอลัมน์OrderDate
และProductID
- ตาราง
FulfillmentDate
มีความสัมพันธ์กับตารางFulfillment
เท่านั้น - คอลัมน์ ID ทั้งหมดถูกซ่อนไว้
สละเวลาในการปรับใช้การออกแบบ Schema รูปดาวให้ประโยชน์ดังต่อไปนี้:
- วิชวลรายงานของคุณสามารถ กรองหรือจัดกลุ่ม ตามคอลัมน์ที่มองเห็นได้จากตารางมิติ
- วิชวลรายงานของ คุณสามารถสรุป คอลัมน์ที่มองเห็นได้จากตารางข้อเท็จจริง
- ตัวกรองที่นําไปใช้กับตาราง
OrderLine
OrderDate
หรือProduct
เผยแพร่ไปยังตารางข้อเท็จจริงทั้งสอง - ความสัมพันธ์ทั้งหมดเป็นแบบหนึ่งต่อกลุ่ม และแต่ละความสัมพันธ์เป็นความสัมพันธ์ ความสัมพันธ์แบบธรรมดา ปัญหาความสมบูรณ์ของข้อมูลจะไม่ได้รับการมาสก์ สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการประเมินความสัมพันธ์ โปรดดู ความสัมพันธ์แบบจําลองใน Power BI Desktop
เชื่อมโยงความจริงเกรนที่สูงกว่า
สถานการณ์กลุ่มต่อกลุ่มนี้แตกต่างจากสถานการณ์ที่ได้อธิบายไว้แล้วในบทความนี้
มาพิจารณาตัวอย่างที่เกี่ยวข้องกับตารางทั้งสี่: Date
, Sales
, Product
, และ Target
ตาราง Date
และ Product
เป็นตารางมิติ และความสัมพันธ์แบบหนึ่งต่อกลุ่มเกี่ยวข้องกับตารางข้อเท็จจริง Sales
ซึ่งแสดงการออกแบบ Schema รูปดาวที่ดี อย่างไรก็ตาม ตาราง Target
สัมพันธ์กับตารางอื่น ๆ
ตาราง Target
มีสามคอลัมน์: Category
, TargetQuantity
, และ TargetYear
แถวของตารางเผยถึงส่วนประกอบของหมวดหมู่ปีและผลิตภัณฑ์ อีกนัยหนึ่ง เป้าหมายที่ใช้เพื่อวัดประสิทธิภาพการขาย นั้นถูกตั้งค่าในแต่ละปีสําหรับผลิตภัณฑ์แต่ละประเภท
เนื่องจากตาราง Target
จัดเก็บข้อมูลในระดับที่สูงกว่าตารางมิติ จึงไม่สามารถสร้างความสัมพันธ์แบบหนึ่งต่อกลุ่มได้ เป็นเรื่องจริงสําหรับความสัมพันธ์เพียงหนึ่งเดียว ลองสํารวจว่าตาราง Target
สามารถสัมพันธ์กับตารางมิติได้อย่างไร
เชื่อมโยงช่วงเวลาเกรนที่สูงขึ้น
ความสัมพันธ์ระหว่างตาราง Date
และตาราง Target
ควรเป็นความสัมพันธ์แบบหนึ่งต่อกลุ่ม นั่นเป็นเพราะว่าค่าของคอลัมน์ TargetYear
เป็นวันที่ ในตัวอย่างนี้ แต่ละคอลัมน์ TargetYear
จัดเก็บวันที่แรกของปีเป้าหมาย
ปลาย
เมื่อจัดเก็บข้อเท็จจริงในช่วงเวลาที่สูงขึ้นกว่าวันที่ตั้งค่าชนิดข้อมูลของคอลัมน์เป็น วันที่ (หรือ จํานวนเต็ม ถ้าคุณกําลังใช้คีย์วันที่) ในคอลัมน์ ให้จัดเก็บค่าที่แสดงวันแรกของช่วงเวลา ตัวอย่างเช่น มีการบันทึกช่วงปีเป็นวันที่ 1 มกราคมของปี และระยะเวลาเดือนจะถูกบันทึกเป็นวันแรกของเดือนนั้น
อย่างไรก็ตามต้องใช้ความระมัดระวังเพื่อให้แน่ใจว่าตัวกรองระดับเดือนหรือวันที่สร้างผลลัพธ์ที่มีความหมาย หากไม่มีตรรกะการคํานวณพิเศษ ภาพรายงานอาจรายงานว่าวันที่เป้าหมายเป็นวันแรกของแต่ละปี วันอื่นๆ ทั้งหมดและเดือนทั้งหมดยกเว้นมกราคมจะสรุปปริมาณเป้าหมายเป็น BLANK
วิชวลเมทริกซ์ต่อไปนี้แสดงสิ่งที่เกิดขึ้นเมื่อผู้ใช้รายงานดูรายละเอียดแนวลึกจากปีเป็นเดือน วิชวลสรุปคอลัมน์ TargetQuantity
(เปิดใช้งานตัวเลือก แสดงรายการที่ไม่มีข้อมูล สําหรับแถวเมทริกซ์)
เพื่อหลีกเลี่ยงปัญหานี้ เราขอแนะนําให้คุณควบคุมสรุปข้อมูลข้อเท็จจริงของคุณโดยใช้หน่วยวัด วิธีหนึ่งในการควบคุมสรุปคือการส่งกลับค่า BLANK เมื่อมีการสอบถามช่วงเวลาที่ต่ํากว่า อีกวิธีหนึ่งคือการกําหนดด้วย DAX ที่มีความซับซ้อนบางอย่างคือการแบ่งค่าในช่วงเวลาที่ต่ํากว่า
พิจารณาข้อกําหนดหน่วยวัดต่อไปนี้ที่ใช้ฟังก์ชัน ISFILTERED DAX จะส่งกลับค่าเฉพาะเมื่อไม่มีการกรองคอลัมน์ Date
และ Month
Target Quantity =
IF(
NOT ISFILTERED('Date'[Date])
&& NOT ISFILTERED('Date'[Month]),
SUM(Target[TargetQuantity])
)
วิชวลเมทริกซ์ต่อไปนี้ใช้หน่วยวัด Target Quantity
ซึ่งแสดงให้เห็นว่าปริมาณเป้าหมายรายเดือนทั้งหมดเป็นค่า BLANK
เชื่อมโยงเกรนที่สูงกว่า (ไม่ใช่วันที่)
จําเป็นต้องมีวิธีการออกแบบที่แตกต่างกันเมื่อเกี่ยวข้องกับคอลัมน์ที่ไม่ใช่วันที่จากตารางมิติไปยังตารางข้อเท็จจริง (และอยู่ในระดับที่สูงกว่าตารางมิติ)
คอลัมน์ 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 เมื่อมีการใช้คอลัมน์มิติระดับต่ํากว่าในการกรองหรือจัดกลุ่ม
- ซ่อนคอลัมน์ตารางข้อเท็จจริงที่สามารถสรุปได้ เพื่อให้แน่ใจว่าสามารถใช้เฉพาะหน่วยวัดเพื่อสรุปตารางข้อเท็จจริงเท่านั้น
เนื้อหาที่เกี่ยวข้อง
สําหรับข้อมูลเพิ่มเติมที่เกี่ยวข้องกับบทความนี้ โปรดดูทรัพยากรต่อไปนี้:
- ความสัมพันธ์ของแบบจําลอง ใน Power BI Desktop
- ทําความเข้าใจ Schema รูปดาวและความสําคัญของ Power BI
- คําแนะนําการแก้ไขปัญหาความสัมพันธ์ของ
- คำ ถาม ลองถาม ชุมชน Fabric
- คำ แนะ นำ มีส่วนช่วยปรับปรุง ผ้า