J'ai un script JSL qui extrait périodiquement des données d'une base de données Access.
La base de données d'accès contient une colonne de date «Date de disponibilité» avec un jj-Mon-AAAA (par exemple, 12-AVR-2018). Ce que j'essaie de faire, c'est de créer une nouvelle colonne "Date cible" dans JMP qui ajoute x nombre de jours à la date dans "Date disponible" pour chaque ligne.
Par exemple: Dans l'image ci-dessous, la date cible est égale à Date de disponibilité + 4 jours. J'essaie de calculer automatiquement la date cible en fonction de la date disponible. Le nombre de jours est basé sur la colonne "Temps (mois)".

C'est ce que j'ai essayé jusqu'à présent, qui ne fonctionne évidemment pas. Je pense que j'ai besoin de convertir la colonne "Date de disponibilité" en un type de données numérique, puis d'ajouter le nombre de jours et de la reconvertir en caractère?
dt << New Column("Target Date", "Character", "Nominal");
dt << For Each Row(
IF (:"Time (Months)" <= 3, :"Target Date" = :"Available Date" + 4 ),
IF (:"Time (Months)" > 3, :"Target Date" = :"Available Date" + 7 )
);Le tableau ci-joint ajoute 4 jours à votre colonne de date disponible pour obtenir la date cible.Étapes: changez le type de données pour la date disponible en numérique / continu avec un formatage de date approprié; puis utilisez la fonction Incrément de date pour ajouter 4 jours à la date disponible, modifiez enfin le formatage de la colonne de date cible résultante pour correspondre à ce que vous avez utilisé dans la colonne de date disponible.
Une remarque supplémentaire - dans votre exemple, il semble que vous ayez ajouté une semaine (7 jours au lieu de 4).
À moins qu'il n'y ait une vraie raison de conserver les valeurs de la date cible en tant que colonne de caractères, je vous suggère de la convertir en une colonne de date JMP.
Names Default To Here( 1 );
dt = Current Data Table();
dt << new column( "Target Date", format( "ddmonyyyy") );
for each row(
if( :"Time (Months)"n <= 3,
:Target Date =
Informat( :Available Date, "ddmonyyyy" ) + In Days( 4 ),
:Target Date =
Informat( :Available Date, "ddmonyyyy" ) + In Days( 7 )
)
);

Il est très facile de convertir la sortie ci-dessus en caractère par la modification ci-dessous
Names Default To Here( 1 );
dt = Current Data Table();
dt << new column( "Target Date", character );
for each row(
if( :"Time (Months)"n <= 3,
:Target Date = format(
Informat( :Available Date, "ddmonyyyy" ) + In Days( 4 ),
"ddmonyyyy"
),
:Target Date = format(
Informat( :Available Date, "ddmonyyyy" ) + In Days( 7 ),
"ddmonyyyy"
)
)
);

Si le format de sortie doit être exactement comme le format des données d'entrée, ce qui suit sera accompli
Names Default To Here( 1 );
dt = Current Data Table();
dt << new column( "Target Date", character );
monthList = {"JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP",
"OCT", "NOV", "DEC"};
for each row(
if( :"Time (Months)"n <= 3,
temp = Informat( :Available Date, "ddmonyyyy" ) + In Days( 4 ),
temp = Informat( :Available Date, "ddmonyyyy" ) + In Days( 7 )
);
:Target Date = Substr( "0", Length( Char( Day( temp ) ) ) ) ||
Char( Day( temp ) ) || "-" || monthList[Month( temp )] || "-" ||
Char( Year( temp ) );
);

Si vous vouliez utiliser une formule plutôt que pour chaque ligne, ce serait pour la formule pour la sortie ci-dessus
monthList = {"JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
If( :"Time (Months)"n <= 3,
temp = Informat( :Available Date, "ddmonyyyy" ) + In Days( 4 ),
temp = Informat( :Available Date, "ddmonyyyy" ) + In Days( 7 )
);
Substr( "0", Length( Char( Day( temp ) ) ) ) || Char( Day( temp ) ) || "-" || monthList[Month( temp )] || "-" ||
Char( Year( temp ) );