在 Visual Studio 2008 中创建使用如下表达式的矩阵报表时,预览所需的时间比应做的要长得多。
=Fields(Parameters!ColumnGroupParam.Value).Value
如果相同的报表部署到报表服务器并在报表管理器中查看,或者报表是使用报表生成器而不是 Visual Studio 设计的,则不会出现问题并且报表会快速生成。
从 SQL Server Profiler 查看结果时,从 Visual Studio 查询查询需要更长的时间才能返回结果集。
报告经理:持续时间 = 1885
Visual Studio:持续时间 = 327946(长 173 倍!)
通常,即使没有用于组的表达式,从 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 秒以生成报告。
将相同的报表部署到报表服务器并使用相同的参数运行报表。报告将在几秒钟内生成。