• Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
S4PCADEMY_Logo
  • Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
Twitter Linkedin Instagram

S4PCADEMY_Logo
  • Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
Twitter Linkedin Instagram
Technical Articles

Convierta varias filas en una fila con diferentes columnas en vistas de CDS

By s4pcademy 


He estado buscando una solución por un tiempo, pero no he podido encontrar una que cumpla con mis requisitos, incluso después de consultar varios blogs. Tomó un poco de esfuerzo, pero finalmente encontré una solución que se ajusta a mis necesidades. Letss goo (nerviosamente emocionado)

Introducción-

Tratar con múltiples filas de datos puede ser un desafío, especialmente cuando necesita consolidarlos en una sola fila con diferentes columnas. Afortunadamente, SAP CDS proporciona una solución poderosa para realizar esta transformación de datos. En esta publicación de blog, le mostraremos cómo usar SAP CDS para convertir varias filas en una sola fila con diferentes columnas.

¿Qué es SAP CDS?

SAP CDS (Core Data Services) es un lenguaje y marco de modelado que permite a los desarrolladores definir modelos de datos y acceder a ellos de forma estandarizada. Las vistas de CDS se utilizan para crear modelos de datos virtuales que combinan datos de diferentes orígenes, como tablas, vistas y otras vistas de CDS. Las vistas de CDS proporcionan una forma simple y eficiente de consultar datos de los sistemas SAP.

Comencemos considerando lo siguiente Guión.Img1-%20Requisito

Img1 de mi sistema SAP personal: requisito

Ahora quiero fusionar filas de la tabla ZDEMO_SFLIGHT según CARRID & CONNID como FLDATE1, PRICE1, CURRENCY1…FLDATE2 a SEATSOCC2.

Img2-%20Requisito

Img2 de mi máquina personal- Requisito

Y la salida final será:

Img3-%20Expected%20Final%20Output

Img3 de mi máquina personal – Salida final esperada

Paso 1: Crear función de tabla.

@EndUserText.label: 'Table Function Demo SFLIGHT'
define table function ZDEMO_SFLIGHT_TAB_FCT
returns
{
  MANDT    : abap.clnt;
  CARRID    : s_carr_id;
  CONNID    : s_conn_id;
  FLDATE    : s_date;
  PRICE     : s_price;
  CURRENCY  : s_currcode;
  PLANETYPE : s_planetye;
  SEATSMAX  : s_seatsmax;
  SEATSOCC  : s_seatsocc;
  ROW_NUM   : abap.char( 2 );

}
implemented by method
  zcl_demo_sflight=>get_data;

Este es un ejemplo de una función de tabla ABAP llamada «ZDEMO_SFLIGHT_TAB_FCT». Devuelve una tabla de datos con las siguientes columnas:

cliente: abap.clnt (ID de cliente)

CARRID: s_carr_id (ID de la aerolínea)

CONNID: s_conn_id (ID de conexión de vuelo)

FLDATE: s_date (fecha de vuelo)

PRECIO: s_price (precio del boleto)

MONEDA: s_currcode (código de moneda)

PLANETYPE: s_planetye (tipo de avión)

SEATSMAX : s_seatsmax (número máximo de asientos)

SEATSOCC : s_seatsocc (número de asientos ocupados)

row_num : abap.char(2) (número de fila)

La función de tabla se implementa mediante un método llamado «get_data» en la clase ABAP «ZCL_DEMO_SFLIGHT». Cuando se llama a esta función, ejecutará el método «get_data» y devolverá una tabla de datos con las columnas especificadas.

Paso 2: Crear clase y método.

CLASS ZCL_DEMO_SFLIGHT DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .
  PUBLIC SECTION.
    INTERFACES IF_AMDP_MARKER_HDB.
    CLASS-METHODS:
      GET_DATA FOR TABLE FUNCTION ZDEMO_SFLIGHT_TAB_FCT.
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.

