J'essaie d'aider mes utilisateurs à avoir plus d'accès à nos données, donc je n'ai pas besoin d'interrompre mon travail (jouer à Pac-Man) 25 fois par jour en écrivant des requêtes ad hoc et autres. J'essaie d'utiliser les vues de sources de données, les modèles de données et le Report Builder 2 et 3 pour leur permettre d'avoir accès à des données nettoyées dans lesquelles ils peuvent effectuer leur propre analyse de base en toute sécurité. Je souhaite créer des modèles de rapport génériques couvrant les processus métier plutôt qu'un modèle de rapport spécifique pour chaque rapport ad hoc dont ils auraient besoin.Signaler les inefficacités du modèle. J'ai besoin d'aide
Je dois créer la vue de source de données (DSV) avec une requête nommée car la base de données source manque de clés primaires, mais possède des index clusterisés uniques sur identity_columns.
Voici mon problème. Lorsque j'utilise une requête relativement simple comme ceci:
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)
Supposons que l'utilisateur prend le modèle de rapport dans le Générateur de rapports 3 et ne demande que SalesNo, d 'art, PartRev, OrderDate et TotalNetAmount pour leur jeu de données.
le SQL généré pour tirer ces données est:
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]
Je me serais attendu que les champs tirés que les demandes des utilisateurs dans le rapport et non pas tous les domaines unique dans la DSV. En outre, si des paramètres sont créés pour contraindre les données, comme une date de début et de fin pour OrderDate, l'ensemble de données complet est renvoyé de toute façon.
Est-ce que je fais quelque chose de mal ici?
Y a-t-il une meilleure façon d'aborder cela?
Les autres administrateurs rencontrent-ils des problèmes de performances lors de l'utilisation de modèles de rapport?
C'est en fait un projet entièrement distinct sur lequel j'ai travaillé. Mon espoir est de libérer du temps actuellement utilisé par toutes les demandes ad hoc pour que je puisse travailler sur le projet DW. – DavidStein
J'espère que cela fonctionne pour vous, monsieur. :) – MarkVSQL