Многое ко многим excel 2016

Вы применяли функцию ВПР, чтобы переместить данные столбца из одной таблицы в другой? Так как в Excel теперь есть встроенная модель данных, функция ВПР устарела. Вы можете создать связь между двумя таблицами на основе совпадающих данных в них. Затем можно создать листы Power View или сводные таблицы и другие отчеты с полями из каждой таблицы, даже если они получены из различных источников. Например, если у вас есть данные о продажах клиентам, вам может потребоваться импортировать и связать данные логики операций со временем, чтобы проанализировать тенденции продаж по годам и месяцам.

Все таблицы в книге указываются в списках полей сводной таблицы и Power View.

Браузер не поддерживает видео.

При импорте связанных таблиц из реляционной базы данных Excel часто может создавать эти связи в модели данных, формируемой в фоновом режиме. В других случаях необходимо создавать связи вручную.

  1. Убедитесь, что книга содержит хотя бы две таблицы и в каждой из них есть столбец, который можно сопоставить со столбцом из другой таблицы.

  2. Вы можете отформатировать данные как таблицу или импортировать внешние данные в виде таблицы на новом.

  3. Присвойте каждой из таблиц понятное имя: На вкладке Работа с таблицами щелкните Конструктор > Имя таблицы и введите имя.

  4. Убедитесь, что столбец в одной из таблиц имеет уникальные значения без дубликатов. Excel может создавать связи только в том случае, если один столбец содержит уникальные значения.

    Например, чтобы связать продажи клиента с логикой операций со временем, обе таблицы должны включать дату в одинаковом формате (например, 01.01.2012) и по крайней мере в одной таблице (логика операций со временем) должны быть перечислены все даты только один раз в столбце.

  5. Щелкните Данные> Отношения.

Если команда Отношения недоступна, значит книга содержит только одну таблицу.

  1. В окне Управление связями нажмите кнопку Создать.

  2. В окне Создание связи щелкните стрелку рядом с полем Таблица и выберите таблицу из раскрывающегося списка. В связи «один ко многим» эта таблица должна быть частью с несколькими элементами. В примере с клиентами и логикой операций со временем необходимо сначала выбрать таблицу продаж клиентов, потому что каждый день, скорее всего, происходит множество продаж.

  3. Для элемента Столбец (чужой) выберите столбец, который содержит данные, относящиеся к элементу Связанный столбец (первичный ключ). Например, при наличии столбца даты в обеих таблицах необходимо выбрать этот столбец именно сейчас.

  4. В поле Связанная таблица выберите таблицу, содержащую хотя бы один столбец данных, которые связаны с таблицей, выбранной в поле Таблица.

  5. В поле Связанный столбец (первичный ключ) выберите столбец, содержащий уникальные значения, которые соответствуют значениям в столбце, выбранном в поле Столбец.

  6. Нажмите кнопку ОК.

Дополнительные сведения о связях между таблицами в Excel

  • Примечания о связях

  • Пример. Связывание данных логики операций со временем с данными по рейсам авиакомпании

  • «Могут потребоваться связи между таблицами»

    • Шаг 1. Определите, какие таблицы указать в связи

    • Шаг 2. Найдите столбцы, которые могут быть использованы для создания пути от одной таблицы к другой

Примечания о связях

  • Вы узнаете, существуют ли связи, при перетаскивании полей из разных таблиц в список полей сводной таблицы. Если вам не будет предложено создать связь, то в Excel уже есть сведения, необходимые для связи данных.

  • Создание связей аналогично использованию VLOOKUP: вам нужны столбцы, содержащие совпадающие данные, чтобы Excel могли ссылаться на строки в одной таблице с строками из другой таблицы. В примере со временем в таблице Customer должны быть значения дат, которые также существуют в таблице аналитики времени.

  • В модели данных связи таблиц могут быть типа «один к одному» (у каждого пассажира есть один посадочный талон) или «один ко многим» (в каждом рейсе много пассажиров), но не «многие ко многим». Связи «многие ко многим» приводят к ошибкам циклической зависимости, таким как «Обнаружена циклическая зависимость». Эта ошибка может произойти, если вы создаете прямое подключение между двумя таблицами со связью «многие ко многим» или непрямые подключения (цепочку связей таблиц, в которой каждая таблица связана со следующей отношением «один ко многим», но между первой и последней образуется отношение «многие ко многим»). Дополнительные сведения см. в статье Связи между таблицами в модели данных.

  • Типы данных в двух столбцах должны быть совместимы. Подробные сведения см. в статье Типы данных в моделях данных.

  • Другие способы создания связей могут оказаться более понятными, особенно если неизвестно, какие столбцы использовать. Дополнительные сведения см. в статье Создание связи в представлении диаграммы в Power Pivot.

Пример. Связывание данных логики операций со временем с данными по рейсам авиакомпании

Вы можете узнать о связях обеих таблиц и логики операций со временем с помощью свободных данных на Microsoft Azure Marketplace. Некоторые из этих наборов данных очень велики, и для их загрузки за разумное время необходимо быстрое подключение к Интернету.

  1. Запустите надстройку Power Pivot в Microsoft Excel и откройте окно Power Pivot.

  2. Нажмите Получение внешних данных > Из службы данных > Из Microsoft Azure Marketplace. В мастере импорта таблиц откроется домашняя страница Microsoft Azure Marketplace.

  3. В разделе Price (Цена) нажмите Free (Бесплатно).

  4. В разделе Category (Категория) нажмите Science & Statistics (Наука и статистика).

  5. Найдите DateStream и нажмите кнопку Subscribe (Подписаться).

  6. Введите свои учетные данные Майкрософт и нажмите Sign in (Вход). Откроется окно предварительного просмотра данных.

  7. Прокрутите вниз и нажмите Select Query (Запрос на выборку).

  8. Нажмите кнопку Далее.

  9. Чтобы импортировать данные, выберите BasicCalendarUS и нажмите Готово. При быстром подключении к Интернету импорт займет около минуты. После выполнения вы увидите отчет о состоянии перемещения 73 414 строк. Нажмите Закрыть.

  10. Чтобы импортировать второй набор данных, нажмите Получение внешних данных > Из службы данных > Из Microsoft Azure Marketplace.

  11. В разделе Type (Тип) нажмите Data Данные).

  12. В разделе Price (Цена) нажмите Free (Бесплатно).

  13. Найдите US Air Carrier Flight Delays и нажмите Select (Выбрать).

  14. Прокрутите вниз и нажмите Select Query (Запрос на выборку).

  15. Нажмите кнопку Далее.

  16. Нажмите Готово для импорта данных. При быстром подключении к Интернету импорт займет около 15 минут. После выполнения вы увидите отчет о состоянии перемещения 2 427 284 строк. Нажмите Закрыть. Теперь у вас есть две таблицы в модели данных. Чтобы связать их, нужны совместимые столбцы в каждой таблице.

  17. Убедитесь, что значения в столбце DateKey в таблице BasicCalendarUS указаны в формате 01.01.2012 00:00:00. В таблице On_Time_Performance также есть столбец даты и времени FlightDate, значения которого указаны в том же формате: 01.01.2012 00:00:00. Два столбца содержат совпадающие данные одинакового типа и по крайней мере один из столбцов (DateKey) содержит только уникальные значения. В следующих действиях вы будете использовать эти столбцы, чтобы связать таблицы.

  18. В окне Power Pivot нажмите Сводная таблица, чтобы создать сводную таблицу на новом или существующем листе.

  19. В списке полей разверните таблицу On_Time_Performance и нажмите ArrDelayMinutes, чтобы добавить их в область значений. В сводной таблице вы увидите общее время задержанных рейсов в минутах.

  20. Разверните таблицу BasicCalendarUS и нажмите MonthInCalendar, чтобы добавить его в область строк.

  21. Обратите внимание, что теперь в сводной таблице перечислены месяцы, но количество минут одинаковое для каждого месяца. Нужны одинаковые значения, указывающие на связь.

  22. В списке полей, в разделе «Могут потребоваться связи между таблицами» нажмите Создать.

  23. В поле «Связанная таблица» выберите On_Time_Performance, а в поле «Связанный столбец (первичный ключ)» — FlightDate.

  24. В поле «Таблица» выберитеBasicCalendarUS, а в поле «Столбец (чужой)» — DateKey. Нажмите ОК для создания связи.

  25. Обратите внимание, что время задержки в настоящее время отличается для каждого месяца.

  26. В таблице BasicCalendarUS перетащите YearKey в область строк над пунктом MonthInCalendar.

