builtins

defineActionSet

##set_builtins

Description

L'action vous donne le pouvoir de créer vos propres ensembles d'actions personnalisées (Action SetsRegroupements logiques d'actions CAS (fonctions) dans SAS Viya. Ils organisent les capacités du serveur (statistiques, data mining, gestion d'images) pour exécuter des traitements distribués.) directement en . C'est un peu comme apprendre de nouveaux tours de magie à votre serveur SAS Viya ! Vous pouvez y définir la logique métier, déclarer des paramètres précis (avec leurs types, contraintes et valeurs par défaut), et même y intégrer des étapes d'initialisation ou de nettoyage. C'est l'outil ultime pour encapsuler, sécuriser et réutiliser vos codes analytiques complexes sous forme de véritables actions CASLes actions CAS sont des unités de travail exécutées par le serveur Cloud Analytic Services pour manipuler, transformer ou analyser des données en mémoire de manière distribuée et parallèle..

Syntaxe Officielle
proc cas;
builtins.defineActionSet /
name="string"
label="string"
type="CASL"
init="string"
cleanup="string"
enableDescribe=TRUE | FALSE
actions={
{
name="string",
desc="string",
isVoid=TRUE | FALSE,
label="string",
definition="string",
parms={
{
name="string",
type="BOOLEAN" | "CASOUTTABLE" | "CASTABLE" | "CASVAR" | "DOUBLE" | "INT" | "INT64" | "PARAMLIST" | "STRING",
required=TRUE | FALSE,
default="string" | 1.0 | TRUE,
desc="string",
min=1.0,
max=100.0
/* ... autres options de paramètres ... */
}
}
}
};
quit;

Paramètres Clés

Nom du paramètre Description
actions La liste des actions à définir dans l'ensemble. Chaque action contient sa propre (le code CASL) et ses propres paramètres ().
cleanup Code de secours exécuté si l'action plante lamentalement (ex: perte d'un nœud ou basculement du contrôleur). Une sorte de parachute de sécurité.
enableDescribe Si positionné sur TRUE (valeur par défaut), permet de documenter et d'exposer l'action via l'action .
init Instructions exécutées automatiquement au moment où l'ensemble d'actions est chargé en mémoire.
label Le texte descriptif, ou l'étiquette, affiché dans les interfaces graphiques pour cet Action Set.
name Le nom technique (obligatoire) de votre nouvel Action Set. Choisissez-le bien !
type Le langage de programmation utilisé pour la logique de vos actions (la documentation indique par défaut).

Préparation des données

Préparation des données

Pour illustrer une action qui traite une table, créons une petite table bidon en mémoire dans l'espace personnel.

1PROC CAS;
2 SESSION casauto;
3 dataStep.runCode / code="data casuser.mes_donnees; do id=1 to 5; valeur=id*10; output; end; run;";
4QUIT;

Exemples d'utilisation

Créer une action basique 'Dis Bonjour'

Cet exemple crée un ensemble d'actions appelé 'utilitaires' avec une action 'direBonjour' qui prend un simple paramètre de type %%STRING%%.

1PROC CAS;
2 BUILTINS.defineActionSet /
3 name="utilitaires"
4 actions={
5 {
6 name="direBonjour",
7 desc="Affiche un message de salutation personnalisé.",
8 definition="print 'Bonjour très cher ' || prenom || ' !';",
9 parms={
10 {
11 name="prenom",
12 type="STRING",
13 required=TRUE,
14 desc="Le prénom de la personne à saluer"
15 }
16 }
17 }
18 };
19 /* On teste notre toute nouvelle action ! */
20 utilitaires.direBonjour / prenom="Architecte SAS";
21QUIT;
Résultat Attendu :
Le journal d'exécution (log) affichera la ligne : Bonjour très cher Architecte SAS !
Créer une action de traitement de table avec des paramètres avancés

Définition d'une action complexe qui prend une table en entrée (type %%CASTABLE%%), une colonne (type %%CASVAR%%), un seuil optionnel (type %%DOUBLE%% avec contrainte de minimum), et génère une table de sortie (type %%CASOUTTABLE%%).

1PROC CAS;
2 BUILTINS.defineActionSet /
3 name="monAnalyse"
4 label="Mon Action Set d'Analyse"
5 enableDescribe=TRUE
6 actions={
7 {
8 name="filtrerValeurs",
9 desc="Filtre une TABLE selon un seuil donné en appelant l'action fetch sous le capot.",
10 definition="
11 /* Logique CASL interne de notre action */
12 table.fetch /
13 table=tableIn,
14 fetchVars={colonne},
15 where=colonne || ' > ' || seuil,
16 casOut=tableOut;
17 print 'Mission accomplie : filtrage terminé avec succès !';
18 ",
19 parms={
20 {name="tableIn", type="CASTABLE", required=TRUE, desc="Table source"},
21 {name="colonne", type="CASVAR", required=TRUE, desc="Colonne à évaluer"},
22 {name="seuil", type="DOUBLE", required=FALSE, defaultDouble=20.0, minDouble=0.0, desc="Seuil de filtrage minimal"},
23 {name="tableOut", type="CASOUTTABLE", required=TRUE, desc="Table de destination"}
24 }
25 }
26 };
27 /* Utilisation de la nouvelle action sur la table créée lors de la préparation des données */
28 monAnalyse.filtrerValeurs /
29 tableIn={name="mes_donnees", caslib="casuser"}
30 colonne="valeur"
31 seuil=25.0
32 tableOut={name="donnees_filtrees", caslib="casuser", replace=TRUE};
33QUIT;
Résultat Attendu :
L'action 'filtrerValeurs' est compilée puis exécutée. Elle validera les paramètres, lira la table 'mes_donnees', appliquera le filtre conditionnel 'valeur > 25.0' via table.fetch, et créera la table 'donnees_filtrees'. Le journal affichera : Mission accomplie : filtrage terminé avec succès !