Expand my Community achievements bar.

Adobe Campaign User Groups are live now. Join our Adobe Campaign User Groups and connect with your local leaders!
SOLVED

Data transformations using a workflow, is possible?

Avatar

Level 5

I've a schema in long format that needs to be converted to wide format. 

I've the schema with data on the left, and I want to create another schema with data, based on the original, but in wide format (right image). 

Is it possible? There are other fields, but I mainly care about the ones in the image.

 

ogonzalesdiaz_1-1696084863821.png

FIXED SQL:

```

select
CODSECUENCIALNOTIFICACIONPREFERENCIA,
codinternocomputacional,
CODGRUPONOTIFICACIONPREFERENCIACLI,
NBRGRUPONOTIFIACIONPREFERENCIACLI,
CODNOTIFICACIONPREFERENCIACLI,
NBRNOTIFICACIONPREFERENCIACLI,
NBRTIPBCACLI,
CODIDENTIFICADORPREFERENCIA,
FECREGISTRONOTIFICACIONPREFERENCIACLI,
FECMODIFICACIONNOTIFICACIONPREFERENCIACLI,
STRING_AGG(CASE WHEN derivedTable.sFLGCANALACTIVOCOMUNICACIONCLI::boolean IS true THEN derivedTable.sCODCANALCOMUNICACIONCLI END, ', ') AS CODCANALCOMUNICACIONCLIACTIVADO,
STRING_AGG(CASE WHEN derivedTable.sFLGCANALACTIVOCOMUNICACIONCLI::boolean IS true THEN derivedTable.sNBRCANALCOMUNICACIONCLI END, ', ') AS DESCANALCOMUNICACIONCLIACTIVADO,
STRING_AGG(CASE WHEN derivedTable.sFLGCANALACTIVOCOMUNICACIONCLI::boolean IS false THEN derivedTable.sCODCANALCOMUNICACIONCLI END, ', ') AS CODCANALCOMUNICACIONCLIDESACTIVADO,
STRING_AGG(CASE WHEN derivedTable.sFLGCANALACTIVOCOMUNICACIONCLI::boolean IS false THEN derivedTable.sNBRCANALCOMUNICACIONCLI END, ', ') AS DESCANALCOMUNICACIONCLIDESACTIVADO
from
(SELECT
DENSE_RANK() OVER (ORDER BY abcmd_preferenciacomunicacion_ccm.scodinternocomputacional) AS CODSECUENCIALNOTIFICACIONPREFERENCIA,
abcmd_preferenciacomunicacion_ccm.scodinternocomputacional as codinternocomputacional,
abcmd_preferenciacomunicacion_ccm.sCODGRUPONOTIFICACIONPREFERENCIACLI as CODGRUPONOTIFICACIONPREFERENCIACLI,
abcmd_preferenciacomunicacion_ccm.sNBRGRUPONOTIFIACIONPREFERENCIACLI as NBRGRUPONOTIFIACIONPREFERENCIACLI,
abcmd_preferenciacomunicacion_ccm.sCODNOTIFICACIONPREFERENCIACLI as CODNOTIFICACIONPREFERENCIACLI,
abcmd_preferenciacomunicacion_ccm.sNBRNOTIFICACIONPREFERENCIACLI as NBRNOTIFICACIONPREFERENCIACLI,
abcmd_preferenciacomunicacion_ccm.sNBRTIPBCACLI as NBRTIPBCACLI,
abcmd_preferenciacomunicacion_ccm.sCODIDENTIFICADORPREFERENCIA as CODIDENTIFICADORPREFERENCIA,
abcmd_preferenciacomunicacion_ccm.tsFECREGISTRONOTIFICACIONPREFERENCIACLI as FECREGISTRONOTIFICACIONPREFERENCIACLI,
abcmd_preferenciacomunicacion_ccm.tsFECMODIFICACIONNOTIFICACIONPREFERENCIACLI as FECMODIFICACIONNOTIFICACIONPREFERENCIACLI,
abcmd_preferenciacomunicacion_ccm.sCODCANALCOMUNICACIONCLI,
abcmd_preferenciacomunicacion_ccm.sNBRCANALCOMUNICACIONCLI,
abcmd_preferenciacomunicacion_ccm.sFLGCANALACTIVOCOMUNICACIONCLI
FROM AbcMD_PREFERENCIACOMUNICACION_CCM
ORDER BY abcmd_preferenciacomunicacion_ccm.scodinternocomputacional) AS derivedTable
group by
CODSECUENCIALNOTIFICACIONPREFERENCIA,
codinternocomputacional,
CODGRUPONOTIFICACIONPREFERENCIACLI,
NBRGRUPONOTIFIACIONPREFERENCIACLI,
CODNOTIFICACIONPREFERENCIACLI,
NBRNOTIFICACIONPREFERENCIACLI,
NBRTIPBCACLI,
CODIDENTIFICADORPREFERENCIA,
FECREGISTRONOTIFICACIONPREFERENCIACLI,
FECMODIFICACIONNOTIFICACIONPREFERENCIACLI

```