Теперь вы можете разделить задержки прибытия по годам и месяцам, а также другим значениям в календаре.

Советы:  По умолчанию месяцы перечислены в алфавитном порядке. С помощью надстройки Power Pivot вы можете изменить порядок сортировки так, чтобы они отображались в хронологическом порядке.

  1. Таблица BasicCalendarUS должна быть открыта в окне Power Pivot.

  2. В главной таблице нажмите Сортировка по столбцу.

  3. В поле «Сортировать» выберите MonthInCalendar.

  4. В поле «По» выберите MonthOfYear.

Сводная таблица теперь сортирует каждую комбинацию «месяц и год» (октябрь 2011, ноябрь 2011) по номеру месяца в году (10, 11). Изменить порядок сортировки несложно, потому что канал DateStream предоставляет все необходимые столбцы для работы этого сценария. Если вы используете другую таблицу логики операций со временем, ваши действия будут другими.

«Могут потребоваться связи между таблицами»

По мере добавления полей в сводную таблицу вы получите уведомление о необходимости связи между таблицами, чтобы разобраться с полями, выбранными в сводной таблице.

Кнопка "Создать", отображаемая при необходимости создать связь

Хотя Excel может подсказать вам, когда необходима связь, он не может подсказать, какие таблицы и столбцы использовать, а также возможна ли связь между таблицами. Чтобы получить ответы на свои вопросы, попробуйте сделать следующее.

Шаг 1. Определите, какие таблицы указать в связи

Если ваша модель содержит всего лишь несколько таблиц, понятно, какие из них нужно использовать. Но для больших моделей вам может понадобиться помощь. Один из способов заключается в том, чтобы использовать представление диаграммы в надстройке Power Pivot. Представление диаграммы обеспечивает визуализацию всех таблиц в модели данных. С помощью него вы можете быстро определить, какие таблицы отделены от остальной части модели.

Представление диаграммы, в котором показаны несвязанные таблицы

Примечание:  Можно создавать неоднозначные связи, которые являются недопустимыми при использовании в сводной таблице или отчете Power View. Пусть все ваши таблицы связаны каким-то образом с другими таблицами в модели, но при попытке объединения полей из разных таблиц вы получите сообщение «Могут потребоваться связи между таблицами». Наиболее вероятной причиной является то, что вы столкнулись со связью «многие ко многим». Если вы будете следовать цепочке связей между таблицами, которые подключаются к необходимым для вас таблицам, то вы, вероятно, обнаружите наличие двух или более связей «один ко многим» между таблицами. Не существует простого обходного пути, который бы работал в любой ситуации, но вы можете попробоватьсоздать вычисляемые столбцы, чтобы консолидировать столбцы, которые вы хотите использовать в одной таблице.

Шаг 2. Найдите столбцы, которые могут быть использованы для создания пути от одной таблице к другой

После того как вы определили, какая таблица не связана с остальной частью модели, пересмотрите столбцы в ней, чтобы определить содержит ли другой столбец в другом месте модели соответствующие значения.

Предположим, у вас есть модель, которая содержит продажи продукции по территории, и вы впоследствии импортируете демографические данные, чтобы узнать, есть ли корреляция между продажами и демографическими тенденциями на каждой территории. Так как демографические данные поступают из различных источников, то их таблицы первоначально изолированы от остальной части модели. Для интеграции демографических данных с остальной частью своей модели вам нужно будет найти столбец в одной из демографических таблиц, соответствующий тому, который вы уже используете. Например, если демографические данные организованы по регионам и ваши данные о продажах определяют область продажи, то вы могли бы связать два набора данных, найдя общие столбцы, такие как государство, почтовый индекс или регион, чтобы обеспечить подстановку.

Кроме совпадающих значений есть несколько дополнительных требований для создания связей.

  • Значения данных в столбце подстановки должны быть уникальными. Другими словами, столбец не может содержать дубликаты. В модели данных нули и пустые строки эквивалентны пустому полю, которое является самостоятельным значением данных. Это означает, что не может быть несколько нулей в столбце подстановок.

  • Типы данных столбца подстановок и исходного столбца должны быть совместимы. Подробнее о типах данных см. в статье Типы данных в моделях данных.

Подробнее о связях таблиц см. в статье Связи между таблицами в модели данных.

К началу страницы

Браузер не поддерживает видео.

Проверьте, как это работает!

Что такое связь «многие-ко-многим»?

Связи типа «многие-ко-многим» используются между таблицами чаще всего. С их помощью можно узнавать важные сведения, например, с какими клиентами связывались ваши менеджеры по продажам и какие продукты входили в заказы.

Связь «многие-ко-многим» предполагает возможность связи одного или нескольких элементов из одной таблицы с одним или несколькими элементами из другой таблицы. Примеры:

  • В таблице «Заказы» указаны заказы, сделанные разными клиентами из таблицы «Клиенты». Каждый клиент мог сделать несколько заказов.

  • В таблице «Продукты» указаны продаваемые товары, каждый из которых может фигурировать в нескольких заказах из таблицы «Заказы».

  • Каждый продукт может входить в один заказ как в одном, так и в нескольких экземплярах.

Например, в заказ Арины Ивановой № 1012 могут входить продукты № 12 и 15, а также пять продуктов № 30.

Создание связи «многие-ко-многим»

Связи «многие-многим» создаются не так, как «один-к-одному» или «один-к-многим». Для таких связей достаточно соединить соответствующие поля линией. Чтобы создать связи «многие-к-многим», необходимо создать таблицу для соединения двух других. Эта новая таблица называется промежуточной (или иногда связующим или связующим).

