Je pense toujours que mon idée devrait avoir fonctionné, mais tant que vous avez trouvé une solution.
> Je dis maladroit, parce que chaque fois que je veux changer
> valeur de TopN que je dois devenir occupé changeant beaucoup de formule :
Le « changement est-il la valeur de TopN » se rapportant auxquelles des valeurs supérieures vous voulez s'ajouter ensemble, ou peut-être juste combien de groupes sont dans le rapport ? L'une ou l'autre manière, ce ne doit pas être un problème (jusqu'à un point).
Votre première formule emploie Redim pour placer la taille de la rangée à 4, et cela n'est jamais changé dans les formules que vous avez signalées. Si votre rapport a plus de 4 groupes, vous obtiendrez une erreur souscrite. Peut-être vous faites quelque chose qui n'aura jamais plus de 4 groupes sur un rapport, comme les 4 quarts en année. Autrement, vous devriez tenir compte de plus de groupes.
L'one-way à manipuler qui serait d'augmenter simplement le nombre dans le Redim au nombre maximum des groupes que vous vous pensez aura jamais sur un rapport. Une option plus dynamique est d'augmenter la taille de la rangée selon les besoins. Pour faire cela, changer juste votre deuxième formule comme suit :
//array évaluent dans le titre de bas de page de groupe
WhilePrintingRecords ;
rangée numberVar droite ;
si GroupNumber > comptent (droite) alors
Conserve droite [GroupNumber] de Redim ;
Droite [GroupNumber] : = tonumber ({#period brut}) ;
Cela emploie juste la conserve de Redim pour augmenter la droite si nécessaire. L'option de conserve garde le contenu courant (toutes les valeurs stockées jusqu'à ce point).
Si le nombre de groupes sur le rapport était un souci, ceci devrait prendre soin de lui, jusqu'à un point. La limitation ici est qu'une rangée peut seulement avoir 1000 éléments, ainsi si vous avez jamais un rapport avec plus de 1000 groupes, qui seront un problème. Mais puisque la limite using vos formules courantes est 4, je devine qu'une limite de 1000 ne sera pas probablement un problème. : -)
Si vous êtes préoccupé par changer les formules pour ajouter ensemble quelque chose autre que les 3 valeurs principales, c'est quelque chose que vous devriez traiter, mais vous pouvez la simplifier. Pendant qu'elle est maintenant, la formule de finale assortit les valeurs dans la rangée de le plus bas à le plus haut et ajoute ensemble les 3 valeurs finales, et cela fonctionne seulement s'il y a exactement 4 groupes sur le rapport (qui nous amène de nouveau à cette question plus tôt, fait votre _always_ de rapport ont 4 groupes là-dessus ?). Vous pouvez simplifier qu'un peu en assortissant les valeurs de le plus haut à le plus bas et en ajoutant ensemble les 3 premières valeurs. De cette façon il n'importe pas combien d'éléments sont dans la rangée (IE. combien de groupes sont sur le rapport). Ajouter juste ensemble les premiers éléments de N pour obtenir votre total. C'est discutablement peu un plus simple qu'ajoutant ensemble le dernier N.
Pour assortir la rangée de le plus haut à plus bas, changer juste cette ligne dans la formule finale
si droite [counter2] > droite [counter2 + 1] puis
à ceci
si droite [counter2] < RT="">
IOW, changent > en <>
Changer alors la dernière ligne en :
ajouter : = DROITE [1] +RT [2] +RT [3]
FWIW, c'est une chose très mineure, mais la variable d'ajouter dans des services de cette formule aucun objectif réel. Vous pourriez juste oublier que lui et la ligne finale pourraient être :
Droite [2] +RT [3] +RT [4] // votre formule originale
Droite [1] +RT [2] +RT [3] // ma version
Également, quand vous vous êtes référé à « changer beaucoup de formule », êtes-vous peut-être des formules de utilisation comme celles que vous avez signalé pour ajouter ensemble les valeurs de topN pour plus d'un champ, et parliez-vous changeant les formules pour tous champs si vous vouliez changer N ?
Si oui, vous pourriez simplifier cela en mettant le N dans une formule et en employant cette formule dans les formules qui ajoutent ensemble les valeurs. Par exemple, créer une formule appelée le topN qui indique juste
3
Une autre option serait de mettre les 3 dans une variable dans la formule dans votre en-tête de rapport. L'une ou l'autre manière, vous emploieriez alors ces formule/variable dans votre formule finale. Comment vous employez elle dépendra de la façon dont votre rangée est assortie. Si vous l'assortissez dans l'ordre décroissant, comme j'ai proposé, alors vous voulez ajouter ensemble les premières valeurs de N et vous pourriez juste remplacer la ligne finale de la formule finale par ceci :
si {@topN} < Array=""> conserve droite de Redim [{@topN}] ;
Somme (droite)
Cela indique juste que si la rangée fait vouloir plus d'éléments que vous (par exemple elle fait vouloir 4 éléments et vous seulement le 3) principal, alors emploie la conserve de Redim pour rendre la rangée plus petite, jetant les valeurs non désirées. Si la rangée fait réellement vouloir moins d'éléments que vous (par exemple elle a 3 éléments et vous vouloir le 4) principal, il ne tracasse pas avec le Redim. Aucun point en ajoutant plus d'éléments qui seront juste 0.
Alors il emploie juste la somme pour s'ajouter ensemble ce qui est laissé dans la rangée.
En fait, même si vous n'employez pas la formule de topN/idée variable, ceci pourrait être une bonne manière de manipuler changer le nombre de valeurs pour s'ajouter. Les dernières lignes ont pu être :
si conserve < Array=""> droite [3] de 3 Redim ;
Somme (droite)
Si vous voulez changer combien de valeurs sont ajoutées, changer juste ces deux 3 en nouvelle valeur.
OK, je devine qui devrait vous donner assez pour mâcher dessus. : -)
James