SSIS - SQL Server Integration Services - Agregado en SSIS

 
Vista:

Agregado en SSIS

Publicado por Dante (1 intervención) el 24/08/2011 15:42:41
Hola, espero estar escribiendo en el lugar correcto del foro, sino sepan disculpar.

El problema que tengo es que necesito hacer un

"SELECT cod_cat, max(des_cat)
FROM categoria
GROUP BY cod_cat"

con SSIS 2008. Tengo que realizar esto porque en la tabla de categorias hay categorias con el mismo codigo y descripciones diferentes, entonces me quedo con la maxima descripcion y cumplo con la integridad cuando cargue mi dimension.

Lo que intente hacer en SSIS 2008 es agregar un elemento "Agregado" para hacer el "GROUP BY" pero este elemento no me permite hacer un MAX() de la descripcion de categoria. Por lo que he visto solo deja utilizar la función MAX en campos numericos.

estoy utilizando el control correcto? como podria solucionar este problema?

Desde ya muchas gracias a todos los que intenten colaborar.

Saludos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Agregar elemento agregado para MAX en descripción de categoría

Publicado por Alejandro (60 intervenciones) el 23/02/2024 18:30:54
En SSIS 2008, puedes utilizar el componente "Agregado" (`Aggregate Transformation`) para realizar una operación `MAX` en la descripción de la categoría junto con el `GROUP BY` en el código de categoría. Sin embargo, como mencionaste, la función `MAX` está diseñada para operar en campos numéricos. Para manejar tu situación, puedes seguir estos pasos:

1. Usar Script Component para obtener la descripción máxima:
- Agrega un componente "Script Component" a tu flujo de datos después de tu fuente de datos original.
- Configura la salida de tu fuente de datos original para incluir el código de categoría y la descripción.
- En el "Script Component", selecciona "Transformation" como tipo de script.
- En el editor de script, utiliza código C# o VB.NET para mantener un seguimiento de la descripción máxima para cada código de categoría.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
 
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
    private string codCatActual = string.Empty;
    private string maxDesCat = string.Empty;
 
    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        string codCat = Row.cod_cat;
        string desCat = Row.des_cat;
 
        if (string.IsNullOrEmpty(codCatActual) || codCatActual != codCat)
        {
            // Nuevo código de categoría, actualizar la descripción máxima
            codCatActual = codCat;
            maxDesCat = desCat;
        }
        else
        {
            // Mismo código de categoría, comparar descripciones y actualizar si es necesario
            if (string.Compare(desCat, maxDesCat) > 0)
            {
                maxDesCat = desCat;
            }
        }
 
        // Asignar valores a las columnas de salida
        Row.MaxDesCat = maxDesCat;
    }
}

2. Agrega el componente de script al flujo de datos:
- Después de escribir el script, configura las columnas de salida en el "Script Component" para incluir el código de categoría original y la descripción máxima.

3. Eliminar duplicados con sort y eliminación de duplicados:
- Después del "Script Component", agrega un componente "Sort" para ordenar los resultados por código de categoría.
- Luego, agrega un componente "Eliminar duplicados" para eliminar duplicados basados en el código de categoría.

4. Resultado final:
- Después de seguir estos pasos, tendrás un flujo de datos que contiene el código de categoría y la descripción máxima asociada.

Este enfoque te permitirá realizar la operación `MAX` en la descripción de la categoría y mantener la integridad en tu dimensión. ¡Espero que esto sea de ayuda, Dante!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar