2016-11-23 14 views
0

Я новичок в практике хранилищ данных, и в контексте академического упражнения я хотел бы создать звездообразную схему с использованием набора данных в выбранной области интересов. Итак, мой одноклассник и я выбрали набор данных о дорожно-транспортных происшествиях в стране в течение года.Как многозначная размерность выражается в схеме звезды, учитывая, что она имеет отношение «один ко многим» [Dim 1: many Fact]?

проблема заключается в том, что во многих случаях, если не в наибольшей степени, задействовано более одного автомобиля. Поэтому, если я предпочитаю иметь инциденты с «авариями» в качестве таблицы фактов с «Драйвер», «Автомобиль», «Потери», «Место», «Контименты» и т. Д. Как «Размеры», как они могут быть преобразованы в звездообразную схему, когда размеры «Автомобиль», «Водитель» и «Потери» являются многозначными? Например, я могу задействовать 3 машины, 3 водителя и 7 жертв. Учтите, что использование звездообразной схемы является обязательным.

Кроме того, насколько я знаю, таблица фактов чаще всего может иметь числовые значения в измерениях. Может ли он также иметь катекарские переменные в качестве измерений?

+0

Один из способов - признать, что для этого есть другое измерение - измерение «сбой». Таким образом, крах с 5 автомобилями получает пять рядов в том, что все указывает на одну и ту же запись одного измерения (для каждого сбоя создается новый). Это один из способов моделирования детализации заголовка в звездной схеме без нарушения идеи схемы звезды. Вы законно моделируете «крах», поэтому вполне нормально, чтобы получить собственное измерение с атрибутами вокруг сбоя. Вы даже можете сказать, что измерение крушения может соединить с другим уровнем более высокого уровня на уровне крушения. –

+0

Другим способом моделирования является использование таблицы моста, которая представляет собой конструкцию, которую некоторые (не все) средства отчетности могут использовать для остановки двойного подсчета. http://www.kimballgroup.com/2012/02/design-tip-142-building-bridges/ –

+0

Спасибо за ваш ответ! Итак, если я правильно понимаю, вы предлагаете мне превратить таблицу фактов «Несчастные случаи» в таблицу измерений и иметь в качестве факта таблицу, состоящую только из внешних ключей измерений? – avakas

ответ

0

Наиболее распространенным подходом является использование таблицы моста http://www.kimballgroup.com/data-warehouse-business-intelligence-resources/kimball-techniques/dimensional-modeling-techniques/multivalued-dimension-bridge-table/

+0

Таблицы мостов не обязательно являются ответом на это. Группа Kimball берет таблицы с мостиками: «Точно так же, если ваш проект пронизан таблицами моста, чтобы уловить взаимозависимые отношения размеров, вам нужно вернуться к чертежной доске. Вероятно, у вас есть проблема с детализацией таблицы фактов. " (kimballgroup.com/2003/10/fistful-of-flaws) –

+0

Также мы можем процитировать Kimball Group, где они говорят, что таблицы Bridge - это именно то, что вы использовали бы в этой ситуации. У вас обычно есть выбор, чтобы изменить естественное зерно факта или положить в таблицу мостов. Стол моста часто является наименьшим из двух зол, и, действительно, это выглядит так. – Rich

+0

@Rich Группа Kimball, безусловно, заявляет, что является * вариантом *, но они очень подчеркивают, что они не являются единственным решением для этих ситуаций и не должны рассматриваться во всех случаях по умолчанию. Нигде они не говорят, что вам следует выбирать их по другим решениям, просто чтобы вы рассмотрели все варианты, прежде чем принимать решение о том, что лучше всего подходит для вашего конкретного сценария. Высказывание таблиц с мостиками - это решение с этой небольшой информацией, которая слишком рано подходит к завершению. –

0

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

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

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

Размерное моделирование может быть немного жесткой гайкой для трещин, потому что есть несколько способов сделать что-то, и самый правильный способ часто кажется не очень очевидным, особенно если вы переходите с фона, где вы 'используется для более нормализованных структур данных. Я бы предложил вначале попытаться смоделировать что-то, используя самые основные типы таблиц - т. Е. Попытаться избежать таких вещей, как снежинка, таблицы мостов и т. Д. - и посмотреть, можете ли вы придумать решение, которое позволит избежать этих трюков. Очень часто это приводит к лучшей модели (т. Е. К которой проще перемещаться, имеет лучшую производительность запросов и может использоваться для ответа на другие вопросы).

Совет Nick.McDermaid, чтобы экспериментировать и попробовать разные вещи, также прочен, так как он может помочь вам вырваться из ваших первоначальных предположений. Иногда существует множество потенциальных проектов, которые могут быть необходимы, чтобы решить, что лучше.

0

Мне пришлось моделировать это в своей компании.

Инцидент & Автомобиль находится в их собственных зернах. Вам понадобится FactIncident & FactIncidentVehicle. Это позволяет связать атрибуты, связанные с Инцидентом (Дата, местоположение, тип), а также атрибуты для каждого транспортного средства в Инциденте.

Измерение инцидента - это почти вырожденное измерение, содержащее только несколько атрибутов с идентификатором инцидента, например, с номером отчета полиции.

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

Транспортное происшествие Человек - еще одно зерно. Если ваши данные допускают инциденты, не связанные с транспортным средством (например, Trip & Fall), вам понадобится запись транспортного средства «Нет транспортного средства» в вашем измерении, а также автомобиль «Неизвестный».

Размерность барахло полезно держит флаг (Y, N, Унк) вопросы, такие, как получили ранения, цит, владельца, водителя и т.д.

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