В рассмотренном ранее примере создавалась таблица «Сведения о заказах» с записями, в которых для каждого товара в нужном порядке указывались номер заказа из таблицы «Заказы» и код продукта из таблицы «Продукты». Первичный ключ для этой таблицы создавался путем объединения ключей из двух других таблиц.

Ниже рассмотрим пример, когда в заказ Арины Ивановой № 1012 входят продукты № 12, 15 и 30. Это значит, что записи в таблице «Сведения о заказах» выглядят следующим образом:

Номер заказа

Код продукта

1012

12

1012

15

1012

30

Арина заказала по одному продукту № 12 и 15, а также пять продуктов № 30. Создать другие строки с номером заказа 1012 и кодом продукта 30 нельзя, потому что поля «Номер заказа» и «Код продукта» вместе составляют первичный ключ, а первичные ключи должны быть уникальными. Вместо этого можно добавить в таблицу «Сведения о заказах» поле «Количество».

Номер заказа

Код продукта

Количество

1012

12

1

1012

15

1

1012

30

5

Создание промежуточной таблицы

  1. Выберите Создание > Таблица.

  2. Выберите Сохранить Сохранение.

  3. Укажите описательное имя таблицы. Чтобы подчеркнуть назначение таблицы, можете включить в ее имя слова связующая или промежуточная.

Создание полей в промежуточной таблице

Столбец «Код» автоматически добавляется в Access в качестве первого. Измените имя этого поля на идентификатор вашей первой таблицы в связи «многие-ко-многим». Например, если первая таблица называется «Заказы», поле «Код» в ней переименовано в «Номер заказа», и его первичный ключ — число, измените имя поля «Код» в новой таблице на «Номер заказа», а в качестве типа данных выберите Числовой.

  1. В режиме таблицы выберите заголовок столбца Код и введите новое имя поля.

  2. Выберите переименованное поле.

  3. На вкладке Поля в списке Тип данных выберите тип, как в соответствующем поле исходной таблицы, например Числовой или Короткий текст.

  4. Щелкните надпись Щелкните для добавления и выберите тип данных, соответствующий первичному ключу во второй таблице. В заголовке столбца введите имя поля первичного ключа из второй таблицы, например «Код продукта».

  5. Если вам требуется отслеживать другую информацию об этих записях, например количество товаров, создайте дополнительные поля.

Объединение полей для создания первичного ключа

Теперь, когда у вас есть поля с идентификаторами двух таблиц, между которыми вы хотите создать связь, в промежуточной таблице следует создать первичный ключ на основе этих идентификаторов.

  1. Откройте промежуточную таблицу в режиме конструктора.

  2. Выберите обе строки с идентификаторами. (Если вы следовали предыдущим указаниям, это будут две первые строки.)

  3. На вкладке Конструктор нажмите кнопку Ключевое поле.
    Рядом с обоими полями будут отображаться значки ключей.

    Снимок экрана: первичный ключ в таблице

Соединение трех таблиц для создания связи «многие-ко-многим»

Чтобы завершить создание связи «многие-ко-многим», создайте связь «один-ко-многим» между полем первичного ключа в каждой таблице и соответствующим полем в промежуточной таблице. Инструкции см. в статье Начало работы со связями между таблицами.

После этого связи должны выглядеть следующим образом:

Снимок экрана: связи между тремя таблицами в базе данных

Вам нужны дополнительные возможности?

Начало работы со связями между таблицами

Создание, изменение и удаление отношения

Нужна дополнительная помощь?

Содержание

  1. Создание связей типа «многие-ко-многим»
  2. Проверьте, как это работает!
  3. Что такое связь «многие-ко-многим»?
  4. Создание связи «многие-ко-многим»
  5. Создание промежуточной таблицы
  6. Создание полей в промежуточной таблице
  7. Объединение полей для создания первичного ключа
  8. Соединение трех таблиц для создания связи «многие-ко-многим»
  9. Начало работы со связями между таблицами
  10. Проверьте, как это работает!
  11. Описание области «Схема данных»
  12. Виды связей между таблицами
  13. Изменение связи
  14. Удаление отношения между таблицами
  15. Связи между таблицами в модели данных

Создание связей типа «многие-ко-многим»

Проверьте, как это работает!

Что такое связь «многие-ко-многим»?

Связи типа «многие-ко-многим» используются между таблицами чаще всего. С их помощью можно узнавать важные сведения, например, с какими клиентами связывались ваши менеджеры по продажам и какие продукты входили в заказы.

Связь «многие-ко-многим» предполагает возможность связи одного или нескольких элементов из одной таблицы с одним или несколькими элементами из другой таблицы. Примеры:

В таблице «Заказы» указаны заказы, сделанные разными клиентами из таблицы «Клиенты». Каждый клиент мог сделать несколько заказов.

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

Каждый продукт может входить в один заказ как в одном, так и в нескольких экземплярах.

Например, в заказ Арины Ивановой № 1012 могут входить продукты № 12 и 15, а также пять продуктов № 30.

Создание связи «многие-ко-многим»

Связи «многие-многим» создаются не так, как «один-к-одному» или «один-к-многим». Для таких связей достаточно соединить соответствующие поля линией. Чтобы создать связи «многие-к-многим», необходимо создать таблицу для соединения двух других. Эта новая таблица называется промежуточной (или иногда связующим или связующим).

В рассмотренном ранее примере создавалась таблица «Сведения о заказах» с записями, в которых для каждого товара в нужном порядке указывались номер заказа из таблицы «Заказы» и код продукта из таблицы «Продукты». Первичный ключ для этой таблицы создавался путем объединения ключей из двух других таблиц.

Ниже рассмотрим пример, когда в заказ Арины Ивановой № 1012 входят продукты № 12, 15 и 30. Это значит, что записи в таблице «Сведения о заказах» выглядят следующим образом:

Арина заказала по одному продукту № 12 и 15, а также пять продуктов № 30. Создать другие строки с номером заказа 1012 и кодом продукта 30 нельзя, потому что поля «Номер заказа» и «Код продукта» вместе составляют первичный ключ, а первичные ключи должны быть уникальными. Вместо этого можно добавить в таблицу «Сведения о заказах» поле «Количество».

Создание промежуточной таблицы

Выберите Создание > Таблица.

Выберите Сохранить .

Укажите описательное имя таблицы. Чтобы подчеркнуть назначение таблицы, можете включить в ее имя слова связующая или промежуточная.

Создание полей в промежуточной таблице

Столбец «Код» автоматически добавляется в Access в качестве первого. Измените имя этого поля на идентификатор вашей первой таблицы в связи «многие-ко-многим». Например, если первая таблица называется «Заказы», поле «Код» в ней переименовано в «Номер заказа», и его первичный ключ — число, измените имя поля «Код» в новой таблице на «Номер заказа», а в качестве типа данных выберите Числовой.

В режиме таблицы выберите заголовок столбца Код и введите новое имя поля.

Выберите переименованное поле.

