Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Ноябрь 21, 2017, 03:27:45 am

Автор Тема: Обработчик номера телефона и связь ключем. (Qlikview)  (Прочитано 1531 раз)

Оффлайн asdlegioner

  • Наставник
  • **
  • Сообщений: 63
  • Рейтинг: +2/-0
    • Просмотр профиля
Возникла такая задача необходимо связать 2 таблицы по номеру телефона.
1 таблице тяну информацию по контакту из второй тяну информацию по продажам. Единственная возможность сделать связь только по номеру телефона (номера по клиентам точно соответствую как в заявке и в таблице продаж и не могут быть разными), но есть проблема с форматом ввода номера, :) каждый записывает его кто как хочет и в разных таблицах он записан по разному, и получается нечто такое:

Phone
+75555555555
+7-555-555-55-55
7-555-555-55-55
85555555555
и т.д.

Как лучше сделать выборку данных по номерам привести их к одному виду и связать их между собой ключем (как вариант по последним 7 символам)?

Оффлайн Chernov

  • Новичок
  • *
  • Сообщений: 17
  • Рейтинг: +5/-0
  • QV. Developer & Designer
    • Просмотр профиля
    • Личный блог
Re: Обрабодчик номера телефона и связь ключем.
« Ответ #1 : Апрель 14, 2016, 03:48:44 am »
Самое простое из приведенного вами списка
right ( replace(поле_номера_телефона,'-','')  , 7 ) as НомерТелефона

Оффлайн asdlegioner

  • Наставник
  • **
  • Сообщений: 63
  • Рейтинг: +2/-0
    • Просмотр профиля
Re: Обрабодчик номера телефона и связь ключем.
« Ответ #2 : Апрель 15, 2016, 10:09:06 am »
Самое простое из приведенного вами списка
right ( replace(поле_номера_телефона,'-','')  , 7 ) as НомерТелефона

Спасибо, то что надо.
А как можно отфильтровать такую запись и убрать минус слова:

Ключевая фраза -слово
Ключевая фраза -слово -слово -слово -слово
Ключевая фраза -слово -слово

Что бы в поле поле осталось только ключевое слово без минус слов.

Неофициальный форум пользователей QlikView & Qlik Sense

Re: Обрабодчик номера телефона и связь ключем.
« Ответ #2 : Апрель 15, 2016, 10:09:06 am »

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 981
  • Страна: ru
  • Рейтинг: +97/-0
    • Просмотр профиля

Оффлайн asdlegioner

  • Наставник
  • **
  • Сообщений: 63
  • Рейтинг: +2/-0
    • Просмотр профиля
Re: Обрабодчик номера телефона и связь ключем.
« Ответ #4 : Апрель 15, 2016, 10:24:20 am »
http://help.qlik.com/ru-RU/qlikview/12.0/Subsystems/Client/Content/Scripting/StringFunctions/KeepChar.htm


Немного не то.
Необходимо то бы место этого:
Ключевая фраза -слово
Ключевая фраза -слово -слово -слово -слово

Осталось это:
Ключевая фраза
Ключевая фраза

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 981
  • Страна: ru
  • Рейтинг: +97/-0
    • Просмотр профиля
Re: Обрабодчик номера телефона и связь ключем.
« Ответ #5 : Апрель 15, 2016, 10:28:46 am »
Определить границы фразы и отрезать лишнее.
Почитай по строковым функциям справку, там и примеры есть.

Оффлайн asdlegioner

  • Наставник
  • **
  • Сообщений: 63
  • Рейтинг: +2/-0
    • Просмотр профиля
Re: Обрабодчик номера телефона и связь ключем.
« Ответ #6 : Апрель 18, 2016, 11:30:52 am »
Не подскажите как объединить два поля в одну колонку.

    right ( replace([Рабочий телефон],'-','')  , 7 ) as Фильтра_Рабочий_Телефон,
    right ( replace([Мобильный телефон],'-','')  , 7 ) as Фильтра_Мобильный_Телефон,


Таким способом не вышло:
Фильтра_Рабочий_Телефон & Фильтра_Мобильный_Телефон as Номер_телефона,

Неофициальный форум пользователей QlikView & Qlik Sense

Re: Обрабодчик номера телефона и связь ключем.
« Ответ #6 : Апрель 18, 2016, 11:30:52 am »

Оффлайн asdlegioner

  • Наставник
  • **
  • Сообщений: 63
  • Рейтинг: +2/-0
    • Просмотр профиля
Re: Обрабодчик номера телефона и связь ключем.
« Ответ #7 : Апрель 19, 2016, 01:23:02 pm »
Определить границы фразы и отрезать лишнее.
Почитай по строковым функциям справку, там и примеры есть.