CLASS ZCL_DEMO_SFLIGHT IMPLEMENTATION.
  METHOD GET_DATA
        BY DATABASE FUNCTION
        FOR HDB
        LANGUAGE SQLSCRIPT
        OPTIONS READ-ONLY
        USING  ZDEMO_SFLIGHT .
    ITAB =
      select
            MANDT,
            CARRID,
            CONNID,
            FLDATE,
            PRICE,
            CURRENCY,
            PLANETYPE,
            SEATSMAX,
            SEATSOCC,
            ROW_NUMBER() OVER (PARTITION BY carrid, connid order by carrid, connid ) as row_num
        from zdemo_sflight ;
    RETURN
     SELECT MANDT,
            CARRID,
            CONNID,
            FLDATE,
            PRICE,
            CURRENCY,
            PLANETYPE,
            SEATSMAX,
            SEATSOCC,
            ROW_NUM
        FROM :itab
       GROUP BY MANDT,
            CARRID,
            CONNID,
            FLDATE,
            PRICE,
            CURRENCY,
            PLANETYPE,
            SEATSMAX,
            SEATSOCC,
            ROW_NUM;
  ENDMETHOD.
ENDCLASS.

Este es el código de implementación para la clase ABAP “ZCL_DEMO_SFLIGHT” que define el método “GET_DATA” utilizado para implementar la función de tabla “ZDEMO_SFLIGHT_TAB_FCT”.

La clase implementa la interfaz «IF_AMDP_MARKER_HDB» que se usa para indicar que la clase contiene un procedimiento de base de datos HANA.

El método “GET_DATA” se implementa como un procedimiento HANA SQLScript y lee datos de la tabla de la base de datos “ZDEMO_SFLIGHT”. Luego, los datos se transforman utilizando la función «ROW_NUMBER()» para agregar un número secuencial a cada fila según los campos «CARRID» y «CONNID». Finalmente, el resultado se devuelve como una tabla utilizando la instrucción «RETURN».

Usando ROW_NUMBER PARTITION BY, obtenemos datos ordenados.

Img4-%20Sorted%20Data

Img4 de mi Eclipse personal- Datos ordenados

Ahora podemos consumir esta función de tabla en una vista de CDS para obtener el resultado adecuado.

Paso 3. Crear CDS

@AbapCatalog.sqlViewName: 'ZDEMO_SQL_FLIGHT'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'CDS to consume table function'
define view ZDEMO_CDS_ZFLIGHT
  as select from ZDEMO_SFLIGHT_TAB_FCT
{
  CARRID,
  CONNID,
  max (case ROW_NUM when '1' then FLDATE end)    as FLDATE1,
  max (case ROW_NUM when '1' then PRICE end)     as PRICE1,
  max (case ROW_NUM when '1' then CURRENCY end)  as CURRENCY1,
  max (case ROW_NUM when '1' then PLANETYPE end) as PLANETYPE1,
  max (case ROW_NUM when '1' then SEATSMAX end)  as SEATSMAX1,
  max (case ROW_NUM when '1' then SEATSOCC end)  as SEATSOCC1,

  max (case ROW_NUM when '2' then FLDATE end)    as FLDATE2,
  max (case ROW_NUM when '2' then PRICE end)     as PRICE2,
  max (case ROW_NUM when '2' then CURRENCY end)  as CURRENCY2,
  max (case ROW_NUM when '2' then PLANETYPE end) as PLANETYPE2,
  max (case ROW_NUM when '2' then SEATSMAX end)  as SEATSMAX2,
  max (case ROW_NUM when '2' then SEATSOCC end)  as SEATSOCC
}

group by
  CARRID,
  CONNID

Este es un ejemplo de una definición de vista de CDS que consume la función de tabla «ZDEMO_SFLIGHT_TAB_FCT».

La vista se llama “ZDEMO_CDS_ZFLIGHT” y tiene las siguientes columnas:

CARRID: la identificación de la compañía aérea

CONNID: el ID de conexión del vuelo

