0

以下のような式を使用する Visual Studio 2008 でマトリックス レポートを作成すると、プレビューに必要以上に時間がかかります。

=Fields(Parameters!ColumnGroupParam.Value).Value

同じレポートがレポート サーバーに配置され、レポート マネージャー内で表示される場合、またはレポートが Visual Studio ではなくレポート ビルダーを使用して設計されている場合、問題はなく、レポートはすばやく生成されます。

SQL Server プロファイラーからの結果を見ると、Visual Studio からクエリを実行すると、クエリが結果セットを返すのにかなりの時間がかかっています。

レポート マネージャー: 期間 = 1885

Visual Studio: 期間 = 327946 (173x 長い!)

一般に、グループに式を使用しなくても、Visual Studio からクエリを実行すると、クエリの実行が遅くなるように見えます。SQL Server 2008 R2 および SQL Server 2012 でこれを試したとき、同じ動作がありました。

他の誰かが以前にこの動作に遭遇し、適切な修正を見つけましたか?

再現する手順:

AdventureWorksDW2008 データベースを使用して、次のクエリをデータセットとして使用し、Visual Studio 2008 内でマトリックス レポートを作成します。

SELECT
PC.EnglishProductCategoryName AS Category
,PSC.EnglishProductSubcategoryName AS Subcategory
,P.EnglishProductName AS ProductName
,G.EnglishCountryRegionName AS Country
,G.StateProvinceName AS State
,FIS.SalesAmount
FROM        dbo.FactInternetSales FIS
INNER JOIN dbo.DimProduct P
ON FIS.ProductKey = P.ProductKey
INNER JOIN dbo.DimProductSubcategory PSC
ON P.ProductSubcategoryKey = PSC.ProductSubcategoryKey
INNER JOIN dbo.DimProductCategory PC
ON PSC.ProductCategoryKey = PC.ProductCategoryKey
INNER JOIN dbo.DimCustomer C
ON FIS.CustomerKey = C.CustomerKey
INNER JOIN dbo.DimGeography G
ON C.GeographyKey = G.GeographyKey

2 つのパラメーター RowGroupParam と ColumnGroupParam を作成し、両方とも使用可能な値 Category、Subcategory、ProductName を指定します。

式 =Fields(Parameters!RowGroupParam.Value).Value を使用して行グループを作成し、式 =Fields(Parameters!ColumnGroupParam.Value).Value を使用して列グループを作成します。行グループと列グループのテキスト ボックスの値に同じ式を使用します。

詳細テキスト ボックスに SalesAmount を使用します。

行グループ パラメーターに [カテゴリ] を選択し、列グループ カテゴリに [サブカテゴリ] を選択して、レポートを実行します。レポートが生成されるまで 30 秒待ちます。

同じレポートをレポート サーバーに配置し、同じパラメーターを使用してレポートを実行します。レポートは数秒で生成されます。

4

1 に答える 1

0

100% の答えを提供することはできません。私の経験です。レポート サービスは、独自の内部レコード セットを作成するときに、すべてのデータをフェッチして、新しい仮想レコードセット (テーブル) を作成します。あなたが述べたように、これはSQLクエリから直接実行するよりも遅くなります。これを防ぐために私がすること: 常にクエリを作成し、ms sql 内に格納して、そこですべての作業を実行します。レポート自体では、クエリの結果のみにアクセスします。

たとえばSELECT * FROM qry_verycomplicatedquery、ms sql にクエリとして格納されます。

他の誰かがより良い方法を知っているかもしれませんが、この方法は、後で同じデータソースを使用して多くのレポートを管理するために扱いやすいです。

于 2012-09-10T08:40:48.407 に答える