我正在開發一個項目,我需要使用SSAS分析Apache日誌。我已經將數據加載到臨時表中。我創建了維表(主鍵和attibute_name),空的事實表(每個維表和fact_attribute的外鍵)並創建它們之間的關係。然後我將該表格中的數據分成尺寸表,使用使用外鍵填充事實表
INSERT INTO DimIP (IP) SELECT DISTINCT RemoteHostName FROM tmp
...等等。
現在我需要用外鍵填充事實表,但我不知道如何用單個查詢來完成此操作。我想是這樣的:
INSERT INTO Facts (DimDateID, DimIPID, DimRefererID, DimRequestID, DimStatusCodeID, DimUserAgentID)
SELECT DimDate.ID WHERE (DimDate.Data = tmp.DateTime)
SELECT DimIP.ID WHERE (DimIP.IP = tmp.RemoteHostName)
SELECT DimReferer.ID WHERE (DimReferer.Referer = tmp.Referer)
SELECT DimRequest.ID WHERE (DimRequest.Request = tmp.Request)
SELECT DimStatusCode.ID WHERE (DimStatusCode.StatusCode = tmp.StatusCode)
SELECT DimUserAgent.ID WHERE (DimUserAgent.UserAgent = tmp.UserAgent)
但它不工作(它說插入列表包含比選擇列表項較少),可能是我不能用這種語法。
我試圖做一個接一個,像這樣:
INSERT INTO Facts (DimDateID)
SELECT DimDate.ID WHERE (DimDate.Data = tmp.DateTime)
但有時候它說,其它列不能爲NULL(前DimUserAgentID。),所以查詢失敗,有時它執行查詢時,說「806000行受影響」但沒有插入任何內容。
我會感謝您的幫助,因爲我已經從我的頭上撕開了一半頭髮,並不知道如何使用維表中的外鍵填充事實表。
謝謝,作品精彩。這正是我需要的。我添加了BytesSent作爲度量,Fact表完美地填充。 – Meff