¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Obtener los 3 principales usuarios por aplicación en SAP AS 7.52

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 7 Vistas
0
Cargando...
Ejemplo más simple:

De la tabla ZUSAGE con registros de uso de APPID en la fecha UDATE por el usuario UNAME:

ID APPID UNAME UDATE
01 AP1   DEV   09.07.20
...
11 AP2   GMAL  08.07.20

Con esta consulta:

select appid, uname, count(*) as total 
from zusage
group by appid, uname
order by appid, total descending
into corresponding fields of table @lt_usage.

Obtengo todos los usuarios clasificados por el mayor número de usos:

ID   UNAME TOTAL
AP1  DEV   3
...
AP2  GMAL  1

Dado el gran número de usuarios y aplicaciones y lo frecuente de la consulta, me gustaría obtener una lista limitada a, digamos, los 3 principales usuarios para cada aplicación:

ID   UNAME TOTAL
AP1  DEV   3
...
AP2  GMAL  1

Todas las soluciones en la red son específicas de la base de datos y no pude encontrar una forma de traducirlas a SAP open SQL. Aquí hay una de las más cercanas .

¿Sabes cómo resolverlo en el SAP AS desde la versión 7.52?

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Como sugerencia para encontrar una solución para obtener las 3 primeras entradas por nombre de usuario,
es posible que necesites varios pasos sin utilizar la expresión de rango de ventana.

El código podría lucir así:

select appid, uname, count(*) as total 
from zusage
group by appid, uname
order by appid, total descending
into corresponding fields of table @lt_all_usage.


select appid, max(total) 
from @lt_all_usage.
group by appid
into table @lt_app_max

do 3 times.
select  a~appid, a~uname, a~total 
from @lt_all_usage as a
where 
inner join @lt_app_max as b
  on b~appid = a~appid and b~total = a~total 
appending into table @lt_result


select a~appid, max(a~total) 
from @lt_all_usage as a
 inner join @lt_app_max as b
   on  a~appid = b~appid
   and a~total < b~total
group by a~appid
into table @lt_app_max
endo.

sort lt_result by appid.

r

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Correcto. Siempre ha sido difícil en ABAP, y siempre ha sido necesario usar Open SQL + líneas adicionales de ABAP para refinar el resultado. En tu caso, la base de datos primero necesita contar todo y lleva tiempo, la carga de red para transferir los resultados a ABAP probablemente sea mucho menos intensiva.

Si tuvieras ABAP 7.54, tal vez podrías usar las expresiones de ventana, pero en 7.52 todavía es el viejo mundo.

O hacer SQL directamente en la base de datos (lo que no quieres).

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Gracias por la información sobre CTEs - buscaré una forma de aprovecharla. El resultado esperado para el conjunto de datos del post para los 3 principales por categoría es 3 x <número de aplicaciones> = 6 registros. El "HASTA 3 FILAS" en la última consulta siempre limitará los resultados a 3, lo cual no es el objetivo.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hay CTE desde ABAP 7.51. Ejemplo:

  WITH +contando AS (
      SELECT b~carrid, COUNT(*) AS total
      FROM sflight AS b
      GROUP BY b~carrid
      )
  SELECT *
      FROM +contando
      ORDER BY total DESCENDING
  INTO TABLE @DATA(itab)
  HASTA 3 FILAS.
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?