Crystal Reports удаляет все данные со значением Null при их добавлении в отчет.

У меня есть отчет, который всегда работал. По сути, отчет работает с базой данных с использованием Catapult (система ПК для бэк-офиса для наших розничных магазинов). Цель отчета — получить файл с некоторой базовой информацией, которая позже будет извлечена для меток.

У меня сейчас проблема. Я хотел найти способ добавить в этот отчет поле «Промо-цена». Для этого я вытащил другую таблицу (представление) из нашей базы данных и связал таблицы, чтобы позволить мне показать «Промо-цену» (DIS_Description). Теперь я помещаю поле (DIS_Description) в отчет и запускаю его. Он отлично работает, чтобы показать мне поле Promo Price для записей, у которых действительно есть Promo Price (опять же, управляемый в самой Catapult). Но для записей, которые не имеют значения для DIS_Description, они вообще не будут отображаться. Я не фильтрую отчет, поэтому я не могу просто указать "OR ISNULL({DIS_Description})", чтобы исправить это.

Есть ли способ показать записи, которые не имеют значения для этого поля? Я даже пытался создать следующую формулу и использовать ее в отчете вместо самого поля DIS_Description:

ЕСЛИ НЕНУЛЬ({DIS_Description})

ТОГДА ""

ИНАЧЕ {DIS_Description}

Это по-прежнему не возвращает никаких данных, если поле не имеет значения. Во-вторых, я удаляю это поле из отчета, он показывает все как надо. Любые идеи здесь?


person Will    schedule 17.02.2016    source источник
comment
Вы пытались изменить настройки по умолчанию для NULLS? в семинаре по формулам посмотрите, где говорится об исключении для нулей, и измените его так, чтобы нули были нулями. это решит проблему?   -  person Dave Kelly    schedule 18.02.2016
comment
Похоже, добавленное вами поле оказалось в объединении таблиц?   -  person Dave Kelly    schedule 18.02.2016
comment
Дэйв Келли, я не уверен, где я должен изменить его на nulls = 0... Я вижу, где написано «Исключения для нулей», но единственное, что я могу изменить, это «Значения по умолчанию для нулей».   -  person Will    schedule 18.02.2016
comment
Если вы измените его на значения по умолчанию, тогда строки станут '', а int будет 0   -  person Dave Kelly    schedule 18.02.2016


Ответы (1)


Хорошо, я ковырялся со ссылками на таблицы и, кажется, разобрался. Соединение было ВНУТРЕННИМ СОЕДИНЕНИЕМ (не уверен на 100%, что означают разные типы соединений). Пробовал менять на другие. LEFT OUTER JOIN вернул те же проблемы. Затем я попробовал RIGHT OUTER JOIN, и, похоже, он отлично возвращает мои данные...

Кто-нибудь хочет объяснить, почему? По крайней мере, теперь у меня есть ответ.

person Will    schedule 17.02.2016
comment
Вы должны быть ОЧЕНЬ осторожны с объединениями sql, особенно когда вы не знаете, что они означают. Оставив свое внутреннее соединение, как и раньше, в параметрах отчета есть параметр, называемый Преобразование значений NULL базы данных в типы по умолчанию, возможно, это не проверено в вашем случае. - person aMazing; 18.02.2016
comment
Левое соединение и правое соединение делают одно и то же, только разница в том, какая таблица используется в качестве базовой, а какая — в качестве увеличивающей. Я называю базовой таблицей ту, которая сравнивается, и увеличивающей таблицей, которая может привести к нулевым значениям там, где нет данных. Какая таблица левая, а какая правая, зависит от того, в каком направлении указывает ваша стрелка, что является результатом направления, в котором вы перетаскиваете столбец при связывании. Вы перетаскиваете от левого стола к правому столу. - person Jim Lutz; 18.02.2016