Как эффективно подсчитать повторяющиеся строки в запросе? - PullRequest
0 голосов
/ 16 апреля 2019

Я создаю отчет в SAP SQ01 / SQ02, цель которого - показать, сколько раз продукт был выбран за указанный период времени.

Данные в основном получены из таблицы LTAP.Мне просто нужно иметь возможность подсчитать количество строк. Материал дублируется в XYZ, вывести число в дополнительное поле и показать значение.Также я хочу, чтобы этот подсчет происходил в определенный период времени, скажем, в последние 30 дней, чтобы убедиться, что он актуален и актуален.

Приведенный ниже код работает, но он настолько медленный, чтоТребуется пара секунд, чтобы вывести счетчик только для одного материала, и мне нужен отчет, чтобы вывести топ-1000 на основе счетчика.Есть ли более эффективный способ сделать то же самое?

Таблица данных

DATA : YEAR(4) TYPE N,
       MTH(2) TYPE N,
       DAY(2) TYPE N,
       YEAR1(4) TYPE N,
       MTH1(2) TYPE N,
       DAY1(2) TYPE N,
       FROM_DATE LIKE SY-DATUM,
       count1 like LTAP-UMREZ.
FIELD-SYMBOLS <fs_dtab> TYPE STANDARD TABLE.
DATA: sort_f1 TYPE fieldname.

Таблица инициализации

sort_f1 = 'ltap-matnr'.

Обработка записей TAB

YEAR = SY-DATUM(4).
MTH = SY-DATUM+4(2).
DAY = SY-DATUM+6(2).
IF MTH eq 1.
    MTH1 = MTH + 11.
   ELSE.
    MTH1 = MTH - 1.
 ENDIF.
   IF MTH eq 1.
      YEAR1 = YEAR - 1.
        ELSE.
        YEAR1 = YEAR.
   ENDIF.
FROM_DATE(4) = YEAR1.
FROM_DATE+4(2) = MTH1.
FROM_DATE+6(2) = DAY.

КОНЕЦ ВЫБОРА ПОСЛЕ TAB

ASSIGN ('%G00[]') TO <fs_dtab>.
IF <fs_dtab> IS ASSIGNED.
  SORT <fs_dtab> BY (sort_f1)
                 DESCENDING.
  DELETE ADJACENT DUPLICATES FROM <fs_dtab>
  COMPARING (sort_f1).
ENDIF.

Код дополнительного поля

В LTAP поле UMREZ заполняется номером «1», поэтому я использую его здесь для подсчета дубликатов.

clear count.
Select sum( UMREZ ) as UMREZ
  from *LTAP into COUNT
  where *LTAP~MATNR eq LTAP-MATNR
  and *LTAP~QDATU GE from_date.

Я ожидаю, что отчет выйдет в считанные секунды, а не минутыза пару кодов материала.Буду очень признателен за альтернативный код или улучшение текущего, которое могло бы достичь этого.

1 Ответ

3 голосов
/ 16 апреля 2019
DATA materials TYPE RANGE OF matnr.

SELECT
    matnr AS material,
    COUNT(*) AS count
  FROM ltap
  INTO TABLE @DATA(result)
  WHERE matnr IN materials
    AND qdatu >= @from_date
  GROUP BY matnr.

Убедитесь, что в столбце MATNR есть индекс.В текущей S / 4HANA есть один HW6, который подходит, но он развертывается только в SAP HANA и может быть недоступен в более старых выпусках.

...