DATEMOV: Spostamento di una data a un punto significativo

Come:

Lingue disponibili: reporting, Maintain

La funzione DATEMOV sposta una data ad un punto significativo sul calendario.

Poiché Dialogue Manger interpreta una data come valore alfanumerico o numerico e DATEMOV richiede una data standard memorizzata come un offset dalla data di base, non usare DAFEMOV con Dialogue Manager, a meno che non si converte prima la variabile usata come data di immissione ad un offset dalla data di base. Per esempio, il seguente converte la data legacy 20050131 in una smart date, aggiunge un mese e converte il risultato in una data legacy alfanumerica:

-SET &STRT=DATECVT(20050131,'I8YYMD', 'YYMD');         
-SET &NMT=DATEADD(&STRT,'M',1);                        
-SET &NMTA=DATECVT(&NMT,'YYMD','A8MTDYY');             
-TYPE A MONTH FROM 20050131 IS &NMTA 

L'emissione mostra che la funzione DATEADD aggiunta al numero effettivo di giorni nel mese di Febbraio, per arrivare alla fine del mese dalla fine di Gennaio.

A MONTH FROM 20050131 IS 02282005

DATEMOV funziona solo con componenti completi di date.


Inizio pagina

x
Sintassi: Come spostare una data a un punto significativo
DATEMOV(date, 'move-point')

dove:

data

Data

Data da spostare. Deve essere una data con componente formato data completa (ad esempio, MDYY o YYJUL).

spostamento

Alfanumerico

Il punto significativo in cui si sposta la data per racchiuderla tra virgolette singole. Un punto non valido restituisce un codice pari a zero. I valori validi sono:

  • EOM, è la fine del mese.
  • BOM, è l'inizio del mese.
  • EOQ, è la fine del trimestre.
  • BOQ, è l'inizio del trimestre.
  • EOY, è la fine dell'anno.
  • BOY, è l'inizio dell'anno.
  • EOW, è la fine della settimana.
  • BOW, è l'inizio della settimana.
  • NWD, è il prossimo giorno della settimana.
  • NBD, è il prossimo giorno lavorativo.
  • PWD, è il giorno della settimana precedente.
  • PBD, è il giorno lavorativo precedente.
  • WD-, è un giorno della settimana o il precedente.
  • BD-, è un giorno lavorativo o il precedente.
  • WD+, è un giorno della settimana o il successivo.
  • BD+, è un giorno lavorativo o il successivo.

Il calcolo del giorno lavorativo è influenzato dalle impostazioni di parametro BUSDAYS e HDAY.

Inoltre, notare che quando la funzione DATEMOV calcola il prossimo o il precedente giorno aziendale o giorno lavorativo, inizia sempre da un giorno aziendale o da un giorno lavorativo. Quindi, se il giorno effettivo è Sabato o Domenica e la richiesta desidera calcolare il prossimo giorno aziendale, DATEMOV userà Lunedì come giorno iniziale, non Sabato e Domenica, e restituirà Martedì come il prossimo giorno aziendale. In modo simile, quando si calcola il giorno aziendale precedente, la funzione userà il giorno iniziale di Venerdì e restituirà Giovedì come il giorno aziendale precedente.

Per evitare il salto di un giorno aziendale o giorno lavorativo, usare due volte DATEMOV. Per restituire il prossimo giorno aziendale o lavorativo, usare BD- o WD- per spostarsi prima al giorno lavorativo o aziendale precedente (se si tratta già di un giorno lavorativo o aziendale, non ci si sposterà). Quindi, usare di nuovo DATEMOV per spostarsi al prossimo giorno lavorativo o aziendale. Se si desidera ritornare al giorno lavorativo o aziendale precedente, usare prima BD+ o WD+ per spostarsi al prossimo giorno lavorativo o aziendale (se si tratta già del tipo corretto di giorno, non ci si sposterà). Quindi, usare, DATEMOV per ritornare al giorno lavorativo o aziendale precedente.

Nota: DATEMOV non usa un argomento di emissione. Usa il formato dell'argomento data per il risultato. Purché il risultato sia una data componente completo, è possibile assegnarla solo ad un campo data componente completo, o ad un campo intero.



