2

Excel ピボットテーブルを使用して、データベースのデータを分析しました。これにより、"スライス アンド ダイス" を非常に迅速に行うことができるからです。データベース テーブルの内容がわかっているので、ピボットテーブルと同じことを行う SQL クエリを作成できます。

しかし、ピボットテーブルは、データと、与えられたデータ フィールド間の意味/関係について何も知らないのに、クエリを非常に高速に構築できるのはなぜでしょうか?

質問を別の言い方をすれば、アドホックSQL クエリをこれほど高速かつ効率的な方法で構築するにはどうすればよいでしょうか? (「もちろん、ピボットテーブルを使用してください!」、そうですが、私が欲しいのはプログラムによる方法です)。

4

3 に答える 3

1

必要に応じて順序句とグループ句を操作するだけです。

すべてのデータがメモリ内にあるため、Excel は高速であり、高速かつ効率的に並べ替えることができます。

于 2008-09-17T14:28:20.470 に答える
1

@Mark Ransomは、Excelがデータをメモリに保持し、計算を高速化するという概念に間違いなく取り組んでいます。また、Excel がデータベースよりも応答性が高くなるような方法でデータセットを事前にインデックス付けすることも可能です。

なぜ高速なのかについては、アルゴリズムに依存しない重要な可能性が 1 つあります。ピボット テーブルを使用する Excel には、結合の概念がありません。データベースからアドホックにデータを取得している場合、テーブル間の結合または相関により、さらにルックアップ、スキャン、インデックスの読み込みなどが行われます。Excel ではすべてのデータが 1 つの場所 (RAM またはなし) にあるため、データセットを事前に形成することなくルックアップを実行します。データベース データを一時テーブルにロードする場合、そのテーブルに対するアドホック クエリが Excel に対してどのようにパフォーマンスの観点から積み上げられたかを確認することは興味深いでしょう。

ただし、データベースは正確なレポートを作成するための優れたツールですが、従来の正規化されたデータベースはアドホック クエリには最適とは言えません。正規化されたデータ構造は、何よりも整合性に重点を置いているため (その自由があれば)、すべてのデータを適切に保つことを犠牲にして、アドホックな最適化を犠牲にします。これは良い例ではありませんが、次の正規化されたスキーマを検討してください。

+--------+ +---------+
|tblUsers| |luGenders|
+--------+ +---------+
|ユーザーID | |性別ID |
|性別ID||性別|
+--------+ +---------+

SELECT * FROM luGenders;
> 1 人の女性
> 2 男性

この例で、システム内の女性/男性ユーザーの数を知りたい場合、データベースは結合を処理し、それに応じて動作する必要があります (これも、結合数とユーザー数が少ないため、悪い例です)これにより、通常はデータベース エンジンの最適化が行われます)。ただし、このデータを Excel にダンプした場合、データを取得するためにデータベース ペナルティが発生しますが、実際に Excel でデータをピボットするとかなり高速になります。Excel が直接的なアドホック クエリよりも高速であるというあなたの考えによって、前払いの固定コストのペナルティというこの概念が見落とされている可能性がありますが、コメントするデータはありません。

ただし、最も重要な点は、一般的なデータベースは正確性に優れていますが、アドホックなレポートに欠けることが多いということです。アドホック レポートを作成するには、多くの場合、よりクエリしやすい構造でデータを非正規化 (「ウェアハウス」) する必要があります。データ ウェアハウジングに関する情報を調べると、この件に関して多くの良い結果が得られます。

話の教訓: 完全にアルゴリズム化された高速なアドホック クエリ システムを持つことは素晴らしい理想ですが、スペースと時間の制約 (メモリと人件費) を考えると実用的ではありません。アドホック システムを効果的に生成するには、データのユース ケースを理解し、それを効果的に非正規化する必要があります。

The Data Warehouse Toolkitを強くお勧めします。記録のために、私は DBA ではありません。私は、Excel と Oracle を操作するために 1 週​​間に 80 時間を費やしているただの低レベルのアナリストです。私はあなたの痛みを知っています。

于 2009-02-25T21:36:39.820 に答える
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. 

フィールドをこれらのゾーンにドラッグすると、「舞台裏」で何が起こると思いますか?

于 2008-09-17T14:55:54.133 に答える