2008-09-17 58 views
2

我已經使用Excel數據透視表來分析來自我的數據庫的數據,因爲它允許我非常快速地「切片和切塊」。由於我們知道數據庫表中的內容,因此我們都可以編寫SQL查詢來完成數據透視表的功能。如何以編程方式快速構建即席查詢?

但我想知道爲什麼數據透視表能夠如此快速地構建查詢,同時它知道什麼都沒有關於數據和我們給它的數據字段之間的含義/關係?

用另一種方式提出問題,我們如何才能以這種快速高效的方式構建專用 SQL查詢? (當然是「使用數據透視表!」,但是,我想要的是一種編程方式)。

+0

我想在Microsoft寫這些東西的人看到的數據不同。如果您有一個數據透視表連接到一個多維數據集,則它不使用SQL來查詢數據,而是使用MDX。這可能與Excel的PT類似。 – 2009-04-17 07:47:15

回答

1

根據需要操作您的訂單和組條款。

Excel速度很快,因爲所有數據都在內存中,並且可以快速有效地對其進行排序。

+0

老兄 - 愛瓦萊麗的艾米懷恩豪斯封面你做過 – 2009-04-17 07:45:05

0

我直觀的感覺告訴我,答案必須是與數據透視表的輪廓,其中有一個固定多個區域,分別是:

- the Page Fields zone 
- the Column Fields zone 
- the Row Fields zone and 
- the Data zone 

在我大膽猜測:

- The Page zone builds the WHERE part of the ad-hoc query. 
- The Column zone will put whichever fields drag-dropped to it in the GROUP BY clause. 
- The Row zone will build a SELECT DISTINCT <field names> 
- The Data zone will apply an AGGREGATE function to the field drag-dropped to it. 

當我們將字段拖到這些區域時,您會認爲「幕後」會發生什麼?

1

@Mark Ransom絕對是Excel的概念,將數據保存在內存中,使其計算速度更快。 Excel也可能以這種方式對數據集進行預先索引,使其比數據庫更具響應性。

爲什麼速度更快,有一個重要的非算法可能性:數據透視表使用中的Excel沒有連接的概念。從數據庫中提取特定數據時,表之間的任何連接或關聯都會導致進一步的查找,掃描,索引加載等。由於Excel將所有數據都放在一個位置(RAM或不是),因此它可以執行查找而不必預先形成數據集。如果您要將數據庫數據加載到臨時表中,那麼查看針對該表的臨時查詢如何針對Excel以性能方式進行堆疊會很有趣。

但有一件事是確定的:雖然數據庫是生成準確報告的絕佳工具,但傳統規範化的數據庫對於即席查詢來說遠不是最優的。因爲規範化的數據結構集中在完整性高於一切(如果我可以採取這種自由),他們犧牲特別優化而犧牲所有數據的合理性。雖然這是一個壞榜樣,考慮這個歸一化模式:

 
+--------+  +---------+ 
|tblUsers|  |luGenders| 
+--------+  +---------+ 
|userID |  |genderID | 
|genderID||gender | 
+--------+  +---------+ 

SELECT * FROM luGenders; 
> 1 Female 
> 2 Male 

如果,在這個例子中,我們想知道,在我們的系統中的女性/男性用戶的數量,該數據庫將需要處理連接和行爲(同樣,由於聯接數量少和可能值數量少,這通常會導致一些數據庫引擎優化,所以這是一個不好的例子)。但是,如果您要將這些數據轉儲到Excel中,您仍然會因數據庫處罰而拖延數據,但實際上在Excel中轉​​移數據的速度相當快。這可能是因爲你的Excel比直接臨時查詢更快,但是我沒有數據發表評論,所以錯過了這種前期固定成本懲罰的概念。

儘管最切題的一點是,儘管一般數據庫對準確性有好處,但他們經常會在特別報告中感到厭倦。爲了生成臨時報告,通常有必要在更可查詢的結構中對數據進行反規範化(「倉庫」)。查詢關於數據倉庫的信息將爲這個主題提供很多好的結果。道德故事:擁有一個完全算法的快速臨時查詢系統是一個非常理想的選擇,但是由於空間和時間的限制(內存和人員小時數),這個系統並不適合實際。爲了有效地生成臨時系統,您需要了解數據的使用情況,然後有效地對其進行非規範化。我會強烈推薦The Data Warehouse Toolkit。爲了記錄,我不是DBA,我只是一個低級分析師,每週花費80個小時的時間來處理Excel和Oracle。我知道你的痛苦。