2

次のクエリは、実行に 1 ~ 2 秒かかります。

SELECT { [Measures].[Premium], [Measures].[Revenue] } 
ON COLUMNS, NON EMPTY { (
[Insured].[PK Insured].[PK Insured].ALLMEMBERS 
* [Insured].[Named Insured].[Named Insured].ALLMEMBERS 
* [Producer].[Name].[Name].ALLMEMBERS 
* [Producer].[PK Producer].[PK Producer].ALLMEMBERS 
* [Coverage Category].[Name].[Name].ALLMEMBERS 
* [Company].[Name].[Name].ALLMEMBERS 
* [Company].[PK Company].[PK Company].ALLMEMBERS 
* [Market Ownership Group].[PK Market Ownership Group].[PK Market Ownership Group].ALLMEMBERS 
* [Agency Ownership Group].[PK Agency Ownership Group].[PK Agency Ownership Group].ALLMEMBERS
* [Company].[Type].[Type].ALLMEMBERS
) }
ON ROWS FROM ( SELECT ( { [Marketing Rep].[PK Non Broker].&[820676] } ) 
ON COLUMNS FROM ( SELECT ( [Expiration Date].[Date Hierarchy].[Date].&[2013-08-27T00:00:00] : [Expiration Date].[Date Hierarchy].[Date].&[2013-11-25T00:00:00] ) 
ON COLUMNS FROM ( SELECT ( { [Policy].[Status].&[PIF], [Policy].[Status].&[BIF] } ) 
ON COLUMNS FROM [CrumpCRC]))) 
WHERE ( [Policy].[Status].CurrentMember, [Marketing Rep].[PK Non Broker].&[820676] )

日付ディメンション ( Expiration Date) を追加すると、クエリの実行に数分かかり、メモリ過負荷エラーが返されることもあります。これは問題です:

SELECT { [Measures].[Premium], [Measures].[Revenue] } 
ON COLUMNS, NON EMPTY { (
[Insured].[PK Insured].[PK Insured].ALLMEMBERS 
* [Insured].[Named Insured].[Named Insured].ALLMEMBERS 
* [Producer].[Name].[Name].ALLMEMBERS 
* [Producer].[PK Producer].[PK Producer].ALLMEMBERS 
* [Coverage Category].[Name].[Name].ALLMEMBERS 
* [Company].[Name].[Name].ALLMEMBERS 
* [Company].[PK Company].[PK Company].ALLMEMBERS 
* [Market Ownership Group].[PK Market Ownership Group].[PK Market Ownership Group].ALLMEMBERS 
* [Agency Ownership Group].[PK Agency Ownership Group].[PK Agency Ownership Group].ALLMEMBERS
* [Company].[Type].[Type].ALLMEMBERS
* [Expiration Date].[Date Hierarchy].[Date].ALLMEMBERS
) }
ON ROWS FROM ( SELECT ( { [Marketing Rep].[PK Non Broker].&[820676] } ) 
ON COLUMNS FROM ( SELECT ( [Expiration Date].[Date Hierarchy].[Date].&[2013-08-27T00:00:00] : [Expiration Date].[Date Hierarchy].[Date].&[2013-11-25T00:00:00] ) 
ON COLUMNS FROM ( SELECT ( { [Policy].[Status].&[PIF], [Policy].[Status].&[BIF] } ) 
ON COLUMNS FROM [CrumpCRC]))) 
WHERE ( [Policy].[Status].CurrentMember, [Marketing Rep].[PK Non Broker].&[820676] )

タスクマネージャーでメモリの動作を監視していました。最初のクエリを実行すると、メモリに特別なことは何も起こりませんが、2番目のクエリを実行すると(日付の薄暗いものが含まれます)、メモリが2GBから8GBにジャンプします。また、列 (日付を含む) の削除を開始すると、クエリの実行が速くなり、メモリ消費量も減少し始めることに気付きました。新しい列を追加するたびに、クエリの実行に必要な操作の数が増えるような気がします。

date と他の dims の違いは、date が階層として設定されていることです。ホバー時に年/月属性に表示される警告メッセージも含めました

ここに画像の説明を入力ここに画像の説明を入力

私が何を間違えたのか分かりますか?

4

1 に答える 1

2

属性タイプのエラー メッセージは、日付ディメンションが時間タイプに設定されていないことを示しています。ディメンションの種類を説明するリンクは次のとおりです: http://technet.microsoft.com/en-us/library/ms175452.aspx

キューブに対してクエリが実行されると、選択されたディメンションごとに可能なメンバーのすべての組み合わせが調べられて交差が見つかると思います。そのため、可能なタプルがそれほど多くないため、ディメンションを削除するとパフォーマンスが向上します。この大規模な (幅の広い) クエリを定期的に実行する必要がある場合は、キューブ内の集計を確認することをお勧めします。SQLCat には、キューブ設計とクエリ設計の両方のパフォーマンス チューニングに関する優れたホワイトペーパーがあり、エンジンと、クエリの実行時に何が起こるかについて説明しています。

SSAS のパフォーマンス チューニングは私の得意分野ではありませんが、集計の検証と最適化、およびディメンション全体の設計にはBIDS Helperをお勧めします。

于 2013-08-28T15:46:57.940 に答える