Post-Image

Мелкие радости - разметка периодов

Рвав-рвав, сегодня я – собака-задремака!

Перед вами – 8-я заметка из нашего цикла «Мелкие радости», и сегодня мы рассмотрим такую проблему, как ручная разметка периодов, дабы «по нажатию одной кнопки» получать необходимый результат.

Ну и, буду честен, постоянно отвечать на вопрос: «А как получить текущий месяц?» и тому подобное, порядком поднадоело.

Вообще, в Power все это решается при помощи элемента визуализации “Slicer” (“Срез”), работающего в относительном режиме, но вот, например, на промежутке «неделя» он работает не совсем корректно. К тому же, подобные вещи часто используются в расчетах.

В общем, собравшись с силами, собака Смайл решил написать маленькую заметку, чтобы потом кидаться ссылками.

Пример:

В качестве исходных данных имеется набор, содержащий всего один столбец “Дата”, данные, содержащиеся в столбце – это просто случайный список дат:

blog_012_screen_1

Задача:

Получить при помощи группы расчетных столбцов необходимо получить диапазон дат, размеченный определенным образом.

Процесс разработки:

  • Формула столбца “Метка года” может выглядеть следующим образом:

    Метка года = 
    VAR _StartingPoint =
        TODAY ()
    VAR _CurrentYear =
        YEAR ( 'Список дат'[Дата] ) = YEAR ( _StartingPoint )
    VAR _LastYear =
        YEAR ( 'Список дат'[Дата] )
            = YEAR ( _StartingPoint ) - 1
    VAR _FutureYear =
        YEAR ( 'Список дат'[Дата] )
            = YEAR ( _StartingPoint ) + 1
    RETURN
        SWITCH (
            TRUE (),
            _CurrentYear, "Текущий год",
            _LastYear, "Прошлый год",
            _FutureYear, "Следующий год",
            "Прочее"
        )

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

  • Формула столбца “Метка квартала” может выглядеть следующим образом:

    Метка квартала = 
    VAR _StartingPoint =
        TODAY ()
    VAR _CurrentYear =
        YEAR ( 'Список дат'[Дата] ) = YEAR ( _StartingPoint )
    VAR _CurrentQuarter =
        QUARTER ( 'Список дат'[Дата] ) = QUARTER ( _StartingPoint )
            && _CurrentYear = TRUE ()
    VAR _LastQuarter =
        QUARTER ( 'Список дат'[Дата] )
            = QUARTER ( _StartingPoint ) - 1
            && _CurrentYear = TRUE ()
    VAR _FutureQuarter =
        QUARTER ( 'Список дат'[Дата] )
            = QUARTER ( _StartingPoint ) + 1
            && _CurrentYear = TRUE ()
    RETURN
        SWITCH (
            TRUE (),
            _CurrentQuarter, "Текущий квартал",
            _LastQuarter, "Прошлый квартал",
            _FutureQuarter, "Следующий квартал",
            "Прочее"
        )

  • Формула столбца “Метка месяца” может выглядеть следующим образом:

    Метка месяца = 
    VAR _StartingPoint =
        TODAY ()
    VAR _Today = 'Список дат'[Дата] = _StartingPoint
    VAR _CurrentYear =
        YEAR ( 'Список дат'[Дата] ) = YEAR ( _StartingPoint )
    VAR _CurrentMonth =
        MONTH ( 'Список дат'[Дата] ) = MONTH ( _StartingPoint )
            && _CurrentYear = TRUE ()
    VAR _LastMonth =
        MONTH ( 'Список дат'[Дата] )
            = MONTH ( _StartingPoint ) - 1
            && _CurrentYear = TRUE ()
    VAR _FutureMonth =
        MONTH ( 'Список дат'[Дата] )
            = MONTH ( _StartingPoint ) + 1
            && _CurrentYear = TRUE ()
    RETURN
        SWITCH (
            TRUE (),
            _CurrentMonth, "Текущий месяц",
            _LastMonth, "Прошлый месяц",
            _FutureMonth, "Следующий месяц",
            "Прочее"
        )

  • Формула столбца “Метка недели” может выглядеть следующим образом:

    Метка недели = 
    VAR _StartingPoint =
        TODAY ()
    VAR _CurrentYear =
        YEAR ( 'Список дат'[Дата] ) = YEAR ( _StartingPoint )
    VAR _CurrentWeek =
        WEEKNUM ( 'Список дат'[Дата], 2 ) = WEEKNUM ( _StartingPoint, 2 )
            && _CurrentYear = TRUE ()
    VAR _LastWeek =
        WEEKNUM ( 'Список дат'[Дата], 2 )
            = WEEKNUM ( _StartingPoint, 2 ) - 1
            && _CurrentYear = TRUE ()
    VAR _FutureWeek =
        WEEKNUM ( 'Список дат'[Дата], 2 )
            = WEEKNUM ( _StartingPoint, 2 ) + 1
            && _CurrentYear = TRUE ()
    RETURN
        SWITCH (
            TRUE (),
            _CurrentWeek, "Текущая неделя",
            _LastWeek, "Прошлая неделя",
            _FutureWeek, "Следующая неделя",
            "Прочее"
        )

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

  • Формула столбца “Метка дня” может выглядеть следующим образом:

    Метка дня = 
    VAR _StartingPoint =
        TODAY ()
    RETURN
        SWITCH (
            'Список дат'[Дата] - _StartingPoint,
            0, "Текущий день",
            -1, "Прошлый день",
            1, "Следующий день",
            "Прочее"
        )

    Рвав-рвав, как вы, возможно, заметили, формулы, приведенные ранее, были построены по одному шаблону, но решений может быть несколько, поэтому выше была продемонстрирована конструкция SWITCH, а не SWITCH ( TRUE ()…).

  • В результате создания описанных расчетных столбцов будет сформирована таблица следующего вида:

    blog_012_screen_2

    Рвав-рвав, таким вот нехитрым образом можно собирать заранее определенные выборки по периодам, так же, формулы можно комбинировать (например, кому-нибудь захочется кнопку, показывающую данные за текущий месяц, но по вчерашнюю дату).

    Всем веселья и добра!

    Ваш Смайл