แชร์ผ่าน


ใช้การคํานวณตามเวลาใน Power BI

Power BI มีเครื่องมือหลายอย่างเพื่อทําการคํานวณตามเวลา ซึ่งอาศัยตารางวันที่อัตโนมัติหรือตารางวันที่ที่คุณเพิ่ม

เราขอแนะนําให้ใช้ ข่าวกรองเวลาตามปฏิทิน (พรีวิว) เนื่องจากให้ประสิทธิภาพที่ดีที่สุดและช่วงความยืดหยุ่นสูงสุดเพื่อให้ตรงกับปฏิทินใดๆ

ตารางนี้เปรียบเทียบเครื่องมือสามอย่างที่มีให้:

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

Note

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

วันที่/เวลาอัตโนมัติ

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

Note

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

เพิ่มตารางวันที่

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

มีหลายวิธีในการสร้างตารางดังกล่าว ได้แก่:

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

ทํางานกับการคํานวณตามเวลา

สมมติว่าคุณไม่ได้ใช้ วันที่/เวลาอัตโนมัติ มีสองวิธีในการทํางานกับ ฟังก์ชันข่าวกรองเวลาใน 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 ที่ปรับปรุงแล้ว

  1. ใน Power BI Desktop ไปที่ ตัวเลือกไฟล์ > และการตั้งค่า >> ตัวเลือก คุณลักษณะการแสดงตัวอย่าง
  2. เลือกตัวอย่าง ข่าวกรองเวลา DAX ที่ปรับปรุงแล้ว
  3. เลือก ตกลง
  4. รีสตาร์ท 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 :

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

คุณสามารถกําหนดคอลัมน์ที่เกี่ยวข้องเป็นศูนย์หรือมากกว่าให้กับประเภทได้

Validation

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

Note

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

การตรวจสอบความถูกต้องแบบเรียลไทม์

การตรวจสอบความถูกต้องแบบเรียลไทม์ที่ดําเนินการในปฏิทินคือ:

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

เอกลักษณ์ของช่วงเวลา

ควรมีเส้นทางในการระบุช่วงเวลาสําหรับประเภทที่กําหนดโดยไม่ซ้ํากันเสมอ

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

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

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

  • Week
  • สัปดาห์ของปีปี
  • สัปดาห์ของไตรมาส ไตรมาส
  • สัปดาห์ของไตรมาส ไตรมาสของปี ปี
  • สัปดาห์ของเดือนเดือน
  • สัปดาห์ของเดือน, เดือนของปี, ปี
  • สัปดาห์ของเดือน, เดือนของไตรมาส, ไตรมาส
  • สัปดาห์ของเดือน, เดือนของไตรมาส, ไตรมาสของปี, ปี

การจัดหมวดหมู่ที่สอดคล้องกัน

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

การตรวจสอบความถูกต้องแบบออฟไลน์

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

สกรีนช็อตแสดงหน้าจอการสร้างและแก้ไขปฏิทิน ปุ่มตรวจสอบความถูกต้องของข้อมูลจะถูกเน้น

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

  • คอลัมน์ที่เชื่อมโยงกับประเภทไม่มีค่าว่าง
  • หมวดหมู่ระดับที่สูงขึ้นและระดับล่างมีอัตราส่วนคาร์ดินาลลิตี้หนึ่งต่อกลุ่ม ตัวอย่างเช่น คอลัมน์ที่เชื่อมโยงกับประเภท ปี ควรมีคาร์ดินาลลิตี้แบบหนึ่งต่อกลุ่มที่มีคอลัมน์ที่เชื่อมโยงกับประเภท เดือน
  • คอลัมน์ที่เชื่อมโยงกับประเภทในระดับเดียวกันมีอัตราส่วนคาร์ดินาลลิตี้หนึ่งต่อหนึ่ง ตัวอย่างเช่น คอลัมน์ที่เชื่อมโยงกับประเภท เดือน ควรมีคาร์ดินาลลิตี้แบบหนึ่งต่อหนึ่งกับการรวมกันของคอลัมน์ที่เกี่ยวข้องกับประเภท เดือนของปี และ ปี
  • คอลัมน์หลักและคอลัมน์ที่เกี่ยวข้องที่กําหนดให้กับประเภทเดียวกันมีอัตราส่วนคาร์ดินาลลิตี้หนึ่งต่อหนึ่ง ตัวอย่างเช่น เมื่อกําหนดให้กับประเภท เดือน คอลัมน์หลัก เดือน และคอลัมน์ที่เกี่ยวข้อง EnglishMonthName ควรมีคาร์ดินาลลิตี้แบบหนึ่งต่อหนึ่ง