На вкладке Поля в списке Тип данных выберите тип, как в соответствующем поле исходной таблицы, например Числовой или Короткий текст.

Щелкните надпись Щелкните для добавления и выберите тип данных, соответствующий первичному ключу во второй таблице. В заголовке столбца введите имя поля первичного ключа из второй таблицы, например «Код продукта».

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

Объединение полей для создания первичного ключа

Теперь, когда у вас есть поля с идентификаторами двух таблиц, между которыми вы хотите создать связь, в промежуточной таблице следует создать первичный ключ на основе этих идентификаторов.

Откройте промежуточную таблицу в режиме конструктора.

Выберите обе строки с идентификаторами. (Если вы следовали предыдущим указаниям, это будут две первые строки.)

На вкладке Конструктор нажмите кнопку Ключевое поле.
Рядом с обоими полями будут отображаться значки ключей.

Соединение трех таблиц для создания связи «многие-ко-многим»

Чтобы завершить создание связи «многие-ко-многим», создайте связь «один-ко-многим» между полем первичного ключа в каждой таблице и соответствующим полем в промежуточной таблице. Инструкции см. в статье Начало работы со связями между таблицами.

После этого связи должны выглядеть следующим образом:

Источник

Начало работы со связями между таблицами

Проверьте, как это работает!

Главное достоинство реляционных баз данных заключается в возможности использовать информацию из разных таблиц. Для этого сначала требуется создать между ними связи. После этого вы сможете объединять эти данные в запросах, формах и отчетах.

Чтобы увидеть все связи в базе данных, откройте шаблон Access, а затем на вкладке Работа с базами данных нажмите кнопку Схема данных.

Примечание: Если вы открыли пустую базу данных или не еще не создали связей между таблицами, в Access вам будет предложено добавить таблицу или запрос. Для создания связи у вас должны быть хотя бы две таблицы. Лучше всего сразу создать все нужные таблицы. Дополнительные сведения см. в статьях Создание связей с помощью мастера подстановок и Создание связей в области «Схема данных».

Описание области «Схема данных»

Линии в представлении «Отношения» указывают на связи между таблицами. На рисунке ниже таблица слева является родительской. Таблица справа является детской. Линия между ними соединяет поля (в данном случае — «ИД заказа» и «ИД товара»), используемые для совпадения данных.

По линиям и символам можно определить параметры связи.

Толстая соединительная линия означает, что включено обеспечение целостности данных. Это хорошо. Данные будут синхронизироваться.

На приведенном изображении цифра 1 означает, что в таблице слева может быть только одна связанная запись. В таблице «Заказы» каждому заказу может соответствовать только одна запись.

Значок «∞» означает, что в нескольких записях может быть указан одинаковый номер или код. Заказ из таблицы слева, определяемый номером заказа, может быть указан в таблице «Сведения о заказах» несколько раз, поскольку в одном заказе может быть несколько продуктов.

Виды связей между таблицами

Между таблицами могут быть установлены связи трех видов:

Один-к-одному. Каждый элемент используется в каждой таблице только один раз. Например, каждый сотрудник может использовать только один служебный автомобиль. Дополнительные сведения см. в статье Создание связей типа «один-к-одному».

Один-ко-многим. Для одного элемента из первой таблицы можно создать связь с несколькими элементами из второй таблицы. Например, в каждой накладной может быть указано несколько продуктов.

Многие-ко-многим. Для одного или нескольких элементов из первой таблицы можно создать связь с одним или несколькими элементами из второй таблицы. Например, в каждый заказ может входить несколько продуктов, и каждый продукт может быть указан в нескольких заказах. Дополнительные сведения см. в статье Создание связей типа «многие-ко-многим».

Связи типа «один ко многим»

Связи типа «один-ко-многим» — одни из наиболее распространенных в хорошо структурированных базах данных.

Связи между таблицами обычно определяются первичным ключом в одной из них. Первичный ключ служит уникальным идентификатором каждой записи (часто числовым). Чтобы показать, что сведения в двух таблицах связаны, с помощью первичного ключа обычно создается связь, исходящая из одной таблицы.

В показанной ниже связи у каждого человека из таблицы «Контакты» есть идентификатор, представляющий собой первичный ключ (он отмечен значком ключа). Этот идентификатор также используется в поле «Владелец» в таблице «Активы». Чтобы написать электронное письмо человеку, связанному с активом, следует использовать значение поля «Адрес электронной почты». Для этого необходимо узнать значение поля «Владелец» из таблицы «Активы», а затем найти этот идентификатор в таблице «Контакты». Число 1 на одном конце соединительной линии и знак «∞» на другом означают, что это связь типа «один-ко-многим», поэтому один контакт может быть связан с несколькими активами.

Изменение связи

Если вы работаете с существующей базой данных или создали базу из шаблона, вы можете изменить связь нужным образом.

Примечание: Если необходимые таблицы открыты, сначала следует закрыть их, а также любые открытые объекты, которые их используют.

Выберите Работа с базами данных > Схема данных.

Выберите линию, соединяющую две связанные таблицы.

Совет: Если необходимая связь отсутствует, на вкладке Конструктор в группе Связи нажмите кнопку Все связи.

На вкладке Конструктор нажмите кнопку Изменить связи.

Таблица/запрос — это родительская таблица, указанная слева (в рассмотренном примере — «Клиенты»).

Связанная таблица/запрос — это дочерняя таблица (в рассмотренном примере — «Заказы»).

Даже если в области «Схема данных» таблицы расположены в другом порядке, их размещение в показанном диалоговом окне определяет направление соединительной линии между ними и, соответственно, направление связи. Это важно, например, для связей типа «один-ко-многим», потому что в таблице слева (родительской) в таком случае может быть связано только одно поле, а в таблице справа (дочерней) — несколько.

Чтобы изменить соединенные поля, выберите другое поле под каждой отображаемой таблицей. В рассмотренном примере поле «Код» из таблицы «Клиенты» соединяется с полем «Код клиента» из таблицы «Заказы».

Настройте синхронизацию данных между таблицами.

Обеспечение целостности данных

Выберите этот пункт, чтобы избежать ошибок в данных и поддерживать синхронизацию сведений с помощью связи.

Например, предположим, что у вас есть связь типа «один-к-одному» между таблицами «Сотрудники» и «Льготы сотрудников». Если сотрудник уволится и вы удалите его из таблицы «Сотрудники», соответствующая запись в таблице «Льготы сотрудников» тоже удалится.

Иногда не имеет смысла применять обеспечение целостности данных. Предположим, у вас есть связь «один-к-многим» между «Грузоотправителями» и «Заказы». Вы удаляете грузоотправителя, и он сопопосывается с заказами в таблице «Заказы». Эти заказы становятся потерянными, то есть по-прежнему содержат ИД грузоотправителя, но он не является допустимым, так как запись, на которую он ссылается, больше не существует.

Каскадное обновление связанных полей

Установите этот флажок, чтобы данные в связанных полях обновлялись во всех связанных таблицах.

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

Каскадное удаление связанных записей

Установите этот флажок, если при удалении записей вам требуется удалять и связанные записи из других таблиц.

