¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Obter os 3 principais usuários por aplicação no SAP AS 7.52

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 0 Vistas
0
Cargando...
Exemplo mais simples:

Da tabela ZUSAGE com registros de uso de APPID na data UDATE pelo usuário UNAME:

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

Com 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.

Obtenho todos os usuários classificados pelo maior número de usos:

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

Dado o grande número de usuários e aplicações e a frequência da consulta, gostaria de obter uma lista limitada a, digamos, os 3 principais usuários para cada aplicação:

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

Todas as soluções na rede são específicas do banco de dados e não consegui encontrar uma maneira de traduzi-las para o SAP open SQL. Aqui está uma das mais próximas .

Você sabe como resolver isso no SAP AS a partir da versão 7.52?

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

4 Respuestas

0
Cargando...

Como sugestão para encontrar uma solução para obter as 3 primeiras entradas por nome de usuário,
talvez seja necessário seguir vários passos sem usar a expressão de janela.

O código pode parecer assim:

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...

Correto. Sempre foi difícil em ABAP, e sempre foi necessário usar Open SQL + linhas adicionais de ABAP para refinar o resultado. No seu caso, o banco de dados precisa primeiro contar tudo e leva tempo, a carga de rede para transferir os resultados para o ABAP provavelmente é muito menos intensiva.

Se você tivesse ABAP 7.54, talvez pudesse usar expressões de janela, mas em 7.52 ainda é o mundo antigo.

Ou fazer SQL diretamente no banco de dados (o que você não quer).

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

Obrigado pela informação sobre CTEs - vou procurar uma maneira de aproveitá-la. O resultado esperado para o conjunto de dados do post para os 3 principais por categoria é 3 x = 6 registros. O "ATÉ 3 LINHAS" na última consulta sempre limitará os resultados a 3, o que não é o objetivo.

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

CTE desde o ABAP 7.51. Exemplo:

  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)
  ATÉ 3 LINHAS.
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?