带有来自多个字段的主键的Power BI和R中的关系数据

时间:2018-10-17 12:56:53

标签: r dplyr relational-database powerbi

背景

这个问题可能有点广泛,但希望对使用关系数据,R,Power BI或以上所有内容的任何人都感兴趣。

我正在尝试为nycflights13在书R for Data Science中描述的数据集Wickham and Grolemund重新创建一个关系模型。我正在尝试同时使用R和Power BI。数据集由5个表airlinesariportsflightsweatherplanes组成。 13.2 nycflights13节中有一段指出:

  

航班通过起源(位置)和年份与天气相关,   月,日和小时(时间)。

关系如下图所示:

enter image description here

问题1:如何在Power BI中设置此模型?

使用以下R脚本将使数据集可用于文件夹c:/data中的Power BI:

# 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

在某种程度上,我可以这样做,但是当我尝试使用例如flightsweather连接到year时,出现以下错误消息:

  

您不能在这两个列之间建立关系,因为一个   的列必须具有唯一值。

我知道发生这种情况是因为primary keys must contain unique values and cannot contain null values。但是如何您可以在Power BI中建立一个由多个字段组成的主键吗?

问题2:如果问题1没有答案,您怎么能用R代替?

我真的很喜欢这本书,甚至可能已经在那本书中进行了描述,但是您如何在R中建立这样的关系?也许您不需要,因为join on multiple columns or composite key using dplyr根本不需要“确立”亲戚关系。

换一种说法,图中的关系用箭头表示:

enter image description here

并在Power BI中带有以下行:

enter image description here

只要您拥有必需的verbs,并且在不同表中的数据之间确实存在关联,R就根本不需要吗?

问题3-航班表中为什么突出显示了航班:

我认为突出显示的列名称表示使用该列的表之间已建立连接。但据我所知,这里不是这种情况,也没有指向它的箭头:

enter image description here

是否表明它是flights表中的主键,而没有与另一个表的任何连接?


我知道这有点广泛,但是我真的对这些事情感到好奇,所以我希望你们中的一些人会发现它有趣!

1 个答案:

答案 0 :(得分:1)

我可以评论Power BI部分。

这里的关键问题是Power BI需要维度模型,而不是关系模型。这是个很大的差异。

如上所述,本书中的模型不适用于BI工具,必须重新设计。例如,书中的“天气”表被表示为“维度”,而实际上它必须是事实表(类似于“航班”表)。因此,“航班”和“天气”绝对不能有直接联系-它们必须具有共同的维度,例如:

  • 机场
  • 航空公司
  • 飞机
  • 日期
  • 时间

类似地,表之间的多个键和多个连接是非常罕见的例外,并且对此不予理((通常,它们表示设计错误)。在正确设计的模型中,您永远都不会看到它们。

如果您想进一步了解该问题,请阅读此书: Star Schema Complete Reference

要专门回答您的Q3,在尺寸模型中,“飞行”(我假设是航班号)被称为“退化尺寸”。通常,它本来是维表的键,但是如果不存在,它将作为孤立键保留在事实表中。订单号,发票号等常见这种情况。

Degenerate dimensions

总体而言,您的方向正确-如果您想出如何将书中的模型转换为正确的星形模式,然后在R和PowerBI中使用它,那么新功能将给您留下深刻的印象-值得它。