Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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:
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 |
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
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;
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 ?
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
Si exacto de esa forma seria
Gracias voy a revisarlo a ver si me son de utilidad
cual de las 2 ?
Seria realizar la multiplicación de los campos por día, disculpa es que no ley de forma correcta la pregunta
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;
Me funciono perfecto, muchas gracias