Предположим, вы удалили грузоотправителя. Если выбран этот параметр, Access удаляет все записи во всех таблицах, ссылаясь на этот ИД грузоотправителя, включая все заказы (в таблице «Заказы»), отправленные этим грузоотправии. Этот параметр можно выбрать только в том случае, если вы уверены, что хотите удалить историю заказов.

Чтобы изменить связь между таблицами с внутреннего соединения на внешнее, нажмите кнопку Объединение. Дополнительные сведения см. в статье Создание запросов с внешними соединениями.

Удаление отношения между таблицами

Примечание: Если необходимые таблицы открыты, сначала следует закрыть их, а также любые открытые объекты, которые их используют.

Удаление связи между таблицами

Выберите Работа с базами данных > Схема данных.

Выберите линию, соединяющую две связанные таблицы.

Совет: Если необходимая связь отсутствует, на вкладке Конструктор в группе Связи нажмите кнопку Все связи.

Нажмите клавишу DELETE. Если потребуется подтвердить удаление, нажмите кнопку Да.

Примечание: При удалении связи для нее также отключается обеспечение целостности данных, если оно было включено. В результате Access больше не будет предотвращать изменения, ведущие к появлению неполных записей со стороны многих записей в связи типа «один-ко-многим».

Источник

Связи между таблицами в модели данных

Чтобы сделать анализ данных более емким, создайте связи в разных таблицах. Связь — это соединение между двумя таблицами, которые содержат данные: один столбец в каждой таблице является основой для связи. Чтобы понять, чем полезны связи, представим, что отслеживаются данные для заказов клиентов в бизнесе. Вы можете отслеживать все данные в одной таблице с такой структурой:

Однообъективный зеркальный фотоаппарат

Этот подход может быть эффективным, но он подразумевает хранение множества избыточных данных, таких, как адрес электронной почты клиента для каждого заказа. Хранение данных обходится дешево, но если адрес электронной почты изменился, необходимо убедиться, чтоб была обновлена каждая строка для этого клиента. Одним из решений этой проблемы является разбиение данных на несколько таблиц и задание связей между этими таблицами. Этот подход используется в реляционных базах данных таких, как SQL Server. Например, импортированная база данных может представлять данные заказа, используя три связанные таблицы.

Однообъективный зеркальный фотоаппарат

