หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
Power BI มีเครื่องมือหลายอย่างเพื่อทําการคํานวณตามเวลา ซึ่งอาศัยตารางวันที่อัตโนมัติหรือตารางวันที่ที่คุณเพิ่ม
เราขอแนะนําให้ใช้ ข่าวกรองเวลาตามปฏิทิน (พรีวิว) เนื่องจากให้ประสิทธิภาพที่ดีที่สุดและช่วงความยืดหยุ่นสูงสุดเพื่อให้ตรงกับปฏิทินใดๆ
ตารางนี้เปรียบเทียบเครื่องมือสามอย่างที่มีให้:
| เครื่องมือ | ต้องใช้ความพยายามในการตั้งค่า | ง่ายต่อการจัดการ | ความยืดหยุ่น | บันทึกย่อ |
|---|---|---|---|---|
| วันที่/เวลาอัตโนมัติ | แทบเป็นศูนย์ | แข็ง | ต่ํา | เพิ่มขนาดแบบจําลองเนื่องจากมีการสร้างตารางวันที่ที่ซ่อนอยู่หลายตาราง |
| ระบบบอกเล่าเวลาแบบคลาสสิก | สื่อกลาง | ง่าย | ต่ํา | ต้องสร้างตารางวันที่สมมติว่าปฏิทินเกรกอเรียนหรือปฏิทินเกรกอเรียนที่เปลี่ยนไปประสบปัญหาด้านประสิทธิภาพในบางสถานการณ์ |
| ข่าวกรองเวลาตามปฏิทิน | สูง | สื่อกลาง | สูง | แนะนําให้สร้างตารางวันที่ ความยืดหยุ่นสูงสุด ประสิทธิภาพที่ดีที่สุด แต่ต้นทุนการติดตั้งเพิ่มขึ้น |
Note
เราไม่แนะนําให้ใช้เทคนิคข่าวกรองเวลาทางเลือก โดยเฉพาะอย่างยิ่งเทคนิคที่เกี่ยวข้องกับการเพิ่มคอลัมน์พิเศษลงในตารางวันที่เพื่อคํานวณออฟเซ็ต ยกเว้นกรณีการใช้งานเฉพาะ แม้ว่าวิธีการเหล่านี้อาจดึงดูดผู้เริ่มต้นเนื่องจากสูตร DAX ที่ตรงไปตรงมา แต่ก็มีแนวโน้มที่จะขยายโมเดลความหมายโดยไม่จําเป็น การบวมนี้อาจทําให้การรีเฟรชข้อมูลช้าลงและประสิทธิภาพของรายงานลดลงเมื่อชุดข้อมูลเติบโตขึ้น
วันที่/เวลาอัตโนมัติ
คุณลักษณะวันที่/เวลาอัตโนมัติจะสร้างตารางวันที่ที่ซ่อนอยู่สําหรับแต่ละฟิลด์วันที่ในแบบจําลองข้อมูลของคุณโดยอัตโนมัติ สําหรับข้อมูลเพิ่มเติมเกี่ยวกับลักษณะการทํางานอัตโนมัตินี้ โปรดดู ใช้วันที่/เวลาอัตโนมัติใน Power BI Desktop
Note
แม้ว่าวันที่/เวลาอัตโนมัติจะเป็นตัวเลือกที่สะดวกสําหรับโมเดลธรรมดา แต่ก็ไม่แนะนําสําหรับสถานการณ์ที่ซับซ้อนมากขึ้นและโมเดลขนาดใหญ่ สําหรับรุ่นเหล่านั้น ควรสร้างตารางเฉพาะเพื่อความยืดหยุ่นมากขึ้น
เพิ่มตารางวันที่
สําหรับโมเดลส่วนใหญ่ ขอแนะนําให้เพิ่มตารางวันที่ (หรือมากกว่าในบางสถานการณ์) นักวิเคราะห์ข้อมูลหลายคนชอบสร้างตารางวันที่ของตนเอง ซึ่งก็ไม่เป็นไร
มีหลายวิธีในการสร้างตารางดังกล่าว ได้แก่:
- Power Query M คุณสามารถใช้ฟังก์ชัน List.Dates ตัวอย่างมีให้ในภายหลังในเอกสารนี้
- DAX คุณสามารถใช้ฟังก์ชัน CALENDAR หรือ CALENDARAUTO เพื่อสร้างตารางวันที่คํานวณพื้นฐานได้ คุณยังสามารถใช้คําสั่ง DAX ขั้นสูงเพื่อสร้างตารางวันที่ ตัวอย่างมีให้ในภายหลังในเอกสารนี้
- เครื่องมือภายนอก
- การโหลดจากแหล่งข้อมูล เช่น ระบบต้นทาง ไฟล์ หรือแบบจําลองความหมายของ Power BI อื่น
ตัวเลือกใดดีที่สุดสําหรับคุณขึ้นอยู่กับปัจจัยต่างๆ และอยู่นอกเหนือขอบเขตของบทช่วยสอนนี้
ทํางานกับการคํานวณตามเวลา
สมมติว่าคุณไม่ได้ใช้ วันที่/เวลาอัตโนมัติ มีสองวิธีในการทํางานกับ ฟังก์ชันข่าวกรองเวลาใน Power BI เพื่อทําการคํานวณตามเวลา:
- ความฉลาดด้านเวลาแบบคลาสสิก ตัวเลือกที่ง่ายที่สุดและใช้งานได้ดีสําหรับปฏิทินเกรกอเรียนหรือปฏิทินเกรกอเรียนแบบเลื่อน แต่มีความยืดหยุ่นจํากัดสําหรับปฏิทินที่มีโครงสร้างแตกต่างกันหรือสําหรับการคํานวณตามสัปดาห์
- ข่าวกรองเวลาตามปฏิทิน (พรีวิว) ตัวเลือกที่ใหม่กว่า แต่ต้องทํางานมากขึ้นเล็กน้อยในการตั้งค่า อย่างไรก็ตาม ยังให้ประสิทธิภาพที่ดีขึ้นความยืดหยุ่นมากขึ้นในการทํางานกับปฏิทินที่ไม่ใช่เกรกอเรียน และความสามารถในการคํานวณตามสัปดาห์
Note
คุณต้อง ตั้งค่าตารางของคุณเป็นตารางวันที่ สําหรับสถานการณ์เฉพาะ
ระบบบอกเล่าเวลาแบบคลาสสิก
ตัวเลือกนี้กําหนดให้คุณต้องมีตารางวันที่ในแบบจําลองของคุณและตั้งค่าให้เหมาะสม หลังจากนั้น คุณสามารถใช้ ฟังก์ชันข่าวกรองเวลา และดูตารางวันที่ของคุณได้ ตัวอย่างเช่น หากคุณมีตารางวันที่ที่เรียกว่า วันที่ ในแบบจําลองของคุณ ซึ่งคุณตั้งเป็นตารางวันที่ ซึ่งมีคอลัมน์ วันที่ คุณสามารถใช้:
SAMEPERIODLASTYEAR ( 'Date'[Date] )
แม้ว่าวิธีนี้จะเป็นวิธีที่ง่ายและรวดเร็ว แต่ก็มีข้อเสียมากมายเมื่อเทียบกับ วิธีการตามปฏิทิน:
- คุณต้องตั้งค่าตารางวันที่
- ใช้งานได้กับรุ่นที่มีตารางวันที่เฉพาะอย่างน้อยหนึ่งตารางเท่านั้น
- คอลัมน์วันที่ที่ใช้ไม่ควรมีวันที่ขาดหายไประหว่างวันที่แรกและวันที่สุดท้าย หากมีวันที่ขาดหายไประหว่างวันแรกและวันสุดท้าย จะมีข้อผิดพลาดเกิดขึ้น
- มีความยืดหยุ่นน้อยกว่าเนื่องจากได้รับการปรับให้เหมาะสมสําหรับปฏิทินเกรกอเรียนหรือปฏิทินเกรกอเรียนที่เปลี่ยนไป เช่น ปีงบประมาณที่เริ่มต้นในวันที่ 1 กรกฎาคม แต่ยังคงเป็นไปตามปฏิทินเกรกอเรียน
- ไม่มีการคํานวณตามสัปดาห์
- ในบางสถานการณ์ การคํานวณตามเวลาทํางานได้ไม่ดี
Note
เราขอแนะนําให้คุณใช้วิธีการที่ปรับปรุงแล้วตามปฏิทิน
ข่าวกรองเวลาตามปฏิทิน (พรีวิว)
ปฏิทินคือคําจํากัดความข้อมูลเมตาที่เพิ่มลงในตารางเพื่อระบุว่าคอลัมน์ใดจากตารางนั้นแสดงถึงแอตทริบิวต์ของเวลา คุณสามารถกําหนดปฏิทินอย่างน้อยหนึ่งรายการบนตารางใดก็ได้ในแบบจําลองของคุณ หลังจากที่คุณกําหนดปฏิทินในแบบจําลองของคุณแล้ว คุณสามารถอ้างถึงปฏิทินนั้นในฟังก์ชันข่าวกรองเวลาของคุณ ตัวอย่างเช่น ต่อไปนี้เป็นวิธีการคํานวณยอดรวมของปีจนถึงปัจจุบันของ Sales โดยใช้ ปฏิทินทางการเงินที่กําหนดไว้:
TOTALYTD ( [Sales], 'Fiscal Calendar' )
ประโยชน์ของข่าวกรองเวลาตามปฏิทิน
ประโยชน์หลักของข่าวกรองเวลาตามปฏิทินคือ:
ใช้งานได้กับปฏิทินใดก็ได้
ปฏิทินช่วยให้คุณมีความยืดหยุ่นอย่างเต็มที่ในการตัดสินใจว่าจะแบ่งเวลาเป็นปี ไตรมาส เดือน และสัปดาห์อย่างไร ตัวอย่างเช่น คุณสามารถกําหนดปฏิทินที่เป็นไปตามรูปแบบเหล่านี้:
- เกรกอเรียน
- เกรกอเรียนขยับ
- ขายปลีก (445, 454, 544 รูปแบบ)
- 13 เดือน
- จันทรคติ
ความเป็นไปได้ไม่มีที่สิ้นสุด เนื่องจากไม่มีสมมติฐานในตัวจาก Power BI เกี่ยวกับโครงสร้างปฏิทินของคุณ ข่าวกรองเวลาตามปฏิทินไม่ได้ตั้งสมมติฐานเกี่ยวกับวันที่พื้นฐาน การคํานวณทั้งหมดใช้ข้อมูลพื้นฐาน as-isทุกประการ
วันที่เบาบาง
ข่าวกรองเวลาแบบคลาสสิก ต้องการให้คอลัมน์วันที่ที่ระบุเสร็จสมบูรณ์ - หากมีวันที่ขาดหายไประหว่างวันที่แรกและวันที่สุดท้าย ฟังก์ชันข่าวกรองเวลาตามปฏิทินไม่มีข้อกําหนดดังกล่าว พวกเขาดําเนินการตามวันที่ as-isแทน แม้ว่าเราจะยังคงแนะนําให้มีตารางปฏิทินที่สมบูรณ์และเฉพาะเจาะจง แต่คุณไม่จําเป็นต้องมีตารางปฏิทินนั้นอีกต่อไป ตัวอย่างเช่น หากร้านค้าปลีกทั้งหมดของคุณปิดทําการในช่วงสุดสัปดาห์ คุณสามารถข้ามวันสุดสัปดาห์ได้เนื่องจากไม่มีการขายใดๆ สมมติว่าวันหยุดสุดสัปดาห์ของคุณคือวันเสาร์และวันอาทิตย์ตอนนี้ PREVIOUSDAY คุณสามารถใช้ปฏิทินตามตารางที่ไม่มีรายการสําหรับวันหยุดสุดสัปดาห์เพื่อข้ามจากวันจันทร์ตรงไปเป็นวันศุกร์
การคํานวณตามสัปดาห์
ข่าวกรองเวลาตามปฏิทินจะจัดหาฟังก์ชัน DAX ที่ทํางานที่ความละเอียดหนึ่งสัปดาห์โดยตรง ตัวอย่างเช่น ผลรวมรายสัปดาห์จนถึงปัจจุบันสามารถคํานวณได้โดยตรงโดยใช้ TOTALWTD:
TOTALWTD ( Expr, CalendarName )
การปรับปรุงประสิทธิภาพ
บางสถานการณ์อาจแสดงประสิทธิภาพที่ดีขึ้นเมื่อเปรียบเทียบฟังก์ชันข่าวกรองเวลาตามปฏิทินกับฟังก์ชันคลาสสิก ตัวอย่างเช่น วิชวลที่จัดกลุ่มตามสัปดาห์และทําการคํานวณตั้งแต่ต้นปีจนถึงปัจจุบันโดยใช้ TOTALYTD ( ..., CalendarName ) โดยทั่วไปควรดําเนินการเร็วกว่าถ้ามีการใช้คู่แบบ TOTALYTD ( ..., TableName[DateColumnName] )คลาสสิก สําหรับข้อมูลเชิงลึกเกี่ยวกับสาเหตุที่อาจเกิดขึ้น โปรดดูที่ส่วน การล้างบริบท
เปิดใช้งานการแสดงตัวอย่าง DAX Time Intelligence ที่ได้รับการปรับปรุง
เมื่อต้องการเริ่มต้นใช้งาน ก่อนอื่นคุณต้องเปิดใช้งานคุณลักษณะการแสดงตัวอย่าง DAX Time Intelligence ที่ปรับปรุงแล้ว
- ใน Power BI Desktop ไปที่ ตัวเลือกไฟล์ > และการตั้งค่า >> ตัวเลือก คุณลักษณะการแสดงตัวอย่าง
- เลือกตัวอย่าง ข่าวกรองเวลา DAX ที่ปรับปรุงแล้ว
- เลือก ตกลง
- รีสตาร์ท Power BI Desktop
จัดการปฏิทิน
เมื่อต้องการจัดการปฏิทิน ให้คลิกขวาที่ตารางที่มีปฏิทินหรือตารางที่คุณต้องการกําหนดปฏิทิน แล้วเลือก ตัวเลือกปฏิทิน หรือเลือก ตัวเลือกปฏิทิน ใน Ribbon เครื่องมือตารางหลังจากเลือกตาราง ดังนี้
หรือคุณสามารถใช้เครื่องมือภายนอกหรือ มุมมอง TMDL เพื่อกําหนดปฏิทิน สําหรับข้อมูลเพิ่มเติม โปรดดูสคริปต์ TMDL
ปฏิทินยังแสดงในตัว สํารวจแบบจําลอง ภายใต้ตารางที่กําหนดไว้:
หน้าจอตัวเลือกปฏิทิน
หน้าจอตัวเลือกปฏิทินแสดงปฏิทินที่กําหนดไว้ในตารางที่เลือก ที่นี่คุณสามารถ:
- สร้างปฏิทินใหม่โดยเลือก ปฏิทินใหม่
- แก้ไขปฏิทินที่มีอยู่โดยเลือก แก้ไข
- ลบปฏิทินที่มีอยู่โดยเลือก ลบ
- ตั้งค่าตารางเป็นตารางวันที่ โดยเลือกทําเครื่องหมาย เป็นตารางวันที่
กําหนดประเภทคอลัมน์
การกําหนดปฏิทินเกี่ยวข้องกับการตั้งชื่อและกําหนดคอลัมน์ให้กับหมวดหมู่ แต่ละประเภทแสดงถึงหน่วยของเวลาและ ประเภทคอลัมน์ เฉพาะจะพร้อมใช้งาน คุณต้องกําหนดคอลัมน์หลักอย่างน้อยหนึ่งคอลัมน์ให้กับหมวดหมู่เพื่อบันทึกปฏิทินของคุณ แต่ละประเภทควรมี คอลัมน์หลัก และสามารถมีคอลัมน์ที่เกี่ยวข้องเป็นศูนย์หรือมากกว่าได้ เมื่อใดก็ตามที่คอลัมน์ใด ๆ ที่เกี่ยวข้องกับประเภทอยู่ในบริบท Power BI จะรู้ว่าหน่วยเวลาใดที่พวกเขานําเสนอ นอกจากนี้ สําหรับฟังก์ชันบางอย่าง เช่น TOTALMTD Power BI จะใช้คอลัมน์หลักที่แมปกับประเภทที่เกี่ยวข้องในปฏิทินที่อ้างอิงเพื่อทําการคํานวณที่ร้องขอ เมื่อต้องการกําหนดคอลัมน์ให้กับประเภท ให้เลือกประเภทจากเมนู เพิ่มประเภท แล้วเลือกคอลัมน์หลักและคอลัมน์ที่เกี่ยวข้อง
ประเภทคอลัมน์ที่พร้อมใช้งาน
ตารางต่อไปนี้แสดงประเภทที่พร้อมใช้งาน ตารางนี้ยังแสดงค่าตัวอย่างและคาร์ดินัลลิตี้สําหรับปฏิทินเกรกอเรียน
หมวดหมู่แบ่งออกเป็นสองกลุ่ม:
- เสร็จสมบูรณ์ ข้อมูลในคอลัมน์ที่กําหนดให้กับประเภทที่สมบูรณ์ก็เพียงพอที่จะระบุช่วงเวลาที่ไม่ซ้ํากัน
- บางส่วน ข้อมูลในคอลัมน์ที่กําหนดให้กับประเภทบางส่วนไม่เพียงพอที่จะระบุช่วงเวลาที่ไม่ซ้ํากัน
| ประเภท | คำอธิบาย | ประเภท | ตัวอย่างคาร์ดินาลลิตี้ในปฏิทินเกรกอเรียน | ตัวอย่างค่าคอลัมน์ในปฏิทินเกรกอเรียน |
|---|---|---|---|---|
| Year | ปี | Complete |
Y = จํานวนปี |
2024, 2025 |
| ไตรมาส | ไตรมาสรวมปี | Complete | 4*Y |
ไตรมาสที่ 1 ปี 2024 ไตรมาสที่ 2 ปี 2025 |
| ไตรมาสของปี | ไตรมาสของปี | Partial | 4 |
ไตรมาสที่ 1, YQ1, ไตรมาสที่ 1, ไตรมาสที่ 2 |
| Month | เดือนรวมปี | Complete | 12*Y ≤ value ≤ 13*Y |
มกราคม 2023, 2024 ก.พ. |
| เดือนของปี | เดือนของปี | Partial | 12 |
มกราคม, ปี เดือน 11, YM11, M11, 11 |
| เดือนของไตรมาส | เดือนของไตรมาส | Partial | 3 |
1, คิวเอ็ม 2 |
| Week | สัปดาห์รวมปี | Complete | 52 ≤ value ≤ 53 |
สัปดาห์ที่ 50 ปี 2023, W50-2023, 2023-W50 |
| สัปดาห์ของปี | สัปดาห์ของปี | Partial | 52 |
สัปดาห์ที่ 50, W50, 50 |
| สัปดาห์ของไตรมาส | สัปดาห์ของไตรมาส | Partial | 13 |
ไตรมาสสัปดาห์ที่ 10, QW10, 10 |
| สัปดาห์ของเดือน | สัปดาห์ของเดือน | Partial | 5 |
เดือน สัปดาห์ที่ 2, MW2, 2 |
| วันที่ | วันที่ | Complete | 365*Y ≤ value ≤ 366*Y |
12/31/2025 |
| วันของปี | วันของปี | Partial | 365 ≤ value ≤366 |
365, ง. 1 |
| วันของไตรมาส | วันของไตรมาส | Partial | 92 |
ไตรมาสเดย์ 10, QD2, 50 |
| วันของเดือน | วันของเดือน | Partial | 31 |
เดือนวันที่ 30, MD10, 30 |
| วันของสัปดาห์ | วันในสัปดาห์ | Partial | 7 |
วันธรรมดา 5, WD5, 5 |
นอกจากหมวดหมู่เหล่านี้แล้ว คุณยังสามารถเชื่อมโยงคอลัมน์จํานวนเท่าใดก็ได้บนตารางของคุณกับประเภทที่เกี่ยวข้องกับเวลา ขณะนี้ยังไม่สามารถทําได้ในตัวเลือกปฏิทิน แต่สามารถทําได้โดยใช้เครื่องมือภายนอกหรือ TMDL เท่านั้น
Note
บริบทบนคอลัมน์ใดๆ ที่กําหนดให้กับประเภทที่เกี่ยวข้องกับเวลาจะถูกลบออกเมื่อทําการคํานวณในฟังก์ชันทั้งหมดยกเว้น DATEADD และSAMEPERIODLASTYEAR บริบทใดๆ บนคอลัมน์ที่เป็นส่วนหนึ่งของตารางที่กําหนดปฏิทิน แต่ไม่ได้ติดแท็กในปฏิทินนั้นจะถูกเก็บไว้
Note
เราขอแนะนําให้คุณเชื่อมโยงเฉพาะคอลัมน์ในปฏิทินที่คุณต้องการใช้ในการคํานวณข่าวกรองเวลา
คอลัมน์หลักเทียบกับคอลัมน์ที่เกี่ยวข้อง
คอลัมน์หลักเป็นสิ่งจําเป็นสําหรับแต่ละประเภท เมื่อใดก็ตามที่คอลัมน์นั้นหรือคอลัมน์ที่เกี่ยวข้องใดๆ ที่กําหนดให้กับประเภทเดียวกันในปฏิทินที่อ้างอิงอยู่ในบริบทหรือประเภทที่จําเป็นในการคํานวณ Power BI จะใช้คอลัมน์หลัก นอกจากนี้ คอลัมน์หลักจะใช้สําหรับการเรียงลําดับ ถ้าค่าในคอลัมน์หลักไม่อนุญาตให้เรียงลําดับได้ตามที่คาดไว้ คุณสามารถ กําหนดค่าคอลัมน์หลักเพื่อเรียงลําดับตามคอลัมน์อื่น หรือใช้คอลัมน์อื่นและทําให้คอลัมน์เดิมเป็นคอลัมน์ที่เกี่ยวข้อง ตัวอย่างเช่น คอลัมน์ที่มีข้อมูลข้อความที่มีหมายเลขเดือนและปีในรูปแบบ mm-yyyy (นั่นคือ 01-2024, และ 02-2024อื่นๆ) จะเรียงลําดับไม่ถูกต้องในหลายปี แต่คอลัมน์ที่ใช้รูปแบบจะ yyyy-mm :
คุณสามารถกําหนดคอลัมน์ที่เกี่ยวข้องเป็นศูนย์หรือมากกว่าให้กับประเภทได้
Validation
การตรวจสอบและทดสอบปฏิทินของคุณเป็นสิ่งสําคัญ เพื่อให้คุณแน่ใจว่าตรงกับความต้องการของคุณ การตรวจสอบความถูกต้องที่นําเสนอใน Power BI มีทั้งการตรวจสอบความถูกต้องแบบเรียลไทม์และการตรวจสอบความถูกต้องแบบออฟไลน์
Note
คุณสามารถบันทึกปฏิทินของคุณได้แม้จะมีข้อผิดพลาดในการตรวจสอบความถูกต้องแบบออฟไลน์ แต่ขอแนะนําให้แก้ไขก่อน ต้องแก้ไขความล้มเหลวในการตรวจสอบความถูกต้องแบบเรียลไทม์เพื่อบันทึก
การตรวจสอบความถูกต้องแบบเรียลไทม์
การตรวจสอบความถูกต้องแบบเรียลไทม์ที่ดําเนินการในปฏิทินคือ:
- ชื่อปฏิทินที่ไม่ซ้ํากัน แต่ละปฏิทินต้องมีชื่อที่ไม่ซ้ํากันในแบบจําลองความหมาย
- การเชื่อมโยงเดียวต่อปฏิทิน คอลัมน์ต้องไม่อยู่ในหมวดหมู่มากกว่าหนึ่งประเภทในปฏิทินเดียวกัน
- เอกลักษณ์ของช่วงเวลา หมวดหมู่ที่กําหนดควรระบุช่วงเวลาที่ไม่ซ้ํากัน
- การจัดหมวดหมู่ที่สอดคล้องกัน สิ่งนี้ทําให้มั่นใจได้ว่าคอลัมน์จะเชื่อมโยงกับหมวดหมู่เดียวกันในปฏิทิน
เอกลักษณ์ของช่วงเวลา
ควรมีเส้นทางในการระบุช่วงเวลาสําหรับประเภทที่กําหนดโดยไม่ซ้ํากันเสมอ
เมื่อใดก็ตามที่คุณเพิ่ม ประเภทบางส่วน Power BI จะตรวจสอบว่าการรวมกันของประเภททั้งหมดหรือบางส่วนจะถูกแท็กในปฏิทินเดียวกันด้วย หากไม่เป็นเช่นนั้น จะมีคําเตือนปรากฏขึ้น
ตัวอย่างเช่น เมื่อตั้งค่าปฏิทินสําหรับการคํานวณตามสัปดาห์ ให้แน่ใจว่าได้กําหนดคอลัมน์หลักอย่างน้อยหนึ่งคอลัมน์ให้กับชุดประเภทใดชุดหนึ่งต่อไปนี้
- Week
- สัปดาห์ของปีปี
- สัปดาห์ของไตรมาส ไตรมาส
- สัปดาห์ของไตรมาส ไตรมาสของปี ปี
- สัปดาห์ของเดือนเดือน
- สัปดาห์ของเดือน, เดือนของปี, ปี
- สัปดาห์ของเดือน, เดือนของไตรมาส, ไตรมาส
- สัปดาห์ของเดือน, เดือนของไตรมาส, ไตรมาสของปี, ปี
การจัดหมวดหมู่ที่สอดคล้องกัน
คอลัมน์ต้องมีหมวดหมู่ที่สอดคล้องกันในปฏิทิน คุณไม่สามารถกําหนดคอลัมน์เดียวกันให้กับประเภทต่างๆ เช่น ปีไตรมาสของปี หรือ เวลาที่เกี่ยวข้องกับปฏิทิน ที่แยกต่างหากได้
การตรวจสอบความถูกต้องแบบออฟไลน์
การตรวจสอบความถูกต้องแบบออฟไลน์อาจใช้เวลานานเมื่อเข้าถึงข้อมูลตาราง ดังนั้นจึงไม่ทํางานโดยอัตโนมัติในทางตรงกันข้ามกับ การตรวจสอบความถูกต้องแบบเรียลไทม์ เมื่อต้องการเรียกใช้การตรวจสอบความถูกต้อง ให้เลือก ตรวจสอบความถูกต้องของข้อมูล:
การตรวจสอบความถูกต้องแบบออฟไลน์จะตรวจสอบกฎต่อไปนี้และส่งคืนคําเตือนหากกฎใดในปฏิทินของคุณเป็นโมฆะ:
- คอลัมน์ที่เชื่อมโยงกับประเภทไม่มีค่าว่าง
- หมวดหมู่ระดับที่สูงขึ้นและระดับล่างมีอัตราส่วนคาร์ดินาลลิตี้หนึ่งต่อกลุ่ม ตัวอย่างเช่น คอลัมน์ที่เชื่อมโยงกับประเภท ปี ควรมีคาร์ดินาลลิตี้แบบหนึ่งต่อกลุ่มที่มีคอลัมน์ที่เชื่อมโยงกับประเภท เดือน
- คอลัมน์ที่เชื่อมโยงกับประเภทในระดับเดียวกันมีอัตราส่วนคาร์ดินาลลิตี้หนึ่งต่อหนึ่ง ตัวอย่างเช่น คอลัมน์ที่เชื่อมโยงกับประเภท เดือน ควรมีคาร์ดินาลลิตี้แบบหนึ่งต่อหนึ่งกับการรวมกันของคอลัมน์ที่เกี่ยวข้องกับประเภท เดือนของปี และ ปี
- คอลัมน์หลักและคอลัมน์ที่เกี่ยวข้องที่กําหนดให้กับประเภทเดียวกันมีอัตราส่วนคาร์ดินาลลิตี้หนึ่งต่อหนึ่ง ตัวอย่างเช่น เมื่อกําหนดให้กับประเภท เดือน คอลัมน์หลัก เดือน และคอลัมน์ที่เกี่ยวข้อง EnglishMonthName ควรมีคาร์ดินาลลิตี้แบบหนึ่งต่อหนึ่ง
ทํางานกับปฏิทิน
เมื่อกําหนดปฏิทินแล้ว คุณสามารถอ้างถึงปฏิทินได้ในฟังก์ชันข่าวกรองเวลา ตัวอย่างเช่น การวัดผลต่อไปนี้จะคํานวณมูลค่ารวมตั้งแต่เดือนจนถึงปัจจุบันของ Total Quantity เทียบกับปฏิทิน ISO-454 :
Total Quantity MTD ISO-454 = TOTALMTD ( [Total Quantity], 'ISO-454' )
หากไม่ได้กําหนดปฏิทินและแสดงข้อผิดพลาด ให้ทําดังนี้
อย่างไรก็ตาม แม้ว่าจะมีการกําหนดปฏิทิน หน่วยวัดอาจยังคงส่งกลับข้อผิดพลาด กรณีนี้จะเกิดขึ้นหากฟังก์ชันที่ใช้คาดว่าประเภทจะปรากฏในปฏิทินและปฏิทินไม่มีประเภทนั้น ตัวอย่างเช่น TOTALWTD คาดว่าหมวดหมู่ที่เฉพาะเจาะจงจะปรากฏในปฏิทิน หากไม่เป็นเช่นนั้น ระบบจะส่งคืนข้อผิดพลาดดังนี้
ฟังก์ชันข่าวกรองเวลาและหมวดหมู่ที่จําเป็น
ฟังก์ชันข่าวกรองเวลาจํานวนมากต้องการประเภทที่เพียงพอที่จะรวมไว้ในปฏิทินที่อ้างอิงในการเรียกใช้ฟังก์ชัน เพื่อให้ Power BI สามารถระบุหน่วยเวลาที่เฉพาะเจาะจงได้ กล่าวอีกนัยหนึ่ง Power BI จําเป็นต้องสามารถ "เดินขึ้น" จากระดับที่การคํานวณจะดําเนินการตลอดทางไปยังแต่ละปี ตัวอย่างเช่น เมื่อทําการคํานวณในไตรมาส ตัวอย่างเช่น ใช้TOTALQTDการกําหนดประเภทไตรมาส หรือกําหนดทั้งไตรมาสของปีและปีในปฏิทินตามที่กําหนดโดยการตรวจสอบความถูกต้องของความไม่ซ้ํากันของรอบระยะเวลา
Note
สําหรับฟังก์ชันบางฟังก์ชัน ชื่อของฟังก์ชันจะบ่งบอกถึงระดับที่การคํานวณดําเนินการ (เช่น TOTALYTD) ในขณะที่ฟังก์ชันอื่นๆ จะขึ้นอยู่กับพารามิเตอร์และบริบท (เช่น DATEADD)
การเคลียร์บริบท
ฟังก์ชันข่าวกรองเวลาทํางานโดยเริ่มต้นที่จุดหนึ่ง จากนั้นดําเนินการบางอย่างเพื่อให้ได้จุดเวลาที่แตกต่างกัน โดยปกติแล้ว จุดเริ่มต้นอาจขัดแย้งกับผลลัพธ์นี้ จึงทําให้เกิดจุดตัดของบริบทตัวกรอง ซึ่งโดยค่าเริ่มต้น จะให้ผลลัพธ์บางส่วนหรือว่างเปล่า ตัวอย่างเช่น พิจารณาสถานการณ์ต่อไปนี้
คําจํากัดความของปฏิทิน
เรามีปฏิทินเกรกอเรียนอย่างง่ายที่ติดแท็กสามหมวดหมู่ ซึ่งกําหนดเป็น:
| ประเภท | คอลัมน์หลัก |
|---|---|
| Year | Year |
| เดือนของปี | เดือนของปี |
| ไตรมาส | ไตรมาส |
คําจํากัดความของการวัดผล
มีการกําหนดมาตรการพื้นฐานสองตัว: การวัดหนึ่งเพื่อคํานวณยอดขายรวม และอีกหน่วยหนึ่งเพื่อคํานวณยอดขายรวมจากไตรมาสก่อนหน้า:
[TotalSales] = CALCULATE ( SUM( FactInternetSales[SalesAmount] ) )
[LastQuarterSales] = CALCULATE ( [TotalSales], DATEADD( GregorianCalendar, -1, QUARTER ) )
ตัวอย่าง: วิธีการทํางานของการล้างบริบท
วิชวลตารางของเราเรียกดูที่ความละเอียดของเดือนโดยใช้คอลัมน์ Year และ MonthOfYear :
| Year | เดือนของปี | ยอดขายรวม | ไตรมาสที่แล้วยอดขาย |
|---|---|---|---|
| 2011 | 1 | 10 | |
| 2011 | 2 | 20 | |
| 2011 | 3 | 30 | |
| 2011 | 4 | 40 | 10 |
| 2011 | 5 | 50 | 20 |
ในตารางนี้ แถวที่เป็นตัวหนากําลังเรียกดูในระดับเดือนสําหรับเดือนเมษายน 2011 การวัดผลทั้งหมดในแถวนี้จะได้รับการประเมินภายใต้บริบทตัวกรองของ [Year] == 2011 และ [MonthOfYear] == 4
ตามที่คาดไว้ TotalSales ที่นี่คํานวณเป็นยอดขายรวมสําหรับเดือนเมษายน 2011
LastQuarterSales จะคํานวณ TotalSales ในทํานองเดียวกัน แต่ให้ตัวกรองพิเศษที่จัดทําโดย DATEADD ฟังก์ชันตามปฏิทิน
สําหรับแถว DATEADD นี้จะมีจุดเริ่มต้นเริ่มต้นในช่วงเวลาของเดือนเมษายน 2011 และจะให้จุดเวลาที่ตรงกับหนึ่งไตรมาสที่แล้ว: มกราคม 2011 ด้วยเหตุนี้ เราอาจคาดหวังว่า TotalSales นี้จะถูกคํานวณภายใต้บริบทตัวกรองสองบริบทต่อไปนี้:
- จัดทําโดยคอลัมน์การเรียกดูของแถวปัจจุบัน:
{ [Year] == 2011, [MonthOfYear] == 4 }(เทียบเท่ากับเมษายน 2011) - จัดทําโดย DATEADD ตัวกรอง:
{ [Year] == 2011, [MonthOfYear] == 1 }(เทียบเท่ามกราคม 2011)
เห็นได้ชัดว่าบริบทตัวกรองทั้งสองนี้จะขัดแย้งกัน - เราไม่สามารถประเมินยอดขายรวมที่ระบุในเดือนปัจจุบันเป็นทั้งเดือนมกราคม 2011 และ เมษายน 2011 จุดตัดดังกล่าวจะไม่ให้ผลลัพธ์
อย่างไรก็ตาม นี่ไม่ใช่สิ่งที่เกิดขึ้น ฟังก์ชันข่าวกรองเวลาตามปฏิทินจะระบุคอลัมน์ของประเภทที่อาจส่งผลให้เกิดข้อขัดแย้ง ตามการดําเนินการเวลาที่ฟังก์ชันดําเนินการ ในกรณีนี้ ให้DATEADDทํากะที่ระดับไตรมาส ฟังก์ชันระบุว่าทั้งประเภทปีและเดือนของปีอาจเปลี่ยนแปลงอันเป็นผลมาจากการเปลี่ยนแปลงในคอลัมน์ของประเภทไตรมาส ดังนั้น ฟังก์ชันจะล้างบริบทตัวกรองในคอลัมน์ ทั้งหมด (ทั้งคอลัมน์หลักและคอลัมน์ที่เกี่ยวข้อง) ที่ติดแท็กไปยังหมวดหมู่เหล่านั้น
กล่าวอีกนัยหนึ่งเราสามารถพูดได้ว่าหมวดหมู่ปีและเดือนของปีเป็นการพึ่งพาของหมวดหมู่ไตรมาส ในทางกลับกัน เราสามารถพูดได้ว่าหมวดหมู่ไตรมาสขึ้นอยู่กับหมวดหมู่ปีและเดือนของปี
วิธีการทํางานของการล้างบริบท
ไดอะแกรมนี้จัดทําขึ้นเพื่อให้เห็นภาพการพึ่งพาระหว่างหมวดหมู่เวลาต่างๆ ได้ดียิ่งขึ้น แต่ละหมวดหมู่ในตาข่ายนี้แสดงถึงคอลัมน์ทั้งหมด (หลักและที่เกี่ยวข้อง) ที่ติดแท็กในหมวดหมู่นั้น หมวดหมู่เชื่อมต่อกับการพึ่งพาผ่านลูกศร ตัวอย่างเช่น "เดือน" จะขึ้นอยู่กับ "ปี", "ไตรมาสของปี", "เดือนของไตรมาส", "ไตรมาส" และ "เดือนของปี"
เมื่อมีการตั้งค่าบริบทในคอลัมน์หรือ จัดเรียงตามคอลัมน์ ที่เกี่ยวข้องซึ่งติดแท็กในปฏิทิน บริบทตัวกรองก่อนหน้าจะถูกล้างเมื่อ:
- การ พึ่งพา หมวดหมู่ทั้งหมดของ X นี่ถือได้ว่าเป็นหมวดหมู่ทั้งหมดที่อยู่เหนือ X
- การ ขึ้นต่อกัน ของหมวดหมู่ทั้งหมดของทั้ง X และการพึ่งพา (นั่นคือจาก 1. ด้านบน) นี่ถือได้ว่าเป็นหมวดหมู่ทั้งหมดด้านล่าง X และหมวดหมู่ทั้งหมดใน 1 ข้างต้น
Note
การล้างบริบทจะเกิดขึ้นบนคอลัมน์ที่ติดแท็กในปฏิทินหรือคอลัมน์เรียงลําดับที่เกี่ยวข้อง
คอลัมน์ที่เกี่ยวข้องกับเวลา
ฟังก์ชันข่าวกรองเวลาส่วนใหญ่ ยกเว้น DATEADD และ SAMEPERIODLASTYEARจะล้างบริบทในคอลัมน์ที่เกี่ยวข้องกับเวลาทั้งหมดและคอลัมน์เรียงลําดับที่เกี่ยวข้อง
พฤติกรรมข้ามปฏิทิน
หากมีปฏิทินหลายรายการที่กําหนดไว้ในตารางเดียวกัน กระบวนการเหล่านี้จะเสร็จสมบูรณ์สําหรับ ทุก ปฏิทินที่กําหนดไว้ในตาราง ซึ่งรวมถึงข้อสังเกตเกี่ยวกับการล้างบริบทของคอลัมน์ที่เกี่ยวข้องกับเวลา กล่าวอีกนัยหนึ่ง สมมติว่าตารางกําหนดปฏิทินสามปฏิทิน: Calendar1, Calendar2 และ Calendar3 หากบริบทตัวกรองถูกตั้งค่าในหมวดหมู่ "X" ใน Calendar1 กระบวนการข้างต้นจะดําเนินการในปฏิทินทั้งสาม
ตัวอย่าง: ตั้งค่าตัวกรองใน "ไตรมาส"
ถ้าบริบทตัวกรองถูกตั้งค่าในหมวดหมู่ "ไตรมาส" กระบวนการจะเป็นดังนี้
ขั้นแรก จะพิจารณาการพึ่งพาทั้งหมดของหมวดหมู่ "ไตรมาส"
ต่อไป ผู้อยู่ในอุปการะทั้งหมดของ "ไตรมาส" และการพึ่งพาจะถูกพิจารณา
สุดท้ายผลลัพธ์สุดท้ายจะเป็นดังนี้ หมวดหมู่สีแดงทั้งหมดจะถูกลบบริบทตัวกรองก่อนหน้าออก และบริบทใหม่จะถูกตั้งค่าเป็นไตรมาส
สคริปต์ TMDL สําหรับปฏิทิน
createOrReplace
table Date
lineageTag: xyz
column Date
dataType: dateTime
formatString: Long Date
lineageTag: abc
summarizeBy: none
sourceColumn: Date
column Year
dataType: string
lineageTag: abc
summarizeBy: none
sourceColumn: Year
annotation SummarizationSetBy = Automatic
column Month
dataType: string
lineageTag: def
summarizeBy: none
sourceColumn: Month
annotation SummarizationSetBy = Automatic
column MonthName
dataType: string
lineageTag: ghi
summarizeBy: none
sourceColumn: MonthName
sortByColumn: SortByMonth
changedProperty = SortByColumn
annotation SummarizationSetBy = Automatic
column DutchMonthName
dataType: string
lineageTag: jkl
summarizeBy: none
sourceColumn: DutchMonthName
annotation SummarizationSetBy = Automatic
column 'Holiday Name'
dataType: string
lineageTag: mno
summarizeBy: none
sourceColumn: Holiday Name
annotation SummarizationSetBy = Automatic
column IsWorkingDay
dataType: string
lineageTag: pqr
summarizeBy: none
sourceColumn: IsWorkingDay
annotation SummarizationSetBy = Automatic
...
calendar 'Demo Calendar'
lineageTag: def
calendarColumnGroup = year
primaryColumn: Year
calendarColumnGroup = month
primaryColumn: Month
associatedColumn: DutchMonthName
associatedColumn: MonthName
calendarColumnGroup
column: 'Holiday Name'
column: isWorkingDay
Note
โปรดสังเกตว่าถ้าคุณไม่ได้ระบุหมวดหมู่ใด ๆ สําหรับ calendarColumnGroup ใน TMDL คอลัมน์จะถูกแท็กว่าเกี่ยวข้องกับเวลา ในตัวอย่างนี้ ชื่อวันหยุด และ isWorkingDay เป็นคอลัมน์ที่เกี่ยวข้องกับเวลาในปฏิทินสาธิต
รวมทุกอย่างเข้าด้วยกัน: ตัวอย่างการเปลี่ยนเวลา
ฟังก์ชันข่าวกรองเวลาบางฟังก์ชันจะเปลี่ยนบริบทเพียงด้านข้าง โดยพิจารณาจากคอลัมน์ทั้งหมด ในขณะที่ฟังก์ชันอื่นๆ จะทําการเลื่อนตามลําดับชั้น โดยจะเก็บหรือล้างบริบทตามว่าคอลัมน์ถูกแท็กในปฏิทินหรือไม่ ฟังก์ชันข่าวกรองเวลาสามารถแบ่งออกเป็นสองกลุ่มโดยพิจารณาว่าอนุญาตให้มีการเปลี่ยนแปลงตามลําดับชั้นหรือไม่:
- คงที่ ฟังก์ชันในกลุ่ม DATEADD นี้คือ และ SAMEPERIODLASTYEAR. ฟังก์ชันเหล่านี้อนุญาตให้มีการเลื่อนเวลาด้านข้างเท่านั้น และไม่ส่งคืนค่าจากระดับรายละเอียดที่แตกต่างกัน
- ยืดหยุ่น กลุ่มนี้ประกอบด้วยฟังก์ชันข่าวกรองเวลาอื่นๆ ทั้งหมด ฟังก์ชันเหล่านี้อนุญาตให้เปลี่ยนเวลาตามลําดับชั้น และขึ้นอยู่กับการตั้งค่าปฏิทิน สามารถส่งคืนผลลัพธ์จากระดับรายละเอียดที่แตกต่างกัน
เพื่อแสดงพฤติกรรมเหล่านี้ เรามาดูตัวอย่างโดยใช้แบบจําลองข้อมูลอย่างง่ายที่ประกอบด้วยสองตาราง สองปฏิทิน และห้าหน่วยวัด
ตารางและความสัมพันธ์
สําหรับตัวอย่างนี้ เรามีแบบจําลองข้อมูลอย่างง่ายดังต่อไปนี้:
| Table | Columns |
|---|---|
| วันที่ | ปี, IsWorkingDay, วันที่ |
| Sales | OrderKey, ปริมาณ, OrderDate |
ต่อไปนี้เป็นแถวตัวอย่างบางส่วนในตาราง วันที่ :
ต่อไปนี้เป็นแถวตัวอย่างบางส่วนในตาราง ยอดขาย :
ตาราง Sales และ Date จะสัมพันธ์กันใน OrderDate และ Date
ปฏิทิน
ในตาราง วันที่ เราได้กําหนดปฏิทินด้วยการแมปเหล่านี้:
| ชื่อปฏิทิน | ประเภท | คอลัมน์หลัก |
|---|---|---|
| คริสต์ศักราช | Year | Year |
| วันที่ | วันที่ | |
| เกรกอเรียนกับวันทํางาน | Year | Year |
| วันที่ | วันที่ | |
| ที่เกี่ยวข้องกับเวลา | ไอเอสเวิร์คกิ้งเดย์ |
คําจํากัดความ TMDL ที่เทียบเท่าของปฏิทินทั้งสองนี้คือ:
ref table Date
calendar 'Gregorian'
lineageTag: xyz
calendarColumnGroup = year
primaryColumn: Year
calendarColumnGroup = date
primaryColumn: Date
calendar 'GregorianWithWorkingDay'
lineageTag: dc4fc383-1661-4112-8afb-930d324fbb6e
calendarColumnGroup = year
primaryColumn: Year
calendarColumnGroup = date
primaryColumn: Date
calendarColumnGroup
column: IsWorkingDay
การวัด
บนตาราง ยอดขาย เรากําหนดหน่วยวัดต่อไปนี้:
Total Quantity = SUM ( 'Sales'[Order Quantity] )
OneYearAgoQuantity =
CALCULATE ( [Total Quantity], DATEADD ( 'Gregorian', -1, YEAR ) )
OneYearAgoQuantityTimeRelated =
CALCULATE ( [Total Quantity], DATEADD ( 'GregorianWithWorkingDay', -1, YEAR ) )
FullLastYearQuantity =
CALCULATE ( [Total Quantity], PARALLELPERIOD ( 'Gregorian', -1, YEAR ) )
FullLastYearQuantityTimeRelated =
CALCULATE ( [Total Quantity], PARALLELPERIOD ( 'GregorianWithWorkingDay', -1, YEAR )
)
ตัวอย่างการเลื่อนด้านข้าง
มาสร้างวิชวลที่แสดง Year, MonthOfYear, IsWorkingDay, Total Quantity, OneYearAgoQuantity และ OneYearAgoQuantityTimeRelated สําหรับปี 2024 และ 2025:
ค่าทั้งหมดสําหรับ OneYearAgoQuantity และ OneYearAgoQuantityTimeRelated สําหรับ 2025 ตรงกับ ปริมาณรวม จากหนึ่งปีก่อน (2024) สําหรับค่า IsWorkingDay เดียวกัน
นี่แสดงให้เห็นว่า DATEADD รักษาบริบทของคอลัมน์ใดๆ ในตาราง วันที่ ที่มีปฏิทินที่ใช้ โดยไม่คํานึงถึงว่าปฏิทินนั้นไม่ได้ถูกแท็กหรือถูกแท็กว่าเกี่ยวข้องกับเวลาในปฏิทินนั้น เนื่องจากใน คําจํากัดความของหน่วยวัด ของเราเราจึงแนะนําให้ DATEADD เลื่อนกลับไปหนึ่ง ปีคอลัมน์เดียวที่มีบริบทถูกเปลี่ยนคือคอลัมน์ที่เกี่ยวข้องกับหมวดหมู่ปี ไม่ว่าคอลัมน์ IsWorkingDay จะถูกแท็กในปฏิทินว่าเกี่ยวข้องกับเวลาหรือไม่ติดแท็กเลยก็ไม่ได้เปลี่ยนผลลัพธ์ ฟังก์ชันอื่น ๆ เพียงอย่างเดียวที่แสดงพฤติกรรม SAMEPERIODLASTYEARนี้คือ .
ตัวอย่างการเปลี่ยนตามลําดับชั้น
ตอนนี้ มาดูตัวอย่างที่คอลัมน์ถูกแท็กว่าเกี่ยวข้องกับเวลาหรือไม่นั้นจะเปลี่ยนผลลัพธ์อย่างแท้จริง
สําหรับสิ่งนี้ เราจะสร้างวิชวลเดียวกันกับในตัวอย่างก่อนหน้านี้ แต่คราวนี้เราจะใช้หน่วยวัด FullLastYearQuantity และ FullLastYearQuantityTimeRelated:
สิ่งนี้แสดงให้เห็นว่า PARALLELPERIOD จะรักษาบริบทของคอลัมน์ที่ไม่ได้ติดแท็กในปฏิทิน แต่จะล้างบริบทสําหรับคอลัมน์ที่ติดแท็กว่าเกี่ยวข้องกับเวลา FullLastYearQuantity ใช้ปฏิทิน เกรกอเรียน โดยที่ไม่ได้แท็ก IsWorkingDay ในปฏิทิน ในขณะที่ FullLastYearQuantityTimeRelated ใช้ปฏิทิน GregorianWithWorkingDay ที่ IsWorkingDay ถูกแท็กว่าเกี่ยวข้องกับเวลา ฟังก์ชั่นสติปัญญาตลอดเวลายกเว้น DATEADD และ SAMEPERIODLASTYEAR ทํางานในลักษณะนี้
โบนัส: หากคุณต้องการบังคับให้ฟังก์ชันเหล่านี้รักษาบริบทสําหรับคอลัมน์ที่เกี่ยวข้องกับเวลาด้วย VALUESคุณสามารถใช้:
FullLastYearQuantityTimeRelatedOverride =
CALCULATE ( [Total Quantity], PARALLELPERIOD ( 'GregorianWithWorkingDay', -1, YEAR ), VALUES('Date'[IsWorkingDay]) )
ในกรณีนี้ ให้FullLastYearQuantityTimeRelatedOverrideส่งกลับผลลัพธ์เดียวกันกับFullLastYearQuantity
บทสรุป
ตัวอย่างที่ซับซ้อนข้างต้นแสดงให้เห็นว่าฟังก์ชันข่าวกรองเวลาที่แตกต่างกันมีพฤติกรรมแตกต่างกันไปขึ้นอยู่กับว่าคอลัมน์ถูกแท็กว่าเกี่ยวข้องกับเวลาในปฏิทินหรือไม่ DATEADD และ SAMEPERIODLASTYEAR ทําการเลื่อนเวลาด้านข้างเท่านั้น ฟังก์ชันข่าวกรองเวลาอื่นๆ ทั้งหมดอนุญาตให้เปลี่ยนเวลาตามลําดับชั้น
ใช้กับ DATEADD ปฏิทิน
ฟังก์ชันนี้มีDATEADDพารามิเตอร์เฉพาะที่ช่วยให้สามารถควบคุมวิธีการเปลี่ยนได้อย่างละเอียดเมื่อการเลือกอยู่ในระดับที่ละเอียดกว่าระดับกะที่ระบุโดยintervalพารามิเตอร์ในDATEADD ตัวอย่างเช่น หากคุณแสดงข้อมูลในระดับวันที่ แต่ตั้งค่าintervalพารามิเตอร์เป็น DATEADDMONTH ตัวอย่างเช่น ในปฏิทินเกรกอเรียน เมื่อเปลี่ยนช่วงเวลาที่ครอบคลุมตั้งแต่วันที่ 3 ถึง 10 มีนาคม ต่อเดือน จะส่งผลให้วันที่ 3 ถึง 10 เมษายน อย่างไรก็ตาม เนื่องจากเดือนในปฏิทินเกรกอเรียนมีความยาวแตกต่างกันไป จึงอาจนําไปสู่ความคลุมเครือเมื่อเปลี่ยน ด้านล่างนี้คือตัวอย่างสถานการณ์สมมติตามปฏิทินเกรกอเรียน:
เปลี่ยนจากระยะเวลาที่สั้นลงเป็นระยะเวลาที่ยาวนานขึ้น
ตัวอย่างเช่น เลื่อนไปข้างหน้าหนึ่งเดือนด้วยการเลือกในเดือนกุมภาพันธ์ ดังนั้นเดือนเป้าหมายคือเดือนมีนาคม
คุณสามารถใช้ extension พารามิเตอร์เพื่อกําหนดวิธีดําเนินการกะได้:
| ค่าพารามิเตอร์ส่วนขยาย | คำอธิบาย | ผล |
|---|---|---|
precise |
สิ่งนี้จะรักษาช่วงวันที่เดิมอย่างเคร่งครัด | วันที่ 25-28 กุมภาพันธ์ ถูกเลื่อนเป็นวันที่ 25-28 มีนาคม |
extended |
อนุญาตให้ขยายกรอบเวลาในช่วงสิ้นเดือน | วันที่ 25-28 กุมภาพันธ์ ถูกเลื่อนเป็นวันที่ 25-31 มีนาคม |
เปลี่ยนจากระยะเวลาที่ยาวขึ้นเป็นระยะเวลาที่สั้นลง
ตัวอย่างเช่น เลื่อนถอยหลังหนึ่งเดือนด้วยการเลือกในเดือนมีนาคม ดังนั้นเดือนเป้าหมายคือเดือนกุมภาพันธ์
คุณสามารถใช้ truncation พารามิเตอร์เพื่อกําหนดวิธีดําเนินการกะได้:
| ค่าพารามิเตอร์การตัดทอน | คำอธิบาย | ผล |
|---|---|---|
anchored |
ยึดผลลัพธ์ไปยังวันที่สุดท้ายที่ถูกต้องของเดือนที่เล็กกว่า | วันที่ 31 มีนาคมถูกเลื่อนเป็นวันที่ 28 กุมภาพันธ์ (หรือ 29 ในปีอธิกสุรทิน) |
blank |
เมื่อไม่มีวันที่เลื่อน ให้ส่งคืนค่าว่าง | การเลื่อนวันที่ 31 มีนาคมกลับไปหนึ่งเดือนจะกลับ ว่างเปล่า (เนื่องจากไม่มีวันที่ 31 กุมภาพันธ์) |
ข้อควรพิจารณาในการทํางานกับข่าวกรองเวลาตามปฏิทิน
- การคํานวณข่าวกรองเวลาบนตารางข้อเท็จจริงที่กําหนดปฏิทินและอยู่ภายใต้กฎ การรักษาความปลอดภัยระดับแถว (RLS) และอาจนําไปสู่ผลลัพธ์ที่ไม่คาดคิด
- ประสิทธิภาพของคุณลักษณะการแสดงตัวอย่างนี้ไม่ได้เป็นตัวแทนของผลิตภัณฑ์ขั้นสุดท้าย
- คุณยังไม่สามารถเขียนปฏิทินในบริการของ Power BI ได้
- คุณไม่ควรใช้ตาราง วันที่/เวลาอัตโนมัติ กับปฏิทินที่กําหนดเอง
- คุณไม่สามารถใช้ปฏิทินกับโมเดลที่เชื่อมต่อแบบสดหรือแบบรวมได้
- เราขอแนะนําให้คุณเชื่อมโยงเฉพาะคอลัมน์ในปฏิทินที่คุณต้องการใช้ในการคํานวณข่าวกรองเวลา
- ปฏิทินอยู่ภายใต้การตรวจสอบความถูกต้องทั้งแบบเรียลไทม์และออฟไลน์ คุณสามารถบันทึกปฏิทินของคุณได้แม้จะมีข้อผิดพลาดในการตรวจสอบความถูกต้องแบบออฟไลน์ แต่ขอแนะนําให้แก้ไขก่อน ต้องแก้ไขความล้มเหลวในการตรวจสอบความถูกต้องแบบเรียลไทม์เพื่อบันทึก
- ปฏิทินแต่ละรายการต้องมีชื่อที่ไม่ซ้ํากันภายในแบบจําลองข้อมูล
- ตารางเดียวสามารถมีปฏิทินได้หลายรายการ
- ตารางที่มีปฏิทินต้องมีคอลัมน์น้อยกว่า 200 คอลัมน์ ถ้าตารางมีมากกว่า 20,000 แถว การตรวจสอบความถูกต้องจะไม่พร้อมใช้งาน แต่คุณยังคงสามารถเพิ่มปฏิทินได้
- ปฏิทินต้องกําหนดคอลัมน์หลักให้กับหมวดหมู่อย่างน้อยหนึ่งคอลัมน์
- ปฏิทินสามารถกําหนดคอลัมน์จากตารางของตัวเองให้กับประเภทได้เท่านั้น
- แต่ละประเภทควรมีคอลัมน์หลักและสามารถกําหนดคอลัมน์ที่เกี่ยวข้องเป็นศูนย์หรือมากกว่าได้
- DATEADD มีพารามิเตอร์ใหม่เพื่อควบคุมลักษณะการทํางานของส่วนขยายและส่วนขยาย ซึ่งไม่รู้จักใน IntelliSense
- คอลัมน์ใดก็ตามสามารถแม็ปกับประเภทเดียวเท่านั้น
- คุณไม่สามารถซ้อนฟังก์ชันข่าวกรองเวลาที่ใช้ปฏิทินได้ ตัวอย่างเช่น คําสั่ง DAX ต่อไปนี้ไม่ได้รับการสนับสนุน:
ThisIsNotSupported = PREVIOUSDAY ( PREVIOUSMONTH( 'Calendar' ) )
คุณสามารถทําสิ่งต่อไปนี้แทนได้
ThisWorks = CALCULATETABLE ( PREVIOUSDAY ( 'Calendar' ), PREVIOUSMONTH( 'Calendar' ) )
สร้างตารางวันที่โดยใช้เครื่องมือในตัว
ตัวอย่างต่อไปนี้สร้างตารางวันที่ตั้งแต่วันที่ 1 มกราคม 2010 ถึง 31 ธันวาคม 2030 โดยใช้ Power Query M หรือ DAX ประกอบด้วยคอลัมน์ต่อไปนี้: ปี, หมายเลขเดือน, ชื่อเดือน, เดือนปี, ไตรมาส, ไตรมาสปี, วัน และวันที่
Power Query M
let
StartDate = #date(2010, 1, 1),
EndDate = #date(2030, 12, 31),
NumberOfDays = Duration.Days(EndDate - StartDate) + 1,
DateList = List.Dates(StartDate, NumberOfDays, #duration(1,0,0,0)),
DateTable = Table.FromList(DateList, Splitter.SplitByNothing(), {"Date"}),
AddYear = Table.AddColumn(DateTable, "Year", each Date.Year([Date]), Int64.Type),
AddMonthNumber = Table.AddColumn(AddYear, "Month Number", each Date.Month([Date]), Int64.Type),
AddMonthName = Table.AddColumn(AddMonthNumber, "Month Name", each Date.ToText([Date], "MMMM"), type text),
AddMonthYear = Table.AddColumn(AddMonthName, "Month Year", each Date.ToText([Date], "MMM yyyy"), type text),
AddQuarter = Table.AddColumn(AddMonthYear, "Quarter", each "Q" & Text.From(Date.QuarterOfYear([Date])), type text),
AddYearQuarter = Table.AddColumn(AddQuarter, "Year Quarter", each Text.From(Date.Year([Date])) & " Q" & Text.From(Date.QuarterOfYear([Date])), type text),
AddDay = Table.AddColumn(AddYearQuarter, "Day", each Date.Day([Date]), Int64.Type)
in
AddDay
DAX
DateTable =
ADDCOLUMNS (
CALENDAR ( DATE ( 2010, 1, 1 ), DATE ( 2030, 12, 31 ) ),
"Year", YEAR ( [Date] ),
"Month Number", MONTH ( [Date] ),
"Month Name", FORMAT ( [Date], "MMMM" ),
"Month Year", FORMAT ( [Date], "MMM YYYY" ),
"Quarter", "Q" & FORMAT ( [Date], "Q" ),
"Year Quarter",
FORMAT ( [Date], "YYYY" ) & " Q"
& FORMAT ( [Date], "Q" ),
"Day", DAY ( [Date] ),
"Date", [Date]
)
สําหรับข้อมูลเพิ่มเติมและตัวเลือกเพิ่มเติม ให้ดูที่ ตารางวันที่
เนื้อหาที่เกี่ยวข้อง
สําหรับข้อมูลเพิ่มเติมที่เกี่ยวข้องกับบทความนี้ โปรดดูแหล่งข้อมูลต่อไปนี้: