IALweb Homepage
Forum Home Forum Home > MS Office > Microsoft Office > Microsoft Access
  New Posts New Posts RSS Feed - [RISOLTO]Report con intestazioni colonne variabili
  FAQ FAQ  Forum Search   Events   Register Register  Login Login


REGISTRATEVI su IALWeb forum!

[RISOLTO]Report con intestazioni colonne variabili

 Post Reply Post Reply Page  12>
Author
Message
PRINCIPE View Drop Down
Utente Senior
Utente Senior
Avatar

Joined: 04/Ott/2016
Location: MILANO
Status: Offline
Points: 175
Post Options Post Options   Thanks (0) Thanks(0)   Quote PRINCIPE Quote  Post ReplyReply Direct Link To This Post Topic: [RISOLTO]Report con intestazioni colonne variabili
    Posted: 17/Nov/2016 at 17:06

Buonasera,

pongo un quesito di cui non ho trovato semplice soluzione sul forum.

Obiettivo: rappresentare in una PIVOT i dati di cash flow che dinamicamente devo estrarre ogni mese.

Dunque, per il mese di novembre dovrò presentare il cash flow previsionale per i 5 mesi , da dicembre ad aprile,

a dicembre da gennaio a maggio e così via.

I dati vengono estratti tramite query a campi incrociati, i campi interessati sono molteplici.

In ogni caso, ad ogni record immesso corrisponde un campo PERIODO (AAAA-MM), che poi viene essere utilizzato come intestazioni di colonna della query a campi incrociati.

In creazione REPORT basato sulla query tuttavia, le intestazioni colonne sono limitate al periodo del cash flow immesso (quindi da dicembre ad aprile). Dopodichè il mese prossimo non mi sarà possibile estrarre il report in quanto i campi relativi all'ultimo PERIODO accodato non sarà riconosciuto.

Esiste una funzione che mi consenta di impostare la query in maniera dinamica a cui poi aggancerò una query parametrica per la scelta dei periodi ?

Ringrazio anticipatamente per l'interesse.

Francesco



 



Edited by PRINCIPE - 25/Nov/2016 at 09:41
Back to Top
Sponsored Links


Back to Top
willy55 View Drop Down
Moderatore
Moderatore
Avatar
Esperto di Access

Joined: 03/Ago/2011
Location: Italy
Status: Offline
Points: 10334
Post Options Post Options   Thanks (0) Thanks(0)   Quote willy55 Quote  Post ReplyReply Direct Link To This Post Posted: 17/Nov/2016 at 22:14
Puoi realizzare una query a campi incrociati in modo dinamico, stabilendo dei criteri che sulla scorta di una certa data, a partire da questa, presenti i cinque mesi successivi (generando le intestazioni delle colonne in modo relativo ai periodi).
Magari, questi link possono fornirti spunti realizzativi:
http://forum.ialweb.it/forum_posts.asp?TID=16463294
http://forum.ialweb.it/forum_posts.asp?TID=16463968
http://forum.ialweb.it/forum_posts.asp?TID=16463463
Willy
Back to Top
PRINCIPE View Drop Down
Utente Senior
Utente Senior
Avatar

Joined: 04/Ott/2016
Location: MILANO
Status: Offline
Points: 175
Post Options Post Options   Thanks (0) Thanks(0)   Quote PRINCIPE Quote  Post ReplyReply Direct Link To This Post Posted: 18/Nov/2016 at 11:05

Willy buongiorno, grazie.

Ho creato una tabella CODFORECAST che viene popolata ad ogni generazione di CASHFLOW e il cui codice univoco viene riportato in ogni record di movimento di cashflow.

Dunque per ogni movimento ho:

- codforecast

