Столбец разницы SSRS между столбцами в таблице при группировке по году

Показать отчет — нажмите здесьВ моем запросе есть поле года и группировка столбцов в теме. У меня есть группировка строк по группе продуктов, разделу продуктов и элементу. Если в этом году в разделе нет продаж, а в прошлом году продажи составили 214 долларов, в моей колонке разницы для этого раздела указано, что 214 долларов нет (214 долларов). Имейте в виду, что отсутствие продаж равно отсутствию данных в базе данных, поэтому продажи в этом году в отчете имеют нулевое значение.

Это мое выражение, которое я использую, однако оно не работает:

=IIF(
     ISNothing(Sum(IIF(Fields!Year.Value = MAX(Fields!Year.Value),
                       1,
                       0) * Fields!Subtotal.Value)) = True,
     -1 * (Sum(IIF(Fields!Year.Value = Min(Fields!Year.Value),
                   1,
                   0) * Fields!Subtotal.Value)),
     Sum(IIF(Fields!Year.Value = Max(Fields!Year.Value),
             Fields!Subtotal.Value,
             -1 * Fields!Subtotal.Value))
)

person D. Weaver    schedule 17.11.2015    source источник
comment
Как это не работает? каково точное ожидаемое поведение и фактический результат, когда это выполняется?   -  person Jonnus    schedule 17.11.2015
comment
Я добавил ссылку на изображение отчета. Спасибо Джоннус.   -  person D. Weaver    schedule 17.11.2015
comment
Каков формат этой ячейки в настоящее время?   -  person Jonnus    schedule 17.11.2015
comment
И вы возвращаете ноль из базы данных или 0 (поскольку 0 — это цифра, которая появляется в столбце данных 2015 года)   -  person Jonnus    schedule 17.11.2015
comment
Это выражение для продаж: =IIF(НИЧЕГО(Сумма(Поля!Подытог.Значение)) = ИСТИНА, 0, Сумма(Поля!Подытог.Значение))   -  person D. Weaver    schedule 17.11.2015
comment
Нуль возвращается, потому что нет никаких данных. Если бы я просто запросил складские шкафы за 2015 год, не было бы возвращено ни одной строки.   -  person D. Weaver    schedule 17.11.2015


Ответы (2)


Как вы знаете, ваша проблема генерируется в этом выражении:

Sum(IIF(Fields!Year.Value = Max(Fields!Year.Value),
             Fields!Subtotal.Value,
             -1 * Fields!Subtotal.Value))

Вы упомянули в комментариях, что в 2015 году нет строк для Stock Cabinets, поэтому максимальное значение года для этой группы составляет 2014 год.

Попробуйте использовать это:

Sum(IIF(Fields!Year.Value = Today.Year,
             Fields!Subtotal.Value,
             -1 * Fields!Subtotal.Value))

Это будет работать, если ваш максимальный год равен текущему календарному году. Today.Year принимает текущий календарный год системы во время выполнения.

ОБНОВЛЕНИЕ: я попытался создать минимальный и проверяемый пример вашей проблемы.

Это набор данных, который я использовал.

select 10 Value, 2015 [Year], 'Otro' Category
union all
select 20 Value, 2015 [Year], 'Otro' Category
union all
select 30 Value, 2015 [Year], 'Otro' Category
union all
select 10 Value, 2014 [Year], 'Otro' Category
union all
select 7 Value, 2014[Year], 'Stock Cabinets' Category
union all
select 3 Value, 2014 [Year], 'Stock Cabinets' Category

Я использовал то же выражение в своей итоговой колонке, выражение today.Year — единственное изменение, которое я сделал.

=IIF(
    ISNothing(Sum(IIF(Fields!Year.Value = max(Fields!Year.Value),
                       1,
                       0) * Fields!Value.Value)) = True,
     -1 * (Sum(IIF(Fields!Year.Value = Min(Fields!Year.Value)
     ,1
     ,0) * Fields!Value.Value)),
    Sum(IIF(Fields!Year.Value = Today.Year,
             Fields!Value.Value,
             -1 * Fields!Value.Value))
)

В матрице я задаю такое расположение данных:

введите здесь описание изображения

Я получаю это:

введите здесь описание изображения

Дайте мне знать, если это может вам помочь.

person alejandro zuleta    schedule 17.11.2015
comment
Существует только один набор данных, предоставляющий отчет с информацией в табликсе. Установив область действия для этого набора данных, результаты будут такими же. - person D. Weaver; 17.11.2015
comment
Я тоже пробовал, это все еще не работает (мне пришлось изменить ваше поле!Значение обратно на поле!Промежуточный итог.... Была ли у вас версия Visual Studio/SQL? Я на 2008r2 - person D. Weaver; 18.11.2015
comment
Я создал набор данных, который копировал ваш, и заставил его работать. Я просто не понимаю, почему он не работает с моими данными. - person D. Weaver; 18.11.2015
comment
Вы получаете те же результаты с моим кодом или что вы имеете в виду под не работает? - person alejandro zuleta; 18.11.2015
comment
Я понял. Я использовал это для своего выражения. =IIF(МАКС(Поля!Год.Значение)‹›МАКС(Параметры!Год.Значение(0)), Сумма(IIF(Поля!Год.Значение = Макс.(Поля!Год.Значение), Поля!Промежуточный итог.Значение, -1*Поля!Промежуточный итог.Значение))*-1, Сумма(IIF(Поля!Год.Значение = Макс.(Поля!Год.Значение), Поля!Промежуточный итог.Значение, -1*Поля!Промежуточный итог.Значение))) - person D. Weaver; 18.11.2015

Я понял. Я использовал это для своего выражения:

=IIF(MAX(Fields!Year.Value)<> MAX(Parameters!Year.Value(0)), Sum(IIF(Fields!Year.Value = Max(Fields!Year.Value), Fields!Subtotal.Value, -1*Fields!Subtotal.Value))*-1, Sum(IIF(Fields!Year.Value = Max(Fields!Year.Value), Fields!Subtotal.Value, -1*Fields!Subtotal.Value)))  
person D. Weaver    schedule 02.12.2015