Реляционные данные в Power BI и R с первичным ключом из нескольких полей - PullRequest
0 голосов
/ 17 октября 2018

Справочная информация:

Этот вопрос, возможно, немного широк, но, надеюсь, интересен всем, кто использует реляционные данные, R, Power BI или все вышеперечисленное.

Я пытаюсь воссоздать реляционную модель для набора данных nycflights13, описанного в книге R для Data Science от Wickham and Grolemund.И я пытаюсь сделать это, используя R и Power BI.Набор данных состоит из 5 таблиц airlines, ariports, flights, weather и planes.В разделе 13.2 nycflights13 есть отрывок, в котором говорится:

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

Отношения иллюстрируются этим рисунком:

enter image description here

Вопрос 1. Как настроить эту модель в Power BI?

Использование следующего сценария R сделает наборы данных для Power BI доступными в папке c:/data:

# install.packages("tidyverse")
# install.packages("nycflights13")

library(tidyverse)
library(nycflights13)
setwd("C:/data/")
#getwd()

airlines
df_airlines <- data.frame(airlines)
df_airports <- data.frame(airports)
df_planes <- data.frame(planes)
df_weather <- data.frame(weather)
df_flights <- data.frame(flights)

write.csv(df_airlines, file = "C:/data/airlines.txt", row.names = FALSE)
write.csv(df_airports, file = "C:/data/airports.txt", row.names = FALSE)
write.csv(df_planes, file = "C:/data/planes.txt", row.names = FALSE)
write.csv(df_weather, file = "C:/data/weather.txt", row.names = FALSE)
write.csv(df_flights, file = "C:/data/flights.txt", row.names = FALSE)

После импорта таблиц в Power BI я пытаюсьустановить отношения в Relationships tab:

enter image description here

И я могу сделать это в некоторой степени, но когда я пытаюсь подключиться flights к weather используя, например, year, я получаю следующее сообщение об ошибке:

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

И я понимаю, что это происходит потому, что первичные ключи должны содержать уникальные значения и не могутсодержат нулевые значения .Но как вы можете установить первичный ключ в Power BI, который состоит из нескольких полей?

Вопрос 2. Если нет ответа на вопрос 1, как вы можете сделать это в Rвместо этого?

Я действительно люблю эту книгу, и она даже может быть там уже описана, но как установить такие отношения в R?Или, может быть, вам не нужно, так как вы можете объединить несколько столбцов или составной ключ, используя dplyr , при этом вообще не «установив» связь?

Иными словами, являются ли отношенияпоказано на рисунке aboe со стрелками:

enter image description here

и в Power BI со строками:

enter image description here

действительно не требуется в R, если у вас есть необходимые глаголы и действительно существует связь между данными в разных таблицах?

Вопрос 3 - Почему рейс выделен в таблице рейсов:

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

enter image description here

Возможно, это указывает на то, чтоэто первичный ключ в таблице flights без какой-либо связи с другой таблицей?


Я знаю, что это немного широко, но мне действительно интересно узнать об этих вещахтак что я надеюсь, что некоторые из вас найдут это интересным!

1 Ответ

0 голосов
/ 17 октября 2018

Я могу прокомментировать часть Power BI.

Ключевой проблемой здесь является то, что Power BI требует размерную модель, а не реляционную.Это огромная разница.

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

  • Аэропорт
  • Авиакомпания
  • Самолет
  • Дата
  • Время

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

Если вы хотите больше разобраться в проблеме, прочитайте эту книгу: Полный справочник по схеме звезды

Чтобы конкретно ответить на ваш вопрос 3, в многомерном моделировании "Полет" (я полагаю,это номер рейса) называется "вырожденным измерением".Обычно это был бы ключ к таблице измерений, но если он отсутствует, он остается в таблице фактов как потерянный ключ.Такая ситуация характерна для номеров заказов, номеров счетов и т. Д.

Вырожденные размеры

В целом вы на правильном пути - если вы поймете, как преобразоватьМодель из книги в правильную схему звезды, а затем использовать ее в R и PowerBI, вы будете впечатлены новыми возможностями - оно того стоит.

...