CloudCamp Milano, 25 maggio 2010

Ieri in Bocconi al CloudCamp, impeccabilmente organizzato da ENTER, non credo di aver sentito niente di nuovo o di particolarmente interessante, con due eccezioni: l’intervento di Eddie Budgen di Sensible Cloud sull’importanza dei Service Level Agreement, e il vivace unpanel. La mia impressione generale sulla serata è di molti venditori a caccia di pochi clienti grossi. Per come la vedo io, che non ho la CocaCaola e la FIAT tra i miei clienti, c’è molto da fare anche per le PMI. Considerazione a margine: una legge dovrebbe vietare a un relatore di tenere la sua presentazione da seduto, o peggio, di leggere la sua presentazione da seduto. Gli effetti sull’attenzione del pubblico sono devastanti. E molte slide erano illeggibili (un giorno Presentation Zen sarà libro di testo in tutte le scuole d’Italia, e avremo finito di soffrire).

Share

Excel: dalla tabella all'elenco, altri modi

Il post della scorsa settimana su come trasformare una tabella in un elenco ha prodotto commenti interessanti. Marco segnala che si può fare molto prima conR, in sole quattro righe di codice:

library(reshape)
ordini <- read.csv("ordini.csv")
ordini2 <- melt(ordini, id="Prodotto")
names(ordini2) <- c("Prodotti","Taglia","Quantità")
ordini3 <- ordini2[order(ordini2$Prodotti), ]

Robsom con MatLab se la sbriga in due sole righe:

data = load (‘info.dat’); data_new = reshape (data’,size(data,1)*size(data,2),1);

Massimo Morelli invece prende la strada più difficile e la risolve con le formule di Excel. Allego il file di esempio (Esempio – formule dalla tabella alla lista) per i più avventurosi, ma giusto per darti l’idea ecco la formula in A2 che inserisce le etichette della prima colonna:

=SE(RIF.RIGA()-1<=RIGHE(SCARTO(Tabella!$A$1;1;0;CONTA.VALORI(Tabella!$A:$A)-1;1))*COLONNE(SCARTO(Tabella!$A$1;0;1;1;CONTA.VALORI(Tabella!$1:$1)-1));SCARTO(SCARTO(Tabella!$A$1;1;0;CONTA.VALORI(Tabella!$A:$A)-1;1);TRONCA((RIF.RIGA()-2)/COLONNE(SCARTO(Tabella!$A$1;0;1;1;CONTA.VALORI(Tabella!$1:$1)-1));0);0;1;1);””)

Invece per i meno avventurosi, c’è anche una soluzione dove le prime due colonne sono state inserite a mano, e la terza viene calcolata con una formula che si riesce ascrivere in una sola riga:

=CERCA.ORIZZ(B16;$B$1:$G$8;CONFRONTA(A16;$A$1:$A$8;0);0)

Per quanto riguarda la soluzione originale con la macro in VBA, più la guardo e meno mi piace. Magari uno di questi giorni la rifaccio e la ripubblico.

Share

FileMaker 11: creare un grafico

Dalla versione 11 di FileMaker PRO è possibile creare i grafici direttamente in FileMaker.

E’ possibile creare i seguenti grafici: a colonne, a barre, a linee, ad area e a torta.

Vediamo come creare un grafico in pochi semplici passi.

Utilizziamo il file Esempi.fp7 presente nella cartella

WIN: c:/programmi/FileMaker/FileMaker Pro 11*/Italiano Extra/Esercitazioni

MAC: [HD]/Applicazioni//FileMaker Pro 11*/Italiano Extra/Esercitazioni

Apriamo il file e posizioniamoci nel formato “Immissione dati

Questo database di esempio contiene i dati anagrafici dei soci di un’associazione viaggi aziendali.

I soci si abbonano inizialmente versando una quota di 200€ e lo stato dell’abbonamento in questo caso ha valore “Nuovo“. Versano poi una quota annuale di 100€ e lo stato dell’abbonamento è in questo caso uguale a “Rinnovo

Creiamo un grafico a colonne che indichi il totale delle quote relative alle associazioni nuove e a quelle rinnovate.

Andiamo in modalità Formato scheda

Nella barra di stato selezioniamo il controllo Grafico

Grafici001

Posizioniamoci sull’area vuota a destra dell’anagrafica soci

Facciamo click con il mouse e trasciniamo disegnando un rettangolo.

Viene creata un’immagine che rappresenta un grafico. A sinistra possiamo definire le opzioni per il grafico

Grafici002

Configuriamo ora il grafico.

  • Nel tipo di grafico selezioniamo Colonne.
  • Nel titolo del grafico mettiamo “Totale quote per tipo abbonamento“. Nel Titolo è possibile anche inserire un campo calcolato.
  • Nell’asse orizzontale (x) mettiamo le categorie dei dati che desideriamo rappresentare. In questo caso il campo “Abbonamento
  • Nell’asse verticale (Y) mettiamo i valori da graficare in questo caso il campo Totale quoteAttenzione perchè il campo Totale quotenon è presente nel formato quindi dobbiamo andarlo a selezionare dalla tabella

Grafici005

Tramite il pulsante + potremmo aggiungere altre serie di dati.

A questo punto dobbiamo decidere quali record graficare. Ci sono tre diverse opzioni che possiamo scegliere:

Grafici004

  • Gruppo trovato corrente: Vengono graficati i dati del found set, cioè dei record “visibili” nel formato.nel nostro caso tutti i record
  • Record corrente: viene graficato solo il record corrente
  • Record correlati: è possibile rappresentare i dati presenti in una tabella correlata. Per esempio tutte le fatture relative ad un cliente.

Nel nostro caso scegliamo la prima opzione.

Dobbiamo anche mettere la spunta su Mostrano i punti per gruppi di record ordinati. In questo modo i record una volta ordinati verranno raggruppati per tipo di abbonamento.

Grafici006

A questo punto facciamo click sul tasto OK.

Per visualizzare il grafico dobbiamo andare in modalità Usa.

Affinchè il grafico sia rappresentato correttamente occorre ordinare sul campo “Abbonamento”

Grafici007

Una volta ordinati i dati, il grafico viene visualizzato in maniera corretta.

Grafici008

Come specificato nelle opzioni del grafico i dati rappresentati sono quelli del gruppo travato corrente, quindi se facciamo una ricerca per esempio sul campo Stato verranno graficati solo i record trovati.

Nell’immagine sotto il grafico per i soci degli Stati Uniti:

Grafici010

Le impostazioni del grafico possono essere modificate in qualsiasi momento tornando in modalità scheda e facendo doppio click sul grafico.

Tramite il pulsante “Formattazione grafico” è possibile impostare il layout del grafico.

Share

Excel: dalla tabella all'elenco

La settimana scorsa, durante un corso di Excel per una azienda del Luganese, mi hanno raccontato una brutta storia. Uno dei lavori ricorrenti più lunghi, ingrati e noiosi affidati in azienda ad alcuni allievi era questo: data una tabella di ordini riempita dal cliente e simile a questa:
Tabella

ottenere un elenco di dati simile a questo:
elenco

La prima domanda, ovviamente, è stata “Perché? Ma soprattutto, perché?” La dura risposta: “Perché il cliente vuole così, e il cliente ha sempre ragione”. Questo restringe molto il campo delle possibili soluzioni, ma almeno si può fare una bella macro. Siccome non c’è stato tempo durante il corso, mi ci sono divertito oggi e ho messo insieme una soluzione “quick & dirty” che farà storcere il naso a tutti i programmatori (io non lo sono), ma che funziona per qualsiasi tabella di qualsiasi dimensione, purché si parta con una cella attiva dentro la tabella da svolgere. Il file di esempio (47KB formato Excel 2003) è dalla tabella alla lista, e il codice è questo:

Sub Tabella_Elenco()


‘ Prende una tabella da un foglio
‘ e la trasforma in un elenco in un altro foglio

On Error Resume Next
Application.ScreenUpdating = False

Dim MioFoglio As Worksheet
Dim MiaTabella As Range
Dim Etichette As Range
Dim colcnt As Integer
Dim rowcnt As Integer

‘   Definisco le variabili e il foglio di destinazione
‘  con le etichette

Set MioFoglio = ActiveSheet
Set MiaTabella = ActiveSheet.Cells(1, 1).CurrentRegion
colcnt = MiaTabella.Columns.Count
rowcnt = MiaTabella.Rows.Count
Set Etichette = MiaTabella.Range(Cells(1, 2), Cells(1, colcnt))
N = 0

Sheets.Add.Name = “Destinazione”
With ActiveWorkbook.Names
.Add Name:=”Prodotto”, RefersTo:=”=Destinazione!A1″
.Add Name:=”Taglia”, RefersTo:=”=Destinazione!B1″
.Add Name:=”Quantità”, RefersTo:=”=Destinazione!C1″
End With
Range(“Prodotto”).FormulaR1C1 = “Prodotto”
Range(“Taglia”).FormulaR1C1 = “Taglia”
Range(“Quantità”).FormulaR1C1 = “Quantità”

‘   Copio e incollo in modo diverso per la prima riga

While N < rowcnt – 1

Application.CutCopyMode = False
MiaTabella.Cells(N + 2, 1).Copy
Application.Goto Reference:=”Prodotto”

If N = 0 Then
Range(“Prodotto”).Offset(1, 0).Range(“A1″).Select

Else
Range(“Prodotto”).End(xlDown).Offset(1, 0).Range(“A1″).Select
End If

Selection.Resize(Selection.Rows.Count + colcnt – 2, Selection.Columns.Count).Select
ActiveSheet.Paste

Application.CutCopyMode = False
Etichette.Copy
Application.Goto Reference:=”Taglia”

If N = 0 Then
Range(“Taglia”).Offset(1, 0).Range(“A1″).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Else
Range(“Taglia”).End(xlDown).Select
ActiveCell.Offset(1, 0).Range(“A1″).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
End If

Application.CutCopyMode = False
MioFoglio.Select
MiaTabella.Range(Cells(N + 2, 2), Cells(N + 2, colcnt)).Copy
Application.Goto Reference:=”Quantità”

If N = 0 Then
Range(“Quantità”).Offset(1, 0).Range(“A1″).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Else
Range(“Quantità”).End(xlDown).Select
ActiveCell.Offset(1, 0).Range(“A1″).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
End If

N = N + 1

Wend

Application.CutCopyMode = False

Range(“A1″).Select
Application.ScreenUpdating = True

End Sub

Buon divertimento. Molto volentieri accetto critiche, pomodori e suggerimenti.

Share