Как скрыть нерелевантные результаты данных

У меня есть отчет, который я генерирую еженедельно, который показывает, что срок действия контрактов истек или скоро истечет в течение 90 дней. Отчет работает нормально, однако контракты или сайты, которые НЕ расторгнуты или срок действия которых скоро истечет, по-прежнему отображаются в виде заголовков в отчете. Мой вопрос в том, как я ТОЛЬКО показываю сайты с истекшим сроком действия и сроком действия, а не другие сайты (заголовки, имена и т. д.).

SITE_INFO
===========================================================
SELECT  SITE.ID SITE_INFO_ID,
        "ORGANIZATION"."NAME" "CUSTOMER_NAME",
                "SITE"."NAME" "SITE_NAME",
                "CUSTOM"."VALUE" "MANAGER_NAME",
                "ADDRESS"."ADDRESSLINE1" AS "ADDRESSLINE1",
                "ADDRESS"."ADDRESSLINE2" AS "ADDRESSLINE2",
                "ADDRESS"."ADDRESSLINE3" AS "ADDRESSLINE3",
                "ADDRESS"."CITY" AS "CITY",
                "ADDRESS"."STATE" AS "STATE",
                "ADDRESS"."COUNTRY" AS "COUNTRY",
                "ADDRESS"."POSTAL_CODE" AS "POSTAL_CODE",
                "ADDRESS"."SITE_ID" AS "SITE_ID",
                "REGION_CODE"."ID" AS "REGION_ID",
            "REGION_CODE"."NAME" AS "REGION_NAME"
FROM     ORGANIZATION,
              SITE,
              CUSTOM,
              ADDRESS,
              REGION_CODE
WHERE SITE.ORGANIZATION_ID = ORGANIZATION.ID AND
       CUSTOM.SITE_ID = SITE.ID AND
       CUSTOM.NAME LIKE 'MANAGER NAME' AND 
       SITE.ID = ADDRESS.SITE_ID AND
       REGION_CODE.ID = SITE.REGION_ID AND
       SITE.IS_DELETED = 0


SYS_DATE
=============================================================
SELECT TO_CHAR(SYSDATE,'MM-DD-YYYY') FROM DUAL


CONTRACT_INFO
=============================================================
SELECT CONTRACT_TYPE.NAME CONTRACT_NAME,
       CONTRACT.SITE_ID SITE_ID,
       CONTRACT.CONTRACT_INDEX CON_INDEX,
       TO_CHAR(CONTRACT.END_DATE,'MM-DD-YYYY') END_DATE,
       CONTRACT.ORDER_NO ORDER_NO,
       CONTRACT.PROJECT_NO PROJECT_NO,
       CASE WHEN CONTRACT.END_DATE <= SYSDATE THEN 1 ELSE 0 END FLAG
FROM CONTRACT LEFT JOIN
     CONTRACT_TYPE ON CONTRACT.CONTRACT_TYPE_ID = CONTRACT_TYPE.ID 
WHERE CONTRACT.SITE_ID = :SITE_INFO_ID
AND CONTRACT.END_DATE <= SYSDATE + 90

Наборы данных SITE_INFO и CONTRACT_INFO связаны, и шаблон создается в MS Word с помощью BI Publisher. Код написан на SQL в BI Publisher онлайн.


person Fadiddy    schedule 22.07.2019    source источник
comment
Можете ли вы поделиться используемым шаблоном BI Publisher, в котором содержится проблема?   -  person EdHayes3    schedule 22.07.2019
comment
@EdHayes3 Извините за основной вопрос, но как загрузить файл в StackOverflow?   -  person Fadiddy    schedule 22.07.2019
comment
Я думаю, что понял, что вы хотите, и разместил ответ ниже. Что касается общего доступа к файлу, вы всегда можете опубликовать общедоступную ссылку на Google Drive, Dropbox или какой-либо другой бесплатный файлообменник.   -  person EdHayes3    schedule 22.07.2019


Ответы (1)


Это может быть немного больше, чем вам нужно, но будет работать.

  1. Повторите раздел «Сайт» для каждого сайта. Каждый раздел начинается с новой страницы.
  2. Подсчитайте количество контрактов с истекшим сроком действия на сайте с уникальными номерами заказов.
  3. Показывать сайт только в том случае, если количество просроченных контрактов больше нуля.
  4. Содержание сайта
  5. В содержании сайта показать количество контрактов с истекшим сроком действия (необязательно)
  6. Повторите раздел контракта, только для контрактов, срок действия которых истек.

Предполагая, что у вас есть структура данных:

EXTRACT/LIST_SITE_INFO/SITE_INFO/LIST_CONTRACT_INFO/CONTRACT_INFO

XML как:

<EXTRACT>
    <SYS_DATE>2015-05-15 8:30:25</SYS_DATE>
    <LIST_SITE_INFO>
        <SITE_INFO>
            <CUSTOMER_NAME>Test Customer</CUSTOMER_NAME>
            <CUSTOMER_ID>123</CUSTOMER_ID>
            <SITE_NAME>Test Site</SITE_NAME>
            <LIST_CONTRACT_INFO>
                <CONTRACT_INFO>
                    <CONTRACT_NAME>Contract 123</CONTRACT_NAME>
                    <ORDER_NO>456</ORDER_NO>
                    <CONTRACT_ID>789</CONTRACT_ID>
                    <FLAG>1</FLAG>
                </CONTRACT_INFO>
            </LIST_CONTRACT_INFO>
        </SITE_INFO>
    </LIST_SITE_INFO>
</EXTRACT>

Шаблон будет выглядеть примерно так:

<?for-each@section:EXTRACT/LIST_SITE_INFO/SITE_INFO?>
<?xdoxslt:set_variable($_XDOCTX, ‘V_EXP_COUNT’, count(xdoxslt:distinct_values(//LIST_CONTRACT_INFO/CONTRACT_INFO[FLAG="1"]/ORDER_NO)))?>
<?if:xdoxslt:get_variable($_XDOCTX, ‘V_EXP_COUNT’)>0?>

Раздел сайта/контент

Количество просроченных контрактов: <?xdoxslt:get_variable($_XDOCTX, ‘V_EXP_COUNT’)?>

<?for-each:LIST_CONTRACT_INFO/CONTRACT_INFO[FLAG="1"]?>

Раздел контракта с истекшим сроком действия / содержание

<?end for-each?>
<?end if?>
<?end for-each?>

Убедитесь, что между элементами в шаблоне нет пробелов/переходов на новую строку.

person EdHayes3    schedule 22.07.2019
comment
Эд, спасибо за ответ. Однако я немного смущен предоставленной информацией. Вы говорите, что нужно изменить шаблон или наборы данных/модель данных? - person Fadiddy; 24.07.2019
comment
Я добавил пример XML для того, как я ожидал, что данные будут выглядеть. Другая логика будет в шаблоне. - person EdHayes3; 24.07.2019