7
votes

Rapport de cristal; Combinant des lignes de données en une seule valeur

J'ai une donnée dans des lignes comme celle-ci pour ID 1

ID1 A1

ID1 B2

ID1 C3

ID1 D4

ID1 E5

J'aime le combiner comme "A1B2C3D4E5" en une seule valeur pour ID1. Merci d'avance.


0 commentaires

3 Réponses :


-2
votes

Cela dépendra du type de données pour les colonnes A1-E5 et de ce que vous essayez de faire avec la valeur unique.

Si vous essayez simplement d'afficher la valeur, vous pouvez créer une formule qui utilise la fonction ToText () de Crystal () pour les convertir pour d'abord les convertir en chaînes, puis les concaténer ensemble en utilisant '+'.

toext ({id1.a1}) + toext ({id1.b2}) + toext ({id1.c3}) + toext ({id1.d4}) + toext ({id1.e5})

Vous pourriez accomplir la même chose sur le côté DBMS, également.

Si vous pouvez fournir plus d'informations, nous pourrions peut-être proposer une meilleure solution.


3 commentaires

J'ai presque suscité votre réponse, mais je me suis rendu compte que ce n'était pas sa question. Si c'était cependant, vous avez répondu parfaitement.


Oui, j'ai envisagé cela mais a fait l'hypothèse c'était un snafu de sémantique et qu'il était plus probable que ID1 était une ligne / record.


Merci de répondre à ma question. ID1 est un identifiant client, ces produits achetés personnalisés A1, B2, C3 à différents moments, etc. J'aime savoir quel client acheté A1 a également acheté D4. Merci beaucoup



0
votes

Donc, vous voulez concaténer des données de plusieurs lignes dans une seule ligne d'affichage? Les rapports de cristal ne sont vraiment pas construits pour ce genre de chose. Même si vous le pouviez, je vous suggérerais toujours de faire ce dernier côté serveur, puis de l'alimenter en cristal.

Ce ne sera pas trop difficile, une boucle simple à travers les données dans la langue de votre choix. Mais le cristal est construit pour afficher et formater des données, avec un ensemble décent (mais pas complet) d'outils de manipulation de données. Je ne pense pas que ce soit la meilleure façon de partir.


2 commentaires

Merci pour votre commentaire. Je n'ai pas accès au serveur et j'essayais de créer un tableau ou une matrice pour contenir les données, puis les afficher. Mais cela n'a pas réussi. Merci de votre aide.


Un tableau dans Crystal Sounds comme ça pourrait faire l'affaire pour ce que vous voulez faire ... De quel problème avez-vous eu avec elle? Vous pouvez regrouper par le client, initialiser la matrice et un numéro de numérisation pour garder une trace de la taille de l'en-tête et la croissance de la matrice de manière dynamique (à l'aide de Redim Serve) avec chaque nouveau produit que vous rencontrez dans les détails. Dans le pied de page, vous aurez une matrimonie de chaque produit acheté par le client.



16
votes

Une approche est la méthode "3 formules". Vous configurez une formule d'initialisation dans chaque en-tête, avec la directive sur le temps d'évaluation "TandrintingRecords". Cette approche était la seule disponible pour faire des totaux de fonctionnement dans les "bons olles" jours "avant que les objets runningtotal soient disponibles.
Par exemple:
Dans l'en-tête du groupe: - Avoir une formule @initiliserert strong> xxx pré>

dans la section Détails: - avoir une formule @updatert forte> p > xxx pré>

Enfin, dans le pied de page de groupe, vous pouvez voir le résultat: - formule @Showrt strong> p>

WhilePrintingRecords;
StringVar ConcatenatedID;


3 commentaires

J'ai suivi votre exemple, mais cela ne fonctionne pas quand dans plusieurs pages. S'il vous plaît aider ou partager des entrées, car cela fonctionne assez bien lorsque le rapport est une page uniquement.


J'ai oublié le problème avec plusieurs pages. J'ai mis à jour le code pour @initialiserert pour inclure le chèque de IndrepeatedGroupheader. La première fois que la page est imprimée, cela sera faux et la chaîne vidée. Pour toute autre pages inrepeatedGroupHeader, est vraie et la chaîne sera laissée seule. Ministère, je n'ai pas testé cela, je vais juste sortir de ma mémoire, car je n'ai plus de cristal installé.


J'ai effectivement terminé le problème dans plusieurs pages en mettant la formule initiale à la partie de pied de page.