>Ciao Alex. Ti allego un file zip contenente il materiale per
>testare il problema di associazione delle variabili. sostanzialmente
>ti riassumo cosa mi succede.
Mamma mia che fatica.. ma alla fine ho trovato.
Prendi la sorgente, premi il tasto destro e fai Show Advanced Editor. Nella sezione Input And Output Column, seleziona le OutputColum (non external) e noterai che il tipo automaticamente suggerito è il float (DT_R8 o simili). Infatti il problema si ha proprio all'output della sorgente. La preview, non rispecchia effettivamente il buffer di output.
Sì, lo so.. è terribile, ma non so proprio che dire. Credo che posterò e segnalerò questa cosa.
Comunque, tornando a noi, se tu provi a scrivere la query così:
SELECT
CASE FK_ANNO WHEN 2008
THEN CAST(SUM(T) AS DECIMAL(24,12))
ELSE CAST(SUM(T) AS DECIMAL(24,12))
END AS IMPORTO, CAST(SUM(T) AS DECIMAL(24,12)) as prova
FROM T_VALORI
GROUP BY FK_ANNO
noterai che invece prova è indicato come NUMERIC 24,12.
E anche il preview corrisponde con quello che esce dalla source.
Ricorda che il tasto di anteprima risultati è SQL SERVER come risposta, mentre la suggestion dei tipi su SSIS è del motore di SSIS. Non fidarti mai della preview, ma controlla sempre i metadati, ad esempio usando DATA VIEWERS o facendo anche solo doppio click sulle frecce. Nota infatti questo:

778x451
39Kb
come puoi notare il tipo del metadato è DT_R8, scelto da SSIS
e poi:

450x229
18Kb
il primo data viewer in uscita dalla source mostra già il valore arrotondato.
Di conseguenza, credo di poter affermare che il problema è la CASE, poichè mettendo il cast all'interno di ogni then il motore di SSIS non capisce la corretta conversione forzata e prova a scegliere un tipo corretto. Se invece scrivi la query così:
SELECT
CAST(
CASE FK_ANNO WHEN 2008
THEN CAST(SUM(T) AS DECIMAL(24,12))
ELSE CAST(SUM(T) AS DECIMAL(24,12))
END AS DECIMAL(24,12)) AS IMPORTO
FROM T_VALORI
GROUP BY FK_ANNO
vedrai che il tipo suggerito è quello corretto, perchè è tutto "wrappato" dal cast esterno. Per prova fai una nuova sorgente e controlla i metadati. Vedrai che funziona.
Infine ho provato ad utilizzare la CONVERT invece della CAST:
SELECT
CASE FK_ANNO WHEN 2008
THEN CONVERT(DECIMAL(24,12), SUM(T))
ELSE CONVERT(DECIMAL(24,12),SUM(T))
END AS IMPORTO
FROM T_VALORI
GROUP BY FK_ANNO
e, udite udite, funziona!
Strano, anche perchè se non erro CAST è più standard di CONVERT..
misteri.
Detto questo, puoi anche pensare di usare un Data Conversion successivamente al Derived Column, se quest'ultimo risulta necessario. Per conversioni di tipo, usa il primo non "sprecare" un Derived Column.
Alla fine, fossi in te userei la convert, ma ricorda che non è ANSI, se usi SQL Server vai tranquillo.
Buonanotte.. posterò questa cosa! Promesso! 
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT
http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi