none
Recuento de Filas no funciona RRS feed

  • Pregunta

  • Hola, tengo una gran duda.

    Mi Origen de datos me está entregando 479 registros, los cuales pasan a través de un recuento de filas y posteriormente agrego un 'conditional split' para que cuando existan datos los pase a Excel.

    Sin embargo, estoy teniendo problemas con el Recuento de Filas, ya que al pasar los datos a través de el está dejando la variable en 0 y eso ocasiona que mi conditional split falle.

    Recuento de Filas

    Como se aprecia en la imagen superior, mi recuento de filas está relacionado con mi variable User::_TTLRegistros

    Y Luego tengo mi conditional split de tal forma que cuando haya más de 0 registros los meta a Excel


    sin embargo, no sucede.

    chequen la imagen siguiente:

    El origen de datos es de 479 registros y el User::_TTLRegistros está en 0

    lo sé porque lo mando un archivo plano:

    allí muestro el _TTLRegistros mapeado a un txt.

    cómo es eso posible?

    NO SIRVE EL RECUENTO DE FILAS O QUE?


    saludos

    miércoles, 13 de noviembre de 2013 14:48

Respuestas

  • Hola,

    El componente para el recuento de filas funciona perfectamente, sólo que el valor de la variable está bloqueado dentro del Data Flow.

    Échale un vistazo a esta entrada http://bifase.blogspot.com.es/2010/11/utilizando-el-rowcount.html

    Una de las formas de resolver eso es hacer primero el count utilizando una consulta SQL en un tarea Ejecutar SQL (en el control flow) y guardas el valor en la variable correspondiente. Luego puedes utilizar esa variable dentro del Data Flow y que forme parte de las condiciones que necesites implementar.

    De todas formas, si no hay filas (count=0) en Excel de destino no escribirá nada.


    Víctor M. García Sánchez. Hope this help. Please vote if you find this posting was helpful. if this is an answer to your question, please mark it. http://bifase.blogspot.com | http://twitter.com/atharky

    • Marcado como respuesta kakaroto2012 miércoles, 13 de noviembre de 2013 16:54
    miércoles, 13 de noviembre de 2013 16:35

Todas las respuestas

  • Agrego mas imagenes ya que no me deja poner mas de 2 en un mensaje

    Aqui mando el resultado de _TTLRegistros


    saludos

    miércoles, 13 de noviembre de 2013 15:02
  • Hola,

    El componente para el recuento de filas funciona perfectamente, sólo que el valor de la variable está bloqueado dentro del Data Flow.

    Échale un vistazo a esta entrada http://bifase.blogspot.com.es/2010/11/utilizando-el-rowcount.html

    Una de las formas de resolver eso es hacer primero el count utilizando una consulta SQL en un tarea Ejecutar SQL (en el control flow) y guardas el valor en la variable correspondiente. Luego puedes utilizar esa variable dentro del Data Flow y que forme parte de las condiciones que necesites implementar.

    De todas formas, si no hay filas (count=0) en Excel de destino no escribirá nada.


    Víctor M. García Sánchez. Hope this help. Please vote if you find this posting was helpful. if this is an answer to your question, please mark it. http://bifase.blogspot.com | http://twitter.com/atharky

    • Marcado como respuesta kakaroto2012 miércoles, 13 de noviembre de 2013 16:54
    miércoles, 13 de noviembre de 2013 16:35
  • No comparto tu idea hermano porque no puedo contar los registros fuera del Data Flow,

    Solo nos conozco dentro del el. Por tal Motivo he agregado un Script Task para asignar el valor de los registros

    en mi variable que utilizaré "fuera" en mi Control Flow.

    primero leí los registros de Entrada en el método Input_ProcessInputRow(...) a una variable interna

    y cuando finaliza asigno el valor de la variable interna a mi variable "global"

    la clave es: ReadWriteVariables["MiVariable"].Value

    de todas maneras, muchas gracias por la aportación.

    cuando lo resolví así, es porque ya había leído que el 'Recuento de filas' es Sincrono, por lo que no asigna el valor a la variable hasta que no hayan pasado todos los registros.

    resulta que hay otras tareas que funcionan por default de forma asincrona, todavía no me meto mucho alli. pero bueno...


    saludos

    miércoles, 13 de noviembre de 2013 16:53
  • Sí, puedes conocer el número de registros si ejecutas la misma consulta que en el origen de datos pero en lugar de las columnas te traes el count(*) y lo almacenas en una varaible que luego sí puedes utilizar.

    El uso del script component (dentro del DFT) tiene el mismo problema, el valor de la variable no la verás actualizada hasta que finalice el DFT. Dentro del DFT mostrarán el mismo valor que cuando antes de ejecutarse el componente.

    En cualquier caso si lo has resuelto, bien está.


    Víctor M. García Sánchez. Hope this help. Please vote if you find this posting was helpful. if this is an answer to your question, please mark it. http://bifase.blogspot.com | http://twitter.com/atharky

    miércoles, 13 de noviembre de 2013 17:12
  • Así es, en la consulta agregué una columna mas

    count(*) over (partition by column) as TTLRows

    aunque se me hace un poco sucio la verdad, pero me funcionó bastante.

    cómo ves?


    saludos

    miércoles, 13 de noviembre de 2013 17:23
  • Pues la verdad que no entien do muy bien para que utilizas el over()... Lo que quieres es contar todos los registros que vienen en la consulta solo tienes que poner el count:

    Select count(*)
    From TablaOrigen
    Where x=y

    Esa consulta te devolverá una sola columna con el número de filas que contiene el resultado. Esa columna la asignas a una variable y listo (en el Control flow)


    Víctor M. García Sánchez. Hope this help. Please vote if you find this posting was helpful. if this is an answer to your question, please mark it. http://bifase.blogspot.com | http://twitter.com/atharky

    miércoles, 13 de noviembre de 2013 17:39
  • El ROW OVER es para evitarme hacer otra consulta,

    habíamos hablado de meter el  recuento de filas en la misma consulta, no?

    así como lo mencionas, hay que agregar otra tarea y ejecutar otra consulta

    con el row over no hay necesidad.

    lo aprendí en mi examen de certificación  =)


    saludos

    miércoles, 13 de noviembre de 2013 17:45