У меня есть источник данных (SP), который имеет данные в следующем формате:
+----------+-----------+-------+---------+
| Customer | Territory | Date | Invoice |
+----------+-----------+-------+---------+
| CU1 | A3 | Date1 | I1 |
| CU2 | B2 | Date2 | I2 |
| CU1 | A3 | Date3 | I3 |
+----------+-----------+-------+---------+
и так далее. В дополнение к этому есть 8-10 столбцов сведений.
Теперь мы хотим использовать Crystal Reports с параметром для территории, который имеет иерархическую структуру: дочерние и родительские отношения:
A1 -> A2 -> A3.
Что мы хотели бы сделать, так это: если A2 является входным параметром, в отчете должны быть показаны данные всех клиентов, принадлежащих к A2 или его дочерним элементам, т. Е. A3.
Я создал вид, в котором есть данные о территориях:
+-----------+--------+
| Territory | Parent |
+-----------+--------+
| A1 | A1 |
| A2 | A1 |
| A2 | A2 |
| A3 | A1 |
| A3 | A2 |
| A3 | A3 |
+-----------+--------+
Мой способ приблизиться к этому:
Если входной параметр является одним из РОДИТЕЛЕЙ территории клиента, это означает, что клиент находится в выбранной территории и, следовательно, выбирает его. Игнорировать все записи, в которых параметр не указан в качестве одного из РОДИТЕЛЕЙ.
Для этого я создал левое внешнее соединение между двумя источниками данных между территориями:
SP.Territory = View.Territory
Затем я использовал следующую формулу выбора записи для параметра:
@TerritoryParam = View.Parent
Но это приводит к дублированию записей. Если количество дочерних родительских ссылок равно 3, как в A3-> A3, A3-> A2, A3-> A1, все записи CU1 клиента возвращаются 3 раза:
+----------+-----------+-------+---------+
| Customer | Territory | Date | Invoice |
+----------+-----------+-------+---------+
| CU1 | A3 | Date1 | I1 |
| CU1 | A3 | Date1 | I1 |
| CU1 | A3 | Date1 | I1 |
| CU1 | A3 | Date3 | I3 |
| CU1 | A3 | Date3 | I3 |
| CU1 | A3 | Date3 | I3 |
+----------+-----------+-------+---------+
У него простая логика, но я не могу заставить его работать. Может кто-нибудь помочь мне? Я был бы очень признателен.
Редактировать: если в CR выбрано несколько значений, т. Е. Предположим, что пользователь выбирает и А1, и А2, должна отображаться только одна запись, а не две. Я понимаю, что моя формула выше не сможет этого сделать.
Если вместо этого у вас есть способ изменить SP в MS-SQL вместо этого, я был бы признателен. Единственное условие - я не могу включить параметр @TerritoryParam в SP, так как это делает его обязательным в Crystal Report, и мы должны оставить его необязательным.