- codperiodo (identifica il mese e l'anno di previsione del movimento, es. 112016, 122016, 012017, 022017, 032017)

- il codmovi

- l'importo euro

A parte, una tabella PERIODI, mi elenca i periodi di forecast (i mesi), e per ogni record ho inserito un campo MESE e un campo ANNO, pertanto, per il record 112016 ho il campo MESE 11 ed il campo ANNO 2016

A questo punto nel codificare la query a campi incrociati mi sono impastato.

Rispetto ai link che mi hai fornito, l'unico che verosimilmente poteva fare al mio caso è quello della maschera parametrica, ma in quell'esempio il caso è diverso perché la query appoggia su una maschera opzioni MESE ed ANNO (si estrae un solo periodo).

Nel mio caso, ho creato una maschera di scelta del codice FORECAST che univocamente va poi a selezionare, tramite query, i movimenti associati a tale codice.

Tuttavia, il report, che ho strutturato con 5 colonne, preventivamente togliendo le origini dati, non mi restituisce alcun valore, e nemmeno le intestazioni delle colonne.

Ecco la query su cui poggia il report. Il campo chiuso è una combobox che mi discrimina l'estrazione del report se il valore = no (quindi non flaggato).

TRANSFORM Sum(QFCSTL01.EUR) AS SommaDiEUR
SELECT TPARAMFCSTLUNGO.CODCASHF, QFCSTL01.CODMOVI, TPARAMFCSTLUNGO.CHIUSO
FROM QFCSTL01 INNER JOIN TPARAMFCSTLUNGO ON QFCSTL01.CODCASHF = TPARAMFCSTLUNGO.CODCASHF
WHERE (((TPARAMFCSTLUNGO.CHIUSO)=No))
GROUP BY TPARAMFCSTLUNGO.CODCASHF, QFCSTL01.CODMOVI, TPARAMFCSTLUNGO.CHIUSO
PIVOT (([AA]) & "-" & ([MM]));

Manca sicuramente la funzione che fa leggere al report i dati delle colonne (i valori e le intestazioni).

Spero di essere stato sufficientemente chiaro e ringrazio per l'attenzione.


Francesco










Back to Top
willy55 View Drop Down
Moderatore
Moderatore
Avatar
Esperto di Access

Joined: 03/Ago/2011
Location: Italy
Status: Offline
Points: 10334
Post Options Post Options   Thanks (0) Thanks(0)   Quote willy55 Quote  Post ReplyReply Direct Link To This Post Posted: 18/Nov/2016 at 23:33

Procedi per gradi, prima realizza un query in cui effettui la somma dei valori, per ciascun mese, nell'intervallo a partire da una certa data (per i 5 mesi interessati).
Visto che il criterio è sempre di 5 mesi basta che l'intervallo sia compreso dalla data di riferimento, con il mese interessato ed il temine previsto dei 5 mesi (impiegando la funzione DateAdd).
Verifica i dati ottenuti se sono quelli da te voluti in forma analitica e solo dopo costruisci la query a campi incrociati su cui baserai il report assegnando, in modo dinamico, all'apertura, i valori calcolati (con la query a campi incrociati).

 



Edited by willy55 - 18/Nov/2016 at 23:34
Willy
Back to Top
PRINCIPE View Drop Down
Utente Senior
Utente Senior
Avatar

Joined: 04/Ott/2016
Location: MILANO
Status: Offline
Points: 175
Post Options Post Options   Thanks (0) Thanks(0)   Quote PRINCIPE Quote  Post ReplyReply Direct Link To This Post Posted: 20/Nov/2016 at 12:27
Willy grazie, fatto, funziona ma, la query a campi incrociati, mi restituisce solo mesi....ciò è un problema perché se mi trovo al mese novembre il primo mese (anno) ad essere visualizzato non è 2016/12 ma gennaio (2017).

Come formattare nell'istruzione DateAdd il campo data in modo tale che mi restituisca yyyy-mm ??

Grazie.

Francesco
Back to Top
@Alex View Drop Down
Utente Onorario
Utente Onorario
Avatar

Joined: 09/Apr/2012
Location: Mantova
Status: Offline
Points: 5521
Post Options Post Options   Thanks (0) Thanks(0)   Quote @Alex Quote  Post ReplyReply Direct Link To This Post Posted: 20/Nov/2016 at 12:53
Devi distinguere i campi da usare per RAGGRUPPARE da quelli per l'intestazione...!
Il formato che tu vorresti usare YYYY-MM non esiste al fine della manipolazione Date, quello è una rappresentazione di un campo Data in formato Testo con Formattazione, ovviamente deve essere usato al SOLO SCOPO di Visualizzazione.
Quindi devi creare, oltre ai campi che hai, un campo aggiuntivo con Format(CampoData;"aaaa-mm").
Non SUPPORTO il CROSSPOST.
Mio Sito
Scaricare i DEMO modificando l'Estensione.
Back to Top
PRINCIPE View Drop Down
Utente Senior
Utente Senior
Avatar

Joined: 04/Ott/2016
Location: MILANO
Status: Offline
Points: 175
Post Options Post Options   Thanks (0) Thanks(0)   Quote PRINCIPE Quote  Post ReplyReply Direct Link To This Post Posted: 20/Nov/2016 at 17:53
Alex grazie, non ne vengo a capo.
E scusate... ma non posso dare per scontate cose che non so. Dunque chiedo ulteriormente chiarimenti.
Forse non mi sono spiegato: nella visualizzazione del report che poggia sulla query a campi incrociati,
necessito estrarre per le intestazioni di colonna i periodi in formato AAAA-MM oppure MM-AAAA.

Non mi è chiaro in quale query debba utilizzare il format(data;"aaaa-mm"),
la query di base o quella a campi incrociati? .

Se utilizzo l'istruzione ADD...( come è giusto che sia ) senza formattare il campo,
la query restituisce l'intestazione di colonna come mese e non anno-mese ....




Back to Top
willy55 View Drop Down
Moderatore
Moderatore
Avatar
Esperto di Access

Joined: 03/Ago/2011
Location: Italy
Status: Offline
Points: 10334
Post Options Post Options   Thanks (0) Thanks(0)   Quote willy55 Quote  Post ReplyReply Direct Link To This Post Posted: 21/Nov/2016 at 00:18

Qualora i valori di conteggio li effettui nei vari mesi, nella query a campi incrociati, puoi avere le 5 colonne con:


....
PIVOT Format([TuaData],"yyyy-mm");

in modo da avere i dati ordinati (prima per anno e poi per mese) superando, così, il limite della sequenza a cavallo fra anno vecchio e nuovo.

Ottenuti i dati dalla query a campi incrociati per porli in un report devi tenere presente che,  in questo, i controlli dei vari mesi devono essere prefissati (nel numero massimo di 5) quindi devi costruire un report con i relativi controlli ed etichette che possano nontenere i 5 valori (del tutto variabili) che la query fornisce.
Quindi, dovrai assegnare le relative colonne della query a quelle prestabilite del report (da 1 a 5 dei mesi interessati).
Guarda ad esempio il link che ti ho indicato precedentemente:
http://forum.ialweb.it/forum_posts.asp?TID=16463968
nel particolare il demo, ivi fornito:
uploads/19428/ReportDinamicoConQueryCampiIncrociati.rar
ove alla apertura del report si assegnano (in quel caso giornalieri) le etichette e controlli sulla scorta dei dati forniti dalla query a campi incrociati.

Willy
Back to Top
PRINCIPE View Drop Down
Utente Senior
Utente Senior
Avatar

Joined: 04/Ott/2016
Location: MILANO
Status: Offline
Points: 175
Post Options Post Options   Thanks (0) Thanks(0)   Quote PRINCIPE Quote  Post ReplyReply Direct Link To This Post Posted: 21/Nov/2016 at 10:47

Willy buongiorno e grazie. Premetto che non sono preparato nell'utilizzo del codice VBA.

Il riferimento a quel link lo avevo già visionato nelle mie ricerche sul forum prima di porre il quesito.

In ogni caso, le tue indicazioni mi sono servite, anche se sono sempre fermo al palo nella strutturazione del report, in quanto pur richiamando la query a campi incrociati, e togliendo ai controlli l'origine dati (quindi, come nell'esempio di DB, ho tolto l'origine dati alle colonne MM-AAAA).

Ecco le 3 queries:

1) QESTRZLUNGO1

