PBI Годовой расчет за год - PullRequest
0 голосов
/ 18 февраля 2019

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

FileDate    Units   UnitsLY WeekNum Year    UnitsYOY%
1/22/2019 0:00  3751    2890    4   2019    
1/15/2019 0:00  3518    2625    3   2019    
1/8/2019 0:00   4075    2590    2   2019    
1/1/2019 0:00   4349    2982    1   2019    

WeekNum = WeekNum(PaymentsByWeek[FileDate])
Year = Year(PaymentsByWeek[FileDate])

UnitsLY, WeekNum и Year - это вычисляемые поля на основе Filedate.Я хотел бы рассчитать изменение единицы YOY и процентное изменение для каждой конкретной недели.

UnitsLY = IF (
   HASONEVALUE ( 'Calendar'[CalendarYear] )
       && HASONEVALUE ('Calendar'[WeekNumberOfYear] ), CALCULATE(
        Max(PaymentsByWeek[Units]),
       FILTER (
           ALL ( 'Calendar' ),
           'Calendar'[CalendarYear] = VALUES ( 'Calendar'[CalendarYear] )-1
               && 'Calendar'[WeekNumberOfYear] = VALUES ( 'Calendar'[WeekNumberOfYear] )
              )       )   )
PaymentsByWeek),  PaymentsByWeek[Year] =  PaymentsByWeek[Year] -1  &&  'PaymentsByWeek'[WeekNum]=thisweek  ))

Приведенная ниже формула дает мне «круговую зависимость была обнаружена».Я также попытался поместить вычисление UnitsLY в формулу, но проблема все еще та же.

UnitsYOY% = DIVIDE (PaymentsByWeek [Units] - [UnitsLY], [UnitsLY])

Наконец-то япробовал это с помощью Vars, но он возвращает все значения нулей

UnitsYOY% = var week= (PaymentsByWeek[WeekNum]) var lastyear =( PaymentsByWeek[Year] -1)  var ly =( CALCULATE(  sum(PaymentsByWeek[Units]) ,
                    FILTER('PaymentsByWeek'
                    ,'PaymentsByWeek'[WeekNum] =week && PaymentsByWeek[year]= lastyear )))   Return Divide(PaymentsByWeek[Units]-ly ,ly)

Как рассчитать единицу и процентное изменение между конкретными неделями?

Ответы [ 2 ]

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

Я решил эту проблему.Я создавал столбцы, которые дают мне ошибку зависимости.Я создал все 3 поля в качестве меры, и они работают правильно.

PmtsLY = calculate( MIn(PaymentsByWeek[Pmts]),
FILTER(ALL('PaymentsByWeek'),
    'PaymentsByWeek'[Year]= Min('PaymentsByWeek'[Year])-1 && 'PaymentsByWeek'[WeekNum] = Min('PaymentsByWeek'[WeekNum]) ))  

PmtsYOY = calculate( Min(PaymentsByWeek[Pmts]) - PaymentsByWeek[PmtsLY] )


PmtsYOY% = calculate( DIVIDE(  (Min(PaymentsByWeek[Pmts]) - PaymentsByWeek[PmtsLY]) ,  PaymentsByWeek[PmtsLY],0)*100  )

PmtsYOY = calculate( Min(PaymentsByWeek[Pmts]) - PaymentsByWeek[PmtsLY] )
0 голосов
/ 18 февраля 2019

Как насчет использования встроенных функций DAX для анализа времени?

CALCULATE(
          DIVIDE(PaymentsByWeek[Units]-[UnitsLY],[UnitsLY]),
          PARALLELPERIOD(PaymentsByWeek[FileDate],-1,year)
         )

А, понятно.Суть проблемы круговой ссылки в том, что у вас есть ссылка на [Units] в формуле для [UnitsLY] calc.колонка.Возможно, это решит проблему:

(1) Удалите [UnitsLY] calc.и вместо этого используйте меру - что-то вроде этого - я предполагаю, что здесь столбец Units содержит данные для «всех лет»:
CALCULATE(SUM(PaymentsByWeek[Units]),FILTER(ALL('Calendar'),'Calendar'[WeekNum] = MIN('Calendar'[WeekNum]) -1 ))

(2) Используйте другую меру для вычисленияпроцентное изменение, т. е. используйте вышеуказанную меру в функции РАЗДЕЛИТЬ.

Кроме того, вы можете обойтись с 1 тактом, если не хотите отображать единицы измерения в любом месте.

...