Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
rasvalera
Contributor
Contributor

Подстановка значения при загрузке

Добрый день!

Знатоки, прошу помочь разобраться с подходом к ETL:

(возможно я изначально неправильно пытаюсь найти решение, прошу ногами сразу не бить)

Есть два стула две таблицы - фактические операции клиентов и продажи из CRM. Нужно эти две таблицы между собой сопоставить, причем для каждой фактической операции клиента нужно найти уникальную пару в таблице с продажами (ключевое поле для поиска клиент).


Клиентские операции:

Клиент Карта

Клиент1 Карта1

Клиент1 Карта2

Клиент1 Карта3

Клиент2 Карта1

Клиент2 Карта2

Клиент2 Карта3


Для каждой из этих карт нужно найти номер сделки в другой таблице:


Сделка Исполнитель Дата Клиент

1 Петров 01.09.2018 Клиент1

3 Петров 03.09.2018 Клиент1

5 Петров 05.09.2018 Клиент2

2 Сидоров 02.09.2018 Клиент1

4 Сидоров 04.09.2018 Клиент2

6 Сидоров 06.09.2018 Клиент2


В итоге должно получиться:

Клиент Карта Сделка

Клиент1 Карта1 1

Клиент1 Карта2 3

Клиент1 Карта3 2

Клиент2 Карта1 5

Клиент2 Карта2 4

Клиент2 Карта3 6


По сути это ВПР с динамичным удалением уже найденных значений, но ни applymap ни lookup не подходят, т.к. при каждом новом успешном поиске нужно найденное значение удалять из таблицы. В qv я новичок и никак не могу разобраться как это сделать. Спасибо!

1 Solution

Accepted Solutions
Sergey_Polekhin
Employee
Employee

Добрый вечер,

Полагаю, задача требует уточнений.

Вопросы:

  1. Каковы примеры реальных значений поля "Карта"?  Я правильно понимаю, что это не просто слово "Карта" с порядковым номером, а некоторый уникальный идентификатор?
  2. Каковы правила распределения Карт по сделкам, если Карт меньшее количество, чем Сделок по конкретному Клиенту? Т.е. например, имеем для конкретного Клиента три уникальные Карты, а сделок у нас по этому Клиенту - 6 штук. Как имеющиеся три Карты должны назначаться Сделкам с 4 по 6?  Карты будут распределяться опять по порядку (с первой по третью), или, например, всем сделкам с 4 по 6 будет назначаться номер последней карты (т.е. третьей карты)?
  3. Важно ли сохранение исходного порядка следования записей в обоих таблицах, или достаточно просто распределить все сделки в любом порядке? Или, например, порядок должен зависеть от даты сделки?

Привожу пример для для случая, когда:

  1. В поле "Карта" хранится некоторый уникальный идентификатор (в общем случае - всё, что угодно)
  2. При неравном количестве карт и соответствующих им сделок используем подход равномерного последовательного распределения карт по сделкам, т.е. распределение карт повторяется сначала.
  3. Сохраняем исходный порядок следования записей в обоих таблицах


Присоединяю пример приложения (со скриптом) и усложнённый вариант исходных данных.

Комментарии - в теле скрипта.


View solution in original post

3 Replies
Sergey_Polekhin
Employee
Employee

Добрый вечер,

Полагаю, задача требует уточнений.

Вопросы:

  1. Каковы примеры реальных значений поля "Карта"?  Я правильно понимаю, что это не просто слово "Карта" с порядковым номером, а некоторый уникальный идентификатор?
  2. Каковы правила распределения Карт по сделкам, если Карт меньшее количество, чем Сделок по конкретному Клиенту? Т.е. например, имеем для конкретного Клиента три уникальные Карты, а сделок у нас по этому Клиенту - 6 штук. Как имеющиеся три Карты должны назначаться Сделкам с 4 по 6?  Карты будут распределяться опять по порядку (с первой по третью), или, например, всем сделкам с 4 по 6 будет назначаться номер последней карты (т.е. третьей карты)?
  3. Важно ли сохранение исходного порядка следования записей в обоих таблицах, или достаточно просто распределить все сделки в любом порядке? Или, например, порядок должен зависеть от даты сделки?

Привожу пример для для случая, когда:

  1. В поле "Карта" хранится некоторый уникальный идентификатор (в общем случае - всё, что угодно)
  2. При неравном количестве карт и соответствующих им сделок используем подход равномерного последовательного распределения карт по сделкам, т.е. распределение карт повторяется сначала.
  3. Сохраняем исходный порядок следования записей в обоих таблицах


Присоединяю пример приложения (со скриптом) и усложнённый вариант исходных данных.

Комментарии - в теле скрипта.


rasvalera
Contributor
Contributor
Author

Спасибо за ответ!

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

2. Сделок может быть больше, они сортируются по дате создания (от старых к новым). К операции должен "подтягиваться" первый найденный уникальный номер. В случае, если карт больше, чем сделок, нужно оставлять поле [Сделка] пустым/с комментарием "Сделка не найдена"

3. В конечном виде это не важно, но перед поиском сделки сортируются по дате создания (от старых к новым).

upd:

Не сразу понял почему файл не открывается, но скачал qs и все ок! В принципе, остальное я доделаю по аналогии, спасибо Вам большое.

Боже, храни людей отвечающих на форумах!

Sergey_Polekhin
Employee
Employee

Удачи!