Attention : Este código requiere privilegios de administrador.
El script comienza llamando al servicio 'reports' a través de PROC HTTP para obtener una lista de informes filtrada (aquí, por nombre). La respuesta JSON se lee con una LIBNAME JSON. Luego, para cada informe encontrado, se ejecuta una macro (%save_VA_Report_Path). Esta macro utiliza otra llamada a la API ('folders/ancestors') para encontrar la ruta de la carpeta principal del informe. La ruta se reconstruye y se almacena en el dataset final. Finalmente, el script muestra la lista de informes con su ruta, identificador y metadatos de creación/modificación.
Análisis de datos
Type : EXTERNA
Los datos se generan dinámicamente mediante llamadas a la API REST de SAS Viya. La primera llamada recupera los metadatos de los informes, y las llamadas subsiguientes recuperan la estructura de carpetas para cada informe.
1 Bloque de código
PROC HTTP Data
Explicación : Este bloque ejecuta una solicitud GET en la API de informes de SAS Viya para recuperar una colección de informes filtrados por su nombre ('Report 2'). La respuesta, en formato JSON, se almacena en el fileref temporal 'rptFile'.
¡Copiado!
%let BASE_URI=%sysfunc(getoption(SERVICESBASEURL));
%let fullpath=/SAS Content/;
FILENAME rptFile TEMP ENCODING='UTF-8';
PROC HTTP METHOD = "GET" oauth_bearer=sas_services OUT = rptFile
/* get a list of reports, say created by sbjciw, or report name is 'Report 2' */
/* URL = "&BASE_URI/reports/reports?filter=eq(createdBy,'sbjciw')" */
URL = "&BASE_URI/reports/reports?filter=eq(name,'Report 2')";
HEADERS "Accept" = "application/vnd.sas.collection+json"
"Accept-Item" = "application/vnd.sas.summary+json";
RUN;
Explicación : Asigna una librería 'rptFile' para leer el JSON recibido. Luego, un paso DATA lee los ítems de la colección de informes para crear la tabla 'ds_rpts', conservando y renombrando las variables relevantes como el ID, el nombre y las marcas de tiempo.
¡Copiado!
LIBNAME rptFile json;
data ds_rpts (keep=rptID id name createdBy creationTimeStamp modifiedTimeStamp
rename=(modifiedTimeStamp=LastModified creationTimeStamp=CreatedAt));
length rptID $ 60 rptPath $ 100;
set rptFile.items;
rptID = '/reports/reports/'||id;
run;
1
LIBNAME rptFile json;
2
3
DATA ds_rpts (keep=rptID id name createdBy creationTimeStamp modifiedTimeStamp
Explicación : Define una macro que toma una URI de informe como entrada. La macro realiza una llamada a PROC HTTP para encontrar las carpetas ancestrales del informe, utiliza PROC SQL para reconstruir la ruta completa y luego actualiza el dataset 'ds_rpts' con esta ruta para el informe correspondiente. Nota: La actualización del dataset ds_rpts es ineficiente ya que recrea la tabla en cada llamada.
¡Copiado!
%MACRO save_VA_Report_Path(reportURI);
FILENAME fldFile TEMP ENCODING='UTF-8';
%let locURI = &reportURI;
PROC HTTP METHOD = "GET" oauth_bearer=sas_services OUT = fldFile
/* get the folders in which the reportURI is in */
URL = "&BASE_URI/folders/ancestors?childUri=/reports/reports/&reportURI";
HEADERS "Accept" = "application/vnd.sas.content.folder.ancestor+json";
RUN;
LIBNAME fldFile json;
/* generate the path from the returned folders above */
proc sql noprint;
select name into :fldname separated by '/'
from fldFile.ancestors
order by ordinal_ancestors desc;
quit;
data tmpsave;
length cc $ 36;
set ds_rpts;
cc = "&locURI";
if trim(id) = trim(cc) then
rptPath=resolve('&fullpath.&fldname.');
drop cc;
run;
data ds_rpts;
set tmpsave;
run;
%MEND save_VA_Report_Path;
1
%MACRO save_VA_Report_Path(reportURI);
2
FILENAME fldFile TEMP ENCODING='UTF-8';
3
%let locURI = &reportURI;
4
5
PROC HTTP METHOD = "GET" oauth_bearer=sas_services OUT = fldFile
6
/* get the folders in which the reportURI is in */
/* generate the path from the returned folders above */
13
PROC SQL noprint;
14
select name into :fldname separated BY'/'
15
from fldFile.ancestors
16
order BY ordinal_ancestors desc;
17
QUIT;
18
19
DATA tmpsave;
20
LENGTH cc $ 36;
21
SET ds_rpts;
22
cc = "&locURI";
23
IF trim(id) = trim(cc) THEN
24
rptPath=resolve('&fullpath.&fldname.');
25
drop cc;
26
RUN;
27
28
DATA ds_rpts;
29
SET tmpsave;
30
RUN;
31
32
%MEND save_VA_Report_Path;
4 Bloque de código
DATA STEP Data
Explicación : Este paso DATA _NULL_ recorre la tabla 'ds_rpts' y utiliza 'CALL EXECUTE' para llamar dinámicamente a la macro '%save_VA_Report_Path' para cada informe (cada 'id') encontrado, con el fin de poblar la ruta del informe.
¡Copiado!
DATA _null_;
set ds_rpts;
call execute('%save_VA_Report_Path('||id||')');
RUN;
1
DATA _null_;
2
SET ds_rpts;
3
call execute('%save_VA_Report_Path('||id||')');
4
RUN;
5 Bloque de código
PROC PRINT
Explicación : Imprime el contenido final del dataset 'ds_rpts' para mostrar la ruta, el nombre, el ID, el creador y las marcas de tiempo de cada informe.
¡Copiado!
PROC PRINT data=ds_rpts;
var rptPath name rptID createdBy CreatedAt LastModified;
RUN;
1
2
PROC PRINT
3
DATA=ds_rpts;
4
var rptPath name rptID createdBy CreatedAt LastModified;
5
RUN;
6
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.