chore: demo data job

This commit is contained in:
zver
2026-02-06 02:13:23 +00:00
parent 0169415ea2
commit 4273ca6e5c
2 changed files with 220 additions and 0 deletions

2
sas/package-lock.json generated
View File

@@ -243,6 +243,7 @@
"resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz",
"integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==",
"license": "MIT",
"peer": true,
"dependencies": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.4",
@@ -1761,6 +1762,7 @@
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
"integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
"license": "BSD-3-Clause",
"peer": true,
"dependencies": {
"psl": "^1.1.33",
"punycode": "^2.1.1",

View File

@@ -0,0 +1,218 @@
/**
@file
@brief Creates demo tables and associated config
@details Will self-destruct. Can be removed in prod installs.
<h4> SAS Macros </h4>
@li mpeinit.sas
@li mf_increment.sas
@li mp_abort.sas
@li mx_createwebservice.sas
@author 4GL Apps Ltd
@copyright 4GL Apps Ltd. This code may only be used within Data Controller
and may not be re-distributed or re-sold without the express permission of
4GL Apps Ltd.
**/
/* this library will need to be manually added to the autoexec or settings */
%let demolib=PUBLIC;
%mpeinit()
options dlcreatedir;
libname &demolib "%sysfunc(pathname(&dc_libref))/public";
%mp_abort(iftrue= (&syscc ne 0)
,mac=&_program
,msg=%str(Problem during &demolib assignment (&syswarningtext &syserrortext))
)
options replace;
data &demolib..cars_ext(index=(carspk=(make model PRODUCTIONDATE) /unique));
attrib
MAKE length= $13
MODEL length= $40
TYPE length= $8
ORIGIN length= $6
COUNTRY length= $30
POTENTIALBUY length= $6
COMMENT length= $30
NOTES length= $30
CHECKBOXVAR length= $3
PRODUCTIONDATE length= 8 format=DATE9.
;
set sashelp.cars;
if mod(ceil(ranuni(1)*100),3)=0 then comment=catx(' ',make,type);
call missing(notes);
/* random / reproducible date between 1960 and 2020 */
PRODUCTIONDATE=ceil(ranuni(1)*365*60);
if mod(ceil(ranuni(1)*1000),2)=0 then CHECKBOXVAR='YES';
else CHECKBOXVAR='No';
if mod(ceil(ranuni(1)*1000),3)=0 then POTENTIALBUY='Maybe';
else if mod(ceil(ranuni(1)*1000),2)=0 then POTENTIALBUY='Yes';
else POTENTIALBUY='No';
make=cats(make);
model=cats(model);
array cntrs (4) $ 60 _temporary_ ( "Germany" "France" "Poland" "Italy");
if origin='USA' then country='USA';
else if origin='Asia' then do;
if mod(_n_,2)=0 then country='Japan';
else country='Korea';
end;
else COUNTRY = cntrs[ ceil(dim(cntrs) * ranuni(1))];
*put (_all_)(=);
run;
data &demolib..COUNTRIES (index=(countriespk=(origin country) /unique));
attrib
ORIGIN length= $6
COUNTRY length= $30
;
infile cards dsd;
input
ORIGIN :$char.
COUNTRY :$char.
;
datalines4;
Europe,Germany
Europe,France
Europe,Poland
Europe,Italy
USA,USA
Asia,Japan
Asia,Korea
;;;;
run;
%let demolib=%upcase(&demolib);
proc sql;
delete from &dc_libref..mpe_tables
where libref="&demolib" and dsn in ('CARS_EXT','COUNTRIES');
data append;
if 0 then set &dc_libref..mpe_tables;
TX_FROM=0;
TX_TO='31DEC9999:23:59:59'dt;
LIBREF="&demolib";
LOADTYPE='UPDATE';
NUM_OF_APPROVALS_REQUIRED=1;
DSN='CARS_EXT'; BUSKEY='MAKE MODEL PRODUCTIONDATE'; output;
DSN='COUNTRIES'; BUSKEY='ORIGIN COUNTRY'; output;
run;
proc append base=&dc_libref..MPE_TABLES data=&syslast;
run;
/* hard coded values for CHECKBOXVAR */
%let rk=1e6;
proc sql noprint;
delete from &dc_libref..mpe_selectbox
where select_lib="&demolib"
and select_ds in ('CARS_EXT');
select max(selectbox_rk) into: rk
from &dc_libref..mpe_selectbox;
insert into &dc_libref..mpe_selectbox set
selectbox_rk=%mf_increment(rk)
,ver_from_dttm=0
,select_lib="&demolib"
,select_ds="CARS_EXT"
,base_column="CHECKBOXVAR"
,selectbox_value='Yes'
,selectbox_order=1
,ver_to_dttm='31DEC5999:23:59:59'dt;
insert into &dc_libref..mpe_selectbox set
selectbox_rk=%mf_increment(rk)
,ver_from_dttm=0
,select_lib="&demolib"
,select_ds="CARS_EXT"
,base_column="CHECKBOXVAR"
,selectbox_value='No'
,selectbox_order=2
,ver_to_dttm='31DEC5999:23:59:59'dt;
/* Table driven values */
delete from &dc_libref..MPE_VALIDATIONS
where base_lib="&demolib" and base_ds="CARS_EXT";
insert into &dc_libref..MPE_VALIDATIONS set
tx_from=0
,base_lib="&demolib"
,base_ds="CARS_EXT"
,base_col="MAKE"
,rule_type='HARDSELECT'
,rule_value="SASHELP.CARS.MAKE"
,rule_active=1
,tx_to='31DEC5999:23:59:59'dt;
insert into &dc_libref..MPE_VALIDATIONS set
tx_from=0
,base_lib="&demolib"
,base_ds="CARS_EXT"
,base_col="MODEL"
,rule_type='HARDSELECT'
,rule_value="SASHELP.CARS.MODEL"
,rule_active=1
,tx_to='31DEC5999:23:59:59'dt;
insert into &dc_libref..MPE_VALIDATIONS set
tx_from=0
,base_lib="&demolib"
,base_ds="CARS_EXT"
,base_col="TYPE"
,rule_type='SOFTSELECT'
,rule_value="SASHELP.CARS.TYPE"
,rule_active=1
,tx_to='31DEC5999:23:59:59'dt;
%mp_abort(iftrue= (&syscc ne 0)
,mac=&_program
,msg=%str(syscc=syscc=&syscc during param configuration)
)
/* programmatic values for COUNTRY (Dynamic Dropdown) */
filename vldtr temp;
data _null_;
file vldtr ;
put 'proc sql;';
put 'create table work.vals as';
put ' select distinct ORIGIN as display_value,';
put ' ORIGIN as raw_value';
put " from &demolib..COUNTRIES";
put ' order by 1;';
put 'data work.DYNAMIC_VALUES; set work.vals;display_index=_n_;run;';
put ' ';
put 'proc sql;';
put 'create table work.dev as ';
put ' select a.display_index,b.country as display_value';
put ' from work.DYNAMIC_VALUES as a';
put " left join &demolib..countries as b";
put " on a.raw_value=b.origin";
put ' order by display_index;';
put 'data work.DYNAMIC_EXTENDED_VALUES; set work.dev;by display_index;';
put ' EXTRA_COL_NAME="COUNTRY";';
put ' DISPLAY_TYPE="C";';
put ' RAW_VALUE_CHAR=DISPLAY_VALUE;';
put ' RAW_VALUE_NUM=.;';
put ' if first.display_index then forced_value=1;';
put 'run;';
run;
%mx_createwebservice(path=%mf_getapploc(&_program)/demo
,name=origin,code=vldtr
)
proc sql;
insert into &dc_libref..MPE_VALIDATIONS set
tx_from=0
,base_lib="&demolib"
,base_ds="CARS_EXT"
,base_col="ORIGIN"
,rule_type='HARDSELECT_HOOK'
,rule_value="%mf_getapploc(&_program)/demo/origin"
,rule_active=1
,tx_to='31DEC5999:23:59:59'dt;