Вы можете создать расчет соединения. Выделенный раскрывающийся список показывает, где это можно найти:
Пока формат идентификатора элемента в [Элемент описания] имеет некоторые шаблон, он может быть извлечен с помощью регулярных выражений. Как вы упоминаете в своем вопросе, один из способов, которым может быть представлен идентификатор, - после «TO =», и похоже, что он заканчивается перед «_». Следующее вычисляемое регулярное выражение поле будет тянуть строку между ними:
REGEXP_EXTRACT([Member Desc],"([^TO=]*)(?=_)")
Результат должен правильно объединить два источника данных: [ 1112]
Выше приведен набросок, который, я надеюсь, укажет вам правильный путь. Я понимаю, что может быть несколько разных методов, в которых [ID члена] представляет себя, поэтому я не смогу точно определить регулярное выражение, но если вообще есть какой-либо шаблон, тогда приведенный выше формат должен работать. (т. е. даже если единственный шаблон состоит в том, что [ID участника] состоит из трех букв, за которыми следуют четыре цифры - или он всегда начинается с A и заканчивается чем-то другим - и т. д.)
Regex также должен работать лучше, чем Функция содержит (), но имейте в виду, что функция должна искать через каждую строку в каждой строке, чтобы сделать соединение.
Редактировать в ответ на комментарий:
Чтобы добавить несколько условий, попробуйте следующий метод:
IF LEN(REGEXP_EXTRACT([Member Desc],"([^FROM=]*)(?=,)")) > 0
THEN REGEXP_EXTRACT([Member Desc],"([^FROM=]*)(?=,)")
ELSEIF LEN(REGEXP_EXTRACT([Member Desc],"([^TO=]*)(?=,)")) > 0
THEN REGEXP_EXTRACT([Member Desc],"([^TO=]*)(?=,)")
ELSEIF [...Put as many of these as might match your pattern]
THEN [...Put as many of these as might match your pattern]
END
По сути, расчет идет вниз список и пробовать каждую возможность. Я немного изменил ваш, чтобы посмотреть на длину (LEN ()) возвращаемого значения, которое должно сравнительно быстро сравниваться, так как это целое число. Поскольку этот расчет повторяет каждый ELSEIF и находит совпадение, он прекращает итерацию по списку - поэтому важно поместить наиболее вероятное совпадение вверху. Результатом вычисляемого поля должен быть идентификатор участника. Если совпадения не найдено, оператор ELSE на самом деле не нужен, потому что внутреннее соединение автоматически исключит его.
Редактировать в ответ на комментарий: Спасибо. Я вижу ваши рекомендации.
Джеймис Бак, который написал «Copland and Needle» , опубликовал здесь об «Игле», внедрении зависимостей и их полезности в мире Ruby.
Это долго, но стоит прочесть, но в случае, если вам нужен единственный параграф, наиболее релевантный вашему вопросу, я бы предложил этот, непосредственно перед концом:
DI-фреймворки не нужны. В более жестких условиях они имеют ценность. В гибких средах, таких как Ruby, не так много. Сами образцы могут все еще быть применимыми, но остерегайтесь попадания в ловушку мышления, вам нужен специальный инструмент для всего. Ruby - это Play-Doh, помни! Давайте так держать.
HTH
Вот еще один IoC http://alexeypetrushin.github.com/micon
Я использовал его в качестве основного компонента моей веб-инфраструктуры (не Rails). работает здесь - http://ruby-lang.info (этот сайт работает на нем). И это сэкономило мне много времени и кода, поэтому я лично считаю IoC очень полезным (в некоторых ситуациях).
DI рамки не нужны. В более жестких условиях они имеют ценность. В гибких средах, таких как Ruby, не так много. Сами образцы могут все еще быть применимыми, но остерегайтесь попадания в ловушку мышления, вам нужен специальный инструмент для всего. Ruby - это Play-Doh, помни! Давайте так держать.
Я смотрел разговоры о Джемисе Баке, и я с ним согласен и не согласен, вот почему 3Fh