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

Автор asdlegioner, 13 апреля 2016, 11:28:44

« назад - далее »

asdlegioner

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

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

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

Chernov

Самое простое из приведенного вами списка
right ( replace(поле_номера_телефона,'-','')  , 7 ) as НомерТелефона

asdlegioner

Цитата: Chernov от 14 апреля  2016, 03:48:44  
Самое простое из приведенного вами списка
right ( replace(поле_номера_телефона,'-','')  , 7 ) as НомерТелефона

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

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

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


asdlegioner

Цитата: admin от 15 апреля  2016, 10:19:48  
http://help.qlik.com/ru-RU/qlikview/12.0/Subsystems/Client/Content/Scripting/StringFunctions/KeepChar.htm

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

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

admin

Определить границы фразы и отрезать лишнее.
Почитай по строковым функциям справку, там и примеры есть.

asdlegioner

Не подскажите как объединить два поля в одну колонку.

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


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

asdlegioner

Цитата: admin от 15 апреля  2016, 10:28:46  
Определить границы фразы и отрезать лишнее.
Почитай по строковым функциям справку, там и примеры есть.

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

admin

Привет.
Можешь собрать все варианты значений в этом поле и выложить в каком-нибудь табличном формате?

asdlegioner

#9
Цитата: admin от 21 апреля  2016, 05:15:08  
Привет.
Можешь собрать все варианты значений в этом поле и выложить в каком-нибудь табличном формате?
Вариантов может быть сколько угодно это список ключевых слов с мину словами.
Минус слов может быть сколько угодно, и длина ключевой фразы может быть какой угодно. Незнаю как у фразы отсеить все слова которые идут с -. Слова идут только в конце фразы.

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

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

Prive

#10
Мне кажется только циклом можно обработать. (если в скрипте)

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))

Яндекс.Метрика