我已經使用Excel數據透視表來分析來自我的數據庫的數據,因爲它允許我非常快速地「切片和切塊」。由於我們知道數據庫表中的內容,因此我們都可以編寫SQL查詢來完成數據透視表的功能。如何以編程方式快速構建即席查詢?
但我想知道爲什麼數據透視表能夠如此快速地構建查詢,同時它知道什麼都沒有關於數據和我們給它的數據字段之間的含義/關係?
用另一種方式提出問題,我們如何才能以這種快速高效的方式構建專用 SQL查詢? (當然是「使用數據透視表!」,但是,我想要的是一種編程方式)。
我已經使用Excel數據透視表來分析來自我的數據庫的數據,因爲它允許我非常快速地「切片和切塊」。由於我們知道數據庫表中的內容,因此我們都可以編寫SQL查詢來完成數據透視表的功能。如何以編程方式快速構建即席查詢?
但我想知道爲什麼數據透視表能夠如此快速地構建查詢,同時它知道什麼都沒有關於數據和我們給它的數據字段之間的含義/關係?
用另一種方式提出問題,我們如何才能以這種快速高效的方式構建專用 SQL查詢? (當然是「使用數據透視表!」,但是,我想要的是一種編程方式)。
根據需要操作您的訂單和組條款。
Excel速度很快,因爲所有數據都在內存中,並且可以快速有效地對其進行排序。
老兄 - 愛瓦萊麗的艾米懷恩豪斯封面你做過 – 2009-04-17 07:45:05
我直觀的感覺告訴我,答案必須是與數據透視表的輪廓,其中有一個固定多個區域,分別是:
- 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.
當我們將字段拖到這些區域時,您會認爲「幕後」會發生什麼?
@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。我知道你的痛苦。
我想在Microsoft寫這些東西的人看到的數據不同。如果您有一個數據透視表連接到一個多維數據集,則它不使用SQL來查詢數據,而是使用MDX。這可能與Excel的PT類似。 – 2009-04-17 07:47:15