【发布时间】:2018-06-25 05:30:12
【问题描述】:
我正在编写一个查询,以便填写我的事实表。我有一张记录每天(日期)23:59:00 每天的天气平均值的表格。 我有另一个表格,其中记录了不同房间的气候控制数据,每分钟(日期时间)。 而且我在另一个数据库中也有一个可用的时间维度。
我想用所有可用的 timeKeys 以及来自我的气候控制表和我的天气表的所有数据来填充我的事实表。
对不起,我的英语不是我的母语。
所以,为了找到与日期值匹配的 timeKey,我编写了这个查询:
SELECT t.timeKey AS WeathertimeKey,
weather.date AS date,
weather.temperature,
weather.rainAmountMM,
weather.windDirection,
weather.windSpeed
FROM StarSchema.dbo.timeDim t, weather
WHERE DATEPART(mm, t.DATE) = DATEPART(mm, weather.date)
AND DATEPART(dd, t.DATE) = DATEPART(dd, weather.date)
AND DATEPART(Hour, t.DATE) = '23'
AND DATEPART(MINUTE, t.DATE) = '59'
结果:Result
我的时间维度在 2015 年的每一分钟都有一个 timeKey:timeDimension
我要填写的事实表:facttable
我填充事实表的解决方案是每天创建一个具有相应 timeKey 的视图,然后在我的主查询中加入该视图。
SELECT
t.timeKey as timeKey,
rt1.roomId AS roomKey,
1 AS roomDataKey,
1 AS usageKey,
1 AS knmiKey,
rt1.temperature AS temperature,
rt1.locWindow AS locWindow,
rt1.locDoor AS locDoor,
rh1.turnedOn AS turnedOn,
rh1.temperature AS temperatureHeater,
s.storyTemp AS storyTemp,
s.storyHumidity AS storyHumidity,
vw.temperature AS temperatureOutside,
vw.rainAmountMM AS rainAmountMM,
vw.windSpeed AS windSpeed,
vw.windDirection AS windDirection,
vu.gasM3 AS gasM3,
vu.electricityKWH AS electricityKWH
FROM StarSchema.dbo.timeDim t
INNER JOIN roomTemperature1 rt1 ON rt1.date = t.DATE
INNER JOIN roomHeating1 rh1 ON rt1.date = rh1.date
INNER JOIN story s ON s.date = rt1.date
INNER JOIN vw_timeKeyWeatherDay vw ON t.timeKey = vw.WeathertimeKey
INNER JOIN vw_timeKeyUsageDay vu ON t.timeKey = vu.UsagetimeKey
结果如下:result2
所以现在它只使用每天 23:59 的 timeKey。
我想要在那里度过完整的日子,但我该怎么做呢?
有人可以帮帮我吗? 我再次为我使用英语而道歉。 我尽力了:-)
【问题讨论】:
-
听起来是个坏主意。您正在尝试使用具有不同含义的两组数据填充单个事实表。您的天气表有每日平均温度,而您的气候表有实际温度..
-
那你有什么建议?为天气创建维度?
-
不了解您的业务需求,无法提出建议。