Общее число месяцев за последний год до определенного дня месяца - PullRequest
0 голосов
/ 05 февраля 2019

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

Так, например, если фильтргод = 2019 и месяц = ​​2, мне нужны продажи MTD за февраль 2018 года до 5-го числа, исчисляемые изо дня в день:

MTDSales=
VAR MyDay = 5
RETURN
CALCULATE(
  TOTALMTD(SUM(Sales); Calendar[Date]);
  SAMEPERIODLASTYEAR(Calendar[Date]);
  //here I need another filter to stop on the 5th!
)

Редактировать:

Пожалуйста, посмотрите на эту ссылку , чтобы просмотреть примеры данных.

Меры, которые я пытаюсь построить, включают: MTD CY продаж
MTD LY продаж MTD CY *
MTD LY продаж * MTD CY продаж**
Продажи MTD LY **

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Я предполагаю, что вы используете 5, поскольку сегодня 5 февраля.

Вы можете получить MTDSales для текущего месяца, например так:

MTDSales = 
VAR DateRange = DATESBETWEEN( Calendar[Date], EOMONTH(TODAY(), - 1) + 1, TODAY() )
RETURN CALCULATE( SUM( Sales ), DateRange )

Чтобы соответствовать этомус предыдущим годом просто используйте SAMEPERIODLASTYEAR.

LastYearMTDSales = 
VAR DateRange = DATESBETWEEN( Calendar[Date], EOMONTH(TODAY(), - 1) + 1, TODAY() )
RETURN CALCULATE( SUM( Sales ), SAMEPERIODLASTYEAR(DateRange) )

Если вы хотите использовать дату, отличную от TODAY, просто укажите эту дату в качестве переменной и передайте ее в DateRange переменная, где появляется TODAY.


Если вы хотите найти MTDSales до 5-го числа месяца (при условии, что у вас есть месяц в контексте фильтра), попробуйте это

MTDSales = 
Var MyDay = 5
VAR MyDate = MIN( Calendar[Date] ) + MyDay - 1
VAR DateRange = DATESBETWEEN( Calendar[Date], EOMONTH(MyDate, -1) + 1, MyDate )
RETURN CALCULATE( [Sum of Sales], DateRange )

Затем за предыдущий год вы можете повторно использовать эту меру, но сместились:

PrevYearMTDSales = 
CALCULATE( [MTDSales], ALL( Calendar ), SAMEPERIODLASTYEAR( Calendar[Date] ) )

Редактировать: После просмотра вашей PBIX я понял,что я сделал неверное предположение о контексте вашего фильтра.Поскольку вы хотите написать показатель на уровне даты, попробуйте вместо этого:

Sales MTD CY =
VAR MyDay = 5
VAR CurrentDate = MAX ( 'Calendar'[Date] )
VAR MyDate = EOMONTH ( CurrentDate, -1 ) + MIN ( MyDay, DAY ( CurrentDate ) )
RETURN
    CALCULATE (
        TOTALMTD ( SUM ( Sales[Sales] ), 'Calendar'[Date] ),
        FILTER ( 'Calendar', 'Calendar'[Date] <= MyDate )
    )

Показатель предыдущего года все еще можно сделать, ссылаясь на этот показатель и сдвиг.

0 голосов
/ 05 февраля 2019

Замените мои имена столбцов на ваши, и они должны работать. Формула остается прежней:

MTDSales = 
VAR MyDay = 5
RETURN
CALCULATE(
  TOTALMTD([total sales], 'Calendar'[DateKey]),
  SAMEPERIODLASTYEAR('Calendar'[DateKey]),
  FILTER(
      ALL(Sales),
      Sales[DateKey] >= STARTOFMONTH('Calendar'[DateKey]) && Sales[DateKey] <= DATEADD(STARTOFMONTH(Sales[DateKey]),MyDay-1,DAY)
      )
    )

enter image description here

...