2011-03-08 5 views
0

J'essaye de créer un rapport de table étagé en utilisant SQL Report Builder 3.0. Le rapport échelonné contient des groupes/appareils/utilisateurs avec les totaux associés pour chaque groupe/appareil/utilisateur.Table pas à pas non triée

Je veux que le rapport entier soit trié par ces totaux avec chaque étape individuelle triée de cette manière également.

Actuellement, les utilisateurs sont triés par leurs totaux, mais pas par les appareils ou les groupes.

Existe-t-il un moyen de trier les autres étapes?

+0

Avez-vous essayé l'une des deux réponses pour voir si elles fonctionnent pour vous? –

Répondre

0

Vous pouvez simplement le faire dans SQL en utilisant des requêtes imbriquées. Supposons que vous avez les tables suivantes: Transaction, User, Device et Group. La table de transactions enregistre les transactions de l'utilisateur sur un périphérique et a un champ Montant à additionner. Un utilisateur appartient à un groupe.

Vous devez donc résumer le montant pour l'utilisateur, pour les groupes et pour les appareils utilisés dans un groupe qui vous donnera SQL qui ressemble à ceci:

SELECT G.Description AS [Group], D.Description AS Device, U.Description AS UserName, MAX(GT.GroupTotal) AS GroupTotal, MAX(GDT.GroupDeviceTotal) AS GroupDeviceTotal, SUM(T.Amount) AS UserTotal 
FROM Transaction AS T 
    INNER JOIN User AS U ON L.UserId = F.UserId 
    INNER JOIN Group AS G ON G.GroupId = L.GroupId 
    INNER JOIN Device AS D ON T.DeviceId = L.DeviceId 
    INNER JOIN 
     (SELECT GroupId, SUM(Amount) AS GroupTotal 
     FROM Transaction 
      INNER JOIN User ON User.UserId = Transaction.UserId 
     WHERE (Transaction.TxDate >= '2011-01-01') 
     GROUP BY User.GroupId) AS GT ON GT.GroupId = U.GroupId 
    INNER JOIN 
     (SELECT GroupId, DeviceId, SUM(Amount) AS GroupDeviceTotal 
     FROM Transaction 
      INNER JOIN User ON User.UserId = Transaction.UserId 
     WHERE (TxDate >= '2011-01-01') 
GROUP BY GroupId, DeviceId) AS GDT ON GDT.GroupId = U.GroupId AND GDT.DeviceId = T.DeviceId 
WHERE (T.TxDate >= '2011-01-01') 
GROUP BY G.GroupId, D.DeviceId, U.UserId 
ORDER BY GroupTotal DESC, GroupDeviceTotal DESC, UserTotal DESC 

Notez que la clause where vous utilisez doit être la même dans la requête principale et dans chaque requête imbriquée (c'est le bit "WHERE (T.TxDate> = '2011-01-01')").

0

Vous pouvez essayer d'aller dans la zone Groupes de lignes/colonnes ... puis pour chaque groupe, double-cliquez sur le groupe, sélectionnez "Trier", puis ajoutez autant de champs de tri que nécessaire pour les informations contenues dans ce groupe. niveau du groupe. Si vous avez d'autres sortes appliquées sur les données ... comme le tableau matriciel/matrice, parfois SSRS peut être confus, donc si ma suggestion vous aide avec l'effet que vous voulez, mais il y a quelques problèmes , essayez de supprimer tout autre tri que vous avez appliqué aux données ailleurs dans le rapport en plus de ces groupes ... Et je commencerais par le plus profond et je m'entraînerais en essayant de ne pas répéter un champ qui est dans les données d'un groupe inférieur. (si ça a du sens).


modifier:

Alors, disons que nous avons un rapport pour le bureau d'un vétérinaire qui affiche des informations client, et nous voulons par groupe personID, petID et visitID. Le tablix dans son ensemble serait trié par nom de la personne (ou nom de famille, puis prénom ... ou autre). Ensuite, votre premier groupe se regrouperait sur le personID et serait trié par le nom de compagnie. Le deuxième groupe inférieur se grouperait sur le petID et serait trié par visitDate. Le troisième niveau serait groupé sur le visitID, et ... cela n'a pas vraiment besoin d'être trié sauf par visitTime si ce n'est pas inclus dans visitDate.

Questions connexes