ogonzalesdiaz_2-1696085121413.png

 

 


EDIT 1: 

I fixed the SQL but now getting error in the UPDATE activity:

10/01/2023 6:29:53 PM WKF-560029 The document types of inbound events ('abc:MD_PREFERENCIACOMUNICACION_CCM' and 'abc:MD_PREFERENCIACOMUNICACION_CCM_FIX') are incompatible (step 'Update data'). Unable to perform the operation.

I need to get all data from: 'abc:MD_PREFERENCIACOMUNICACION_CCM' , transform it using SQL and insert that in: abc:MD_PREFERENCIACOMUNICACION_CCM_FIX. But I'm getting the error message above.

ogonzalesdiaz_0-1696203152694.png


Update activity setup:

ogonzalesdiaz_2-1696203315440.png

 

 

Update 2: 

After saving and opening again the Update activity I've notice the "Updated dimension" changed from "MD_PREFERENCIACOMUNICACION_CCM_FIX" to MD_PREFERENCIACOMUNICACION_CCM". 

It's like its choosing the original schema and not the new one, where the transformed data should go to.

ogonzalesdiaz_0-1696203468339.png

 






1 Accepted Solution

Avatar

Correct answer by
Community Advisor

Hello @ogonzalesdiaz

 

Can you please clarify if you would like to do this conversion with the SQL code activity direclty or if you would prefer to use multiple Adobe Campaign activities?

 

 

If you want to do directly using SQL code please try the following steps:

  •  Add only SQL activity.
  • Try the following SQL Code:

 

 

INSERT INTO BcpMD_PREFERENCIACOMUNICACION_CCM_Fix (
  CODSECUENCIALNOTIFICACIONPREFERENCIA,
  CODINTERNOCOMPUTACIONAL,
  CODGRUPONOTIFICACIONPREFERENCIACLI,
  NBRGRUPONOTIFIACIONPREFERENCIACLI,
  CODNOTIFICACIONPREFERENCIACLI,
  NBRNOTIFICACIONPREFERENCIACLI,
  NBRTIPBCACLI,
  CODIDENTIFICADORPREFERENCIA,
  FECREGISTRONOTIFICACIONPREFERENCIACLI,
  FECMODIFICACIONNOTIFICACIONPREFERENCIACLI,
  CODCANALCOMUNICACIONCLIACTIVADO,
  DESCANALCOMUNICACIONCLIACTIVADO,
  CODCANALCOMUNICACIONCLIDESACTIVADO,
  DESCANALCOMUNICACIONCLIDESACTIVADO
)
SELECT
  CODSECUENCIALNOTIFICACIONPREFERENCIA,
  CODINTERNOCOMPUTACIONAL,
  CODGRUPONOTIFICACIONPREFERENCIACLI,
  NBRGRUPONOTIFIACIONPREFERENCIACLI,
  CODNOTIFICACIONPREFERENCIACLI,
  NBRNOTIFICACIONPREFERENCIACLI,
  NBRTIPBCACLI,
  CODIDENTIFICADORPREFERENCIA,
  FECREGISTRONOTIFICACIONPREFERENCIACLI,
  FECMODIFICACIONNOTIFICACIONPREFERENCIACLI,
  STRING_AGG(CASE WHEN FLGCANALACTIVOCOMUNICACIONCLI is true THEN CAST(CODCANALCOMUNICACIONCLI AS STRING) END, ', ') AS CODCANALCOMUNICACIONCLIACTIVADO,
  STRING_AGG(CASE WHEN FLGCANALACTIVOCOMUNICACIONCLI is true THEN NBRCANALCOMUNICACIONCLI END, ', ') AS DESCANALCOMUNICACIONCLIACTIVADO,
  STRING_AGG(CASE WHEN FLGCANALACTIVOCOMUNICACIONCLI is false THEN CAST(CODCANALCOMUNICACIONCLI AS STRING) END, ', ') AS CODCANALCOMUNICACIONCLIDESACTIVADO,
  STRING_AGG(CASE WHEN FLGCANALACTIVOCOMUNICACIONCLI is false THEN NBRCANALCOMUNICACIONCLI END, ', ') AS DESCANALCOMUNICACIONCLIDESACTIVADO