Связи существуют в модели данных ( та, которую вы создали явным образом или которая Excel автоматически создается от вашего имени при одновременном импорте нескольких таблиц. Кроме того, вы можете воспользоваться надстройкой Power Pivot для создания модели и управления ею. Дополнительные сведения см. в статье Создание модели данных в Excel.

Во время импорта таблицы из одной базы данных с помощью надстройки Power PivotPower Pivot может обнаруживать связи между таблицами, основанными на столбцах, заключенных в [квадратные скобки], и воспроизводить эти связи в модели данных, создаваемой в фоновом режиме. Дополнительные сведения см. в разделе Автоматическое обнаружение и вывод связей этой статьи. Если таблицы импортируются из нескольких источников, можно вручную создать связи, как это описано в статье Создание связей между двумя таблицами.

Связи основываются на столбцах в каждой таблице, содержащих одинаковые данные. Например, можно связать таблицу «Клиенты» с таблицей «Заказы», если каждая из них содержит столбец с ИД клиента. В данном примере имена столбцов одинаковы, но это не является обязательным условием. Один столбец может называться CustomerID, а другой — CustomerNumber, при условии, что все строки в таблице Orders содержат идентификатор, который также хранится в таблице Customers.

В реляционной базе данных существует несколько типов ключей. Ключ обычно является столбцом со специальными свойствами. Знание назначения каждого ключа помогает в управлении моделью данных с несколькими таблицами, предоставляющей данные для сводной таблицы, сводной диаграммы или отчета Power View.

Хотя существует множество типов ключей, они являются самыми важными в нашем предназначении:

Первичный ключ: однозначно определяет строку в таблице, например CustomerID в таблице Customers.

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

Внешнее ключ: столбец, который ссылается на уникальный столбец другой таблицы, например CustomerID в таблице Orders, который ссылается на CustomerID в таблице Customers.

В модели данных первичный или резервный ключ называется связанным столбцом. Если таблица содержит первичный и резервный ключ, любой из них можно использовать как основу для связи между таблицами. Внешний ключ называется исходным столбцом или просто столбцом. В нашем примере связь между customerID в таблице Orders (столбцом) и CustomerID в таблице Customers (столбцом подытов) будет определена. Если данные импортируются из реляционной базы данных, по умолчанию Excel выбирает внешний ключ из одной таблицы и соответствующий первичный ключ из другой таблицы. Тем не менее для столбца подстановки можно использовать любой столбец, содержащий уникальные значения.

Связь между клиентом и заказом является связью «один-к-многим». Каждый клиент может иметь несколько заказов, однако ни один из заказов не может иметь несколько клиентов. Еще одна важная связь между таблицами — «один к одному». В нашем примере таблица CustomerDiscounts, которая определяет единую ставку дисконтирования для каждого клиента, имеет отношение «один-к-одному» с таблицей Customers.

В этой таблице показаны связи между тремя таблицами (Customers, CustomerDiscountsи Orders):

Примечание: Связи «многие ко многим» не поддерживаются в модели данных. Примером связи «многие ко многим» является прямая связь между таблицами Products и Customers, в которой заказчик может купить много продуктов и одинаковый продукт может быть одновременно куплен несколькими заказчиками.

После создания связи необходимо Excel пересчет всех формул, которые используют столбцы из таблиц в созданной связи. Обработка может занять некоторое время в зависимости от объема данных и сложности связей. Дополнительные сведения см. в теме Пересчет формул.

Модель данных может содержать несколько связей между двумя таблицами. Для точного вычисления Excel требуется один путь от одной таблицы к другой. Поэтому одновременно активной может быть только одна связь между каждой парой таблиц. Хотя другие неактивны, вы можете указать неактивное отношение в формулах и запросах.

В представлении диаграммы активная связь является сплошной линией, а неактивные — пунктирными линиями. Например, в таблице AdventureWorksDW2012 таблица DimDate содержит столбец DateKey, связанный с тремя разными столбцами в таблице FactInternetSales: OrderDate, DueDateи ShipDate. Если есть активная связь между столбцами DateKey и OrderDate, эта связь и будет использоваться по умолчанию в формулах, если не указано иное.

Связь можно создать, если выполняются следующие требования.

Уникальный идентификатор для каждой таблицы

Каждая таблица должна иметь один столбец, однозначно определяющий каждую строку в этой таблице. Такой столбец часто именуется первичным ключом.

Уникальные столбцы подстановки

Значения данных в столбце подстановки должны быть уникальными. Другими словами, столбец не может содержать дубликаты. В модели данных нули и пустые строки эквивалентны пустому полю, которое является самостоятельным значением данных. Это значит, что столбец подстановки не может содержать несколько значений NULL.

Совместимые типы данных

Типы данных в исходном столбце и в столбце подстановки должны быть совместимыми. Дополнительные сведения о типах данных см. в теме Типы данных, поддерживаемые в моделях данных.

В модели данных нельзя создать связь между таблицами, если ключ является составным. Также существует ограничение на создание связей «один к одному» и «один ко многим». Другие типы связей не поддерживаются.

Составные ключи и столбцы подстановки

Составной ключ состоит из нескольких столбцов. Модели данных не могут использовать составные ключи: таблица должна всегда иметь ровно один столбец, однозначно определяя каждую строку в таблице. При импорте таблиц, имеющих существующую связь на основе составного ключа, мастер импорта таблиц в Power Pivot не будет учитывать эту связь, так как ее нельзя создать в модели.

Для создания связи между двумя таблицами, имеющими несколько столбцов, в которых определены первичный и внешние ключи, сначала объедините значения для создания единого ключевого столбца. Это можно сделать перед импортом данных или путем создания вычисляемого столбца в модели данных с помощью надстройки Power Pivot.

Связи «многие ко многим»

Модель данных не может иметь связи «многие ко многим». В модель нельзя добавлять соединяющие таблицы . Тем не менее для моделирования связей «многие ко многим» можно использовать функции DAX.

Самосоединения и циклы

В модели данных не разрешается использование самосоединений. Самосоединение — это рекурсивная связь таблицы с самой собой. Самосоединения часто используются для определения иерархий типа «родители-потомки». Например, можно настроить самосоединение для таблицы Employees, чтобы создать иерархию, показывающую цепочку управления на предприятии.

Excel не позволяет создавать циклы среди связей в книге. Иными словами, следующий набор связей запрещается.

Таблица 1, столбец «а» к Таблице 2, столбец «f»

Tаблица 2, столбец «f» к Таблице 3, столбец «n».

Таблица 3, столбец «n» к Таблице 1, столбец «a».

При попытке создания связи, которая приведет к образованию цикла, выдается ошибка.

Одно из преимуществ импорта данных с помощью надстройки Power Pivot заключается в том, что Power Pivot иногда может обнаруживать связи и создавать новые связи в модели данных, создаваемой в Excel.

При импорте нескольких таблиц Power Pivot автоматически определяет все существующие связи между ними. Кроме того, при создании сводной таблицы Power Pivot анализирует данные в таблицах. Он обнаруживает возможные связи, которые не были определены, и предлагает столбцы, которые можно включить в них.

Алгоритм обнаружения на основании статистических данных о значениях и метаданных столбцов формирует выводы о вероятности связей.

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

Для успешного обнаружения связи количество уникальных ключей в столбце подстановки должно превышать количество значений в таблице на стороне «многие». Другими словами, ключевой столбец на стороне «многие» связи не должен содержать значений, не содержащихся в ключевом столбце таблицы подстановки. Например, предположим, что имеется таблица, в которой перечислены продукты и их идентификаторы (таблица подстановки), а также таблица продаж, содержащая данные продаж всех продуктов (сторона «многие» связи). Если записи продаж содержат идентификатор продукта, не имеющего соответствующий идентификатор в таблице Products, связь нельзя создать автоматически, но можно создать вручную. Для обеспечения обнаружения связи с помощью Excel необходимо сначала обновить таблицу подстановки Product с использованием идентификаторов недостающих продуктов.

Убедитесь, что имя ключевого столбца на стороне «многие» совпадает с именем ключевого столбца в таблице подстановки. Имена не должны быть абсолютно идентичны. Например, в бизнес-параметрах часто имеются варианты имен столбцов, которые содержат фактически одинаковые данные: «ИД сотрудника», «ИД сотрудника», «ИД сотрудника», «EMP_ID»и так далее. Алгоритм выявляет похожие имена и задает более высокие значения вероятности столбцам, имена которых похожи или полностью совпадают. Поэтому, чтобы увеличить вероятность создания связи, можно попытаться переименовать столбцы в импортируемых данных, подобрав имена чем-то похожие на имена строк в существующих таблицах. Если Excel находит несколько возможных связей, связь не создается.

Эти сведения помогают понять, почему не удалось выявить все связи и какие изменения в метаданных (именах полей и типах данных) могут повысить эффективность автоматического обнаружения связей. Дополнительные сведения см. в разделе Устранение неполадок в связях.

Автоматическое обнаружение именованных наборов

Связи между именованными наборами и связанными полями в сводной таблице не обнаруживаются автоматически. Такие связи можно создать вручную. При необходимости использования автоматического обнаружения связей удалите каждый именованный набор и добавьте отдельные поля из именованного набора непосредственно в сводную таблицу.

В некоторых случаях связи между таблицами автоматически объединяются в цепочки. Например, если создать связь между первыми двумя наборами таблиц, указанных ниже, то определяется наличие связи между другими двумя таблицами и эта связь устанавливается автоматически.

Products и Category — связь создается вручную

Category и SubCategory — связь создается вручную

Products и SubCategory — связь определяется автоматически

Для автоматического объединения связей в цепочки эти связи должны идти в одном направлении, как показано выше. Если исходные связи были установлены, например между таблицами Sales и Products, а также между Sales и Customers, то связь не выводится. Это вызвано тем, что связь между таблицами Products и Customers является связью «многие ко многим».

Источник

Это продолжение перевода книги Роб Колли. Формулы DAX для Power Pivot. Главы не являются независимыми, поэтому рекомендую читать последовательно.

Предыдущая глава        Содержание    Следующая глава

В DAX связи очень важны. Но некоторые связи, как бы это сказать, сложнее, чем другие))

Несколько связей между двумя таблицами

Рассмотрим таблицы Sales и Calendar. Они связаны Calendar[Date] –> Sales[OrderDate]. Файл примера – ch22A_ComplicatedRelationships.xlsx.

Ris. 22.1. Mogut li eti dve tablitsy imet bolee odnoj svyazi

Рис. 22.1. Могут ли эти две таблицы иметь более одной связи?

Скачать заметку в формате Word или pdf

Дата заказа [OrderDate] – не единственное поле даты в таблице продаж Sales. Есть еще дата доставки. Что делать, если мы иногда хотим проанализировать наши данные о продажах по дате доставки? Как мы с этим справимся? Создадим ли мы еще одну связь между этими двумя таблицами? Это вообще сработает?

Ris. 22.2. Popytka sozdat svyaz CalendarDate SalesShipDate

Рис. 22.2. Попытка создать связь Calendar[Date] –> Sales[ShipDate]; чтобы увеличить изображение кликните на нем правой кнопкой мыши и выберите Открыть картинку в новой вкладке

Возможно, вы ожидали ошибки при нажатии кнопки Ok в диалоговом окне выше. Но на самом деле это работает. На приведенной ниже диаграмме можно заметить, что вновь созданная связь представлена пунктирной линией, а не сплошной.

Ris. 22.3. Dvojnye svidaniya ne vsegda prohodyat gladko

Рис. 22.3. Двойные свидания не всегда проходят гладко))

