Microsoft Fabric Community Conference 2025, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount.
Register nowThe Power BI DataViz World Championships are on! With four chances to enter, you could win a spot in the LIVE Grand Finale in Las Vegas. Show off your skills.
OK, got smart about Orthodox Easter from here: https://www.assa.org.au/edm. Note, Orthodox Pentecost is +49 days.
Orthodox Easter =
// Reference https://www.assa.org.au/edm
VAR __Year = MAX('Date'[Year])
VAR __First2 = TRUNC(__Year / 100)
VAR __Last2 = RIGHT(__Year & "", 2) + 0
VAR __Divide19 = TRUNC(__Year / 19)
VAR __Fraction = MOD(__Year, 19)
VAR __TableA =
DATATABLE(
"Fraction", DOUBLE,
"PFM Date", STRING,
{
{0, "A05"}, {1, "M25"}, {2, "A13"}, {3, "A02"}, {4, "M22"}, {5, "A10"},
{6, "M30"}, {7, "A18"}, {8, "A07"}, {9, "M27"}, {10, "A15"}, {11, "A04"},
{12, "M24"}, {13, "A12"}, {14, "A01"}, {15, "M21"}, {16, "A09"}, {17, "M29"}, {18, "A17"}
}
)
VAR __PFM = MAXX(FILTER(__TableA, [Fraction] = __Fraction),[PFM Date])
VAR __B =
SWITCH(TRUE(),
__PFM IN { "M26", "A02", "A09", "A16" }, 0,
__PFM IN { "M27", "A03", "A10", "A17" }, 1,
__PFM IN { "M21", "M28", "A04", "A11", "A18" }, 2,
__PFM IN { "M22", "M29", "A05", "A12" }, 3,
__PFM IN { "M23", "M30", "A06", "A13" }, 4,
__PFM IN { "M24", "M31", "A07", "A14" }, 5,
6
)
VAR __C =
SWITCH(TRUE(),
__First2 IN { 13, 20, 27 },6,
__First2 IN { 14, 21, 28 },5,
__First2 IN { 15, 22, 29 },4,
__First2 IN { 16, 23, 30 },3,
__First2 IN { 10, 17, 24, 31 },2,
__First2 IN { 11, 18, 25, 32 },1,
0
)
VAR __D =
SWITCH(TRUE(),
__Last2 IN { 0, 6, 17, 23, 28, 34, 45, 51, 56, 62, 73, 79, 84, 90 },0,
__Last2 IN { 1, 7, 12, 18, 29, 35, 40, 46, 57, 63, 68, 74, 85, 91, 96 },1,
__Last2 IN { 2, 13, 19, 24, 30, 41, 47, 52, 58, 69, 75, 80, 86, 97 },2,
__Last2 IN { 3, 8, 14, 25, 31, 36, 42, 53, 59, 64, 70, 81, 87, 92, 98 },3,
__Last2 IN { 9, 15, 20, 26, 37, 43, 48, 54, 65, 71, 76, 82, 93, 99 },4,
__Last2 IN { 4, 10, 21, 27, 32, 38, 49, 55, 60, 66, 77, 83, 88, 94 },5,
6
)
VAR __WeekDayLookup = __B + __C + __D
VAR __DaysToAdd =
SWITCH(TRUE(),
__WeekDayLookup IN { 0, 7, 14 },7,
__WeekDayLookup IN { 1, 8, 15 },6,
__WeekDayLookup IN { 2, 9, 16 },5,
__WeekDayLookup IN { 3, 10, 17 },4,
__WeekDayLookup IN { 4, 11, 18 },3,
__WeekDayLookup IN { 5, 12 },2,
1
)
VAR __Month1 = IF(LEFT(__PFM,1)="M",3,4)
VAR __Day1 = RIGHT(__PFM,2) * 1 + __DaysToAdd
VAR __Month = IF(__Day1 > 31 && __Month1 = 3, 4, __Month1)
VAR __Day = IF(__Day1 > 31, __Day1 - 31, __Day1)
VAR __JulianDate = DATE(__Year, __Month, __Day)
VAR __GregorianDate =
SWITCH(TRUE(),
__Year <= 1699, __JulianDate + 10,
__Year <= 1799, __JulianDate + 11,
__Year <= 1899, __JulianDate + 12,
__Year <= 2099, __JulianDate + 13,
__Year <= 2199, __JulianDate + 14,
__Year <= 2299, __JulianDate + 15,
__Year <= 2499, __JulianDate + 16,
__Year <= 2599, __JulianDate + 17,
__Year <= 2699, __JulianDate + 18,
__Year <= 2899, __JulianDate + 19,
__Year <= 2999, __JulianDate + 20,
__Year <= 3099, __JulianDate + 21,
__Year <= 3299, __JulianDate + 22,
__Year <= 3399, __JulianDate + 23
)
RETURN
__GregorianDate
eyJrIjoiY2Y3NmIzMjItYmYzMS00MjY2LTk5NzEtOTUzMjk2NjA0MzA0IiwidCI6IjRhMDQyNzQzLTM3M2EtNDNkMi04MjdiLTAwM2Y0YzdiYTFlNSIsImMiOjN9