FROM
(SELECT
DENSE_RANK() OVER (ORDER BY codinternocomputacional) AS CODSECUENCIALNOTIFICACIONPREFERENCIA,
codinternocomputacional as codinternocomputacional,
CODGRUPONOTIFICACIONPREFERENCIACLI as CODGRUPONOTIFICACIONPREFERENCIACLI,
NBRGRUPONOTIFIACIONPREFERENCIACLI as NBRGRUPONOTIFIACIONPREFERENCIACLI,
CODNOTIFICACIONPREFERENCIACLI as CODNOTIFICACIONPREFERENCIACLI,
NBRNOTIFICACIONPREFERENCIACLI as NBRNOTIFICACIONPREFERENCIACLI,
NBRTIPBCACLI as NBRTIPBCACLI,
CODIDENTIFICADORPREFERENCIA as CODIDENTIFICADORPREFERENCIA,
FECREGISTRONOTIFICACIONPREFERENCIACLI as FECREGISTRONOTIFICACIONPREFERENCIACLI,
FECMODIFICACIONNOTIFICACIONPREFERENCIACLI as FECMODIFICACIONNOTIFICACIONPREFERENCIACLI,
CODCANALCOMUNICACIONCLI,
NBRCANALCOMUNICACIONCLI,
FLGCANALACTIVOCOMUNICACIONCLI
FROM BcpMD_PREFERENCIACOMUNICACION_CCM
ORDER BY codinternocomputacional)
GROUP BY
CODSECUENCIALNOTIFICACIONPREFERENCIA,
CODINTERNOCOMPUTACIONAL,
CODGRUPONOTIFICACIONPREFERENCIACLI,
NBRGRUPONOTIFIACIONPREFERENCIACLI,
CODNOTIFICACIONPREFERENCIACLI,
NBRNOTIFICACIONPREFERENCIACLI,
NBRTIPBCACLI,
CODIDENTIFICADORPREFERENCIA,
FECREGISTRONOTIFICACIONPREFERENCIACLI,
FECMODIFICACIONNOTIFICACIONPREFERENCIACLI

 

 

 

  • Note: There I assume that BcpMD_PREFERENCIACOMUNICACION_CCM_Fix  table

has all the column which you were selecting and calculating in your select query.

If needed, First create a schema based on below SQL code:

 

 

CREATE TABLE BcpMD_PREFERENCIACOMUNICACION_CCM_Fix (
  CODSECUENCIALNOTIFICACIONPREFERENCIA INT NOT NULL AUTO_INCREMENT,
  CODINTERNOCOMPUTACIONAL VARCHAR(255) NOT NULL,
  CODGRUPONOTIFICACIONPREFERENCIACLI VARCHAR(255) NOT NULL,
  NBRGRUPONOTIFIACIONPREFERENCIACLI VARCHAR(255) NOT NULL,
  CODNOTIFICACIONPREFERENCIACLI VARCHAR(255) NOT NULL,
  NBRNOTIFICACIONPREFERENCIACLI VARCHAR(255) NOT NULL,
  NBRTIPBCACLI VARCHAR(255) NOT NULL,
  CODIDENTIFICADORPREFERENCIA VARCHAR(255) NOT NULL,
  FECREGISTRONOTIFICACIONPREFERENCIACLI DATETIME NOT NULL,
  FECMODIFICACIONNOTIFICACIONPREFERENCIACLI DATETIME NOT NULL,
  CODCANALCOMUNICACIONCLIACTIVADO VARCHAR(255) NOT NULL,
  DESCANALCOMUNICACIONCLIACTIVADO VARCHAR(255) NOT NULL,
  CODCANALCOMUNICACIONCLIDESACTIVADO VARCHAR(255) NOT NULL,
  DESCANALCOMUNICACIONCLIDESACTIVADO VARCHAR(255) NOT NULL,
  PRIMARY KEY (CODSECUENCIALNOTIFICACIONPREFERENCIA)
);

 

 

 

 

