Skip to main content
Announcements
NEW Customer Portal: Initial launch will improve how you submit Support Cases. FIND OUT MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Multiplicar Columnas en Script

Hola,

Estoy realizando una comparación entre dos columnas de una tabla cargada en el script de qlikview, la misma esta compuesta de la siguiente manera:

 

Fechaabc
01/01/2015546
02/01/2015452
03/01/2015789
04/01/2015421

Lo que requiero es un ciclo que multiplique todos los items de la columna "a" contra los de la columna "b" y luego haga lo mismo con la columna "c" y así para n cantidad de columnas, las columnas se generan de forma dinámica por lo que se debe hacer un procedimiento que haga la comparación de manera autoincremental.


Conocen de alguna forma de saber cual seria la columna que esta evaluando? como realizar un count del total de columnas y luego iniciar la comparación con dichos campos. seria algo parecido al for que tiene el siguiente macro pero en el scrip

set TableBox = ActiveDocument.GetSheetObject( "CH11" )

for RowIter = 0 to TableBox.GetRowCount-1

    for ColIter = 3 to TableBox.GetColumnCount-1

    next

next

Saludos,

Gracias

1 Solution

Accepted Solutions
ramoncova06
Specialist III
Specialist III

como me imagino que esta relacionado con tu post pasado lo hice de manera en que sea facil de conectar

Muestras:

load * Inline

[Fecha, a, b, c

01/01/2015, 5, 4, 6

02/01/2015, 4, 5, 2

03/01/2015, 7, 8, 9

04/01/2015, 4, 2, 1];

for Fieldcounter = 2 to NoOfFields('Muestras')

  if isnull(TableNumber('FieldMuestras'))  then

 

  let vFirstField = FieldName(1,'Muestras');

  let vSecondField = FieldName(2,'Muestras');

 

  FieldMuestras:

  load

  $(vFirstField) as $(vFirstField),

    $(vSecondField) as $(vSecondField)

    Resident Muestras;

  

  

  ELSE

  for vProductCounter = 2 to (NoOfFields('FieldMuestras'))

  vCurrentField = FieldName($(Fieldcounter),'Muestras');

  Trace Current field $(vCurrentField);

  vAgainstField = FieldName($(vProductCounter),'Muestras');

  Trace Against field $(vAgainstField);

  vFieldName = '$(vAgainstField)'&' por '& '$(vCurrentField)';

  if  '$(vCurrentField)' <> '$(vAgainstField)' then

  left join (FieldMuestras)

  load

  $(vFirstField) as $(vFirstField),

  $(vCurrentField) as $(vCurrentField),

  $(vCurrentField) * $(vAgainstField) as [$(vFieldName)]

  Resident Muestras;

  ENDIF

  NEXT

  ENDIF

  

NEXT

 

  

 

 

 

 

drop Table Muestras;

View solution in original post

8 Replies
ramoncova06
Specialist III
Specialist III

los quieres de manera lineal ?

osea comparar los de "a" de 01/01/2015  con "b" 01/01/2015 o contra todo el universo, sin importar de que dia son ?

Miguel_Angel_Baeyens

Hola Miguel,

Aquí te dejo algunos códigos de ejemplo utilizando un bucle FOR EACH en el script y operando de distintas formas:

Load Data by resident with limit number of records for each loaded id

Split one big QVD file into multiple

Como cargar tablas de una base de datos con nombres parecidos

Miguel

Not applicable
Author

Si exacto de esa forma seria

Not applicable
Author

Gracias voy a revisarlo a ver si me son de utilidad

ramoncova06
Specialist III
Specialist III

cual de las 2 ?

Not applicable
Author

Seria realizar la multiplicación de los campos por día, disculpa es que no ley de forma correcta la pregunta

ramoncova06
Specialist III
Specialist III

como me imagino que esta relacionado con tu post pasado lo hice de manera en que sea facil de conectar

Muestras:

load * Inline

[Fecha, a, b, c

01/01/2015, 5, 4, 6

02/01/2015, 4, 5, 2

03/01/2015, 7, 8, 9

04/01/2015, 4, 2, 1];

for Fieldcounter = 2 to NoOfFields('Muestras')

  if isnull(TableNumber('FieldMuestras'))  then

 

  let vFirstField = FieldName(1,'Muestras');

  let vSecondField = FieldName(2,'Muestras');

 

  FieldMuestras:

  load

  $(vFirstField) as $(vFirstField),

    $(vSecondField) as $(vSecondField)

    Resident Muestras;

  

  

  ELSE

  for vProductCounter = 2 to (NoOfFields('FieldMuestras'))

  vCurrentField = FieldName($(Fieldcounter),'Muestras');

  Trace Current field $(vCurrentField);

  vAgainstField = FieldName($(vProductCounter),'Muestras');

  Trace Against field $(vAgainstField);

  vFieldName = '$(vAgainstField)'&' por '& '$(vCurrentField)';

  if  '$(vCurrentField)' <> '$(vAgainstField)' then

  left join (FieldMuestras)

  load

  $(vFirstField) as $(vFirstField),

  $(vCurrentField) as $(vCurrentField),

  $(vCurrentField) * $(vAgainstField) as [$(vFieldName)]

  Resident Muestras;

  ENDIF

  NEXT

  ENDIF

  

NEXT

 

  

 

 

 

 

drop Table Muestras;

Not applicable
Author

Me funciono perfecto, muchas gracias