0

在 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 秒以生成报告。

将相同的报表部署到报表服务器并使用相同的参数运行报表。报告将在几秒钟内生成。

4

1 回答 1

0

我不能给你100%的答案,只是我的经验。当报表服务构建自己的内部记录集时,它会获取所有数据并创建一个新的虚拟记录集(表)。正如您所提到的,这比直接从 sql 查询执行要慢。所以我要做什么来防止这种情况:始终构建查询并将它们存储在 ms sql 中以在那里执行所有工作。在报告本身中,我只访问查询的结果。

例如SELECT * FROM qry_verycomplicatedquery,它作为查询存储在 ms sql 中。

也许其他人知道更好的方法,但无论如何,这种方法更容易处理,以便使用相同的数据源管理大量报告。

于 2012-09-10T08:40:48.407 回答