Attention : Dieser Code erfordert Administratorrechte.
Der Skript beginnt damit, den Dienst 'reports' über PROC HTTP aufzurufen, um eine gefilterte Liste von Berichten (hier nach Namen) zu erhalten. Die JSON-Antwort wird mit einer LIBNAME JSON gelesen. Anschließend wird für jeden gefundenen Bericht ein Makro (%save_VA_Report_Path) ausgeführt. Dieses Makro verwendet einen weiteren API-Aufruf ('folders/ancestors'), um den Pfad des übergeordneten Ordners des Berichts zu finden. Der Pfad wird rekonstruiert und im finalen Dataset gespeichert. Schließlich zeigt der Skript die Liste der Berichte mit ihrem Pfad, ihrer ID und den Erstellungs-/Änderungsmetadaten an.
Datenanalyse
Type : EXTERNE
Die Daten werden dynamisch durch Aufrufe der SAS Viya REST-API generiert. Der erste Aufruf ruft die Metadaten der Berichte ab, und die nachfolgenden Aufrufe rufen die Ordnerstruktur für jeden Bericht ab.
1 Codeblock
PROC HTTP Data
Erklärung : Dieser Block führt eine GET-Anfrage an die SAS Viya Reports API aus, um eine Sammlung von Berichten abzurufen, die nach ihrem Namen ('Report 2') gefiltert sind. Die Antwort im JSON-Format wird in der temporären Fileref 'rptFile' gespeichert.
Kopiert!
%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;
Erklärung : Weisen Sie eine 'rptFile'-Bibliothek zu, um das empfangene JSON zu lesen. Anschließend liest ein DATA-Schritt die Elemente der Berichtssammlung, um die Tabelle 'ds_rpts' zu erstellen, wobei relevante Variablen wie ID, Name und Zeitstempel beibehalten und umbenannt werden.
Kopiert!
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
Erklärung : Definiert ein Makro, das einen Berichts-URI als Eingabe nimmt. Das Makro führt einen PROC HTTP-Aufruf durch, um die übergeordneten Ordner des Berichts zu finden, verwendet PROC SQL, um den vollständigen Pfad zu rekonstruieren, und aktualisiert dann das Dataset 'ds_rpts' mit diesem Pfad für den entsprechenden Bericht. Hinweis: Die Aktualisierung des Datasets 'ds_rpts' ist ineffizient, da sie die Tabelle bei jedem Aufruf neu erstellt.
Kopiert!
%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 */ URL = "&BASE_URI/folders/ancestors?childUri=/reports/reports/&reportURI";
/* generate the path from the returned folders above */
12
PROC SQL noprint;
13
select name into :fldname separated BY'/'
14
from fldFile.ancestors
15
order BY ordinal_ancestors desc;
16
QUIT;
17
18
DATA tmpsave;
19
LENGTH cc $ 36;
20
SET ds_rpts;
21
cc = "&locURI";
22
IF trim(id) = trim(cc) THEN
23
rptPath=resolve('&fullpath.&fldname.');
24
drop cc;
25
RUN;
26
27
DATA ds_rpts;
28
SET tmpsave;
29
RUN;
30
31
%MEND save_VA_Report_Path;
4 Codeblock
DATA STEP Data
Erklärung : Dieser DATA _NULL_ Schritt durchläuft die Tabelle 'ds_rpts' und verwendet 'CALL EXECUTE', um das Makro '%save_VA_Report_Path' für jeden gefundenen Bericht (jede 'id') dynamisch aufzurufen, um den Berichtspfad zu füllen.
Kopiert!
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 Codeblock
PROC PRINT
Erklärung : Gib den endgültigen Inhalt des Datasets 'ds_rpts' aus, um den Pfad, den Namen, die ID, den Ersteller und die Zeitstempel jedes Berichts anzuzeigen.
Kopiert!
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
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.