Moving Averages, Sums และอื่น ๆ เส้นสีน้ำเงินเรียบออกความผันผวนแบบสุ่มบอกแนวโน้มน้อยกว่าปฏิกิริยาฉันตระหนักเมื่อเร็ว ๆ นี้ว่าหัวข้อนี้ไม่เคยได้รับการคุ้มครองก่อนในรูปแบบที่ตรงไปตรงมาที่สุดในเว็บไซต์นี้จริงก็คือเรื่องของ โพสต์แขกโดย David Churchward ที่นับถือ และยังเป็นที่นับถืออย่างสูง Kasper de Jonge แต่บทความเหล่านี้ไม่ได้รับประโยชน์จากฟังก์ชัน v2 ที่มีให้เราในวันนี้) เพื่อให้เห็นถึงสิ่งที่เราสามารถทำได้ด้วยสูตร Power Pivot ที่ทันสมัยที่สุดให้เริ่มต้นด้วยรูปแบบง่ายๆนี้: และเป็นแบบง่ายๆ: หน่วยวัดขายเป็นเส้นสีแดงขรุขระในแผนภูมิที่ด้านบนของโพสต์และ สูตรง่ายมาก: หน่วยขาย SUM (SalesQtySold) และเราต้องการขายหน่วยของหน่วยลงทุนที่เรียบกว่างวด 3 เดือน ย้ายยอดรวมให้เริ่มต้นด้วยสูตรที่เป็นผลรวมของ 3 เดือนล่าสุด (รวมถึงปัจจุบัน): 3 เดือนขายหน่วยขายรวม CALCULATE (หน่วยขาย, DATESINPERIOD (CalendarDate, LASTDATE (CalendarDate), - 3, เดือน)) และดูสิ่งที่ดูเหมือนว่า: การย้ายยอดรวมใน 3 เดือนสะท้อนให้เห็นถึงเดือนปัจจุบันและสองเดือนก่อนย้ายเฉลี่ยความพยายามครั้งแรก OK แต่ตัวเลขดังกล่าวมีขนาดใหญ่กว่าเดือนเดียวและไม่ตรงกับขนาดของธุรกิจในโลกแห่งความเป็นจริงของเราดังนั้นเรา wouldnt ต้องการแผนภูมิที่เราต้องการรุ่นเฉลี่ยที่ ยอดรวมเคลื่อนที่ 3 เดือนดังนั้นเพื่อให้ได้ค่าเฉลี่ยเราจึงสามารถหารด้วยยอดเฉลี่ย 3: 3 เดือน 3 ยอดเคลื่อนไหว 3 เดือนที่ขายได้ 3 ซึ่งมีลักษณะดังนี้: 3 เดือนการย้ายโดยเฉลี่ยหารด้วย 3 มีข้อเสีย สองเดือนเนื่องจากเป็นสองเดือนแรกในปฏิทินของเราสรุปยอดขายไม่ถึง 3 เดือน แต่ยังคงหารด้วย 3 ดังนั้นจึงลดค่าเฉลี่ยลงอย่างไม่เป็นธรรม เราสามารถคำนวณได้โดยการเปลี่ยนตัวหารของเราเพื่อใช้ตรรกะที่คล้ายคลึงกันกับตัวเศษ: 3 เดือนย้ายยอดขายรวม 3 เดือนหน่วยที่ขายรวม CALCULATE (DISTINCTCOUNT (CalendarYear Month), DATESINPERIOD (CalendarDate, LASTDATE (CalendarDate), - 3 เดือน)) เป็นภาษาอังกฤษ: ใช้มาตรการรวม 3 เดือนที่เรามีอยู่แล้วหารด้วยจำนวนเดือนที่แตกต่างกัน (เฉพาะ) ที่เรามีอยู่ในช่วงเวลาเดียวกันของ 3 เดือน Calc นี้ใช้เวลามากขึ้นในเดือนแรก ๆ ของรูปแบบที่เปลี่ยนแปลงไปมีรูปแบบต่างๆในรูปแบบ dailyweeklyquarterly ในรูปแบบนี้ซึ่งจะแก้ไขสำหรับปฏิทินที่เกินช่วงวันที่ที่คุณมียอดขายปรับตัวให้เข้ากับปฏิทินที่กำหนดเองผ่านทางสูตรที่ยิ่งใหญ่ที่สุดใน โลก ฯลฯ แต่ฉันจะรอและดูสิ่งที่คนถามเกี่ยวกับในความคิดเห็นก่อนที่จะขุดเข้าไปในใด ๆ ทำงานได้ตามปกติ But8230 .. ฉันกำลังทำงานกับ 8211 วันโดยเฉพาะฉันต้องได้รับค่าเฉลี่ย 28 วันที่กลิ้งหนึ่งในมาตรการของฉัน การดำเนินการนี้ใช้ได้ผลดีเมื่อฉันดูผลลัพธ์ด้วยแอตทริบิวต์ date ของฉัน อย่างไรก็ตามมิติข้อมูลปฏิทินของฉันยังมีแอตทริบิวต์แบบรอบคอบและไม่ต่อเนื่องที่เรียกว่า DateMonth (ซึ่งมีลักษณะเช่น 1 ม. ค. 2 ม. ค. เป็นต้น) ฉันหวังว่าจะอนุญาตให้ฉันใช้แอตทริบิวต์ประจำปีของฉันและเปรียบเทียบค่าเฉลี่ย 28 วันสำหรับ วันที่ 1 ม. ค. เป็นเวลาหลายปี ดังนั้นคุณจึงสามารถมีแผนภูมิเส้นที่แกนตั้งแต่ 1 ม. ค. ถึง 31 ธ. ค. (โดยไม่มีการอ้างอิงถึงปี) และประเภทของซีรีส์คือตามปีดังนั้นบรรทัดสำหรับแต่ละปี หวังว่าจะมีคนช่วยสมการล่าสุด 8211 Moving Average Corrected 8211 ให้ตัวหารด้วยค่า 12 (กล่าวคือขึ้นอยู่กับเมื่อเริ่ม Calendaryear-month ของฉัน) เพื่อให้มีค่าเฉลี่ยเคลื่อนที่ที่ถูกต้อง 12 เดือนข้อมูลและปฏิทินของฉันจำเป็นต้องใช้ เริ่มต้นในเวลาเดียวกัน) ข้อเสนอแนะใด ๆ ที่ฉันคิดออก: สิ่งที่ฉันได้ทำคือเริ่มนับเดือนนับจากวันแรกที่ขายของฉัน (นั่นคือ 40663 เป็นวันสุดท้ายก่อนที่ฉันจะเริ่มนับเดือนที่ยอดขายของฉันอยู่) หวังว่านี่จะช่วยให้คนอื่นค้นหาบล็อกโพสต์นี้ได้ William คุณเป็นผู้ช่วยชีวิต ฉันกำลังพยายามหาเหตุผลว่าทำไมตัวหารของฉันถึงมีข้อมูลเดือนที่มากที่สุดเท่าที่ฉันกำลังทำงานอยู่ ฉันขอขอบคุณตัวอย่างและคำอธิบายที่ใช้กับสถานการณ์ของฉัน john pullin says: ฉันมีทางออกที่ดีกว่าในการแสดงความคิดเห็นขั้นสุดท้ายใน 8211 ที่นี่ซึ่งคำนวณจำนวนเดือนที่จะหารด้วยถ้าข้อมูลและปฏิทินของคุณไม่เริ่มทำงานในเวลาเดียวกัน นี่คือยอดคงเหลือเดิม: ยอดคงเหลือเคลื่อนไหว 3 เดือนที่ผ่านการเปลี่ยนแปลงยอดคงเหลือที่ขายแล้ว CALCULATE (DISTINCTCOUNT (CalendarYear Month), DATESINPERIOD (ปฏิทินวันที่, LASTDATE), - 3 เดือน) และภายใน divider ที่ต้องการแก้ไข 8211 เพื่อให้ถูกต้องว่าจะหารด้วย 2 และจากนั้น 1 (สำหรับ 3 เดือนแรกในข้อมูลของคุณ) ด้านล่างนี้จะใช้วิธีปฏิบัติต่อไปนี้: ค่าเฉลี่ยเคลื่อนที่ 3 เดือน 8211 การทำงาน 3 เดือนยอดรวมที่เคลื่อนที่ (CALCULATE (COUNTROWS (VALUES (DimDateCalendarMonth)), DATESINPERIOD (DimDateDatekey, LASTDATE (DimDateDatekey), - 3, MONTH) ที่ FactSales เป็นของคุณ ตารางความจริง obvs หวังว่านี่จะช่วยให้คนอื่นออก 8211 เพราะมันทำให้ฉันบ้า Vikas Gautam กล่าวว่า: ฉันมีคำถาม จะทำอย่างไรถ้าเราต้องการเฉลี่ย 30 วันทำการซื้อขายหรือวันทำการ แน่นอนว่าเราจะมีคอลัมน์ Date เป็นจำนวนวันขายและยอดขายที่ตรงกัน ค่าเฉลี่ย 1 เดือนโดยใช้สูตรของคุณ won8217t เป็นสิ่งเดียวกัน ตามที่ต้องการอย่างน้อย 30 วันโดยเฉลี่ยที่นี่ที่นี่ คุณช่วยแนะนำสูตรได้ไหม สิ่งที่ยากคือการคำนวณขึ้นอยู่กับวันที่ทางการเงินอื่นนอกเหนือจากวันที่ตามปฏิทินเนื่องจากฟังก์ชันวันที่อัจฉริยะเกือบทั้งหมดที่มีอยู่ไม่สามารถใช้งานได้ สูตรการคำนวณตัวอย่างใด ๆ ตามวันที่ทำงบการเงินฉันได้รับข้อมูลมากมายเกี่ยวกับการคำนวณตามวันที่ของลูกค้าจาก 8220Greatest Formula link link ข้างต้นในโลก 8221 It8217s very helpful8230 .. นี่คือการโพสต์ที่ดีโดยทั้งหมด ฉันต้องการทราบว่ายอดขายในหนึ่งในสามเดือนที่ผ่านมาเป็นศูนย์หรือไม่มียอดขายเลยแล้วจะให้สูตรทำงานอย่างไร ฉันต้องการทราบจำนวนเดือนนับจากเดือนปัจจุบันถึงสามเดือนที่มียอดขาย สมมติว่าฉันจะเข้าเดือนพฤษภาคม 2014 ในช่วงสามเดือนสุดท้ายจะรวมเดือนพฤษภาคม 2014 เม. ย. 2014 เม. ย. 2014 และพฤษภาคม 2014 แต่เมษายน 2014 จะไม่มียอดขาย ดังนั้นคาดว่าจะเป็นยอดขายในเดือนมีนาคมและพฤษภาคม 2014 หารด้วย 2 และไม่ใช่ 3. สมมติว่าเรามียอดขายเดือน มิ.ย. 2014 และ ก. ค. 2014 สำหรับเดือนมิถุนายน 2014 เฉลี่ย 3 เดือนสุดท้ายจะเท่ากับ (2014 ของฉัน 2014) 2. สำหรับเดือนกรกฎาคม 2014 เฉลี่ย 3 เดือนสุดท้ายจะเป็น (พฤษภาคม 2014 มิถุนายน 2014 กรกฎาคม 2014) 3. ความช่วยเหลือใด ๆ เพื่อให้บรรลุนี้จะได้รับความนิยมอย่างมาก Hey มีวิธีการแก้ปัญหาที่ยอดเยี่ยม แต่ตอนนี้ I8217m กำลังมองหาการเพิ่มเช่นเดียวกับ CheenuSing ที่กล่าวถึง ชุดข้อมูลบางชุดใน don8217t ของฉันมียอดขายในช่วงที่ผ่านมา แต่ก็มีผู้อื่นทำ CheenuSing คุณพบวิธีแก้ปัญหาที่ I8217d จะขอบคุณมากที่สุดขอบคุณ Im ใหม่กับหน้าที่ DAX ทั้งหมดและค่อนข้างดิ้นรนกับการคำนวณค่าเฉลี่ยเคลื่อนที่ของฉัน ฉันต้องการค่าเฉลี่ยย้อนหลัง 3 เดือนย้อนหลังไม่รวมเดือนปัจจุบัน ฉันพยายามใช้ 8220IF8221 แต่ไม่เคยทำงานออก หนึ่งสามารถช่วยฉันด้วย it SQL Server Denali PowerPivot Alberto Ferrari แล้วเขียนเกี่ยวกับการคำนวณค่าเฉลี่ยเคลื่อนที่ใน DAX โดยใช้คอลัมน์ที่คำนวณได้ I8217d ต้องการนำเสนอวิธีการที่แตกต่างกันที่นี่โดยใช้มาตรการที่คำนวณได้ สำหรับค่าเฉลี่ยเคลื่อนที่ I8217m คำนวณค่าเฉลี่ยเคลื่อนที่รายวัน (ในช่วง 30 วันที่ผ่านมา) ที่นี่ สำหรับตัวอย่างของฉัน I8217m โดยใช้สมุดงาน PowerPivot ซึ่งสามารถดาวน์โหลดเป็นส่วนหนึ่งของโครงการ SSAS Tabular Model จากตัวอย่าง Denali CTP 3 ในบทความนี้ I8217m ได้พัฒนาสูตรทีละขั้นตอน อย่างไรก็ตามหากคุณกำลังรีบร้อนคุณอาจต้องการกระโดดไปยังผลลัพธ์สุดท้ายด้านล่าง เมื่อปีปฏิทิน 2003 ในตัวกรองวันที่บนคอลัมน์และยอดขาย (จากตารางการขายทางอินเทอร์เน็ต) ในรายละเอียดข้อมูลตัวอย่างจะมีลักษณะดังนี้: ในบริบทแต่ละ row8217s การแสดงออก DateDate จะให้บริบทปัจจุบันเช่นวันที่สำหรับแถวนี้ . แต่จากมาตรการที่คำนวณได้เราไม่สามารถอ้างถึงนิพจน์นี้ (เนื่องจากไม่มีแถวปัจจุบันสำหรับตารางวันที่) แต่เราต้องใช้นิพจน์เช่น LastDate (DateDate) ดังนั้นเพื่อที่จะได้สามสิบวันที่ผ่านมาเราสามารถใช้นิพจน์นี้ตอนนี้เราสามารถสรุปการขายทางอินเทอร์เน็ตของเราในแต่ละวันโดยใช้ฟังก์ชันสรุป: สรุป (160 DatesInPeriod (DateDate, LastDate (DateDate), - 30, DAY) 160, DateDate 160.SalesAmountSumquot 160. Sum (Internet SalesSales Amount)) และสุดท้ายเราจะใช้ฟังก์ชัน DAX AverageX เพื่อคำนวณค่าเฉลี่ย 30 ค่าดังกล่าว: ยอดขาย (ค่าเฉลี่ย 30d): AverageX (160 สรุป (160160160 DatesInPeriod (DateDate, LastDate (DateDate), - 30, DAY) 160160160, DateDate 160160160.SalesAmountSumquot 160160160 ยอดรวม (ยอดขายทางอินเทอร์เน็ตยอดจำหน่าย) 160) 160, SalesAmountSum) นี่คือการคำนวณที่เรากำลังใช้อยู่ในตารางการขายทางอินเทอร์เน็ตของเราดังแสดงในภาพหน้าจอด้านล่าง: เมื่อเพิ่มการคำนวณนี้ลงในตาราง Pivot จากด้านบนผลลัพธ์จะมีลักษณะดังนี้: เมื่อพิจารณาผลลัพธ์ที่เราเห็นว่าเรา don8217t มีข้อมูลใด ๆ ก่อนวันที่ 1 มกราคม 2003: ค่าแรกสำหรับค่าเฉลี่ยเคลื่อนที่จะเท่ากับค่าวัน มี ar e ไม่มีแถวก่อนวันที่นั้น) ค่าที่สองสำหรับค่าเฉลี่ยเคลื่อนที่คือค่าเฉลี่ยของสองวันแรกและอื่น ๆ นี้ไม่ได้ค่อนข้างถูกต้อง แต่ I8217m กลับไปที่ปัญหานี้ในที่สอง ภาพหน้าจอแสดงการคำนวณค่าเฉลี่ยเคลื่อนที่ของวันที่ 31 มกราคมเป็นค่าเฉลี่ยของค่ารายวันนับตั้งแต่วันที่ 2 มกราคมถึง 31 มกราคมการวัดที่คำนวณได้ของเราจะทำงานได้ดีเมื่อใช้ตัวกรอง ในภาพหน้าจอต่อไปนี้ฉันใช้ผลิตภัณฑ์สองประเภทสำหรับชุดข้อมูล: การวัดที่คำนวณได้ของเราทำงานอย่างไรในระดับการรวมที่สูงขึ้นเพื่อที่จะหา I8217m โดยใช้ลำดับชั้นของปฏิทินในแถวต่างๆ (แทนวันที่) เพื่อความง่ายฉันได้เอาระดับภาคเรียนและไตรมาสโดยใช้ตัวเลือกตาราง pivot Excel8217s (ตัวเลือก ShowHide fields) อย่างที่คุณเห็นการคำนวณยังคงทำงานได้ดี ที่นี่ค่าเฉลี่ยรายเดือนเป็นค่าเฉลี่ยเคลื่อนที่สำหรับวันสุดท้ายของเดือนที่ระบุ คุณสามารถเห็นได้อย่างชัดเจนในเดือนมกราคม (มูลค่า 14,215.01 จะปรากฏในภาพหน้าจอด้านบนเป็นค่าสำหรับ 31 มกราคม) ถ้านี่เป็นความต้องการทางธุรกิจ (ซึ่งเป็นเสียงที่เหมาะสมสำหรับค่าเฉลี่ยรายวัน) การรวมกันจะทำงานได้ดีในระดับรายเดือน (มิฉะนั้นเราจะต้องปรับการคำนวณของเราและนี่เป็นหัวข้อของการโพสต์ที่กำลังจะโพสต์) แต่แม้ว่าการรวมกลุ่มจะมีความหมายในระดับรายเดือนถ้าเราขยายมุมมองนี้ไปจนถึงระดับวันคุณจะเห็นว่ามาตรการที่คำนวณได้ของเราจะส่งคืนยอดขายสำหรับวันนั้นไม่ใช่เฉลี่ยในช่วง 30 วันที่ผ่านมา: วิธีนี้สามารถทำได้ ผลลัพธ์ที่ได้จากบริบทที่เราคำนวณผลรวมของเราดังที่ได้กล่าวไว้ในรหัสต่อไปนี้: ยอดขาย (ค่าเฉลี่ย 30d): AverageX (160 สรุป (160160160 dateinperiod (DateDate, LastDate (DateDate), - 30, DAY) 160160160, DateDate 160160160.SalesAmountSumquot 160160160. Sum (จำนวนการขายทางอินเทอร์เน็ตยอดขาย) 160) 160, SalesAmountSum) เนื่องจากเราประเมินการแสดงออกนี้ในช่วงวันที่ที่ระบุบริบทเดียวที่ถูกเขียนทับที่นี่คือ DateDate ในลำดับชั้นของเรา we8217re ใช้แอตทริบิวต์ที่แตกต่างจากมิติข้อมูลของเรา (ปฏิทินปีเดือนและวันในเดือน) เนื่องจากบริบทนี้ยังคงมีอยู่การคำนวณจะถูกกรองด้วยแอตทริบิวต์เหล่านี้ และนี่ก็อธิบายว่าทำไมเรามีบริบทวัน8217ปัจจุบันอยู่ในแต่ละบรรทัด เพื่อให้ได้สิ่งที่ชัดเจนตราบเท่าที่เราประเมินการแสดงออกนี้นอกบริบทวันที่ทุกอย่างจะดีเนื่องจากข้อความค้นหา DAX แบบต่อไปนี้แสดงเมื่อดำเนินการโดย Management Studio ในมุมมองการขายทางอินเทอร์เน็ตของโมเดลของเรา (โดยใช้ฐานข้อมูลแบบตารางที่มีข้อมูลเดียวกัน ): ประเมิน (160160160 สรุป (160160160160160160160 dateinperiod (DateDate, date (2003,1,1), - 5, DAY) 160160160160160160160, DateDate 160160160160160160160.SalesAmountSumquot 160160160160160160160 ยอดรวม (ยอดขายทางอินเทอร์เน็ตขายได้) 160160160)) ที่นี่ฉันลดระยะเวลา เป็น 5 วันและกำหนดวันที่ที่กำหนดเช่น LastDate (8230) ซึ่งจะส่งผลให้วันที่สุดท้ายของตารางมิติข้อมูลวันที่ของฉันซึ่งไม่มีข้อมูลอยู่ในข้อมูลตัวอย่าง นี่คือผลลัพธ์จากการค้นหา: อย่างไรก็ตามหลังจากตั้งค่าตัวกรองเป็น 2003 จะไม่มีข้อมูลแถวที่อยู่นอก 2003 รวมอยู่ด้วย นี่เป็นคำอธิบายข้างต้น: ดูเหมือนว่าเรามีข้อมูลตั้งแต่วันที่ 1 มกราคม 2003 เท่านั้นและตอนนี้เราทราบแล้วว่า: ปี 2003 อยู่ในตัวกรอง (ตามที่เห็นในภาพหน้าจอแรกของโพสต์นี้) และ ดังนั้นจึงเป็นปัจจุบันเมื่อคำนวณผลรวม ตอนนี้สิ่งที่เราต้องทำคือการกำจัดตัวกรองเพิ่มเติมเหล่านี้เนื่องจากเราได้กรองผลการค้นหาของเราตามวันที่แล้ว วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการใช้ฟังก์ชัน Calculate และใช้ ALL (8230) สำหรับแอตทริบิวต์ทั้งหมดที่เราต้องการลบตัวกรอง เนื่องจากเรามีแอตทริบิวต์เหล่านี้ (Year, Month, Dayday, 8230) และเราต้องการลบตัวกรองออกจากทุกส่วน แต่แอตทริบิวต์ date นั้น ALLEXCEPT มีประโยชน์อย่างยิ่งที่นี่ หากคุณมีพื้นหลัง MDX คุณจะสงสัยว่าทำไมเรา don8217t ได้รับปัญหาที่คล้ายกันเมื่อใช้ SSAS ในโหมด OLAP (BISM Multidimensional) เหตุผลก็คือฐานข้อมูล OLAP ของเรามีความสัมพันธ์กับแอตทริบิวต์ดังนั้นหลังจากตั้งค่าแอตทริบิวต์ date (key) แอตทริบิวต์อื่น ๆ จะถูกเปลี่ยนโดยอัตโนมัติด้วยเช่นกันและเรา don8217t ต้องดูแลเรื่องนี้ (ดูโพสต์ของฉันที่นี่) แต่ในรูปแบบตารางเรา don8217t มีความสัมพันธ์กับแอตทริบิวต์ (ไม่ใช่แอตทริบิวต์หลักที่แท้จริง) ดังนั้นเราจำเป็นต้องลดตัวกรองที่ไม่พึงประสงค์จากการคำนวณของเรา ดังนั้นที่นี่เรามียอดขาย 8230 (ค่าเฉลี่ย 30d): AverageX (160 สรุป (160160160 dateinperiod (วันที่, LastDate (วันที่ออก), - 30, วัน) 160160160, DateDate 160160160.SalesAmountSumquot 160160160. คำนวณ (Sum (Internet SalesSales Amount) , ALLEXCEPT (Date, DateDate)) 160), SalesAmountSum และนี่คือตารางเด็นเดอร์สุดท้ายของเราใน Excel: เพื่อแสดงค่าเฉลี่ยของค่าเฉลี่ยเคลื่อนที่นี่คือข้อมูลเดิมของข้อมูลในมุมมองกราฟ (Excel): แม้ว่าเราจะกรองข้อมูลของเราใน 2003 ค่าเฉลี่ยเคลื่อนที่ในช่วง 29 วันแรกของปี 2546 ได้รับการพิจารณาอย่างถูกต้องซึ่งใช้เวลานับจากวันที่เข้าปีพ. ศ. 2545 คุณจะรับรู้ค่าสำหรับ 30 มกราคมและ 31 จากวิธีแรกของเราเนื่องจากเป็นวันแรกที่การคำนวณครั้งแรกของเรามีข้อมูลเพียงพอ (เต็ม 30 วัน) พยายามสร้างค่าเฉลี่ยเคลื่อนที่ในโมเดลของฉัน กำลังมองหาความช่วยเหลือบางอย่าง ฉันลองทำตามรายละเอียดในบล็อก Alberto Ferraris ที่นี่ แต่ฉันไม่สามารถรับการวัด DayNumber ได้ไวยากรณ์ดูเหมือนจะไม่ถูกต้องและฉันไม่สามารถแก้ไขได้ แบบจำลองของฉันมีตารางข้อมูลที่ประกอบด้วยรายการกรณีรวมเข้ากับตารางวันที่ผ่านทางวันที่สร้าง ฉันมีความสัมพันธ์ที่สอง (ไม่ใช้งาน) ไปยังตารางวันที่ในคอลัมน์ ClosedDate ฉันมีตัวชี้วัด: Case Closed Count: CALCULATE (COUNTROWS (กรณี), USERELATIONSHIP (CaseClosedDateKey, DateDateKey)) ฉันต้องการวัดที่ได้รับผลรวมของกรณีปิดนับสำหรับสามวันล่าสุดของบริบทปัจจุบัน ฉันวางแผนที่จะแบ่งจำนวนนี้เป็น 3 เพื่อให้ได้ค่าเฉลี่ย 3 วันที่เคลื่อนไหว อีกตรรกะหนึ่งที่ฉันต้องการพิจารณาคือถ้าวันสุดท้ายคือวันนี้จากนั้นใช้ข้อมูล 3 วันก่อนหน้านี้ข้อมูลมีการอัปเดตทุกๆ 15 นาทีดังนั้นการทำเช่นนี้เวลา 09:00 น. จึงจะเบี่ยงค่าเฉลี่ยเนื่องจาก ไม่ใช่วันที่ครบถ้วน ความช่วยเหลือใด ๆ ที่เป็นที่ชื่นชม อาทิตย์ที่ 17 กุมภาพันธ์ 2013 เวลา 17:25 น. Heres เชื่อมโยงไปยังวิธีการโดยใช้เพียงแค่วัดที่คำนวณได้ว่า Javier Guillen เขียนกลับมาในขณะที่ หวังว่าจะช่วยได้ เบรนท์กรีนวู้ด, MS, MCITP, CBIP กรุณาแก้ไขคำตอบที่ถูกต้องและบทความที่เป็นประโยชน์ brentgreenwood. blogspot แก้ไขโดย Brent Greenwood Editor วันจันทร์ที่ 18 กุมภาพันธ์ 2013 เวลา 16:08 น. เสนอโดย ED Price - MSFT พนักงานของ Microsoft, Owner Thursday, August 22, 2013 7:39 PM Marked as answer by Ed Price - พนักงาน MSFT ของ Microsoft, เจ้าของอังคาร, กันยายน 17, 2013 6:39 AM จันทร์, กุมภาพันธ์ 18, 2013 4:08 PM ในตำแหน่งของเขา Alberto ใช้ฟังก์ชัน EARLIER ซึ่งส่งกลับมา ค่าจากบริบทแถวก่อนหน้า นี่เป็นการทำงานเฉพาะในนิพจน์ซ้ำเมื่อนิพจน์นี้ได้รับการประเมินในบริบทแถวที่มีอยู่ (นิพจน์ซ้ำอื่น ๆ หรือคอลัมน์ที่คำนวณ) ต่อไปนี้เป็นไปตามข้อกำหนด (ไม่ผ่านการทดสอบ) กรณีที่ปิดนับ - 3 วันล่าสุด: CALCULATE ( COUNTROWS (กรณี) USERELATIONSHIP (CaseClosedDateKey, DateDateKey) DATESBETWEEN (DATEADD (DateDateKey, -3, Day) DateDateKey)) คำสุดท้ายสามารถทำได้ด้วยการใช้นิพจน์ IF โดยใช้ฟังก์ชัน TODAY () และปรับรูปแบบดังกล่าวข้างต้น เสนอเป็นคำตอบโดย Ed Price - MSFT พนักงานของ Microsoft, พฤหัสบดีที่ 22 สิงหาคม 2013 เวลา 19:40 น. Monday, February 18, 2013 11:51 AM Heres ลิงก์ไปยังวิธีการโดยใช้เพียงแค่วัดที่คำนวณได้ว่า Javier Guillen เขียนกลับมาในขณะที่ . หวังว่าจะช่วยได้ เบรนท์กรีนวู้ด, MS, MCITP, CBIP กรุณาแก้ไขคำตอบที่ถูกต้องและบทความที่เป็นประโยชน์ brentgreenwood. blogspot แก้ไขโดย Brent Greenwood Editor วันจันทร์ที่ 18 กุมภาพันธ์ 2013 เวลา 16:08 น. เสนอโดย ED Price - MSFT พนักงานของ Microsoft, Owner Thursday, August 22, 2013 7:39 PM Marked as answer by Ed Price - พนักงาน MSFT ของ Microsoft, เจ้าของอังคาร, กุมภาพันธ์ 17, 2013 6:39 AM จันทร์ 18 กุมภาพันธ์, 2013 4:08 PMSQL Server Denali PowerPivot อัลเบอร์โตเฟอร์รารีได้เขียนเกี่ยวกับการคำนวณค่าเฉลี่ยเคลื่อนที่ใน DAX โดยใช้คอลัมน์ที่คำนวณได้ Id ต้องการเสนอวิธีการอื่นที่นี่โดยใช้มาตรการที่คำนวณได้ สำหรับค่าเฉลี่ยเคลื่อนที่ Im คำนวณค่าเฉลี่ยเคลื่อนที่รายวัน (ในช่วง 30 วันที่ผ่านมา) ที่นี่ สำหรับตัวอย่างของฉัน Im ใช้สมุดงาน PowerPivot ซึ่งสามารถดาวน์โหลดได้เป็นส่วนหนึ่งของโครงการ SSAS แบบตารางจากตัวอย่าง Denali CTP 3 ในบทความนี้ฉันกำลังพัฒนาสูตรทีละขั้นตอน อย่างไรก็ตามหากคุณกำลังรีบร้อนคุณอาจต้องการกระโดดไปยังผลลัพธ์สุดท้ายด้านล่าง ด้วยปฏิทินปี 2003 ในตัวกรองวันที่ในคอลัมน์และยอดขาย (จากตารางการขายทางอินเทอร์เน็ต) ในรายละเอียดข้อมูลตัวอย่างจะมีลักษณะดังนี้: ในบริบทของแต่ละแถวนิพจน์ 8216DateDate จะแสดงบริบทปัจจุบันเช่นวันที่สำหรับแถวนี้ . แต่จากมาตรการที่คำนวณได้เราไม่สามารถอ้างถึงนิพจน์นี้ (เนื่องจากไม่มีแถวปัจจุบันสำหรับตารางวันที่) แต่เราต้องใช้นิพจน์เช่น LastDate (8216DateDate) ดังนั้นเพื่อให้ได้สามสิบวันที่ผ่านมาเราสามารถใช้นิพจน์นี้ตอนนี้เราสามารถสรุปการขายทางอินเทอร์เน็ตของเราในแต่ละวันโดยใช้ฟังก์ชัน summarize: สรุป (DatesInPeriod (8216DateDate, LastDate (8216DateDate), - 30, DAY), 8217SalesAmountSum8221 ผลรวม (8216 ยอดขายทางอินเทอร์เน็ตยอดขาย)) และสุดท้ายใช้ฟังก์ชัน DAX AverageX เพื่อคำนวณค่าเฉลี่ย 30 ค่าเหล่านี้: ยอดขาย (ค่าเฉลี่ย 30d): AverageX (สรุป (DatesInPeriod (8216DateDate, LastDate (8216DateDate), - วันที่ 30, วัน), 8217DateDate 8220SalesAmountSum8221 ยอดรวม (8216 ยอดขายทางอินเทอร์เน็ตยอดขาย)), SalesAmountSum) นี่คือการคำนวณที่เราใช้อยู่ในตารางการขายทางอินเทอร์เน็ตของเราดังที่แสดงในภาพหน้าจอด้านล่าง: เมื่อเพิ่มการคำนวณนี้ลงในตาราง Pivot จากด้านบน, ผลลัพท์มีดังนี้: เมื่อดูที่ผลลัพธ์ดูเหมือนว่าเราไม่มีข้อมูลใด ๆ ก่อนวันที่ 1 มกราคม 2003 ค่าแรกสำหรับค่าเฉลี่ยเคลื่อนที่จะเท่ากับค่าวัน (ไม่มีแถวก่อนวันที่ดังกล่าว) ค่าที่สองสำหรับค่าเฉลี่ยเคลื่อนที่คือค่าเฉลี่ยของสองวันแรกและอื่น ๆ นี้ไม่ได้ค่อนข้างถูกต้อง แต่ฉันกลับไปที่ปัญหานี้ในที่สอง ภาพหน้าจอแสดงการคำนวณค่าเฉลี่ยเคลื่อนที่ของวันที่ 31 มกราคมเป็นค่าเฉลี่ยของค่ารายวันนับตั้งแต่วันที่ 2 มกราคมถึง 31 มกราคมการวัดที่คำนวณได้ของเราจะทำงานได้ดีเมื่อใช้ตัวกรอง ในภาพต่อไปนี้ฉันใช้ผลิตภัณฑ์สองประเภทสำหรับชุดข้อมูล: การวัดที่คำนวณได้ของเราทำงานอย่างไรในระดับการรวมที่สูงขึ้นเพื่อที่จะหาว่า Im ใช้ลำดับชั้นของปฏิทินในแถวต่างๆ (แทนวันที่) เพื่อความเรียบง่ายฉันได้เอาระดับภาคเรียนและไตรมาสโดยใช้ตัวเลือกตารางแบบ Excels (ตัวเลือกเขตข้อมูล ShowHide) อย่างที่คุณเห็นการคำนวณยังคงทำงานได้ดี ที่นี่ค่าเฉลี่ยรายเดือนเป็นค่าเฉลี่ยเคลื่อนที่สำหรับวันสุดท้ายของเดือนที่ระบุ คุณสามารถเห็นได้อย่างชัดเจนในเดือนมกราคม (มูลค่า 14,215.01 จะปรากฏในภาพหน้าจอด้านบนเป็นค่าสำหรับ 31 มกราคม) ถ้านี่เป็นความต้องการทางธุรกิจ (ซึ่งเป็นเสียงที่เหมาะสมสำหรับค่าเฉลี่ยรายวัน) การรวมกันจะทำงานได้ดีในระดับรายเดือน (มิฉะนั้นเราจะต้องปรับการคำนวณของเราและนี่เป็นหัวข้อของการโพสต์ที่กำลังจะโพสต์) แต่แม้ว่าการรวมกลุ่มจะมีความสมเหตุสมผลในระดับรายเดือนหากเราขยายมุมมองนี้ไปจนถึงระดับวันคุณจะเห็นว่ามาตรการที่คำนวณได้ของเราจะส่งคืนยอดขายสำหรับวันนั้นไม่ใช่เฉลี่ยในช่วง 30 วันที่ผ่านมา: วิธีนี้สามารถทำได้ ผลลัพธ์ที่ได้จากบริบทที่เราคำนวณผลรวมของเราดังที่ได้กล่าวไว้ในรหัสต่อไปนี้: ยอดขาย (ค่าเฉลี่ย 30d): AverageX (สรุป (dateinperiod (8216DateDate, LastDate (8216DateDate), - 30, DAY), 8217DateDate 8220SalesAmountSum8221 ยอดรวม (8216 ยอดขายทางอินเทอร์เน็ตยอดขาย)), SalesAmountSum) เนื่องจากเราประเมินนิพจน์นี้ในช่วงวันที่ที่ระบุบริบทเดียวที่ถูกเขียนทับที่นี่คือ 8216DateDate ในลำดับชั้นของเราใช้แอตทริบิวต์ต่างจากมิติข้อมูลของเรา (ปฏิทินปีเดือนและวันในเดือน) เนื่องจากบริบทนี้ยังคงมีอยู่การคำนวณจะถูกกรองด้วยแอตทริบิวต์เหล่านี้ และนี่เป็นเหตุผลที่เราอธิบายบริบทวันปัจจุบันสำหรับแต่ละบรรทัด เพื่อให้ได้สิ่งที่ชัดเจนตราบเท่าที่เราประเมินการแสดงออกนี้นอกบริบทวันที่ทุกอย่างจะดีเนื่องจากข้อความค้นหา DAX แบบต่อไปนี้แสดงเมื่อดำเนินการโดย Management Studio ในมุมมองการขายทางอินเทอร์เน็ตของโมเดลของเรา (โดยใช้ฐานข้อมูลแบบตารางที่มีข้อมูลเดียวกัน ): ประเมิน (สรุป (dateinperiod (8216DateDate, date (2003,1,1), - 5, DAY), 8217DateDate 8220SalesAmountSum8221 Sum (8216 ยอดขายทางอินเทอร์เน็ตยอดขาย))) ที่นี่ฉันลดระยะเวลาเป็น 5 วันและตั้งค่า วันที่ที่กำหนดเป็น LastDate () จะส่งผลให้วันที่สุดท้ายของตารางมิติข้อมูลวันที่ของฉันซึ่งไม่มีข้อมูลอยู่ในตัวอย่างข้อมูล นี่คือผลลัพธ์จากการค้นหา: อย่างไรก็ตามหลังจากตั้งค่าตัวกรองเป็น 2003 จะไม่มีข้อมูลแถวที่อยู่นอก 2003 รวมอยู่ด้วย นี่เป็นคำอธิบายข้างต้น: ดูเหมือนว่าเรามีข้อมูลตั้งแต่วันที่ 1 มกราคม 2003 เท่านั้นและตอนนี้เราทราบแล้วว่า: ปี 2003 อยู่ในตัวกรอง (ตามที่เห็นในภาพหน้าจอแรกของโพสต์นี้) และ ดังนั้นจึงเป็นปัจจุบันเมื่อคำนวณผลรวม ตอนนี้สิ่งที่เราต้องทำคือการกำจัดตัวกรองเพิ่มเติมเหล่านี้เนื่องจากได้กรองผลลัพธ์ตามวันที่ วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการใช้ฟังก์ชัน Calculate และใช้ ALL () สำหรับแอ็ตทริบิวต์ทั้งหมดที่เราต้องการลบตัวกรอง เนื่องจากเรามีแอตทริบิวต์เหล่านี้ (ปี, เดือน, วัน, วันธรรมดา) และเราต้องการนำตัวกรองออกจากรายการทั้งหมด แต่แอตทริบิวต์ date นั้น ALLEXCEPT มีประโยชน์อย่างยิ่งที่นี่ หากคุณมีพื้นหลัง MDX คุณจะสงสัยว่าทำไมเราไม่ได้รับปัญหาที่คล้ายกันเมื่อใช้ SSAS ในโหมด OLAP (BISM Multidimensional) เหตุผลก็คือฐานข้อมูล OLAP ของเรามีความสัมพันธ์กับแอตทริบิวต์ดังนั้นหลังจากตั้งค่าแอตทริบิวต์ date (key) แอตทริบิวต์อื่น ๆ จะถูกเปลี่ยนโดยอัตโนมัติด้วยเช่นกันและเราไม่ต้องดูแลเรื่องนี้ (ดูโพสต์ที่นี่) แต่ในรูปแบบตารางเราไม่มีความสัมพันธ์กับแอตทริบิวต์ (ไม่ใช่แม้แต่คีย์คีย์แอตทริบิวต์) ดังนั้นเราต้องกำจัดตัวกรองที่ไม่พึงประสงค์จากการคำนวณของเรา ดังนั้นที่นี่เรามียอดขาย (ค่าเฉลี่ย 30d): AverageX (สรุป (dateinperiod (8216DateDate, LastDate (8216DateDate), - 30, DAY), 8217DateDate 8220SalesAmountSum8221 คำนวณ (ยอดรวม (8216 ยอดขายทางอินเทอร์เน็ตขาย)) ALLEXCEPT (8216Date8217,8217DateDate และนี่คือตารางเด็นเดอร์สุดท้ายของเราใน Excel: เพื่อแสดงค่าเฉลี่ยเคลื่อนที่นี่คือข้อมูลที่ดึงข้อมูลเดียวกันในมุมมองแผนภูมิ (Excel): แม้ว่าเราจะกรองข้อมูลของเราในปี 2546 เป็นค่าเฉลี่ยเคลื่อนที่สำหรับช่วงแรก 29 วันนับจากปี พ. ศ. 2546 ได้รับการพิจารณาอย่างถูกต้องในช่วงเวลาเดียวกันของปี พ. ศ. 2545 คุณจะรับรู้ค่าสำหรับ 30 มกราคมและ 31 จากวิธีแรกของเราเนื่องจากเป็นวันแรกที่การคำนวณครั้งแรกของเรามีข้อมูลเพียงพอ (เต็ม 30 วัน)
Comments
Post a Comment