2015-07-10 3 views
0

Я использую excel 2013 powerpivot, который я связал с SQL-запросом. В этом запросе у меня есть все данные о продажах за предыдущие годы, и он обновляется с текущими продажами. Я хочу, чтобы в этом году была проведена оптимизация по сравнению с аналогичным периодом прошлого года. Так, например, с 1 января 2015 года по 10 июля 2015 года по сравнению с 1 января 2014 года по 10 июля 2014 года. Я связал таблицу продаж с таблицей календаря. Но независимо от того, что я пытаюсь сделать, параллельного периода, того же самого периода, тотального, он всегда показывает мне правильные данные за этот год, но полный год продаж в прошлом году. Может ли кто-нибудь порекомендовать мне, что попробовать?Powerpivot: год к году против года на год предыдущий год

спасибо,

Frank

ответ

0

TOTALYTD (и другие функции времени разведки) будет искать самую высокую дату в зависимости от того контекста, вы даете, поэтому, когда вы пытаетесь сказать ему, чтобы вернуться через 12 месяцев с теперь он думает «ОК, я в 2014 году». Я получу ВСЕ данные с 2014 года и рассчитаю TOTALYTD. Таким образом, вы должны игнорировать встроенные функции и построить свой собственный:

=CALCULATE(sum(Table1[sales]),DATESBETWEEN(DateDim[Date], FIRSTDATE(DATEADD(DateDim[Date],-12,MONTH)), LASTDATE(DATEADD(Table1[Date],-12,MONTH)))) 

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

Редактировать: Протестировав образец данных, снова DAX пытается быть слишком умным, и поскольку я сказал ему вернуться 12 МЕСЯЦЕВ, он предполагает, что я хочу, чтобы ВСЕ данные из контекста месяца включали все с июля прошлого года год. Возвращение 365 дней исправляет это (если это не проблема для високосных лет).

=CALCULATE(sum(Table1[sales]),DATESBETWEEN(DateDim[Date], FIRSTDATE(DATEADD(DateDim[Date],-12,MONTH)), LASTDATE(DATEADD(Table1[Date],-365,DAY)))) 
0

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

Для текущей продажи год я иметь следующую формулу Dax

=TOTALYTD(sum(Omzetgegevens[NettoOmzet]); Kalender[Calender date]) 

за предыдущий год продажи у меня есть:

=CALCULATE((SUM(Omzetgegevens[NettoOmzet])); SAMEPERIODLASTYEAR(DATESYTD(Kalender[Calender date]))) 

Чтобы проверить свое решение я назвал «тест Наивысший»:

=CALCULATE(SUM(Omzetgegevens[NettoOmzet]); DATESBETWEEN(Kalender[Calender date]; FIRSTDATE(DATEADD(Kalender[Calender date];-12; MONTH)); LASTDATE(DATEADD(Kalender[Calender date]; -365; DAY)))) 

Если я запустил pivottable, то результатом я получаю:

2015   
    current year ytd last year ytd test ytd 
januari   28.912   34.487   34.487 
februari  50.301   66.003   31.516 
maart   73.362   92.647   26.644 
april   99.561   117.853 25.205 
mei   128.021   149.108 31.255 
juni   149.706   174.076 24.968 
juli   158.297   205.438 31.362 
augustus 158.297   231.693 26.255 
september 158.297   254.534 22.841 
oktober   158.297   282.484 27.951 
november 158.297   303.808 21.324 
december 158.297   313.208  9.400 
Total 158.297   313.208 313.208 

Что я хотел бы видеть в следующем. Поскольку этот отчет был запущен 14-го июля 2015 года. Я хочу видеть все продажи на 2015 год до этой даты и всех продаж на 2014 год до 14 июля 2014 года.

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

2015   
    current year ytd last year ytd 
januari   28.912   34.487   
februari  50.301   66.003   
maart   73.362   92.647   
april   99.561   117.853  
mei   128.021   149.108  
juni   149.706   174.076  
juli   158.297   175.312(so not full month of july in 2014) 
Total   158.297   175.312  
+0

В дополнение к комментарию Джеймса, пожалуйста, также обязательно примените правильное форматирование –

0

Недавно была аналогичная проблема. Текущий контекст много путает и не возвращает результат, который, как мы думаем, должен быть возвращен. Играйте с DATEADD, чтобы идти туда и обратно в сочетании с любой функцией даты/времени. Вы получите результат, и контекст также станет ясным.

Смежные вопросы