Страницы: 1
RSS
PP: DATEADD - отклонение к прошлому месяцу по равноценным датам
 
Добрый день.
Необходимо сравнить показатель (в примере выручка) день ко дню прошлого месяца. Для этого использую функцию DATEADD.
Возникает две проблемы:
1. При сравнении текущего месяца к предыдущему, в итогах происходит сравнение [Неполный текущий месяц] / [Полный прошлый месяц]. Как правильно сделать сравнение, чтобы Мера в текущем месяце рассчитывала отклонение 17 дней этого месяца / 17 дней предыдущего месяца? Но, при этом не трогать прошлые месяца?
2. При добавлении в конце меры "минус 1", в таблицу добавились все пустые месяца со значением (-100%), очевидно к каждому пустому значению он применяет эту операцию. Как вычесть единицу из результата меры, не рассчитывая весь календарь?
Код
Динамика, %:=([_Выручка]/CALCULATE([_Выручка];DATEADD('Calendar'[Date];-1;MONTH)))-1
 
Про единичку можно объехать так:
Код
Динамика, %:=
var s = DIVIDE( [_Выручка]; CALCULATE([_Выручка];DATEADD('Calendar'[Date];-1;MONTH))) 
return 
IF( NOT(ISBLANK( s ) ); s - 1 )

А вот про первый вопрос вы в примере покажите какой хотите получить результат в отчете? рядышком формулой Эксель и или просто руками значения повтыкайте и объясните логику.
Вот горшок пустой, он предмет простой...
 
Там есть 2 ячейки выделенные цветом. Когда мы делим продажи октября на сентябрь, то получаем 0%, когда мы делим ноябрь на октябрь то получаем -33%, но это не правильно, потому что в мере сравнивается вся сумма за октябрь и 17 дней за ноябрь. Тогда прирост, актуальный, в ноябре (на 17 дней) по сравнение с октябрем будет +31%.Проще говоря, я хочу чтобы в общем итоге у меня было сравнение по равноценным дням, а не сумма за 17 дней / на сумму за 30 дней, чтобы понимать как в целом мы идем по месяцу.
 
Вот набросок, сейчас допилить уже не успеваю. Копайте дальше в этом же направлении. Но эта мера работает только если в вашем исходном массиве в конце нет дат с пустыми значениями выручки.
Код
Динамика, %:=
var maxd = CALCULATE( MAX( 'Sales'[Дата] ); ALL( 'Calendar' ) )
var curd = MAX( Sales[Дата])
var s = DIVIDE( [_Выручка]; CALCULATE([_Выручка]; FILTER( DATEADD('Calendar'[Date]; -1; MONTH); DAY('Calendar'[Date]) <= DAY(maxd) ) ) )
return 
IF( NOT(ISBLANK( s ) ); s - 1 )
Изменено: PooHkrd - 18.11.2020 18:06:26
Вот горшок пустой, он предмет простой...
 
Доброе время суток.
Цитата
Илья Обрывин написал:
17 дней этого месяца / 17 дней предыдущего месяца?
Вариант
Код
=
VAR curMonthDates =
    CALCULATETABLE (
        VALUES ( 'Calendar'[Date] );
        FILTER ( 'Sales'; NOT ( ISBLANK ( 'Sales'[Выручка] ) ) )
    )
VAR equalPrevMonthDates =
    DATEADD ( curMonthDates; -1; MONTH )
VAR equalPrevMonthSum =
    CALCULATE ( [_Выручка]; equalPrevMonthDates )
RETURN
    DIVIDE ( [_Выручка]; equalPrevMonthSum; BLANK () )
 
Всем спасибо, то что нужно!
Изменено: Илья Обрывин - 19.11.2020 10:04:25
Страницы: 1
Наверх