Сумма суммы на основе предыдущего значения на мощности слайсера bi

У меня есть такая таблица:

Year        Month       Code     Amount
---------------------------------------   
2017        11           a        7368    
2017        11           b        3542    
2017        12           a        4552    
2017        12           b        7541    
2018         1           a        6352    
2018         1           b        8376    
2018         2           a        1287    
2018         2           b        3625

Я делаю срез на основе года и месяца (игнорируя код), и я хочу показать СУММУ суммы следующим образом:

  • Если я выберу на слайсере Year 2017 and Month 12, будет отображаться значение SUM Amount base на 2017-11 годы, а для выбора на слайсере Year 2018 and Month 1 должно быть установлено значение SUM Amount base на 2017-12

Я пробовал это для тестирования, но это не разрешено:

Last Month = CALCULATE(SUM(Table[Amount]); Table[Month] = SELECTEDVALUE(Table[Month]) - 1)

Как это правильно делать?

Я хочу что-то вроде этого

https://ibb.co/eGJTce

NB: я использую прямой запрос к SQL Server

Обновление: на данный момент я добавил столбец Last_Amount в таблицу SQL Server по подзапросу, возможно, у вас, ребята, есть лучший способ решения моей проблемы


person Adrin Pratama    schedule 24.08.2018    source источник
comment
Вы также должны показать нам, как выглядит ожидаемый результат. Логика мне не совсем понятна, просто исходя из вашего описания.   -  person Tim Biegeleisen    schedule 24.08.2018
comment
@TimBiegeleisen Я пока не могу загрузить изображение, но, возможно, оно будет выглядеть так: ibb.co/eGJTce   -  person Adrin Pratama    schedule 24.08.2018


Ответы (1)


Фильтры в операторе CALCULATE предназначены только для приема простых операторов, не требующих дополнительных вычислений. Есть несколько возможных решений.

1. Используйте переменную для вычисления номера предыдущего месяца, прежде чем использовать его в функции CALCULATE.

Last Month = 
    VAR PrevMonth = SELECTEDVALUE(Table[Month]) - 1
    RETURN CALCULATE(SUM(Table[Amount]), Table[Month] = PrevMonth)

2. Используйте FILTER() функцию. Это итератор, позволяющий выполнять более сложную фильтрацию.

Last Month = CALCULATE(SUM(Table[Amount]),
                 FILTER(ALL(Table),
                     Table[Month] = SELECTEDVALUE(Table[Month]) - 1))

Изменить: поскольку вы используете год и месяц, вам нужен особый случай для января.

Last Month = 
    VAR MonthFilter = MOD(SELECTEDVALUE(Table[Month]) - 2, 12) + 1
    VAR YearFilter = IF(PrevMonth = 12,
                         SELECTEDVALUE(Table[Year]) - 1,
                         SELECTEDVALUE(Table[Year]))
    RETURN CALCULATE(SUM(Table[Amount]),
               Table[Month] = MonthFilter,
               Table[Year] = YearFilter)
person Alexis Olson    schedule 24.08.2018
comment
которые доводят месяц от 1 до 0. Я также должен произвести расчет в году, если выбранное значение равно 1. Можно ли рассчитать с этим условием? функция ФИЛЬТР не работала в режиме прямого запроса, я пробовал это. - person Adrin Pratama; 26.08.2018
comment
это круто! большое спасибо Алексис за помощь мне :) - person Adrin Pratama; 31.08.2018