Bonjour à tous,
Je souhaiterais transposer des données
Exemple : j'ai 3 lignes de contrats actifs pour un client et je souhaiterais les afficher en colonne
Client 1 Contrat1 Libelle1
Client 1 Contrat2 Libelle2
Client 1 Contrat3 Libelle3
J'aimerais avoir le résultat suivant :
Client1 Contrat1 Contrat2 Contrat3 LibelléContrat1 LibelléContrat2 LibelléContrat3
Par avance,
Merci pour votre aide,
Rafika
Solved! Go to Solution.
Views
Replies
Total Likes
Bonjour Rafika,
La fonction Pivot n'est pas proposée en standard dans l'activité Requête d'un workflow (Sélection avancée).
Ceci dit, pour la transformation dont vous avez besoin, il me semble que cette méthode très simple, d'ajout de colonnes additionnelles d'entités liées peut vous convenir :
Puis sélectionner votre relation Contrat.
Dans mon instance, pas de contrat, je vous montre sur une entité équivalente :
Si vous ne limitez pas à 3 lignes, vous obtiendrez autant de colonnes contrat qu'il y a en base pour le client ayant le plus de contrat.
Poursuivez sur l'assistant jusqu'au dernier écran de paramétrage pour sélectionner les colonnes à ajouter :
Vous obtenez quelque chose comme ceci :
Dans Propriétés de votre workflow, pour tester (pas en production), cocher :
Ensuite, exécutez votre worklow et sur la flêche de transition, clic droit, Afficher la cible ; vous devriez obtenir un résultat similaire :
Le contexte targetData (temp:query si votre requête s'appelle query) est donc enrichi des colonnes additionnelles que vous souhaitez.
Ensuite il suffit d'utiliser les données de ce contexte comme vous le voulez dans votre diffusion ou bien les activités de traitement du reste de votre workflow.
Par exemple les mettre dans un tableau de votre diffusion dans l'ordre exact que vous souhaitez.
Si vous souhaitez plus loin, avec de "vraies" fonctions pivot, lisez la suite, sinon oubliez, cela va vous embrouillez...
Auparavant (en 6.0), il était possible de directement saisir une requête SQL native dans cette activité Requête (SQLData), mais pour des raisons de sécurité, la fonctionnalité SQLData a été supprimé à partir de la v6.1, et c'est tout à fait légitime.
Donc pour des requêtes qu'il n'est pas possible d'effectuer via l'assistant de l'activité Requête (car transformation sur plusieurs entités), il faut passer par une activité Javascript.
Il faut utiliser la méthode query de l'objet DDBEngine (cf la documentation JS API v6.1), ainsi vous avez toute la souplesse et les possibilités du moteur de votre base de données !
(A noter : DBengine.query n'est pas disponible dans une webApp, mais dans un workflow, c'est bon !)
Par exemple :
var cnx = application.getConnection()
try
{
var stmt = cnx.query("
" )
SELECT
Produit,
SUM
(
[
2003
]
)
AS
[
2003
]
,
SUM
(
[
2004
]
)
AS
[
2004
]
,
SUM
(
[
2005
]
)
AS
[
2005
]
,
SUM
(
[
2006
]
)
AS
[
2006
]
FROM
Ventes
PIVOT(
SUM
(
Vente)
FOR
anneeIN
(
[
2003
]
,[
2004
]
,[
2005
]
,[
2006
]
)
)
AS
AnneesGROUP
BY
Produit}
catch(e)
{
logWarning("query catched error (contrat data, transposition with pivot)");
logWarning("Error number: " + e );
}
for each(var row in stmt)
logInfo(row[0] + " : " + row[1] + " " + row[2] + " " + row[3] + " " + row[4])
cnx.dispose();
L'exemple donné est avec une syntaxe de requête SQL Sql Server.
Enfin, dernière solution à explorer, comme je vous le disais dans mon précédent post, les bibliothèques Javascript de gestion des pivot tables... L'avantage est une gestion sans doute plus puissante en terme de formatage/présentation.
Cordialement.
Jean-Serge
Bonjour Rafika,
Est-ce bien dans Adobe Campaign classic v6 ou un autre progiciel ?
Quel est votre moteur de base de données ?
Voulez-vous le faire en Javascript ou en SQL ?
Pour notre part, nous utilisons SQL Server pour Adobe Campaign et Oracle pour d'autres produits, et nous utilisons la fonction PIVOT de SQL Server (et son équivalent pour Oracle) pour transposer les données de colonne en ligne ou vice-versa.
Je ne sais pas si cela existe en mySql et Postgresql.
Et donc, comme vous pouvez à partir de Adobe Campaign v6, appeler des procédures stockées ou des fonctions de votre SGBD sous-jacent, vous pouvez obtenir le résultat escompté facilement depuis vos workflows ou vos webApp.
Il existe plusieurs implémentations de la fonction Pivot en Javascript, soit avec des fonctions open source ou d'éditeurs (je vous laisse le soin de regarder les résultats Google "pivot javascript"), mais je ne sais pas si elles fonctionnent bien au sein de code Javascript API Adobe Campaign.
Bon courage.
Cordialement.
Jean-Serge
Views
Replies
Total Likes
Bonjour,
J'utilise Adobe Campaign V6
Ce n'est pas possible de le faire via les fonctions avancées proposées dans les boites activités dans un workflow ?
Par avance, merci pour votre aide,
A dispo,
Rafika
Views
Replies
Total Likes
Bonjour Rafika,
La fonction Pivot n'est pas proposée en standard dans l'activité Requête d'un workflow (Sélection avancée).
Ceci dit, pour la transformation dont vous avez besoin, il me semble que cette méthode très simple, d'ajout de colonnes additionnelles d'entités liées peut vous convenir :
Puis sélectionner votre relation Contrat.
Dans mon instance, pas de contrat, je vous montre sur une entité équivalente :
Si vous ne limitez pas à 3 lignes, vous obtiendrez autant de colonnes contrat qu'il y a en base pour le client ayant le plus de contrat.
Poursuivez sur l'assistant jusqu'au dernier écran de paramétrage pour sélectionner les colonnes à ajouter :
Vous obtenez quelque chose comme ceci :
Dans Propriétés de votre workflow, pour tester (pas en production), cocher :
Ensuite, exécutez votre worklow et sur la flêche de transition, clic droit, Afficher la cible ; vous devriez obtenir un résultat similaire :
Le contexte targetData (temp:query si votre requête s'appelle query) est donc enrichi des colonnes additionnelles que vous souhaitez.
Ensuite il suffit d'utiliser les données de ce contexte comme vous le voulez dans votre diffusion ou bien les activités de traitement du reste de votre workflow.
Par exemple les mettre dans un tableau de votre diffusion dans l'ordre exact que vous souhaitez.
Si vous souhaitez plus loin, avec de "vraies" fonctions pivot, lisez la suite, sinon oubliez, cela va vous embrouillez...
Auparavant (en 6.0), il était possible de directement saisir une requête SQL native dans cette activité Requête (SQLData), mais pour des raisons de sécurité, la fonctionnalité SQLData a été supprimé à partir de la v6.1, et c'est tout à fait légitime.
Donc pour des requêtes qu'il n'est pas possible d'effectuer via l'assistant de l'activité Requête (car transformation sur plusieurs entités), il faut passer par une activité Javascript.
Il faut utiliser la méthode query de l'objet DDBEngine (cf la documentation JS API v6.1), ainsi vous avez toute la souplesse et les possibilités du moteur de votre base de données !
(A noter : DBengine.query n'est pas disponible dans une webApp, mais dans un workflow, c'est bon !)
Par exemple :
var cnx = application.getConnection()
try
{
var stmt = cnx.query("
" )
SELECT
Produit,
SUM
(
[
2003
]
)
AS
[
2003
]
,
SUM
(
[
2004
]
)
AS
[
2004
]
,
SUM
(
[
2005
]
)
AS
[
2005
]
,
SUM
(
[
2006
]
)
AS
[
2006
]
FROM
Ventes
PIVOT(
SUM
(
Vente)
FOR
anneeIN
(
[
2003
]
,[
2004
]
,[
2005
]
,[
2006
]
)
)
AS
AnneesGROUP
BY
Produit}
catch(e)
{
logWarning("query catched error (contrat data, transposition with pivot)");
logWarning("Error number: " + e );
}
for each(var row in stmt)
logInfo(row[0] + " : " + row[1] + " " + row[2] + " " + row[3] + " " + row[4])
cnx.dispose();
L'exemple donné est avec une syntaxe de requête SQL Sql Server.
Enfin, dernière solution à explorer, comme je vous le disais dans mon précédent post, les bibliothèques Javascript de gestion des pivot tables... L'avantage est une gestion sans doute plus puissante en terme de formatage/présentation.
Cordialement.
Jean-Serge
Merci
C'est exactement ce que je suis en train de tester.
Le nombre de lignes à conserver > je suis passée à 5 > et je teste le trie pour prioriser les lignes à séctionner
On va voir ..
Merci pour votre réactivité
Je reviens vers vous pour vous dire si le résultat me va,
A+
Rafika
Views
Replies
Total Likes
Je suis absent(e) du bureau jusqu'au 21/08/2017
Pour toute urgence, contacter Michèle ou Rosario de l'équipe Ciblage
Bel été ++
Remarque : ceci est une réponse automatique à votre message "Reply marked
as helpful on Transposer des donnes" envoyé le 18/08/2017 13:40:09.
C'est la seule notification que vous recevrez pendant l'absence de cette
personne.
Views
Replies
Total Likes