2016-06-01 21 views
1

我有以下查詢SQL填充維差距與日期維度

SELECT INTO #GroupedData 
SUM(Amount) OVER (PARTITION BY Dim1, Dim2 ORDER BY DimDate) AS RunningTotal 
SUM(Amount) AS Total 
Dim1, Dim2, DimDate 
FROM FactTable 
GROUP BY Dim1, Dim2, DimDate 

這給我留下了可能的孔,我有我可以在

加入CalendarTable爲了獲得將來的日期值輸出或填補空白。但是,我怎麼做這個考慮維度?

我明白這可能會產生很多行,因爲它的DimDate X Dim1 X Dim2取決於您是否可以通過實際的Dim組合限制它。

回答

0

假設您在事實表的某處中有每個日期,那麼您可以使用cross join生成行。然後,left join把從事實表中的行:

select d1.dim1, d2.dim2, d.dimdate, sum(f.amount) as total, 
     sum(sum(amount)) over (parition by d1.dim1, d2.dim2 order by d.dimdate) as runningtotal 
from (select distinct dim1 from facttable) d1 cross join 
    (select distinct dim2 from facttable) d2 cross join 
    (select distinct dimdate from facttable) d left join 
    facttable f 
    on f.dim1 = d1.dim1 and f.dim2 = d2.dim2 and f.dimdate = d.dimdate 
group by d1.dim1, d2.dim2, d.dimdate; 

這並假設每個日期表中出現一次。而且,d1和d2`可能已經在表中,因此可以使用這些表代替子查詢。

+1

真棒謝謝你,我差一點通過創建所有組合的暗淡和日期表的交叉連接的不同值。但由於演出我沒有考慮再次將它們分組。但它的工作原理,其實很快。 – CodeMonkey