Рассчитать значение текущего и предыдущего месяца на основе выбора слайсера в power bi

У меня есть две таблицы под названием

  • Основная таблица содержит следующие данные (рис.) и
  • Таблица дат, созданная с использованием дат из основной таблицы.

Я хочу рассчитать два поля/меры на основе выбора среза даты из таблицы дат.

  • выручка за текущий месяц
  • выручка за предыдущий месяц

Пример: если я выбрал 4-й месяц, тогда он должен суммировать отдельный доход клиентов A и B за 4-й месяц как current_month_revenue и суммировать отдельный доход клиентов A и B за 3-й месяц как previous_month_revenue.

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

'Measure Previous Month Revenue' =
IF (
    ISFILTERED ( 'Date'[Year_Month] ),
    VAR myTable =
        SUMMARIZE (
            'Main Table',
            'Main Table'[ClientName],
            'Main Table'[Mon],
            'Main Table'[Revenue]
        )
    RETURN
        CALCULATE (
            SUMX (
                myTable,
                'Main Table'[Revenue]
            ),
            FILTER (
                'Main Table',
                'Main Table'[Mon]
                    = SELECTEDVALUE ( 'Date'[Month] - 1 )
            )
        ),
    VAR myTable =
        SUMMARIZE (
            'Main Table',
            'Main Table'[Revenue],
            'Main Table'[Mon],
            'Main Table'[Revenue]
        )
    RETURN
        SUMX (
            FILTER (
                myTable,
                'Main Table'[Mon]
                    = MONTH (
                        TODAY ()
                    ) - 1
            ),
            'Main Table'[Revenue]
        )
)

Желаемый результат

Если выбран 4-й месяц

  • Доход за текущий месяц = ​​100 + 200 = 300
  • Предыдущий месяц = ​​100+200 = 300

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

Это поможет респондентам представить ваши данные в текстовом виде, а не в виде изображения.

Alexis Olson 09.12.2020 22:04
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
7 494
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

CALCULATE не влияет на переменные, которые вы уже определили, поэтому FILTER ничего не делает с первым SUMX. См. этот пост по теме для более подробной информации.


Я бы предложил написать меру намного проще. Что-то вроде этого:

Previous Month Revenue =
VAR PrevMonth =
    SELECTEDVALUE (
        'Date'[Month],
         MONTH ( TODAY () )
    ) - 1
RETURN
    CALCULATE (
        SUM ( 'Main Table'[Revenue] ),
        'Main Table'[Mon] = PrevMonth
    )

Да..Использовал его вместе с вышеперечисленным, чтобы получить желаемый результат.

Bond 10.12.2020 20:57
Ответ принят как подходящий

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

Кроме того, поскольку в «Основной таблице» нет года, я предполагаю, что год не следует учитывать.

Из слайсера над таблицей дат мы можем напрямую получить выбранную дату [месяц] с помощью SELECTEDVALUE(). В качестве параметра по умолчанию мы используем текущий месяц, полученный функцией TODAY().

Затем мы получаем предыдущий месяц, вычитая один из выбранного месяца, и мы можем использовать его для среза таблицы, сгруппированной по CustomerName, Mon и Revenue. Группировка необходима для удаления повторяющихся доходов для одного и того же клиента в том же месяце и реализуется с помощью SUMMARIZE().

В качестве последнего шага мы можем агрегировать «Основную таблицу» [Доход] отфильтрованной и сгруппированной таблицы, используя SUMX.

'Measure Previous Month Revenue' = 
VAR CurrentMonth =
    MONTH(
        TODAY()
    )
VAR SelectedMonth =
    SELECTEDVALUE(
        'Date'[Month],
        CurrentMonth
    )
VAR PrevMonth = SelectedMonth - 1   
VAR MyTable =
    CALCULATETABLE(
        SUMMARIZE(
            'Main Table',
            'Main Table'[ClientName],
            'Main Table'[Mon],
            'Main Table'[Revenue]
        ),
        'Main Table'[Mon] = PrevMonth,
        REMOVEFILTERS( 'Date' )
    )
VAR Result =
    SUMX(
        MyTable,
        'Main Table'[Revenue]
    )
RETURN
    Result

Тот же код, но для расчета предыдущего месяца, можно записать для текущего месяца.

'Measure Current Month Revenue' = 
VAR CurrentMonth =
    MONTH(
        TODAY()
    )
VAR SelectedMonth =
    SELECTEDVALUE(
        'Date'[Month],
        CurrentMonth
    )
VAR MyTable =
    CALCULATETABLE(
        SUMMARIZE(
            'Main Table',
            'Main Table'[ClientName],
            'Main Table'[Mon],
            'Main Table'[Revenue]
        ),
        'Main Table'[Mon] = SelectedMonth,
        REMOVEFILTERS( 'Date' )
    )
VAR Result =
    SUMX(
        MyTable,
        'Main Table'[Revenue]
    )
RETURN
    Result

Лучшее решение может быть реализовано путем установки связи между таблицей «Дата» и «Основной таблицей». В зависимости от бизнес-требований можно использовать таблицу дат с детализацией на уровне месяца со столбцом YearMonth вместо столбца Mon или на уровне дня со столбцом Date вместо столбца Mon.

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

Bond 10.12.2020 12:10

Итак, в «Основной таблице» есть столбец «Дата» и связь между этим столбцом и «Датой» [Дата]. Затем эту меру можно изменить, удалив фильтр «Дата».

sergiom 10.12.2020 15:15

Ура !! это работает, спасибо @sergiom Спасибо за вашу помощь. REMOVEFILTERS('Date') была недостающей частью. Не могли бы вы помочь мне понять, почему мы использовали эту строку?

Bond 10.12.2020 20:55

Нам нужно удалить фильтрацию, введенную связью между таблицей Date и основной таблицей. Это связано с тем, что выборка в слайсере распространяется из таблицы дат в основную таблицу в соответствии с отношением. Но вместо этого мы хотим применить фильтр к столбцу Mon, поэтому мы должны избавиться от этого фильтра, и REMOVESFILTERS('Date') делает следующее: удаляет фильтр, распространяющийся из таблицы Date в основную таблицу. Эффект REMOVEFILTERS является локальным для функции CALCULATE, где она применяется. После удаления фильтра применяется фильтр над столбцом Mon.

sergiom 10.12.2020 21:18

Знание того, что модель содержит связь между таблицей Date и таблицей Main Table, позволит написать показатель, использующий функции анализа времени, без необходимости использовать столбец Mon. Но это будет другой Вопрос с описанием модели, грануляром таблицы «Дата» и подтверждением того, что столбец «Пн» содержит тот же месяц, что и дата, используемая для отношения.

sergiom 10.12.2020 21:24

Ааа... Спасибо за объяснение, помогло в написании других формул.

Bond 11.12.2020 20:24

Другие вопросы по теме