Возникла такая задача необходимо связать 2 таблицы по номеру телефона.
1 таблице тяну информацию по контакту из второй тяну информацию по продажам. Единственная возможность сделать связь только по номеру телефона (номера по клиентам точно соответствую как в заявке и в таблице продаж и не могут быть разными), но есть проблема с форматом ввода номера, :) каждый записывает его кто как хочет и в разных таблицах он записан по разному, и получается нечто такое:
Phone
+75555555555
+7-555-555-55-55
7-555-555-55-55
85555555555
и т.д.
Как лучше сделать выборку данных по номерам привести их к одному виду и связать их между собой ключем (как вариант по последним 7 символам)?
Самое простое из приведенного вами списка
right ( replace(поле_номера_телефона,'-','') , 7 ) as НомерТелефона
Цитата: Chernov от 14 апреля 2016, 03:48:44
Самое простое из приведенного вами списка
right ( replace(поле_номера_телефона,'-','') , 7 ) as НомерТелефона
Спасибо, то что надо.
А как можно отфильтровать такую запись и убрать минус слова:
Ключевая фраза -слово
Ключевая фраза -слово -слово -слово -слово
Ключевая фраза -слово -слово
Что бы в поле поле осталось только ключевое слово без минус слов.
http://help.qlik.com/ru-RU/qlikview/12.0/Subsystems/Client/Content/Scripting/StringFunctions/KeepChar.htm (http://help.qlik.com/ru-RU/qlikview/12.0/Subsystems/Client/Content/Scripting/StringFunctions/KeepChar.htm)
Цитата: admin от 15 апреля 2016, 10:19:48
http://help.qlik.com/ru-RU/qlikview/12.0/Subsystems/Client/Content/Scripting/StringFunctions/KeepChar.htm (http://help.qlik.com/ru-RU/qlikview/12.0/Subsystems/Client/Content/Scripting/StringFunctions/KeepChar.htm)
Немного не то.
Необходимо то бы место этого:
Ключевая фраза -слово
Ключевая фраза -слово -слово -слово -слово
Осталось это:
Ключевая фраза
Ключевая фраза
Определить границы фразы и отрезать лишнее.
Почитай по строковым функциям справку, там и примеры есть.
Не подскажите как объединить два поля в одну колонку.
right ( replace([Рабочий телефон],'-','') , 7 ) as Фильтра_Рабочий_Телефон,
right ( replace([Мобильный телефон],'-','') , 7 ) as Фильтра_Мобильный_Телефон,
Таким способом не вышло:
Фильтра_Рабочий_Телефон & Фильтра_Мобильный_Телефон as Номер_телефона,
Цитата: admin от 15 апреля 2016, 10:28:46
Определить границы фразы и отрезать лишнее.
Почитай по строковым функциям справку, там и примеры есть.
Не получилось найти решение.(
Привет.
Можешь собрать все варианты значений в этом поле и выложить в каком-нибудь табличном формате?
Цитата: admin от 21 апреля 2016, 05:15:08
Привет.
Можешь собрать все варианты значений в этом поле и выложить в каком-нибудь табличном формате?
Вариантов может быть сколько угодно это список ключевых слов с мину словами.
Минус слов может быть сколько угодно, и длина ключевой фразы может быть какой угодно. Незнаю как у фразы отсеить все слова которые идут с -. Слова идут только в конце фразы.
Купить слона зеленого недорого -Москва -бесплатно -доставка -Воронеж
Купить розового слона в Москве с доставкой - самовывоз -недорого -бесплатно
И часть ключей идут с кавычками:
"Купить мраморного слона в Москве с доставкой" - самовывоз -недорого -бесплатно
Мне кажется только циклом можно обработать. (если в скрипте)
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))