Не получилось найти решение.(

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 981
  • Страна: ru
  • Рейтинг: +97/-0
    • Просмотр профиля
Re: Обрабодчик номера телефона и связь ключем.
« Ответ #8 : Апрель 21, 2016, 05:15:08 pm »
Привет.
Можешь собрать все варианты значений в этом поле и выложить в каком-нибудь табличном формате?

Оффлайн asdlegioner

  • Наставник
  • **
  • Сообщений: 63
  • Рейтинг: +2/-0
    • Просмотр профиля
Re: Обрабодчик номера телефона и связь ключем.
« Ответ #9 : Апрель 25, 2016, 11:13:32 am »
Привет.
Можешь собрать все варианты значений в этом поле и выложить в каком-нибудь табличном формате?
Вариантов может быть сколько угодно это список ключевых слов с мину словами.
Минус слов может быть сколько угодно, и длина ключевой фразы может быть какой угодно. Незнаю как у фразы отсеить все слова которые идут с -. Слова идут только в конце фразы.

Купить слона зеленого недорого  -Москва -бесплатно -доставка -Воронеж
Купить розового слона в Москве с доставкой - самовывоз -недорого -бесплатно

И часть ключей идут с кавычками:
"Купить мраморного слона в Москве с доставкой" - самовывоз -недорого -бесплатно

Оффлайн Prive

  • Новичок
  • *
  • Сообщений: 43
  • Страна: ru
  • Рейтинг: +20/-0
    • Просмотр профиля
Мне кажется только циклом можно обработать. (если в скрипте)

tempТестовыеДанные:
LOAD * INLINE [
    Строка
    Купить слона зеленого недорого  -Москва -бесплатно -доставка -Воронеж -слона
    Купить розового слона в Москве с доставкой -самовывоз -недорого -бесплатно -доставкой
];

ТестовыеДанные:
LOAD
RowNo() as НомерКлючевойФразы,
Строка as СтрокаИсх,
Trim(SubField(Строка,'-',1)) as КлючеваяФраза,
Trim(Mid(Строка,Len(SubField(Строка,'-',1)),Len(Строка)-Len(SubField(Строка,'-',1)) + 1)) as МинусСлова,
SubStringCount(Trim(Mid(Строка,Len(SubField(Строка,'-',1)),Len(Строка)-Len(SubField(Строка,'-',1)))),'-') as КоличествоМинусСлов
Resident tempТестовыеДанные;

DROP TABLE tempТестовыеДанные;


МаксимальныйНомерКлючФразы:
LOAD
Max(НомерКлючевойФразы) as ПоследняяКлючФраза
Resident ТестовыеДанные;

LET ПоследнийНомерКлючФразы = FieldValue('ПоследняяКлючФраза',1);

DROP TABLE МаксимальныйНомерКлючФразы;

FOR i = 1 to ПоследнийНомерКлючФразы

NoConcatenate
ТестовыеДанныеЦикл:
LOAD
СтрокаИсх as СтрокаИсхЦикл,
НомерКлючевойФразы as НомерКлючевойФразыЦикл,
КлючеваяФраза as КлючеваяФразаЦикл,
МинусСлова as МинусСловаЦикл,
КоличествоМинусСлов as КоличествоМинусСловЦикл
Resident ТестовыеДанные
Where НомерКлючевойФразы = $(i);

LET ИсходнаяСтрокаЦикл = FieldValue('СтрокаИсхЦикл',1);
LET КолПолейДляМинусСлов = FieldValue('КоличествоМинусСловЦикл',1);
LET КлючеваяФразаЦиклКон = FieldValue('КлючеваяФразаЦикл',1);
LET МинусСловаЦикл = FieldValue('МинусСловаЦикл',1);

FOR j = 2 to ($(КолПолейДляМинусСлов) + 1)

КлючеваяФразаЦиклКон = Trim(Replace(КлючеваяФразаЦиклКон,Trim(SubField(МинусСловаЦикл,'-',$(j))),''));

NEXT

ФинальнаяТаблица:
LOAD
'$(ИсходнаяСтрокаЦикл)'  as СтрокаИсх,
'$(КлючеваяФразаЦиклКон)' as Строка_обработанная
AutoGenerate(1);

DROP TABLE ТестовыеДанныеЦикл;

NEXT

Также на ум приходят более экзотичные варианты - использование concat() + valuelist() на самом дашборде, либо создание функции-обработчика на vbscript и вызов её в ходе выполнения скрипта QliKView.

Если Вам нужно просто отсечь минусовые слова от ключевой фразы, то тут всё просто:
Trim(SubField(Строка,'-',1))