Ssrs 2008 报告模型效率低下。需要建议吗

Ssrs 2008 报告模型效率低下。需要建议吗,ssrs-2008,reporting-services,reportbuilder,Ssrs 2008,Reporting Services,Reportbuilder,我正试图帮助我的超级用户有更多的机会访问我们的数据,这样我就不必每天25次打断我的工作(玩吃豆人游戏)写特别的查询之类的 我正在尝试使用数据源视图、数据模型和报表生成器2和3来允许他们访问已清理的数据,在这些数据中他们可以安全地进行自己的基本分析。我希望创建涵盖业务流程的通用报告模型,而不是为他们需要的每个临时报告创建特定的报告模型 我必须使用命名查询创建数据源视图(DSV),因为源数据库缺少主键,但在identity_列上有唯一的聚集索引 这是我的问题。当我使用这样一个相对简单的查询时: SE

我正试图帮助我的超级用户有更多的机会访问我们的数据,这样我就不必每天25次打断我的工作(玩吃豆人游戏)写特别的查询之类的

我正在尝试使用数据源视图、数据模型和报表生成器2和3来允许他们访问已清理的数据,在这些数据中他们可以安全地进行自己的基本分析。我希望创建涵盖业务流程的通用报告模型,而不是为他们需要的每个临时报告创建特定的报告模型

我必须使用命名查询创建数据源视图(DSV),因为源数据库缺少主键,但在identity_列上有唯一的聚集索引

这是我的问题。当我使用这样一个相对简单的查询时:

SELECT SOM.FSONO AS SalesNo
     , SOM.FCUSTNO AS CustNo
     ,SLC.fcompany as CustName
     , SOM.FCUSTPONO AS CustPONo
     , SOM.fsoldby AS SalesPerson
     , SOR.FENUMBEr AS ItemNo
     , SOR.finumber AS IntItemNo
     , SOR.frelease AS Rels
     , SOI.fprodcl AS ProdClass
     , SOI.fgroup AS GroupCode
     , rtrim(SOR.FPARTNO) AS PartNo
     , SOR.fpartrev AS PartRev
     , cast(SOI.fdesc AS VARCHAR(20)) AS PartDescription
     ,SOM.forderdate as OrderDate
     ,SOR.fduedate as DueDate
     , SOR.FORDERQTY AS QtyOrd
     , SOR.FUNETPRICE AS NetUnitPrice
     , (SOR.FORDERQTY * SOR.funetprice) AS NetAmountOrdered
FROM  slcdpm SLC inner join 
somast SOM on SLC.fcustno = SOM.fcustno
     LEFT OUTER JOIN soitem SOI
       ON (SOM.fsono = SOI.fsono)
     LEFT OUTER JOIN sorels SOR
       ON (SOI.fsono = SOR.fsono)     
AND       (SOI.finumber = SOR.finumber)
假设用户在Report Builder 3中使用报表模型,并且仅请求其数据集的SalesNo、PartNo、PartRev、OrderDate和TotalNetAmount

为提取该数据而生成的SQL为:

SET DATEFIRST 7
SELECT
    CAST(1 AS BIT) [c0_is_agg],
    CAST(1 AS BIT) [c1_is_agg],
    CAST(1 AS BIT) [c2_is_agg],
    CAST(1 AS BIT) [c3_is_agg],
    4 [agg_row_count],
    [CustomerSales].[TotalNetAmountOrdered] [TotalNetAmountOrdered],
    [CustomerSales].[SalesNo] [SalesNo],
    [CustomerSales].[PartNo] [PartNo],
    [CustomerSales].[PartRev] [PartRev],
    [CustomerSales].[OrderDate] [OrderDate]
FROM
    (
        SELECT
            SUM([CustomerSales].[NetAmountOrdered]) [TotalNetAmountOrdered],
            [CustomerSales].[SalesNo] [SalesNo],
            [CustomerSales].[PartNo] [PartNo],
            [CustomerSales].[PartRev] [PartRev],
            [CustomerSales].[OrderDate] [OrderDate]
        FROM
            (
                SELECT        SOM.fsono AS SalesNo, SOM.fcustno AS CustNo, SLC.fcompany AS CustName, SOM.fcustpono AS CustPONo, SOM.fsoldby AS SalesPerson, 
                         SOR.fenumber AS ItemNo, SOR.finumber AS IntItemNo, SOR.frelease AS Rels, SOI.fprodcl AS ProdClass, SOI.fgroup AS GroupCode, RTRIM(SOR.fpartno) AS PartNo, 
                         SOR.fpartrev AS PartRev, CAST(SOI.fdesc AS VARCHAR(20)) AS PartDescription, SOM.forderdate AS OrderDate, SOR.fduedate AS DueDate, SOR.forderqty AS QtyOrd, 
                         SOR.funetprice AS NetUnitPrice, SOR.forderqty * SOR.funetprice AS NetAmountOrdered
FROM            slcdpm AS SLC INNER JOIN
                         somast AS SOM ON SLC.fcustno = SOM.fcustno LEFT OUTER JOIN
                         soitem AS SOI ON SOM.fsono = SOI.fsono LEFT OUTER JOIN
                         sorels AS SOR ON SOI.fsono = SOR.fsono AND SOI.finumber = SOR.finumber
            ) [CustomerSales]
        WHERE
            CAST(1 AS BIT) = 1
        GROUP BY
            [CustomerSales].[SalesNo], [CustomerSales].[PartNo], [CustomerSales].[PartRev], [CustomerSales].[OrderDate]
    ) [CustomerSales]
ORDER BY
    [SalesNo], [PartNo], [PartRev], [OrderDate]
我只希望用户在报告中请求的字段,而不是DSV中的每个字段。此外,如果创建了约束数据的参数,例如OrderDate的开始日期和结束日期,则仍将返回完整的数据集

我做错什么了吗

有没有更好的办法


其他管理员在使用报表模型时是否发现自己存在性能问题

在处理报表模型时,有时会出现性能问题。这就是报表模型不适合向所有用户推出以替换所有报表的原因之一。报表模型背后的语义查询引擎生成的查询是不可调的,并且通常与您自己编写它们的方式完全不同

该引擎本质上将命名查询视为一个视图,并将其扩展为基础查询,就像它是一个视图一样。在构建直接覆盖数据库的模型时,这通常是一个问题

从我的角度来看,理想的情况是有一个单独的数据库(可能是数据仓库),最好放在单独的服务器上。此dw将被展平,以便您可以优化它的读取性能。然后,您可以在数据源视图中直接使用这些表,模型背后的语义查询引擎应该能够进行更好的查询


由于经济或其他方面的限制,这一理想往往不可能实现。您是否可以尝试将作业或多或少地从基本表中进行ETL,以生成一组新的表,从而优化报告以支持您的模型

这实际上是我一直在做的一个完全独立的项目。我希望能腾出一些时间来处理所有临时请求,这样我就可以处理DW项目了。