ทํางานกับปฏิทิน

เมื่อกําหนดปฏิทินแล้ว คุณสามารถอ้างถึงปฏิทินได้ในฟังก์ชันข่าวกรองเวลา ตัวอย่างเช่น การวัดผลต่อไปนี้จะคํานวณมูลค่ารวมตั้งแต่เดือนจนถึงปัจจุบันของ Total Quantity เทียบกับปฏิทิน ISO-454 :

Total Quantity MTD ISO-454 = TOTALMTD ( [Total Quantity], 'ISO-454' )

หากไม่ได้กําหนดปฏิทินและแสดงข้อผิดพลาด ให้ทําดังนี้

สกรีนช็อตที่แสดงการวัดผลโดยใช้ฟังก์ชันที่มี TOTALMTD พารามิเตอร์ปฏิทินไปยังปฏิทินที่ไม่มีอยู่

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

สกรีนช็อตที่แสดงการวัดผลโดยใช้ 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ทํากะที่ระดับไตรมาส ฟังก์ชันระบุว่าทั้งประเภทปีและเดือนของปีอาจเปลี่ยนแปลงอันเป็นผลมาจากการเปลี่ยนแปลงในคอลัมน์ของประเภทไตรมาส ดังนั้น ฟังก์ชันจะล้างบริบทตัวกรองในคอลัมน์ ทั้งหมด (ทั้งคอลัมน์หลักและคอลัมน์ที่เกี่ยวข้อง) ที่ติดแท็กไปยังหมวดหมู่เหล่านั้น

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

วิธีการทํางานของการล้างบริบท

ไดอะแกรมโครงสร้างตาข่ายของหมวดหมู่ปฏิทินทั้งหมด

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

เมื่อมีการตั้งค่าบริบทในคอลัมน์หรือ จัดเรียงตามคอลัมน์ ที่เกี่ยวข้องซึ่งติดแท็กในปฏิทิน บริบทตัวกรองก่อนหน้าจะถูกล้างเมื่อ:

  1. การ พึ่งพา หมวดหมู่ทั้งหมดของ X นี่ถือได้ว่าเป็นหมวดหมู่ทั้งหมดที่อยู่เหนือ X
  2. การ ขึ้นต่อกัน ของหมวดหมู่ทั้งหมดของทั้ง X และการพึ่งพา (นั่นคือจาก 1. ด้านบน) นี่ถือได้ว่าเป็นหมวดหมู่ทั้งหมดด้านล่าง X และหมวดหมู่ทั้งหมดใน 1 ข้างต้น

Note

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

ฟังก์ชันข่าวกรองเวลาส่วนใหญ่ ยกเว้น DATEADD และ SAMEPERIODLASTYEARจะล้างบริบทในคอลัมน์ที่เกี่ยวข้องกับเวลาทั้งหมดและคอลัมน์เรียงลําดับที่เกี่ยวข้อง

พฤติกรรมข้ามปฏิทิน

หากมีปฏิทินหลายรายการที่กําหนดไว้ในตารางเดียวกัน กระบวนการเหล่านี้จะเสร็จสมบูรณ์สําหรับ ทุก ปฏิทินที่กําหนดไว้ในตาราง ซึ่งรวมถึงข้อสังเกตเกี่ยวกับการล้างบริบทของคอลัมน์ที่เกี่ยวข้องกับเวลา กล่าวอีกนัยหนึ่ง สมมติว่าตารางกําหนดปฏิทินสามปฏิทิน: Calendar1, Calendar2 และ Calendar3 หากบริบทตัวกรองถูกตั้งค่าในหมวดหมู่ "X" ใน Calendar1 กระบวนการข้างต้นจะดําเนินการในปฏิทินทั้งสาม

ตัวอย่าง: ตั้งค่าตัวกรองใน "ไตรมาส"

ถ้าบริบทตัวกรองถูกตั้งค่าในหมวดหมู่ "ไตรมาส" กระบวนการจะเป็นดังนี้

  1. ขั้นแรก จะพิจารณาการพึ่งพาทั้งหมดของหมวดหมู่ "ไตรมาส"

    ตัวอย่างพฤติกรรมการล้างบริบทของตัวกรองที่เริ่มต้นจากประเภท ไตรมาส: การขึ้นต่อกัน

  2. ต่อไป ผู้อยู่ในอุปการะทั้งหมดของ "ไตรมาส" และการพึ่งพาจะถูกพิจารณา

    ตัวอย่างพฤติกรรมการล้างบริบทของตัวกรองโดยเริ่มจากประเภท ไตรมาส: ผู้อยู่ในอุปการะ

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

    ตัวอย่างพฤติกรรมการล้างบริบทของตัวกรองที่เริ่มจากหมวดหมู่ ไตรมาส: ผลลัพธ์

