Соединение данных в таблицах¶

Вы можете соединить текущие данные с другой таблицей или даже с сохранённым запросом.
После того как вы нажмёте кнопку «Присоединить данные», вам нужно будет выбрать данные (из той же базы данных), к которым вы хотите присоединиться. Вы можете выбирать только таблицы и сохранённые запросы из той же базы данных, где находятся исходные данные.

Затем вам нужно выбрать столбцы, к которым вы хотите присоединиться. Это означает, что вы выбираете столбец из первой таблицы и столбец из второй таблицы, и соединение будет "сшивать" вместе строки, где значение из первого столбца равно значению во втором столбце. Очень распространённым примером является соединение столбца идентификатора в каждой таблице, поэтому, если вы выбрали таблицу для соединения, где между таблицами существует отношение внешнего ключа, Glarus BI автоматически выберет соответствующие столбцы идентификатора для вас. В конце шага присоединения есть кнопка "Столбцы", где можно выбрать, какие столбцы включать из присоединённых данных.
По умолчанию Glarus BI будет выполнять левое внешнее соединение (left outer join), но вы можете нажать на значок диаграммы Венна, чтобы выбрать другой тип соединения. Не все базы данных поддерживают все типы соединений, поэтому Glarus BI будет отображать только параметры, поддерживаемые используемой вами базой данных.
Вот основные типы соединений:
- Левое внешнее соединение: выбрать все записи из таблицы A, а также записи из таблицы B, которые соответствуют условию соединения, если таковые имеются.
- Правое внешнее соединение: выбрать все записи из таблицы B, а также записи из таблицы A, которые соответствуют условию соединения, если таковые имеются.
- Внутреннее соединение: выбрать только те записи из таблиц A и B, в которых выполняется условие соединения.
- Полное внешнее соединение: выбрать все записи из обеих таблиц независимо от того, выполняется ли условие соединения.
Левое внешнее соединение. Пример. Если таблица A – это заказы, а таблица В – клиенты, и вы выполняете соединение, в котором столбец customer_id в таблице заказов равен столбцу ID в таблице клиентов, когда вы выполняете левое внешнее соединение, ваши результаты будут полным списком всех ваших заказов, и в каждой строке заказа также будут отображаться столбцы клиента, разместившего этот заказ. Поскольку один клиент может размещать много заказов, информация об одном клиенте может многократно повторяться для разных строк заказа. Если для данного заказа нет соответствующего клиента, информация о заказе будет показана, но столбцы клиентов для этой строки будут просто пустыми.
Неявные (ленивые) соединения по внешним ключам¶
Если в метаданных Glarus BI задан внешний ключ, конструктор запросов может предложить поля связанной таблицы без ручного добавления соединения. Например, при работе с заказами раскройте группу покупателя или товара в списке полей фильтра либо группировки. Для выбранного поля система добавляет неявное левое соединение; строки без соответствия получают пустые значения полей измерения.
В списке доступны непосредственные FK-связи. Произвольная цепочка через подизмерение второго уровня автоматически в нём не раскрывается: для такой «снежинки» добавьте явные соединения и проверьте результат. Наличие FK в метаданных не выдаёт пользователю доступ к закрытым таблицам и не создаёт ограничение FOREIGN KEY в исходной СУБД.
Если поле исходной таблицы помечено в метаданных как внешний ключ с целевым полем, конструктор может предложить поля связанной таблицы без отдельного шага соединения. Связь задаёт администратор в модели данных или Конструкторе схемы.
Например, у заказа есть внешний ключ на товар. Пока вопрос использует только столбцы заказа, SQL не содержит соединения с таблицей товаров. Выберите категорию товара в списке полей — Glarus BI добавит LEFT JOIN по внешнему ключу. Цена товара по той же связи использует уже созданное соединение. Разные внешние ключи на одну таблицу могут потребовать отдельных соединений.
Связанные поля можно выбрать в фильтре, группировке, «Произвольном столбце» и списке добавляемых или удаляемых столбцов. В выражении поле выбирается из списка связанных полей; обозначение вида [Таблица.Столбец] указывает на выбранное поле этой таблицы.
- Создайте вопрос по исходной таблице и откройте «Показать SQL»: при отсутствии выбранных связанных полей соответствующего JOIN нет.
- Добавьте поле целевой таблицы по внешнему ключу и снова посмотрите SQL: появится LEFT JOIN.
- Добавьте ещё одно поле по той же связи: соединение не должно дублироваться. Проверьте результат и условия соединения.
Для такого запроса подключение должно поддерживать LEFT JOIN. Связь строится от поля внешнего ключа к его целевой таблице. Правило отложенного добавления относится к неявным связям: явный шаг соединения остаётся частью запроса, даже если его поля не показаны. Соединения внутри моделей и написанного вручную SQL определяются самим запросом или моделью.
См. семантические типы и настройку семантического типа поля.


Несколько этапов соединения¶
Во многих случаях у вас могут быть таблицы A, B и C, где у A и B есть связь, у B и C есть связь, а у A и C нет. Если вы хотите соединить A с B и C, все, что вам нужно сделать, это добавить несколько шагов соединения. Нажмите «Соединение данных», присоедините таблицу A к таблице B, затем щёлкните шаг «Соединение данных» под завершённым блоком соединения, чтобы добавить второй шаг соединения и соединить результаты последнего соединения с таблицей C.

Соединение на нескольких условиях¶
Ваши соединения также могут включать несколько условий для уточнения результатов. Glarus BI будет объединять несколько условий с помощью оператора AND.

Объединение с разными операторами¶
Вы можете соединять таблицы по условиям сравнения, например:
=(равно)≠(не равно)>(больше)≥(больше или равно)<(меньше)≤(меньше или равно)

Соединения с произвольными выражениями¶
Иногда нужно соединять данные, используя константы, относительные даты или другие произвольные условия.
Например, предположим, у вас есть таблица отзывов и вы хотите добавить столбец со средним рейтингом по всем товарам.
Можно сначала вычислить средний рейтинг, а затем присоединить результат к таблице отзывов по условию 1=1.

Чтобы использовать произвольное выражение как ключ соединения:
- Нажмите на один из ключей соединения.
- Выберите Произвольное выражение.
- Введите выражение (включая константу вроде
1). - Нажмите Готово.
Ещё пример. Предположим, у вас есть:
- таблица
customers, где имя и фамилия хранятся в столбцахfirst_nameиlast_name; - таблица
accounts, где имя и фамилия хранятся в одном столбцеfull_name.
Вы можете соединить эти таблицы с помощью произвольного выражения. Ключ соединения для таблицы customers будет выглядеть примерно так:
А ключ соединения для таблицы accounts — это просто столбец full_name.
См. также список выражений.