FLDATE1: la fecha de vuelo de la primera fila (basada en ROW_NUM)

PRICE1: el precio del boleto para la primera fila

CURRENCY1: el código de moneda para la primera fila

PLANETYPE1: el tipo de avión para la primera fila

SEATSMAX1: el número máximo de asientos para la primera fila

SEATSOCC1: el número de asientos ocupados para la primera fila

FLDATE2: la fecha de vuelo de la segunda fila (basada en ROW_NUM)

PRICE2: el precio del boleto para la segunda fila

CURRENCY2: el código de moneda para la segunda fila

PLANETYPE2: el tipo de avión para la segunda fila

SEATSMAX2: el número máximo de asientos para la segunda fila

SEATSOCC2: el número de asientos ocupados para la segunda fila

La vista agrupa los datos por «CARRID» y «CONNID» utilizando la cláusula «GROUP BY».

Según el número de fila, los datos se completarán en los campos correspondientes.

La salida de CDS View:

Img5-%20Salida

Img5 de mi sistema SAP personal- Salida

Conclusión:

La vista de CDS «ZDEMO_CDS_ZFLIGHT» pudo consumir los datos de la función de tabla «ZDEMO_SFLIGHT_TAB_FCT» y proporcionar los resultados esperados. Esto demuestra el poder y la flexibilidad de usar funciones de tabla y vistas de CDS juntas en la programación ABAP.

Las funciones de tabla se pueden usar para proporcionar datos de una variedad de fuentes, incluidos los sistemas externos, y las vistas de CDS se pueden usar para crear un modelo de datos unificado que otros programas ABAP pueden consumir de manera estándar. Esta es una característica importante de la programación ABAP, ya que permite a los desarrolladores crear una vista unificada de datos de múltiples fuentes que se pueden consumir de manera consistente.

Estos son los puntos clave y las conclusiones del código ABAP:

  • El código define una función de tabla que devuelve un tipo de tabla con las columnas necesarias para recuperar datos de vuelos, incluida la disponibilidad de asientos.
  • La implementación de la función de tabla se realiza mediante un método de una clase, que ejecuta una declaración SELECT de SQLScript en la tabla de la base de datos requerida y devuelve los datos a la función de tabla.
  • Luego se define una vista CDS para consumir la función de tabla y agrupar los datos por línea aérea y número de vuelo.
  • El código proporciona una forma de recuperar datos de vuelo para una aerolínea y un número de vuelo en particular, junto con la disponibilidad de asientos para cada fecha en la que está programado que opere el vuelo.
  • Los puntos clave de este código son que las funciones de tabla y las vistas de CDS son poderosas construcciones ABAP que se pueden usar para recuperar y consumir datos de manera estructurada. Además, SQLScript se puede utilizar para implementar lógica compleja de manera eficiente y optimizada.

Nota: esta solución es precisa cuando sabe cuántas entradas habrá en la tabla con combinación de campos. (Por ejemplo, algunos informes financieros basados ​​en BUKRS y LIFNR)

Sus aportes son bienvenidos y si tiene alguna sugerencia, no dude en comentar.

PD: Soy novato en escribir Blogs, y voy mejorando poco a poco

Además, siga la página del tema del entorno de SAP S/4Hana https://community.sap.com/topics/s4hana

Leer otra publicación sobre SAP S4/HANA

A continuación hay algunos blogs geniales a los que me referí para mi solución óptima.

https://blogs.sap.com/2017/12/12/concatenate-multiple-records-in-a-single-field-using-abap-cds-table-function/

https://blogs.sap.com/2019/07/16/transpose-or-merge-multiple-rows-in-one-row-cds-views/

https://blogs.sap.com/2018/11/30/delete-duplicate-entries-in-abap-cds-views-using-table-function-and-sql-window-function/



Source link


CDScolumnasconConviertadiferentesfilafilasunavariasVistas

Artículos relacionados