Esempio: Restituzione del giorno lavorativo successivo

Questo esempio mostra per quale motivo si potrebbe dover usare DATEMOV due volte per ottenere il risultato corretto.

La seguente richiesta rispetto all'origine data GGSALES usa il punto di spostamento BD (Business Day) rispetto al campo DATE. La prima DATE viene convertita in una smart date, quindi DATEMOV viene chiamata con il punto di spostamento BD:

DEFINE FILE GGSALES  
DT1/WMDYY=DATE;                                                        
DT2/WMDYY = DATEADD(DT1 ,'BD',1);                                         
DAY/Dt = DT1;
 END                                                                       
 
TABLE FILE GGSALES                                                        
SUM  DT1 
DT2
BY DT1 NOPRINT
WHERE RECORDLIMIT EQ 10                                                 
 END  

Quando la data è un Sabato o una Domenica nell'emissione, il prossimo giorno aziendale viene restiuito come un Martedì. Questo accade perché prima di eseguire il calcolo, DATEMOV ha spostato la data originale ad un giorno aziendale:

  DT1              DT2   
  ---              ---         
  SUN, 09/01/1996  TUE, 09/03/1996
  FRI, 11/01/1996  MON, 11/04/1996
  SUN, 12/01/1996  TUE, 12/03/1996
  SAT, 03/01/1997  TUE, 03/04/1997
  TUE, 04/01/1997  WED, 04/02/1997
  THU, 05/01/1997  FRI, 05/02/1997
  SUN, 06/01/1997  TUE, 06/03/1997
  MON, 09/01/1997  TUE, 09/02/1997
  WED, 10/01/1997  THU, 10/02/1997

Nella seguente versione della richiesta, DATEMOV viene chiamato due volte, una volta per assicurarsi che la data iniziale sia un giorno aziendale. Il punto di spostamento specificato nella prima chiamata è BD-, che sposta solo la data al giorno aziendale precedente, se non si tratta già di un giorno aziendale. La seconda chiamata a DATEMOV usa, quindi, il punto di spostamento BD per restituire il prossimo giorno aziendale:

DEFINE FILE GGSALES  
DT1/WMDYY=DATE;                                                        
DT1A/WMDYY=DATEMOV(DT1, 'BD-');                                           
DT2/WMDYY = DATEADD(DT1A,'BD',1);                                         
DAY/Dt = DT1;
 END                                                                       
 
TABLE FILE GGSALES                                                        
SUM  DT1 DT1A DT2
BY DT1 NOPRINT
WHERE RECORDLIMIT EQ 10                                                 
 END 

Sull'emissione, il prossimo giorno aziendale dopo un Sabato o Domenica è ora restituito come Lunedì:

DT1              DT1A             DT2   
  ---              ----             ---            
  SUN, 09/01/1996  FRI, 08/30/1996  MON, 09/02/1996
  FRI, 11/01/1996  FRI, 11/01/1996  MON, 11/04/1996
  SUN, 12/01/1996  FRI, 11/29/1996  MON, 12/02/1996
  SAT, 03/01/1997  FRI, 02/28/1997  MON, 03/03/1997
  TUE, 04/01/1997  TUE, 04/01/1997  WED, 04/02/1997
  THU, 05/01/1997  THU, 05/01/1997  FRI, 05/02/1997
  SUN, 06/01/1997  FRI, 05/30/1997  MON, 06/02/1997
  MON, 09/01/1997  MON, 09/01/1997  TUE, 09/02/1997
  WED, 10/01/1997  WED, 10/01/1997  THU, 10/02/1997


Esempio: Determinazione dei punti importanti per una data (Reporting)

Il parametro BUSDAYS imposta i giorni aziendali a Lunedì, Martedì, Mercoledì e Giovedì. DATECVT converte la data legacy HIRE_DATE al formato data YYMD e fornisce le opzioni di visualizzazione data. DATEMOV determina quindi i punti importanti per HIRE_DATE.

