DAX Calendar Dynami c Праздничная функция - PullRequest
1 голос
/ 26 апреля 2020

Я создаю наш индивидуальный календарь для всей компании. Типичные столбцы basi c (неделя, месяц, год) настроены. Я использую такой подход:

Calendar = 
VAR BaseCalendar =
    CALENDAR ( DATE ( 2016; 1; 1 ); DATE ( 2025; 12; 31 ) )
RETURN
    GENERATE (
        BaseCalendar;
        VAR BaseDate = [Date]
        VAR Year =
            YEAR ( BaseDate )
        VAR MonthNumber =
            MONTH ( BaseDate )
        VAR WeekNumber =
            WEEKNUM ( BaseDate )
        VAR FWeek =
            WEEKNUM ( BaseDate; 21 )
        RETURN
            ROW (
                "Day"; BaseDate;
                "Year"; Year;
                "Month Number"; MonthNumber;
                "Month"; FORMAT ( BaseDate; "mmmm" );
                "Year Month"; FORMAT ( BaseDate; "yyyy-mm" );
                "Day of Week"; FORMAT ( BaseDate; "dddd" );
                "Day of Week Short"; FORMAT ( BaseDate; "ddd" )
            )
    )

Теперь я ищу динамическую c функцию для добавления столбца с нашими выходными. Большинство наших праздников основаны на фиксированной дате, такой как 25.12 или 26.12. Дни вокруг восточной части страны являются динамичными c.

У кого-нибудь есть идеи для этого? Я не хочу использовать дополнительную таблицу со всеми датами праздников.

Ответы [ 3 ]

1 голос
/ 26 апреля 2020

Пасха определяется как первое воскресенье после первого полнолуния 21 марта или после него. Теоретически вы можете определить computus динамически, но я действительно не рекомендую пытаться писать лунные циклы c в DAX вместо фиксированной таблицы дат выходных.

Тем не менее, вполне возможно определить таблицу дат выходных дней как VAR внутри определения таблицы календаря, чтобы у вас не было другой физической таблицы. в вашей модели.

1 голос
/ 26 апреля 2020

Я согласен с Джони, не может быть встроенного подхода к управлению праздниками, потому что они меняются в зависимости от года, страны и даже штата.

Лучшая практика заключается в том, чтобы отслеживать в дополнительной таблице все праздники для вашей компании. Детализация таблицы - это Дата, которая может содержать только дату праздников.

Затем вы присоединяете Календарь к празднику и создаете новый атрибут HOLIDAY_FL в Календаре.

Наконец, Вы знаете для каждой даты в своем календаре, является ли это выходным днем.

0 голосов
/ 29 апреля 2020

Спасибо за вашу помощь и советы. Этот подход работает:

Var for eastern

            VAR Eastern =
                FLOOR ( DATE ( Year; 3; MOD ( 18,37 * MOD ( Year; 19 ) - 6; 29 ) ); 7 ) + 29

Var for Holidays

        VAR IsHoliday =
            SWITCH (
                TRUE ();
                FORMAT ( BaseDate; "MMDD" ) = "0101"; TRUE();
                BaseDate = Eastern - 2; TRUE();
                BaseDate = Eastern + 1; TRUE();
                FORMAT ( BaseDate; "MMDD" ) = "0501"; TRUE();
                BaseDate = Eastern + 39; TRUE();
                BaseDate = Eastern + 50; TRUE();
                FORMAT ( BaseDate; "MMDD" ) = "1003"; TRUE();
                FORMAT ( BaseDate; "MMDD" ) = "1031"; TRUE();
                FORMAT ( BaseDate; "MMDD" ) = "1224"; TRUE();
                FORMAT ( BaseDate; "MMDD" ) = "1225"; TRUE()
            )
...