Hi Philipp,
Sorry for my delayed response.
I will send the audit report to the users every six months using their model, which used the dataset.
The audit report SQL from the audit package
SELECT
"COGIPF_RUNREPORT"."COGIPF_PACKAGE",
INSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", '/package['),
SUBSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", INSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", '/package[') + 16, INSTR(SUBSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", INSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", '/package[') + 16), ']') - 2),
INSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", '/module['),
SUBSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", INSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", '/module[') + 15, INSTR(SUBSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", INSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", '/module[') + 15), ']') - 2),
INSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", '/uploadedFile['),
SUBSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", INSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", '/uploadedFile[') + 21, INSTR(SUBSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", INSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", '/uploadedFile[') + 21), ']') - 2),
INSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", '/dataSet2['),
SUBSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", INSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", '/dataSet2[') + 17, INSTR(SUBSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", INSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", '/dataSet2[') + 17), ']') - 2),
SUBSTR("COGIPF_RUNREPORT"."COGIPF_PACKAGE", 1, LENGTH("COGIPF_RUNREPORT"."COGIPF_PACKAGE")),
"COGIPF_USERLOGON0"."COGIPF_USERNAME",
"COGIPF_RUNREPORT"."COGIPF_REPORTNAME",
SUBSTR("COGIPF_RUNREPORT"."COGIPF_REPORTNAME", 1, 11),
SUBSTR("COGIPF_RUNREPORT"."COGIPF_REPORTNAME", 19, LENGTH("COGIPF_RUNREPORT"."COGIPF_REPORTNAME") - 20),
SUBSTR("COGIPF_RUNREPORT"."COGIPF_REPORTNAME", 1, 7),
SUBSTR("COGIPF_RUNREPORT"."COGIPF_REPORTNAME", 15, LENGTH("COGIPF_RUNREPORT"."COGIPF_REPORTNAME") - 16),
SUBSTR("COGIPF_RUNREPORT"."COGIPF_REPORTNAME", 1, 18),
SUBSTR("COGIPF_RUNREPORT"."COGIPF_REPORTNAME", 26, LENGTH("COGIPF_RUNREPORT"."COGIPF_REPORTNAME") - 27),
SUBSTR("COGIPF_RUNREPORT"."COGIPF_REPORTNAME", 1, 12),
SUBSTR("COGIPF_RUNREPORT"."COGIPF_REPORTNAME", 20, LENGTH("COGIPF_RUNREPORT"."COGIPF_REPORTNAME") - 21),
SUBSTR("COGIPF_RUNREPORT"."COGIPF_REPORTNAME", 1, 6),
SUBSTR("COGIPF_RUNREPORT"."COGIPF_REPORTNAME", 14, LENGTH("COGIPF_RUNREPORT"."COGIPF_REPORTNAME") - 15),
"COGIPF_RUNREPORT"."COGIPF_REPORTPATH",
to_char("COGIPF_RUNREPORT"."COGIPF_LOCALTIMESTAMP", 'mm-dd-yyyy'),
CASE
WHEN
UPPER(SUBSTR("COGIPF_RUNREPORT"."COGIPF_TARGET_TYPE", 1, 1)) IS NULL OR
LOWER(SUBSTR("COGIPF_RUNREPORT"."COGIPF_TARGET_TYPE", 2, LENGTH("COGIPF_RUNREPORT"."COGIPF_TARGET_TYPE") - 1)) IS NULL
THEN
NULL
ELSE UPPER(SUBSTR("COGIPF_RUNREPORT"."COGIPF_TARGET_TYPE", 1, 1)) || LOWER(SUBSTR("COGIPF_RUNREPORT"."COGIPF_TARGET_TYPE", 2, LENGTH("COGIPF_RUNREPORT"."COGIPF_TARGET_TYPE") - 1))
END
FROM
(
SELECT
"COGIPF_USERLOGON"."COGIPF_USERNAME",
"COGIPF_USERLOGON"."COGIPF_USERID",
"COGIPF_USERLOGON"."COGIPF_LOG_LEVEL",
"COGIPF_USERLOGON"."COGIPF_STATUS",
"COGIPF_USERLOGON"."COGIPF_ERRORDETAILS",
"COGIPF_USERLOGON"."COGIPF_LOCALTIMESTAMP",
"COGIPF_USERLOGON"."COGIPF_REQUESTID",
"COGIPF_USERLOGON"."COGIPF_TIMEZONE_OFFSET",
"COGIPF_USERLOGON"."COGIPF_SESSIONID",
"COGIPF_USERLOGON"."COGIPF_LOGON_OPERATION",
"COGIPF_USERLOGON"."COGIPF_TENANTID"
FROM
"COGIPF_USERLOGON"
WHERE
"COGIPF_USERLOGON"."COGIPF_LOGON_OPERATION" = 'Logon' AND
"COGIPF_USERLOGON"."COGIPF_USERNAME" <> 'EMPTY logData'
) "COGIPF_USERLOGON0"
LEFT OUTER JOIN "COGIPF_RUNREPORT" "COGIPF_RUNREPORT"
ON "COGIPF_USERLOGON0"."COGIPF_SESSIONID" = "COGIPF_RUNREPORT"."COGIPF_SESSIONID"
WHERE
"COGIPF_RUNREPORT"."COGIPF_LOCALTIMESTAMP" >= CASE WHEN EXTRACT( DAY FROM TRUNC(CURRENT_DATE) - NUMTODSINTERVAL( EXTRACT( DAY FROM TRUNC(CURRENT_DATE) ), 'DAY' ) + INTERVAL '1' DAY + NUMTOYMINTERVAL( -6, 'MONTH' ) + INTERVAL '1' MONTH - INTERVAL '1' DAY ) < EXTRACT( DAY FROM TRUNC(CURRENT_DATE) ) THEN TRUNC(CURRENT_DATE) - NUMTODSINTERVAL( EXTRACT( DAY FROM TRUNC(CURRENT_DATE) ), 'DAY' ) + INTERVAL '1' DAY + NUMTOYMINTERVAL( -6, 'MONTH' ) + INTERVAL '1' MONTH - INTERVAL '1' DAY ELSE TRUNC(CURRENT_DATE) + NUMTOYMINTERVAL( -6, 'MONTH' ) END
------------------------------
Ramanujam Rajagopal
------------------------------
Original Message:
Sent: Thu November 18, 2021 03:29 AM
From: Philipp Hornung
Subject: Managing Multiple Cognos Environments
:-D Ramanujam, How did you communicate that you delete unused stuff after six months?
------------------------------
Philipp Hornung
------------------------------
Original Message:
Sent: Wed November 17, 2021 09:46 AM
From: Ramanujam Rajagopal
Subject: Managing Multiple Cognos Environments
Users always compare the other BI tools; So, we allow excel sheets to create a dataset in a test and QA environment. We recommend moving to the FM model if it is an extensive dataset or updating every day or once a week. Users love to use the small dataset for their data requirements. We move the small dataset reports to production and monitor for six months. If they dont use it, we will purge these reports and datasets.
Thanks,
Ram
------------------------------
Ramanujam Rajagopal
Original Message:
Sent: Wed November 17, 2021 08:38 AM
From: Andrew Newell
Subject: Managing Multiple Cognos Environments
Ha! Great post. Once our users saw what they could do the horse was out of the barn and long gone. We have some IT generated datasets and file uploads that go through the traditional dev, test, prod protocol. User generated datasets have exploded and quickly overran the capacity of IT change control. But the intent is to circumvent IT change control. Much of Cognos Analytics work doesn't fit nicely into the dev, test, prod framework because analytics is about learning and that typically involves much try and fail before eventually succeeding.
We have reached something of a compromise and users do most of their dataset work in the test environment and then submit a change request to move to production. We don't keep the dev environment in sync with test for users generated data sets.
------------------------------
Andrew Newell