But if you want to use adobe campaign activity, for e.g.  first use query activity to select the data and then you want to use update activity, then it is possible then you might need to use a temp schema to store the calculated fields there first and them store later in your destination schema.

 

Kr,

Parvesh

 

View solution in original post

4 Replies

Avatar

Community Advisor

Hello @ogonzalesdiaz 

 

I think, the error is in the SELECT clause. The STRING_AGG() function requires that you specify a delimiter for the concatenated string. In your query, you have not specified a delimiter, so PostgreSQL is throwing a syntax error.

To fix the error, simply add a comma and a single quote (') to the end of the STRING_AGG() function call. This will specify that the delimiter for the concatenated string is a single space.

Here is the corrected query:

select
CODSECUENCIALNOTIFICACIONPREFERENCIA,
codinternocomputacional,
CODGRUPONOTIFICACIONPREFERENCIACLI,
NBRGRUPONOTIFIACIONPREFERENCIACLI,
CODNOTIFICACIONPREFERENCIACLI,
NBRNOTIFICACIONPREFERENCIACLI,
NBRTIPBCACLI,
CODIDENTIFICADORPREFERENCIA,
FECREGISTRONOTIFICACIONPREFERENCIACLI,
FECMODIFICACIONNOTIFICACIONPREFERENCIACLI,
STRING_AGG(CASE WHEN FLGCANALACTIVOCOMUNICACIONCLI is true THEN CAST(CODCANALCOMUNICACIONCLI AS STRING) END, ', ') AS CODCANALCOMUNICACIONCLIACTIVADO,
STRING_AGG(CASE WHEN FLGCANALACTIVOCOMUNICACIONCLI is true THEN NBRCANALCOMUNICACIONCLI END, ', ') AS DESCANALCOMUNICACIONCLIACTIVADO,
STRING_AGG(CASE WHEN FLGCANALACTIVOCOMUNICACIONCLI is false THEN CAST(CODCANALCOMUNICACIONCLI AS STRING) END, ', ') AS CODCANALCOMUNICACIONCLIDESACTIVADO,
STRING_AGG(CASE WHEN FLGCANALACTIVOCOMUNICACIONCLI is false THEN NBRCANALCOMUNICACIONCLI END, ', ') AS DESCANALCOMUNICACIONCLIDESACTIVADO
from
(SELECT
DENSE_RANK() OVER (ORDER BY codinternocomputacional) AS CODSECUENCIALNOTIFICACIONPREFERENCIA,
codinternocomputacional as codinternocomputacional,
CODGRUPONOTIFICACIONPREFERENCIACLI as CODGRUPONOTIFICACIONPREFERENCIACLI,
NBRGRUPONOTIFIACIONPREFERENCIACLI as NBRGRUPONOTIFIACIONPREFERENCIACLI,
CODNOTIFICACIONPREFERENCIACLI as CODNOTIFICACIONPREFERENCIACLI,
NBRNOTIFICACIONPREFERENCIACLI as NBRNOTIFICACIONPREFERENCIACLI,
NBRTIPBCACLI as NBRTIPBCACLI,
CODIDENTIFICADORPREFERENCIA as CODIDENTIFICADORPREFERENCIA,
FECREGISTRONOTIFICACIONPREFERENCIACLI as FECREGISTRONOTIFICACIONPREFERENCIACLI,
FECMODIFICACIONNOTIFICACIONPREFERENCIACLI as FECMODIFICACIONNOTIFICACIONPREFERENCIACLI,
CODCANALCOMUNICACIONCLI,
NBRCANALCOMUNICACIONCLI,
FLGCANALACTIVOCOMUNICACIONCLI
FROM BcpMD_PREFERENCIACOMUNICACION_CCM
ORDER BY codinternocomputacional)
group by
CODSECUENCIALNOTIFICACIONPREFERENCIA,
codinternocomputacional,
CODGRUPONOTIFICACIONPREFERENCIACLI,
NBRGRUPONOTIFIACIONPREFERENCIACLI,
CODNOTIFICACIONPREFERENCIACLI,
NBRNOTIFICACIONPREFERENCIACLI,
NBRTIPBCACLI,
CODIDENTIFICADORPREFERENCIA,
FECREGISTRONOTIFICACIONPREFERENCIACLI,
FECMODIFICACIONNOTIFICACIONPREFERENCIACLI

 

Please note that I have also added a space between the comma and the single quote in the delimiter argument. This is not required, but it is generally good practice to make your code more readable.

I hope this helps!

 

Kr,

Parvesh

Avatar

Correct answer by
Community Advisor

Hello @ogonzalesdiaz

 

Can you please clarify if you would like to do this conversion with the SQL code activity direclty or if you would prefer to use multiple Adobe Campaign activities?

 

 

If you want to do directly using SQL code please try the following steps:

  •  Add only SQL activity.
  • Try the following SQL Code:

 

 

INSERT INTO BcpMD_PREFERENCIACOMUNICACION_CCM_Fix (
  CODSECUENCIALNOTIFICACIONPREFERENCIA,
  CODINTERNOCOMPUTACIONAL,
  CODGRUPONOTIFICACIONPREFERENCIACLI,
  NBRGRUPONOTIFIACIONPREFERENCIACLI,
  CODNOTIFICACIONPREFERENCIACLI,
  NBRNOTIFICACIONPREFERENCIACLI,
  NBRTIPBCACLI,
  CODIDENTIFICADORPREFERENCIA,
  FECREGISTRONOTIFICACIONPREFERENCIACLI,
  FECMODIFICACIONNOTIFICACIONPREFERENCIACLI,
  CODCANALCOMUNICACIONCLIACTIVADO,
  DESCANALCOMUNICACIONCLIACTIVADO,
  CODCANALCOMUNICACIONCLIDESACTIVADO,
  DESCANALCOMUNICACIONCLIDESACTIVADO
)
SELECT
  CODSECUENCIALNOTIFICACIONPREFERENCIA,
  CODINTERNOCOMPUTACIONAL,
  CODGRUPONOTIFICACIONPREFERENCIACLI,
  NBRGRUPONOTIFIACIONPREFERENCIACLI,
  CODNOTIFICACIONPREFERENCIACLI,
  NBRNOTIFICACIONPREFERENCIACLI,
  NBRTIPBCACLI,
  CODIDENTIFICADORPREFERENCIA,
  FECREGISTRONOTIFICACIONPREFERENCIACLI,
  FECMODIFICACIONNOTIFICACIONPREFERENCIACLI,
  STRING_AGG(CASE WHEN FLGCANALACTIVOCOMUNICACIONCLI is true THEN CAST(CODCANALCOMUNICACIONCLI AS STRING) END, ', ') AS CODCANALCOMUNICACIONCLIACTIVADO,
  STRING_AGG(CASE WHEN FLGCANALACTIVOCOMUNICACIONCLI is true THEN NBRCANALCOMUNICACIONCLI END, ', ') AS DESCANALCOMUNICACIONCLIACTIVADO,
  STRING_AGG(CASE WHEN FLGCANALACTIVOCOMUNICACIONCLI is false THEN CAST(CODCANALCOMUNICACIONCLI AS STRING) END, ', ') AS CODCANALCOMUNICACIONCLIDESACTIVADO,
  STRING_AGG(CASE WHEN FLGCANALACTIVOCOMUNICACIONCLI is false THEN NBRCANALCOMUNICACIONCLI END, ', ') AS DESCANALCOMUNICACIONCLIDESACTIVADO
FROM
(SELECT
DENSE_RANK() OVER (ORDER BY codinternocomputacional) AS CODSECUENCIALNOTIFICACIONPREFERENCIA,
codinternocomputacional as codinternocomputacional,
CODGRUPONOTIFICACIONPREFERENCIACLI as CODGRUPONOTIFICACIONPREFERENCIACLI,
NBRGRUPONOTIFIACIONPREFERENCIACLI as NBRGRUPONOTIFIACIONPREFERENCIACLI,
CODNOTIFICACIONPREFERENCIACLI as CODNOTIFICACIONPREFERENCIACLI,
NBRNOTIFICACIONPREFERENCIACLI as NBRNOTIFICACIONPREFERENCIACLI,
NBRTIPBCACLI as NBRTIPBCACLI,
CODIDENTIFICADORPREFERENCIA as CODIDENTIFICADORPREFERENCIA,
FECREGISTRONOTIFICACIONPREFERENCIACLI as FECREGISTRONOTIFICACIONPREFERENCIACLI,
FECMODIFICACIONNOTIFICACIONPREFERENCIACLI as FECMODIFICACIONNOTIFICACIONPREFERENCIACLI,
CODCANALCOMUNICACIONCLI,
NBRCANALCOMUNICACIONCLI,
FLGCANALACTIVOCOMUNICACIONCLI
FROM BcpMD_PREFERENCIACOMUNICACION_CCM
ORDER BY codinternocomputacional)
GROUP BY
CODSECUENCIALNOTIFICACIONPREFERENCIA,
CODINTERNOCOMPUTACIONAL,
CODGRUPONOTIFICACIONPREFERENCIACLI,
NBRGRUPONOTIFIACIONPREFERENCIACLI,
CODNOTIFICACIONPREFERENCIACLI,
NBRNOTIFICACIONPREFERENCIACLI,
NBRTIPBCACLI,
CODIDENTIFICADORPREFERENCIA,
FECREGISTRONOTIFICACIONPREFERENCIACLI,
FECMODIFICACIONNOTIFICACIONPREFERENCIACLI

 

 

 

  • Note: There I assume that BcpMD_PREFERENCIACOMUNICACION_CCM_Fix  table

has all the column which you were selecting and calculating in your select query.

If needed, First create a schema based on below SQL code:

 

 

CREATE TABLE BcpMD_PREFERENCIACOMUNICACION_CCM_Fix (
  CODSECUENCIALNOTIFICACIONPREFERENCIA INT NOT NULL AUTO_INCREMENT,
  CODINTERNOCOMPUTACIONAL VARCHAR(255) NOT NULL,
  CODGRUPONOTIFICACIONPREFERENCIACLI VARCHAR(255) NOT NULL,
  NBRGRUPONOTIFIACIONPREFERENCIACLI VARCHAR(255) NOT NULL,
  CODNOTIFICACIONPREFERENCIACLI VARCHAR(255) NOT NULL,
  NBRNOTIFICACIONPREFERENCIACLI VARCHAR(255) NOT NULL,
  NBRTIPBCACLI VARCHAR(255) NOT NULL,
  CODIDENTIFICADORPREFERENCIA VARCHAR(255) NOT NULL,
  FECREGISTRONOTIFICACIONPREFERENCIACLI DATETIME NOT NULL,
  FECMODIFICACIONNOTIFICACIONPREFERENCIACLI DATETIME NOT NULL,
  CODCANALCOMUNICACIONCLIACTIVADO VARCHAR(255) NOT NULL,
  DESCANALCOMUNICACIONCLIACTIVADO VARCHAR(255) NOT NULL,
  CODCANALCOMUNICACIONCLIDESACTIVADO VARCHAR(255) NOT NULL,
  DESCANALCOMUNICACIONCLIDESACTIVADO VARCHAR(255) NOT NULL,
  PRIMARY KEY (CODSECUENCIALNOTIFICACIONPREFERENCIA)
);

 

 

 

 

But if you want to use adobe campaign activity, for e.g.  first use query activity to select the data and then you want to use update activity, then it is possible then you might need to use a temp schema to store the calculated fields there first and them store later in your destination schema.

 

Kr,

Parvesh

 

Avatar

Administrator

Hi @ogonzalesdiaz,

Was the given solution helpful to resolve your query or do you still need more help here? Do let us know.

Thanks!



Sukrity Wadhwa