สคริปต์ 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

ต่อไปนี้เป็นแถวตัวอย่างบางส่วนในตาราง วันที่ : สกรีนช็อตแสดง 14 แถวแรกของตารางวันที่ตัวอย่าง ตารางกําหนด Date, Year และ IsWorkingDay คอลัมน์ วันที่ ประกอบด้วยวันที่ คอลัมน์ ปี เป็นค่าปี และคอลัมน์ IsWorkingDay เป็นคอลัมน์บูลีน (จริง/เท็จ) ที่ระบุว่าวันที่นั้นเป็นวันทําการหรือไม่

ต่อไปนี้เป็นแถวตัวอย่างบางส่วนในตาราง ยอดขาย : สกรีนช็อตที่แสดงเก้าแถวแรกของตารางยอดขายตัวอย่าง ตารางกําหนด OrderKey, OrderDate และ Order Quantity คอลัมน์ OrderKey ประกอบด้วยหมายเลขที่ไม่ซ้ํากันสําหรับใบสั่งขายแต่ละใบ OrderDate คือวันที่ที่เกี่ยวข้องกับยอดขายกับวันที่ และ ปริมาณใบสั่ง เป็นคอลัมน์ตัวเลขที่แสดงถึงจํานวนผลิตภัณฑ์สําหรับแต่ละใบสั่ง

ตาราง Sales และ Date จะสัมพันธ์กันใน OrderDate และ 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:

สกรีนช็อตแสดงวิชวลตารางที่แสดง Year, IsWorkingDay, Total Quantity, OneYearAgoQuantity และ OneYearAgoQuantityTimeRelated ค่าสําหรับ OneYearAgoQuantity และ OneYearAgoQuantityTimeRelated สําหรับปี 2025 ตรงกับค่าสําหรับ 2024 สําหรับค่า IsWorkingDay เดียวกัน

ค่าทั้งหมดสําหรับ OneYearAgoQuantity และ OneYearAgoQuantityTimeRelated สําหรับ 2025 ตรงกับ ปริมาณรวม จากหนึ่งปีก่อน (2024) สําหรับค่า IsWorkingDay เดียวกัน

นี่แสดงให้เห็นว่า DATEADD รักษาบริบทของคอลัมน์ใดๆ ในตาราง วันที่ ที่มีปฏิทินที่ใช้ โดยไม่คํานึงถึงว่าปฏิทินนั้นไม่ได้ถูกแท็กหรือถูกแท็กว่าเกี่ยวข้องกับเวลาในปฏิทินนั้น เนื่องจากใน คําจํากัดความของหน่วยวัด ของเราเราจึงแนะนําให้ DATEADD เลื่อนกลับไปหนึ่ง ปีคอลัมน์เดียวที่มีบริบทถูกเปลี่ยนคือคอลัมน์ที่เกี่ยวข้องกับหมวดหมู่ปี ไม่ว่าคอลัมน์ IsWorkingDay จะถูกแท็กในปฏิทินว่าเกี่ยวข้องกับเวลาหรือไม่ติดแท็กเลยก็ไม่ได้เปลี่ยนผลลัพธ์ ฟังก์ชันอื่น ๆ เพียงอย่างเดียวที่แสดงพฤติกรรม SAMEPERIODLASTYEARนี้คือ .

ตัวอย่างการเปลี่ยนตามลําดับชั้น

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

สําหรับสิ่งนี้ เราจะสร้างวิชวลเดียวกันกับในตัวอย่างก่อนหน้านี้ แต่คราวนี้เราจะใช้หน่วยวัด FullLastYearQuantity และ FullLastYearQuantityTimeRelated: สกรีนช็อตที่แสดงวิชวลตารางที่แสดง Year, IsWorkingDay, Total Quantity, FullLastYearQuantity และ FullLastYearQuantityTimeRelated ค่าสําหรับ FullLastYearQuantity 2025 ตรงกับค่าสําหรับปี 2024 สําหรับค่า IsWorkingDay เดียวกัน แต่ค่าสําหรับ FullLastYearQuantityTimeRelated จะเท่ากับค่าปริมาณรวมโดยไม่คํานึงถึงค่า IsWorkingDay

สิ่งนี้แสดงให้เห็นว่า 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]
)

สําหรับข้อมูลเพิ่มเติมและตัวเลือกเพิ่มเติม ให้ดูที่ ตารางวันที่

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