Media di categoria su ogni riga
-
- Messaggi: 6 | Topic creati
- Iscritto il: ven 22 apr 2022, 14:37
- Contatta:
Media di categoria su ogni riga
Buongiorno,
qualcuno saprebbe aiutarmi?
ho una colonna con una variabile categorica (es. colore = giallo, blu, verde, ecc.)
e una colonna con una variabile numerica (es. prezzo)
Devo calcolare una colonna che mi dica, su ogni item, il prezzo medio della categoria di colore di cui fa parte.
Es.
qualcuno saprebbe aiutarmi?
ho una colonna con una variabile categorica (es. colore = giallo, blu, verde, ecc.)
e una colonna con una variabile numerica (es. prezzo)
Devo calcolare una colonna che mi dica, su ogni item, il prezzo medio della categoria di colore di cui fa parte.
Es.
-
- Messaggi: 890 | Topic creati
- Iscritto il: dom 28 giu 2020, 19:03
- Luogo: San Giovanni in Persiceto (BO)
- Ringraziato: 326 volte
- Contatta:
Media di categoria su ogni riga
Ciao. Qualcosa tipo
CALCULATE(AVERAGE(tabella[prezzo]); ALLEXCEPT(tabella[colore]))
Enrico Galli
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione
-
- Messaggi: 46 | Topic creati
- Iscritto il: dom 30 ott 2022, 11:07
- Luogo: Parma
- Ringraziato: 4 volte
Media di categoria su ogni riga
Ciao a tutti.
Enrico Galli mi collego a questo post perché reputo il quesito simile a quello affrontato.
Andrea90 Andre secondo me anche tu in questo argomento sei maestro e potresti venirmi in aiuto.
Trattasi di media con l'utilizzo delle funzioni di deconstestualizzazione (ALL, ALLSELECTED o ALLEXCEPT).
Vi incollo la misura:
A contorno:
Ma a parte la forma che assume il codice della misura (a mio parere confusionaria e ridondante) non risolvo il problema.
Voi avete idee?
Enrico Galli mi collego a questo post perché reputo il quesito simile a quello affrontato.
Andrea90 Andre secondo me anche tu in questo argomento sei maestro e potresti venirmi in aiuto.
Trattasi di media con l'utilizzo delle funzioni di deconstestualizzazione (ALL, ALLSELECTED o ALLEXCEPT).
Vi incollo la misura:
Codice: Seleziona tutto
Avg =
VAR TabellaRIF =
CALCULATETABLE(
ADDCOLUMNS(
SUMMARIZE(
Query_Dataset,
Query_Dataset[[CP]]],
Query_Dataset[Cliente[Nome1]]],
Query_Dataset[Cliente[Nome2]]],
Anagrafica[Item],
Tempo[Anno.Mese]
),
"Volumi", --'Inserendo questa colonna si evitano eventuali righe con Ordinato nullo.
[Ordinato]
),
Tempo[Anno] >= YEAR(NOW()) - 1,
Query_Dataset[DimPromo[SellOutEnd]]] < NOW()
)
Var RES =
AVERAGEX(
TabellaRIF,
[Volumi]
)
RETURN RES
- [Ordinato] è una misura e non ha quindi bisogno di CALCULATE per utilizzare il contesto di riga introdotto da ADDCOLUMS
- Query_Dataset è una tabella collegata a Tempo e Anagrafica (lato molti)
- La misura funziona per lo scopo per il quale è stata pensata fintantoché la si utilizza in tabelle che non aggiungono "complessità" alla TabellaRIF così come sopra definita...in altre parole se ad esempio creo una tabella con i seguenti campi CP|Nome1|Nome2|Item|Anno.Mese e utilizzo la misura Avg tutto ok...se inserisco un campo che aumenta il numero di righe (che ne so il giorno), la misura non restituisce la media calcolata sul Mese, ma l'ordinato giornaliero (la cui media è inutile, dato che la granularità massima è appunto quella giornaliera).
Codice: Seleziona tutto
Avg =
VAR TabellaRIF =
CALCULATETABLE(
ADDCOLUMNS(
SUMMARIZE(
Query_Dataset,
Query_Dataset[[CP]]],
Query_Dataset[Cliente[Nome1]]],
Query_Dataset[Cliente[Nome2]]],
Anagrafica[Item],
Tempo[Anno.Mese]
),
"Volumi", --'Inserendo questa colonna si evitano eventuali righe con Ordinato nullo.
CALCULATE(
[Ordinato],
ALLEXCEPT(
Query_Dataset,
Query_Dataset[[CP]]],
Query_Dataset[Cliente[Nome1]]],
Query_Dataset[Cliente[Nome2]]],
Anagrafica[Item],
Tempo[Anno.Mese]
)
)
),
Tempo[Anno] >= YEAR(NOW()) - 1,
Query_Dataset[DimPromo[SellOutEnd]]] < NOW()
)
Var RES =
AVERAGEX(
TabellaRIF,
[Volumi]
)
RETURN RES
Voi avete idee?
-
- Messaggi: 890 | Topic creati
- Iscritto il: dom 28 giu 2020, 19:03
- Luogo: San Giovanni in Persiceto (BO)
- Ringraziato: 326 volte
- Contatta:
Media di categoria su ogni riga
Ciao. [Ordinato] è una semplice SUM o aggiunge altri elementi di complessità?
Enrico Galli
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione
-
- Messaggi: 46 | Topic creati
- Iscritto il: dom 30 ott 2022, 11:07
- Luogo: Parma
- Ringraziato: 4 volte
Media di categoria su ogni riga
Semplice SUM.
Enrico Galli Enri ci ho lavorato tutto il giorno ieri...fatto mille prove ed ogni volta c'era qualcosa che non mi quadrava.
Ho provato a rifare un file con le sole info che servono a risolvere il problema che adesso ti allego.
Se hai tempo prova a dare un'occhiata.
Ti incollo il codice che mi sembra uno fra i più puliti (e INTUITIVI) che ho elaborato ieri:
Creando una tabella ottengo i risultati che posto in foto
Il mio obiettivo è ottenere 4.89 sia al livello totale (e già la misura questo lo fa), sia per ciascuna delle righe della tabella (in cui invece sembra si contestualizzi per ID )
Per ciascuna riga, infatti, poi mi servirà il valore "globale" 4.89 per fare ulteriori calcoli.
?
Voglio dire non dovrebbe essere complicato ma mi sto impappinando
Enrico Galli Enri ci ho lavorato tutto il giorno ieri...fatto mille prove ed ogni volta c'era qualcosa che non mi quadrava.
Ho provato a rifare un file con le sole info che servono a risolvere il problema che adesso ti allego.
Se hai tempo prova a dare un'occhiata.
Ti incollo il codice che mi sembra uno fra i più puliti (e INTUITIVI) che ho elaborato ieri:
Codice: Seleziona tutto
Stima =
VAR Tabella =
SUMMARIZE(
data,
data[Anno.Mese],
data[ClienteNome],
data[ClienteCognome],
data[SI/NO],
data[Codice]
)
VAR Volumi =
AVERAGEX(
Tabella,
CALCULATE(
SUM(
data[Ordinato]
)
)
)
RETURN Volumi
Il mio obiettivo è ottenere 4.89 sia al livello totale (e già la misura questo lo fa), sia per ciascuna delle righe della tabella (in cui invece sembra si contestualizzi per ID )
Per ciascuna riga, infatti, poi mi servirà il valore "globale" 4.89 per fare ulteriori calcoli.
?
Voglio dire non dovrebbe essere complicato ma mi sto impappinando
-
- Messaggi: 890 | Topic creati
- Iscritto il: dom 28 giu 2020, 19:03
- Luogo: San Giovanni in Persiceto (BO)
- Ringraziato: 326 volte
- Contatta:
Media di categoria su ogni riga
Allora, scusa ma l'esempio che hai mandato non credo proprio possa aiutare: torniamo al tuo codice originale.
Se capisco bene,
Ora, non è che sia SEMPRE necessario fare delle tabelle raggruppate all'interno delle misure... tu nel tuo report hai già un contesto di filtro, per cui la misura viene filtrata automaticamente in ciascuna cella della tabella in cui viene calcolata. Se tu vuoi ignorare tutti i filtri più granulari o diversi rispetto al set che hai definito, io proverei con:
e nulla più...
Se capisco bene,
Ordinato = SUM (Query_Dataset[Ordinato] )
, supporrò che sia così.Ora, non è che sia SEMPRE necessario fare delle tabelle raggruppate all'interno delle misure... tu nel tuo report hai già un contesto di filtro, per cui la misura viene filtrata automaticamente in ciascuna cella della tabella in cui viene calcolata. Se tu vuoi ignorare tutti i filtri più granulari o diversi rispetto al set che hai definito, io proverei con:
Codice: Seleziona tutto
Avg =
CALCULATE (
AVERAGE ( Query_Dataset[Ordinato] ),
ALLEXCEPT(Anagrafica, Anagrafica[Item]),
ALLEXCEPT(Tempo, Tempo[Anno.Mese]),
Tempo[Anno] >= YEAR(NOW()) - 1,
Query_Dataset[DimPromo[SellOutEnd]]] < NOW()
)
Enrico Galli
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione
-
- Messaggi: 46 | Topic creati
- Iscritto il: dom 30 ott 2022, 11:07
- Luogo: Parma
- Ringraziato: 4 volte
Media di categoria su ogni riga
Ciao Enri.
Provo a insistere sul file che t'ho mandato perché allo scopo di spiegare il problema è molto intuitivo.
Adatto la tua formula nel file:
Che porterebbe a questo risultato:
Che mi risolve il fatto di avere replicato il valore "globale" in ciascuna riga della tabella, ma restituisce un valore (2.22) che non è ciò che cerco di ottenere.
Scritta così, infatti, la misura Stima calcola la media di tutti i valori di Ordinato, ovvero:
(5.30 + 0.11 + ... + 3.32) / 11.
Invece, ciò che vorrei è una misura che calcoli la media per ciascun "blocco" di Anno.Mese.
Per intenderci, dovrebbe fare la media di questi valori:
che è appunto 4.89 come nella misura che ti riportavo nel post precedente:
Il problema è che 4.89 non viene poi riportato nella tabella con gli ID:
Non so se sono riuscito a spiegare bene...
Provo a insistere sul file che t'ho mandato perché allo scopo di spiegare il problema è molto intuitivo.
Adatto la tua formula nel file:
Codice: Seleziona tutto
Stima =
CALCULATE(
AVERAGE(
data[Ordinato]
),
ALLEXCEPT(
data,
data[ClienteNome],
data[ClienteCognome],
data[SI/NO],
data[Codice]
)
)
Che mi risolve il fatto di avere replicato il valore "globale" in ciascuna riga della tabella, ma restituisce un valore (2.22) che non è ciò che cerco di ottenere.
Scritta così, infatti, la misura Stima calcola la media di tutti i valori di Ordinato, ovvero:
(5.30 + 0.11 + ... + 3.32) / 11.
Invece, ciò che vorrei è una misura che calcoli la media per ciascun "blocco" di Anno.Mese.
Per intenderci, dovrebbe fare la media di questi valori:
che è appunto 4.89 come nella misura che ti riportavo nel post precedente:
Codice: Seleziona tutto
Stima =
VAR Tabella =
SUMMARIZE(
data,
data[Anno.Mese],
data[ClienteNome],
data[ClienteCognome],
data[SI/NO],
data[Codice]
)
VAR Volumi =
AVERAGEX(
Tabella,
CALCULATE(
SUM(
data[Ordinato]
)
)
)
RETURN Volumi
Non so se sono riuscito a spiegare bene...
-
- Messaggi: 890 | Topic creati
- Iscritto il: dom 28 giu 2020, 19:03
- Luogo: San Giovanni in Persiceto (BO)
- Ringraziato: 326 volte
- Contatta:
Media di categoria su ogni riga
Non viene restituito perché ID fa parte del contesto di ciascuna cella, e SUMMARIZE non sovrascrive il contesto di filtro.
Questo per ottenere il risultato atteso nel file di test, ma ho grossi dubbi che possa essere riportato a quello vero, e che sia davvero ciò che ti occorre:
Questo per ottenere il risultato atteso nel file di test, ma ho grossi dubbi che possa essere riportato a quello vero, e che sia davvero ciò che ti occorre:
Codice: Seleziona tutto
Stima =
VAR Tabella =
SUMMARIZE(
ALL(data),
data[Anno.Mese],
data[ClienteNome],
data[ClienteCognome],
data[SI/NO],
data[Codice]
)
VAR Volumi =
AVERAGEX(
Tabella,
CALCULATE(
SUM(data[Ordinato]),
REMOVEFILTERS(data[ID])
)
)
RETURN Volumi
Enrico Galli
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione
-
- Messaggi: 46 | Topic creati
- Iscritto il: dom 30 ott 2022, 11:07
- Luogo: Parma
- Ringraziato: 4 volte
Media di categoria su ogni riga
Ho provato Enri.
Cola REMOVEFILTERS stesso risultato.
4.89 calcolo corretto, ma nada per la replica sulle varie righe:
Cola REMOVEFILTERS stesso risultato.
4.89 calcolo corretto, ma nada per la replica sulle varie righe:
-
- Messaggi: 890 | Topic creati
- Iscritto il: dom 28 giu 2020, 19:03
- Luogo: San Giovanni in Persiceto (BO)
- Ringraziato: 326 volte
- Contatta:
Media di categoria su ogni riga
Hai dimenticato ALL nel SUMMARIZE
Enrico Galli
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione