Создание источника данных в Таблице и 170 000 записей - PullRequest
1 голос
/ 06 марта 2019

У меня есть два источника данных EXCEL.175 000 строк.Я пытаюсь настроить объединение (Добавить новое объединение) с помощью параметра INNER между двумя источниками данных.Левый источник данных включает в себя определенные идентификаторы # членов.К сожалению, идентификаторы # членов правильного источника данных находятся внутри большого поля, называемого member Desc.Примерно так:

Источник данных слева ID участника # ALL89098

Источник данныхПраво Элемент член YTRNNN TO = ALL89098_KIA БУДЕТ ИЛИ НЕТ ИЛИ PO ALL89098 ДЖО

Итак,Мне нужно разобраться с двумя сценариями, как вы заметили сверху.Идентификатор члена находится в дескрипторе элемента после TO =, и это может быть где угодно, как в сценарии 2 POALL89098

Если я не могу сделать это в Таблице, чтобы установить соединение между этими двумя столбцами из разных источников данных, так какУ меня оба эти источника данных загружены в БД SQL Server, я могу выполнять операторы SQL в SQL, так как они также находятся в двух разных таблицах в БД SQL Server.

Я пытаюсь использовать условие CONTAINS в Таблице, например ниже, но оно работает очень медленно.это всего лишь Tableau Desktop с 16 ГБ оперативной памяти.

если содержит ([Member Desc], ([ID участника #]), то [ID участника #] ELSE "NOT FOUND" END

Большое спасибо за ваше время.

ТАК ЧТО ТАКОЕ ПУТЬ ИМЕТЬ РЕКЭКСПОЙ В СЛУЧАЕ ИЛИ ДРУГИМИ ИЛИ СЛУЧАЙНЫМИ ОТЧЕТАМИ?

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Вы можете создать расчет соединения.Выделенный выпадающий список показывает, где это можно найти:

enter image description here

Поскольку формат идентификатора элемента в [Элемент описания] имеет некоторый шаблон, онможно извлечь с помощью регулярных выражений.Как вы упоминаете в своем вопросе, один из способов, которым может быть представлен идентификатор, - после «TO =», и похоже, что он заканчивается перед «_».Следующее вычисляемое регулярное выражение поле будет тянуть строку между ними:

REGEXP_EXTRACT([Member Desc],"([^TO=]*)(?=_)")

enter image description here

Результат должен правильно объединить два источника данных:

enter image description here

Выше приведен набросок, который, я надеюсь, направит вас на правильный путь.Я понимаю, что может быть несколько разных методов, в которых [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 на самом деле не нужен, потому что внутреннее соединение автоматически исключит его.

Редактировать в ответ на комментарий: Спасибо.Я вижу ваши рекомендации.

0 голосов
/ 06 марта 2019

Я думаю, вам нужно будет найти способ вырезать ID члена из desc члена в SQL.Должен быть какой-то шаблон для идентификатора участника.Например, это всегда 3 буквы, за которыми следуют 5 цифр или что-то подобное.Если вы можете придумать шаблон, то вы можете использовать SQL и некоторую комбинацию Substring, Charindex и / или Like% Text% или шаблон регулярного выражения, чтобы удалить фактический идентификатор элемента в таблице SQL Server как собственное поле передпринося это в Таблицу.

...