SELECT TMOVIFCSTLUNGO.CODMOVI, TMOVIFCSTLUNGO.CODPERI, TMOVIFCSTLUNGO.EUR, TPERIODI.CNVDATA
FROM TDATALANCIOCASHFLOW, TPERIODI INNER JOIN TMOVIFCSTLUNGO ON TPERIODI.CODPER = TMOVIFCSTLUNGO.CODPERI
WHERE (((TPERIODI.CNVDATA)=DateAdd("m",1,[DATALANCIO]) Or (TPERIODI.CNVDATA)=DateAdd("m",2,[DATALANCIO]) Or (TPERIODI.CNVDATA)=DateAdd("m",3,[DATALANCIO]) Or (TPERIODI.CNVDATA)=DateAdd("m",4,[DATALANCIO]) Or (TPERIODI.CNVDATA)=DateAdd("m",5,[DATALANCIO])));

dove: DATALANCIO è il campo variabile da cui viene conteggiato lo scadenzamento per i 5 mesi

2) QESTRZLUNGO2

con la seconda query formatto il campo data in quanto poi voglio visualizzarlo come AAAA-MM

SELECT QESTRZLUNGO1.CODMOVI, QESTRZLUNGO1.CODPERI, QESTRZLUNGO1.EUR, Format([CNVDATA],"yyyy" & "-" & "mm") AS SCAD
FROM QESTRZLUNGO1;