Легче понять, что происходит, если в окне Power Pivot перейти на вкладку Конструктор и кликнуть на копке Управление связями (рис. 22.4) Обратите внимание на столбец Активно для связей между таблицами продаж Sales и календарем Calendar. В один и тот же момент может быть активна только одна связь между двумя таблицами.

Ris. 22.4. V lyuboj moment vremeni mozhet byt aktivna tolko odna svyaz mezhdu dvumya tablitsami

Рис. 22.4. В любой момент времени может быть активна только одна связь между двумя таблицами

Если нам нужно проанализировать данные о продажах по дате доставки, то можем перевернуть активные связи, нажав на кнопку Изменить (см. верхнюю часть рис. 22.4). Если у вас есть сводная таблица, показывающая меру [Total Sales], вот как она изменится при изменении активной связи:

Ris. 22.5. Mera Total Sales pokazyvaet obem prodazh na osnove daty zakaza ili daty dostavki

Рис. 22.5. Мера [Total Sales] показывает объем продаж на основе даты заказа или даты доставки, в зависимости от того, какая связь активна

Это неудобно, поэтому давайте рассмотрим несколько более элегантных способов сделать то же самое.

USERELATIONSHIP()

[Total Sales by Ship Date] =

CALCULATE (

   [Total Sales],

   USERELATIONSHIP (Sales[ShipDate], Calendar[Date])

)

Теперь мы можем поместить обе меры [Total Sales by Ship Date] и [Total Sales] (по дате заказа) в одну сводную.

Ris. 22.5. Obshhij obem prodazh po date zakaza i po date otgruzki v odnoj svodnoj

Рис. 22.5. Общий объем продаж по дате заказа и по дате отгрузки в одной сводной

Связи Многие ко многим

Начнем с неудачного примера. Только что вы создали связь Calendar[Date] –> Sales[ShipDate]. Это связь Один ко многим, поскольку в таблице Calendar каждая дата уникальна, а в таблице Sales каждая дата может встречаться более одного раза. И это наиболее распространенный тип связи (и единственный, с которым мы имели дело до сих пор). А теперь давай сделаем что-нибудь… оригинальное. В таблице клиентов Customers у нас есть данные о дне рождении. Попробуем создать связь Customers[BirthDate] –> Sales[ShipDate].

Ris. 22.6. Pozvolit li PowerPivot svyazat SalesOrderDate CustomersBirthDate

Рис. 22.6. Позволит ли PowerPivot связать Customers[BirthDate] –> Sales[ShipDate]?

Обратите внимание, что оба столбца содержат не уникальные значения:

Ris. 22.7. U nas est mnogo povtoryayushhihsya znachenij dlya oboih stolbtsov

Рис. 22.7. У нас есть много повторяющихся значений для обоих столбцов

Давайте продолжим и попытаемся создать эту связь Customers[BirthDate] –> Sales[ShipDate]:

Ris. 22.8. Popytka sozdat svyaz privodit k oshibke

Рис. 22.8. Попытка создать связь приводит к ошибке

Power Pivot не позволит нам создать связь, потому что с каждой стороны повторяются (дублируются) значения. Повторим, что пример нереалистичен. Мы выбрали его, чтобы проиллюстрировать, что мы получим ошибку.

А вот еще один плохой пример. Ранее мы говорили, что не следует связывать две таблицы данных друг с другом. В том примере у нас были таблицы звонков ServiceCalls и продаж Sales. И каждую из них мы связывали с общими для них таблицами поиска, но не друг с другом! Теперь попытаемся создать связь между ними Sales[OrderDate] –> ServiceCalls[CallDate]:

Ris. 22.9. Popytka svyazat dve tablitsy dannyh privodit k analogichnoj oshibke

Рис. 22.9. Попытка связать две таблицы данных приводит к аналогичной ошибке

Реальный мир – источник законных связей Многие ко многим

Теперь мы перейдем к описанию ситуации, когда связь Многие ко многим легитимна. Многие ко многим, или M2M сводится к тому, как организован ваш бизнес (или реальный мир), и в частности к концепции членства, когда некий объект (продукт, место, человек, …) одновременно принадлежит к двум родительским группам.

Ris. 22.10. Kazhdaya strana region otnositsya k odnomu kontinentu no morozhenoe odnovremenno mozhet byt i molochnym i desertnym

Рис. 22.10. Каждая страна и/или регион относится к одному континенту, но мороженое одновременно может быть и молочным и десертным

Файл с примерами – ch22B_ComplicatedRelationships_M2M.xlsx.

Это приводит к таблице поиска (FoodMultiCategory), которая для некоторых продуктом содержит две строки (рис. 22.11). Если вы попытаетесь создать связь между таблицей данных Sales и этой «сломанной» таблицей поиска, она завершится неудачей.

Ris. 22.11. Teper u nas est dublikaty v tablitse poiska i eto problema my ne smozhem svyazat ee s tablitsej dannyh

Рис. 22.11. Теперь у нас есть дубликаты в таблице поиска, и это проблема

Первое, что нам нужно сделать, это выделить столбец Category в отдельную таблицу поиска. Таким образом, таблица Food не будет содержать столбец [Category] и появится отдельная таблица Category.

Ris. 22.12. Vydelenie stolbtsa Category v otdelnuyu tablitsu

Рис. 22.12. Выделение столбца Category в отдельную таблицу

Теперь можно связать таблицы Sales и Food:

Ris. 22.13. Tablitsy Sales i Food mozhno svyazat po polyu Food

Рис. 22.13. Таблицы Sales и Food можно связать по полю [Food]

Но таблица Category оказалась неприкаянной, и вторая наша задача соединить ее с таблицей Food с помощью «моста» – переходной таблицы.

Переходная таблица

Связь Многие ко многим между двумя объектами можно обрабатывать с помощью переходной таблицы:

Ris. 22.14. Perehodnaya tablitsa

Рис. 22.14. Переходная таблица

Переходная таблица FoodCategory перечисляет для каждого продукта все категории, к которым относится этот продукт – по одной строке на родительскую категорию. Теперь мы можем создавать связи: FoodCategory[Food] –> Food[Food] и FoodCategory[Category] –> Category[Category].

Ris. 22.15. FoodCategory mozhno svyazat s Food i Category

Рис. 22.15. FoodCategory можно связать с Food и Category

Но не всё так просто. Давайте определим базовую меру Units Sold = SUM(Sales[Units]). Сможем ли мы проанализировать продажи по категориям продуктов? Сводная работает не вполне корректно:

Ris. 22.16. Prodazhi a po produktam vsyo Ok b prodazhi po kategoriyam mera ne rabotaet

Рис. 22.16. Продажи (а) по продуктам – всё Ok; (б) продажи по категориям – мера не работает

Давайте разберем, что здесь происходит по шагам золотых правил (например, для категории завтрак – Breakfest).

Шаг 1. Определите набор фильтров ячейки сводной таблицы: Category[Category] = «Breakfast»

Шаг 2. Измените набор фильтров, если используете функцию CALCULATE(): не применимо.

Шаг 3. Примените фильтры к таблице с исходными данными: используем фильтр «Breakfast» в таблице Category.