BuildBros  ·  Technical Articles
Una combinación de redes sociales con funciones de Visual Cloud
Technical Articles
Libere el poder de las capacidades de extensión de SAP Digital Manufacturing Cloud: Ampliación del flujo de trabajo de salida de mercancías de pedidos de proceso con consulta de tipo de existencias de S/4 HANA
Disable replication  ·  Enable replication  ·  HANA HSR Setup  ·  HANA SYSTEM replication  ·  Operation Mode  ·  Replication Mode  ·  SAP HANA
Configurar la replicación del sistema SAP HANA con SAP HANA

Deja tu comentario Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

Confía 😬 en tu proceso | Blogs de SAP
Previo
SAP Activate Community Call – 15 de marzo de 2023
Siguiente

Madrid

Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010

México

Paseo de la Reforma 26
Colonia Juárez,  Cuauhtémoc
Ciudad de México 06600

Costa Rica

Real Cariari
Autopista General Cañas, 
San José, SJ 40104

Perú

Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073

Twitter Linkedin Instagram
Copyright 2022 | All Right Reserved.
Cookies Para que este sitio funcione adecuadamente, a veces instalamos en los dispositivos de los usuarios pequeños ficheros de datos, conocidos como cookies. La mayoría de los grandes sitios web también lo hacen.
Aceptar
Cambiar ajustes
Configuración de Cookie Box
Configuración de Cookie Box

Ajustes de privacidad

Decida qué cookies quiere permitir. Puede cambiar estos ajustes en cualquier momento. Sin embargo, esto puede hacer que algunas funciones dejen de estar disponibles. Para obtener información sobre eliminar las cookies, por favor consulte la función de ayuda de su navegador. Aprenda más sobre las cookies que usamos.

Con el deslizador, puede habilitar o deshabilitar los diferentes tipos de cookies:

  • Bloquear todas
  • Essentials
  • Funcionalidad
  • Análisis
  • Publicidad

Este sitio web hará:

Este sitio web no:

  • Esencial: recuerde su configuración de permiso de cookie
  • Esencial: Permitir cookies de sesión
  • Esencial: Reúna la información que ingresa en un formulario de contacto, boletín informativo y otros formularios en todas las páginas
  • Esencial: haga un seguimiento de lo que ingresa en un carrito de compras
  • Esencial: autentica que has iniciado sesión en tu cuenta de usuario
  • Esencial: recuerda la versión de idioma que seleccionaste
  • Functionality: Remember social media settings
  • Functionality: Remember selected region and country
  • Analytics: Keep track of your visited pages and interaction taken
  • Analytics: Keep track about your location and region based on your IP number
  • Analytics: Keep track of the time spent on each page
  • Analytics: Increase the data quality of the statistics functions
  • Advertising: Tailor information and advertising to your interests based on e.g. the content you have visited before. (Currently we do not use targeting or targeting cookies.
  • Advertising: Gather personally identifiable information such as name and location
  • Recuerde sus detalles de inicio de sesión
  • Esencial: recuerde su configuración de permiso de cookie
  • Esencial: Permitir cookies de sesión
  • Esencial: Reúna la información que ingresa en un formulario de contacto, boletín informativo y otros formularios en todas las páginas
  • Esencial: haga un seguimiento de lo que ingresa en un carrito de compras
  • Esencial: autentica que has iniciado sesión en tu cuenta de usuario
  • Esencial: recuerda la versión de idioma que seleccionaste
  • Functionality: Remember social media settings
  • Functionality: Remember selected region and country
  • Analytics: Keep track of your visited pages and interaction taken
  • Analytics: Keep track about your location and region based on your IP number
  • Analytics: Keep track of the time spent on each page
  • Analytics: Increase the data quality of the statistics functions
  • Advertising: Tailor information and advertising to your interests based on e.g. the content you have visited before. (Currently we do not use targeting or targeting cookies.
  • Advertising: Gather personally identifiable information such as name and location
Guardar y cerrar