3) QESTRZLUNGO2  (QUERY A CAMPI INCROCIATI)

TRANSFORM Sum(QESTRZLUNGO2.EUR) AS SommaDiEUR
SELECT QESTRZLUNGO2.CODMOVI, Sum(QESTRZLUNGO2.EUR) AS [Totale di EUR]
FROM QESTRZLUNGO2
GROUP BY QESTRZLUNGO2.CODMOVI
PIVOT QESTRZLUNGO2.SCAD;

Partendo dunque dalla query 3 per costruire il report a 5 colonne, togliendo le origini dati non estrae nulla.

Dove sto sbagliando?

Francesco












Back to Top
PRINCIPE View Drop Down
Utente Senior
Utente Senior
Avatar

Joined: 04/Ott/2016
Location: MILANO
Status: Offline
Points: 175
Post Options Post Options   Thanks (0) Thanks(0)   Quote PRINCIPE Quote  Post ReplyReply Direct Link To This Post Posted: 21/Nov/2016 at 14:27

Willy,

ho corretto la QUERY N.3,

TRANSFORM Sum(QESTRZLUNGO2.EUR) AS SommaDiEUR
SELECT QESTRZLUNGO2.CODMOVI, Sum(QESTRZLUNGO2.EUR) AS [Totale di EUR]
FROM QESTRZLUNGO2
WHERE (((DATA([SCAD]))=[Maschere]![MDATALANCIOCASHFLOWLUNGO]![DATALANCIO]))
GROUP BY QESTRZLUNGO2.CODMOVI
PIVOT QESTRZLUNGO2.SCAD;

preventivamente ho creato una maschera con la quale imputo la data a partire dalla quale vengono calcolati i 5 mesi.

Nella query ho dunque aggiunto la clausola where....

ma dà errore :

"il motore di database di MS ACCESS non riconosce "[Maschere]![MDATALANCIOCASHFLOWLUNGO]![DATALANCIO]"come espressione o nome di campo valido.

grazie.


F.





Back to Top
 Post Reply Post Reply Page  12>
  Share Topic   

Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 10.17
Copyright ©2001-2013 Web Wiz Ltd.

This page was generated in 0,078 seconds.