Je suis en train de chercher une meilleure façon de faire un rapport Crystal (celui de quelqu'un d'autre)... Additionner des temps non chevauchants en groupes. Il s'agit clairement d'un problème ancien... Existe-t-il une technique pour obtenir
- Les temps ajustés (début/fin), par enregistrement, pour supprimer les temps communs/chevauchants,
- au sein des sous-groupes
- --en utilisant du SQL pur (bien que je puisse utiliser des CTE)
Supposez un ordre initial par Heure de Début (et/ou Groupe, Sous-groupe) et Début et Fin sont des champs séparés.
Un exemple graphique :
Groupe 1
Sous-groupe A
Tkt 1 |--début&fin---| "16"
Tkt 2 |----début&fin----| "18"
Tkt 3 |--début&fin---| "14"
Tkt 4 |--D & F -| "11"
Sous-groupe B
Tkt 5 |-D&F-| "7"
Tkt 6 |-D&F-| "7"
Tkt 7 |-D&F-| "7"
...
(équivalent de début/fin ajusté dans le sous-groupe) :
Groupe 1
Sous-groupe A (avec un "temps écoulé" de "33" )
Tkt 1 |--début&fin---| <- Régulier "16"
Tkt 2 |-----| <- Début ajusté "6"
Tkt 3 | <- Début ajusté & Fin ajustée "0"
Tkt 4 |--D & F -| <- Régulier "11"
Sous-groupe B (avec un "temps écoulé" de "17" )
Tkt 5 |-D&F-| <- Régulier "7"
Tkt 6 |-D&F-| <- Régulier (pas de chevauchement) "7"
Tkt 7 |-| <- Début ajusté "3"
...
Je ne parle pas encore de calculs à ce stade, juste d'illustrer l'ajustement du début/fin en fonction de l'enregistrement précédent.
Dans le rapport, ils font plusieurs formules pour chaque enregistrement, par rapport à deux variables qui sont définies sur le premier enregistrement du groupe, puis setting/mettant à jour les valeurs pour DébutAjusté, FinAjustée en fonction de l'enregistrement courant, et en passant le DébutAjusté, FinAjustée à une autre formule pour calculer la différence de temps, à sommer plus tard. La technique actuelle est lente, et je ne peux pas faire un joli tableau croisé dynamique souhaité.
Je pense/j'espère que cela a été résolu en SQL uniquement, car nous ne pouvons pas mettre de procédures, de tables temporaires, etc. sur le serveur de la base de données. J'essaie de trouver un moyen avec CTE et de (re-)cursing, en utilisant le Groupe/Sous-groupe comme parenté, et CASE pour comparer les valeurs courantes avec les dernières valeurs parentes. Est-ce que ça vous dit quelque chose ou vous semble plausible ?
Les capacités de Crystal sont nombreuses, mais celle-ci semble ne pas être faite pour cela.
Marc