Заполнение '0', когда данных в SSRS не существует

Я пытаюсь создать отчет в SSRS, где у меня есть матрица, в которой в качестве заголовков столбцов указан пол, а в качестве строк - специально определенные возрастные группы. Отчет сортируется по дате (т. Е. Отображаемые записи фильтруются по значению modifedAt). Моя проблема в том, что я хочу, чтобы отображались все категории возрастных групп, даже если набор данных не возвращает никаких данных для этой строки.

Так, например, если я установил дату в качестве даты, в которой нет строк БД, в которых есть дети в возрасте 5-16 лет, - я все еще хочу отобразить имя категории, но просто отобразить ячейки, связанные с этой строкой ' 0', Вместо этого отчет просто удаляет всю строку, потому что, очевидно, запрос не возвращает данных.

Есть ли решение иметь отдельный набор данных, который возвращает весь список категорий, а затем как-то их объединяет? Я'Я застрял здесь, поэтому любая помощь приветствуется!

Ответы на вопрос(2)

Решение Вопроса

Я могу придумать несколько способов сделать это:

Уровень DataSet

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

например Для запроса к базе данных это может быть разница междуinner а такжеleft joinт.е. происходит от чего-то вроде:

select *
from AgeGroup
  inner join MyData on ...

чтобы:

select *
from AgeGroup
  left join MyData on ...

Таким образом, отчет всегда имеет все возрастные группы для отображения. Где естьNULL значения, просто отобразите 0.

Я думаю, что это лучший вариант, если у вас есть контроль над DataSet - вы выигралиВам вообще не нужно обновлять свой отчет, но, к счастью, фактические изменения в DataSet должны быть минимальными, есть только один вызов DataSet, и он 'Это, безусловно, самое простое в обслуживании.

Жесткий код групп в отчете

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

Здесь у вас есть какое-то условное выражение для отображения значений, например, Для каждой группы строк она будет привязана к этой группе:

=Sum(IIf(Fields!AgeGroup.Value = "5-16", Fields!Amount.Value, Nothing)

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

Вложенные

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

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

что это старо, но я хотел уточнитьс разделом 1 выше, используя соединения на уровне набора данных. (Его ответ был очень полезен для меням работаю дальше.)

за оп:

Есть ли решение иметь отдельный набор данных, который возвращает весь список категорий, а затем как-то их объединяет?

Вот как яМы успешно справились с этим, но вы можете сделать это без создания отдельного набора данных, используя обычные табличные выражения (или временные таблицы, конечно).

Для этих примеров таблиц:

       AGE_Table
    ID   Group     Group_Desc    Toys
    1    A         00-10        Teddy Bear
    2    B         11-20        Video Game
    3    C         21-30        Sports Car
    4    D         31-40        Mansion
    5    E         41-50        Jewelry

                 People_Table  (filtered for whatever date)
    ID    Name          Age    Gender   Age_Group
    1     Ariel         07     F        A
    2     Brandon       23     M        C
    3     Chelsea       27     F        C
    4     Derek         06     M        A

Вы хотите увидеть 2 результата для строки 00-10, 2 для строки 21-30, а затем по-прежнему видеть строки для других возрастных групп, даже если их нетникаких результатов.

Мы хотим создать набор данных со всеми возрастными группами, а затем присоединиться к нему. Вот решение с использованием общих табличных выражений:

    with CTE_Age AS
    (SELECT Distinct Age_Group from AGE_Table)

    SELECT ID, Name, Age, Gender, CTE_Age.Age_Group FROM People_Table
    RIGHT JOIN CTE_Age ON
    People_Table.Age_Group = CTE_Age.Age_Group

Это вернет:

    ID     Name        Age     Gender     Age_Group
    1      Ariel       7       F          A
    4      Derek       6       M          A
    NULL   NULL        NULL    NULL       B
    2      Brandon     23      M          C
    3      Chelsea     27      F          C
    NULL   NULL        NULL    NULL       D
    NULL   NULL        NULL    NULL       E

Если у вас есть это в наборе данных, вы можете изменить значения NULL на 0 на стороне построителя отчетов - я думаю, что в 2008R2 значение по умолчанию просто пустое.

Ваш ответ на вопрос