Шаг 4. Примените фильтры к таблицам поиска; фильтры передаются по направлению связей между таблицами; это приводит к тому, что в таблице данных будут отобраны только строки, соответствующие набору всех фильтров. Поскольку Category фильтруется на шаге 3, а таблица Category – это таблица поиска для таблицы FoodCategory, то фильтр течет вниз и применяется, как показано на рисунке:

Ris. 22.17. Tablitsa FoodCategory filtruetsya ustanovkami tablitsy poiska CategoryCategory Breakfast

Рис. 22.17. Таблица FoodCategory (внизу) фильтруется установками таблицы поиска Category (вверху)

Шаг 5 и 6. Рассчитайте формулы и верните результат в ячейку: Units Sold = SUM(Sales[Units])

Подожди минутку… таблица Sales никогда не фильтровалась ни на одном из шагов выше! Таким образом, SUM(Sales[Units]) вернет сумму всех строк в таблице Sales – 3 355 276. И одно и то же число повторяется для каждой категории.

Ris. 22.18. Filtry tekut cherez svyazi vniz no nikogda ne vverh

Рис. 22.18. Фильтры текут через связи вниз, но не вверх: 1) фильтры стартуют из таблицы Category; 2) фильтр течет вниз; 3) фильтр не будет течь вверх (по крайней мере, без специальной помощи); 4) мера Units Sold никогда не фильтруется

Оказывается, есть способ заставить фильтры течь вверх. Напишем новую меру:

Units Sold by Category = CALCULATE([Units Sold], FoodCategory)

Использование переходной таблицы в качестве аргумента фильтра в CALCULATE заставляет фильтры течь «вверх» по связи:

Ris. 22.19. Nasha novoj mera rabotaet kak ozhidalos

Рис. 22.19. Наша новой мера работает, как ожидалось

Обратите внимание, если вы суммируете пять строки, они не дадут общую сумму. Это легко объяснить, когда мы добавляем Food в сводную:

Ris. 22.20. Nekotorye produkty Food vstrechayutsya v raznyh kategoriyah Category

Рис. 22.20. Некоторые продукты (Food) встречаются в разных категориях (Category)

Помните, что мороженое попало в две категории; мы хотели, чтобы оно относилось, как молочным продуктам, так и к десертам. Таким образом, мороженое проявляется в двух местах. То же самое верно для других продуктов, относящихся к нескольким категориям. Следовательно, значения, показанные для любой одной категории, правильные (см. отдельные строки на рис. 20.19), но, если суммировать все пять строк, мы кое-что учтем дважды и итоговая сумма будет неверной. А вот итоги сводной таблицы суммируют «правильно», исключая двойной счет.

Мы рекомендуем вам просто запомнить этот шаблон работы со связями Многие ко многим:

М2М Measure = CALCULATE([Measure], BridgeTable)

Если вы хотите больше узнать по этой теме, рекомендую статьи Джеффри и Герхарда.

Power BI Desktop

Power BI Desktop имеет функцию, которая устраняет необходимость в приведенном выше подходе, но не необходимость в переходных таблицах. Удалите меру Units Sold by Category. Сохраните копию Excel-файла ch22B_ComplicatedRelationships_M2M.xlsx. Перейдите в Power BI Desktop и загрузите модель из Excel-файла (пройдите по меню Файл –> Импортировать –> Из Excel). Перейдите в режим Модель (рис. 22.21, цифра 1), кликните правой кнопкой мыши на связи таблиц Food и FoodCategory (2), выберите Свойства, и в открывшемся окне Изменение связи измените направление кросс-фильтрации на Двунаправленное (3).

Ris. 22.21. Izmenenie svojstv svyazi

Рис. 22.21. Изменение свойств связи

Мера…

Units Sold = SUM(Sales[Units])

… прекрасно работает, даже когда вы помещаете Category в область строк сводной таблицы. Никаких дополнительных работ не требуется!

Ris. 22.22. V Power BI Desktop obychnye formuly mogut rabotat i dlya svyazej Mnogie ko mnogim

Рис. 22.22. В Power BI Desktop обычные формулы могут работать и для связей Многие ко многим

Если вы ещё не знакомы со сводными таблицами, то начните с этой статьи.

Проблема

Бывает так, что анализируемые данные попадают к нам в виде отдельных таблиц, которые, тем не менее, нужно связать. Это легко может сделать MS Access, а в Excel для этого приходилось всегда использовать формулы типа ВПР (VLOOKUP). Однако, начиная с Excel 2013, у нас появилась возможность при построении сводной таблицы в качестве источника использовать несколько таблиц, связанных между собой по ключевым полям.

Пример

В нашем примере мы располагаем 4-мя таблицами: Заказы, Строки заказов, Товары, Клиенты.

Таблица заказов:

Таблица Строк заказов:

Таблица Товаров

Таблица Клиентов

Исходные таблицы оформлены в виде умных таблиц: Orders, OrderLines, Goods и Clients.

Вполне очевидно, что таблицы Orders и OrderLines могут быть связаны по полю ID_Заказа, таблицы Orders и Clients — по полю ID_клиента, таблицы OrderLines и Goods — по полю ID_товара.

Скачать пример

Создание модели данных

Создадим сводную таблицу на основе любой из имеющихся таблиц.

  1. Выбираем в меню Вставка пункт Сводная таблица. В указанном диалоговом окне мы видим опцию Добавить эти данные в модель данных. Мы могли бы её выбрать, но я рекомендую другой, более удобный способ. Просто нажмите OK.

  2. В появившейся панеле Поля сводной таблицы вы видите надпись ДРУГИЕ ТАБЛИЦЫ…

  3. Нажмём её. Появится такой вопрос:

  4. Отвечаем Да и видим, что в список полей добавились все наши таблицы:

  5. Если вы начнёте выбирать поля, то через некоторое время в списке полей появится кнопка СОЗДАТЬ…

  6. Нажмём её и создадим связи между нашими таблицами. Так создаётся связь между таблицей Orders и OrderLines. Обратите внимание, что Excel умеет создавать связь типа «один к одному» или «один ко многим«. Причём первой надо указывать таблицу, где «много», в противном случае Excel ругается и предлагает поменять их местами.

  7. Аналогично создаём другие связи.


  8. В диалоговое окно Управление связями можно попасть через ленту АНАЛИЗ команда Отношения

  9. Чтобы видеть больше полей на панеле Поля сводной таблицы, можно через кнопку Сервис (в виде шестерёнки) выбрать это представление:

  10. Результат будет таким:

  11. В результате все наши таблицы теперь связаны и вы можете сформировать, к примеру, такой отчёт:

Просто и удобно!

Читайте также:

  • Введение в сводные таблицы

  • Автоматизация форматирования сводных таблиц

Понравилась статья? Поделить с друзьями:
  • Много цифр анализ больших данных с помощью excel
  • Много цифр анализ больших данных при помощи excel скачать полную версию
  • Много цифр анализ больших данных при помощи excel 2016
  • Много формул к одной ячейке в excel
  • Много формул если в excel