我在一家旅馆公司工作,并且我已经为每个客人设置了一个停留时间粒度的事实表,例如如果一位客人住了3晚,那么每晚的住宿时间都会有一行。
我要做的是为入住率(预订的房间除以可用的房间)创建一个度量。
我在事实数据表中有一列,指出酒店拥有多少间客房,但是仅求和该值是不可行的,因为那只是将客房数量乘以客人数量而已。因此,我需要对所有客人进行汇总,然后除以该特定酒店的房间数。这有道理吗?
[措施]。[在书本上] / [措施]。[可用房间]
为此,SQL将:
SELECT stay.PropertyKey, prop.RoomsAvailable, stay.StayDateKey, COUNT(stay.Confirmation) AS Confirmation,
CAST(COUNT(stay.Confirmation) AS DECIMAL(13,9)) / CAST(prop.RoomsAvailable AS DECIMAL(13,9)) AS OccupancyPercentage
FROM dbo.FactStayNight stay
INNER JOIN
(
SELECT DISTINCT PropertyKey, RoomsAvailable
FROM dbo.FactStayNight
) prop
ON stay.PropertyKey = prop.PropertyKey
GROUP BY stay.PropertyKey, stay.StayDateKey, prop.RoomsAvailable
答案 0 :(得分:1)
您的事实表很不错,除了带有客房总数的列。事实行位于粒度级别“房间”,但是房间总数位于粒度级别“整个酒店”。 (您可以想象一个“房地产资产”层次结构维度,假设您没有一个维度:
酒店 地板 房间 )
可能的解决方案:
当心随着时间的推移聚合此度量(无论您如何实现):从“日期”叶级别到“日期”层次结构的聚合函数本身应该是AVG而不是SUM。