Crystal Reports - фильтрация данных из базы данных - PullRequest
1 голос
/ 13 октября 2009

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

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

Мне нужна только информация об услугах нью-йоркского офиса. Столбец в моей таблице данных показывает все, такие как кухонные услуги, прачечная, парковка, информация об отделе ИТ и, наконец, офисные услуги. Иногда записи, из которых я извлекаю информацию, затрагивают все эти отделы, однако меня интересует ТОЛЬКО мой отдел.
Как тогда я могу разместить фильтр на своем поле, чтобы показать ТОЛЬКО то, что мне нужно увидеть для моего конкретного отдела и не отображать другую информацию? Я пытался использовать редактор Select ... но, похоже, если бы я сказал, чтобы он не отображал службы Kitchen, например, он не будет отображать всю запись (даже если мой отдел был вовлечен).

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

Ответы [ 3 ]

3 голосов
/ 13 октября 2009

Поместите условную логику в часть «Подавление» раздела «Сведения»:

  1. Открыть Раздел эксперта
  2. Выберите секцию Подробности в левой панели
  3. Нажмите странно выглядящую кнопку справа от опции Подавить (без детализации) на правой панели (на вкладке Общие). Обычно текст на кнопке меняет цвет, чтобы указать, есть ли условная логика на месте - красный означает, что есть; синий означает, что нет. alt text
  4. Предоставьте логическое выражение, чтобы оценить его как истинное, если отдел не соответствует ожидаемому отделу

Это остановит вывод в разделе «Подробности» отчета. Если вы разделили раздел с подробностями, вам нужно установить эту логику для каждого подраздела.

Распространенным заблуждением, которое я заметил, поддерживая этот материал в Crystal Reports, было убеждение, что Suppression / etc нужно полностью очистить логические операторы с помощью IF ... THEN - это не обязательно, все, что вам нужно, - это фактический оператор, который нужно оценить.

Это можно сделать практически для любого атрибута, который вы можете поместить в Crystal Report.

1 голос
/ 13 октября 2009

Если у вас есть какая-либо версия Crystal после 8.5, вы можете использовать практически любой SQL, который вы хотите, в качестве источника команд для отчета, устраняя необходимость создания любых объектов БД.

Что хранится в этом поле требования? Звучит так, будто у вас есть несколько значений в строке.

РЕДАКТИРОВАТЬ: Хорошо, так как поле действительно несколько значений, есть несколько вещей, которые вы можете попробовать.

1) Если «Службы Office» определенно уникальны (например, нет записи для «Служб главного офиса», а также для «Служб Office», например), то вы можете использовать простой LIKE в формуле выбора записей:

{tblData.MultipleValueField} LIKE "*Office Services*"

2) Если вы не можете сделать это предположение, тогда вы можете использовать массив, чтобы разделить значения, а затем проверить наличие только «Служб Office»:

"Office Services" In Split({tblData.MultipleValueField}, ",")

Вариант 1, вероятно, будет работать быстрее, так как фильтр будет выполняться на стороне сервера, и по сети будет отправлено меньше записей. Вариант 2 предполагает, что Crystal выполняет фильтрацию и увеличивает сетевой трафик. Я надеюсь, что один из них соответствует вашим требованиям.

0 голосов
/ 13 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...