背景:
这个问题可能有点广泛,但希望对使用关系数据,R,Power BI或以上所有内容的任何人都感兴趣。
我正在尝试为nycflights13
在书R for Data Science中描述的数据集Wickham and Grolemund
重新创建一个关系模型。我正在尝试同时使用R和Power BI。数据集由5个表airlines
,ariports
,flights
,weather
和planes
组成。 13.2 nycflights13
节中有一段指出:
航班通过起源(位置)和年份与天气相关, 月,日和小时(时间)。
关系如下图所示:
问题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
中建立关系:
在某种程度上,我可以这样做,但是当我尝试使用例如flights
将weather
连接到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根本不需要“确立”亲戚关系。
换一种说法,图中的关系用箭头表示:
并在Power BI中带有以下行:
只要您拥有必需的verbs,并且在不同表中的数据之间确实存在关联,R就根本不需要吗?
问题3-航班表中为什么突出显示了航班:
我认为突出显示的列名称表示使用该列的表之间已建立连接。但据我所知,这里不是这种情况,也没有指向它的箭头:
是否表明它是flights
表中的主键,而没有与另一个表的任何连接?
我知道这有点广泛,但是我真的对这些事情感到好奇,所以我希望你们中的一些人会发现它有趣!
答案 0 :(得分:1)
我可以评论Power BI部分。
这里的关键问题是Power BI需要维度模型,而不是关系模型。这是个很大的差异。
如上所述,本书中的模型不适用于BI工具,必须重新设计。例如,书中的“天气”表被表示为“维度”,而实际上它必须是事实表(类似于“航班”表)。因此,“航班”和“天气”绝对不能有直接联系-它们必须具有共同的维度,例如:
类似地,表之间的多个键和多个连接是非常罕见的例外,并且对此不予理((通常,它们表示设计错误)。在正确设计的模型中,您永远都不会看到它们。
如果您想进一步了解该问题,请阅读此书: Star Schema Complete Reference
要专门回答您的Q3,在尺寸模型中,“飞行”(我假设是航班号)被称为“退化尺寸”。通常,它本来是维表的键,但是如果不存在,它将作为孤立键保留在事实表中。订单号,发票号等常见这种情况。
总体而言,您的方向正确-如果您想出如何将书中的模型转换为正确的星形模式,然后在R和PowerBI中使用它,那么新功能将给您留下深刻的印象-值得它。