SET BUSDAY = _MTWT__
TABLE FILE EMPLOYEE
PRINT
COMPUTE NEW_DATE/YYMD = DATECVT(HIRE_DATE, 'I6YMD', 'YYMD'); AND
COMPUTE NEW_DATE/WT = DATECVT(HIRE_DATE, 'I6YMD', 'WT'); AS 'DOW' AND
COMPUTE NWD/WT = DATEMOV(NEW_DATE, 'NWD'); AND
COMPUTE PWD/WT = DATEMOV(NEW_DATE, 'PWD'); AND
COMPUTE WDP/WT = DATEMOV(NEW_DATE, 'WD+'); AS 'WD+' AND
COMPUTE WDM/WT = DATEMOV(NEW_DATE, 'WD-'); AS 'WD-' AND
COMPUTE NBD/WT = DATEMOV(NEW_DATE, 'NBD'); AND
COMPUTE PBD/WT = DATEMOV(NEW_DATE, 'PBD'); AND
COMPUTE WBP/WT = DATEMOV(NEW_DATE, 'BD+'); AS 'BD+' AND
COMPUTE WBM/WT = DATEMOV(NEW_DATE, 'BD-'); AS 'BD-' BY LAST_NAME NOPRINT
HEADING
"Examples of DATEMOV"
"Business days are Monday, Tuesday, Wednesday, + Thursday "
" "
"START DATE.. | MOVE POINTS..........................."
WHERE DEPARTMENT EQ 'MIS';
END

L'emissione è:

Examples of DATEMOV
Business days are Monday, Tuesday, Wednesday, + Thursday
START DATE.. | MOVE POINTS...........................
NEW_DATE    DOW  NWD  PWD  WD+  WD-  NBD  PBD  BD+  BD-
--------    ---  ---  ---  ---  ---  ---  ---  ---  ---
1982/04/01  THU  FRI  WED  THU  THU  MON  WED  THU  THU
1981/11/02  MON  TUE  FRI  MON  MON  TUE  THU  MON  MON
1982/04/01  THU  FRI  WED  THU  THU  MON  WED  THU  THU
1982/05/01  SAT  TUE  THU  MON  FRI  TUE  WED  MON  THU
1981/07/01  WED  THU  TUE  WED  WED  THU  TUE  WED  WED
1981/07/01  WED  THU  TUE  WED  WED  THU  TUE  WED  WED


Esempio: Determinazione della fine della settimana (Reporting)

DATEMOV determina la fine della settimana per ciascuna data in NEW_DATE e memorizza il risultato in EOW:

TABLE FILE EMPLOYEE
PRINT FIRST_NAME AND
COMPUTE NEW_DATE/YYMDWT = DATECVT(HIRE_DATE, 'I6YMD', 'YYMDWT'); AND
COMPUTE EOW/YYMDWT = DATEMOV(NEW_DATE, 'EOW');
BY LAST_NAME
WHERE DEPARTMENT EQ 'PRODUCTION';
END

L'emissione è:

LAST_NAME     FIRST_NAME  NEW_DATE          EOW
---------     ----------  --------          ---
BANNING       JOHN        1982 AUG  1, SUN  1982 AUG  6, FRI
IRVING        JOAN        1982 JAN  4, MON  1982 JAN  8, FRI
MCKNIGHT      ROGER       1982 FEB  2, TUE  1982 FEB  5, FRI
ROMANS        ANTHONY     1982 JUL  1, THU  1982 JUL  2, FRI
SMITH         RICHARD     1982 JAN  4, MON  1982 JAN  8, FRI
STEVENS       ALFRED      1980 JUN  2, MON  1980 JUN  6, FRI


Esempio: Determinazione della fine della settimana (Maintain)

DATEMOV determina la fine della settimana per ciascuna data:

MAINTAIN
COMPUTE X/YYMDWT='20020717';
COMPUTE Y/YYMDWT=DATEMOV(X, 'EOW', Y);
TYPE "<<X    <<Y  END OF WEEK "
END

Il risultato è:

2002/07/17, WED   2002/07/19, FRI END OF WEEK

WebFOCUS