Как выбрать отличительные записи, где значение параметра существует в столбце в другом представлении (Crystal Reports)? - PullRequest
0 голосов
/ 22 января 2019

У меня есть источник данных (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, и мы должны оставить его необязательным.

...