mi aiutate con LINEST() filtrato per specifiche righe? L’argomento è risolto

Il software per la BI di Microsoft, leader nel mercato
Rispondi

auato
Messaggi: 8 | Topic creati
Iscritto il: mer 23 ago 2023, 13:21
Ringraziato: 2 volte

mi aiutate con LINEST() filtrato per specifiche righe?

Messaggio da auato »

Screenshot 2023-09-19 104531.png
Screenshot 2023-09-19 104531.png (20.37 KiB) Visto 395 volte
Ciao,
Mi aiutereste a calcolare l'equazione di regressione lineare da una tabella (chimata TAB, allegata qui sopra) che, oltre ad X e Y, ha una terza colonna chiamata "nodo" e che quindi andrebbe filtrata per esso?

Attualmente mi calcolo i parametri con la funzione LINEST() come qui sotto e mettendoli nella tabella Tab_forecast:

Codice: Seleziona tutto

Table_forecast = 
LINEST(
    TAB[Y]; TAB[X]
)
poi nella stessa tabella TAB ho aggiunto una misura che calcola la Y in questo modo:

Codice: Seleziona tutto

Y_est = sum(Table_forecast[Intercept])+sum(Table_forecast[Slope1])*sum(input_attempts[input_attempts]) 
dove input_attempts e' un parametro di X che inserisco io manualmente.

Quello che mi accade di errato e' che non riesco a risolvere e' che anche se seleziono un nodo alla volta con uno slicer, i calcoli in Table_forecat rimangono sempre gli stessi e calcolati su tutto il complesso della tabella TAB, mischiando i nodi A, B e C

Gazie!


Avatar utente

Andrea90
Messaggi: 2309 | Topic creati
Iscritto il: dom 28 giu 2020, 19:41
Luogo: Bologna
Ringraziato: 676 volte
Contatta:

mi aiutate con LINEST() filtrato si specifiche righe?

Messaggio da Andrea90 »

@auato,

allega il file demo e scrivi a mano il risultato desiderato quando selezioni uno dei nodi.

Andrea
Se hai gradito l'aiuto che hai ricevuto considera di contribuire alle spese per il mantenimento del forum facendo una libera DONAZIONE --> Link

Ricordarsi di segnare come "RISOLTE" le discussioni per le quali si è ricevuto un feedback positivo. Per vedere come fare --> Link

Autore del topic
auato
Messaggi: 8 | Topic creati
Iscritto il: mer 23 ago 2023, 13:21
Ringraziato: 2 volte

mi aiutate con LINEST() filtrato si specifiche righe?

Messaggio da auato »

Andrea90 ha scritto: mar 19 set 2023, 10:57 @auato,

allega il file demo e scrivi a mano il risultato desiderato quando selezioni uno dei nodi.

Andrea
Certo Andrea. allego sia il file powerbi che l'excel in cui ho fatto gli esperimenti.

Diciamo semplicemente che desidererei che i parametri di intercept e slope cambiassero quando seleziono A, B o C nello slicer. Attualemte lui calcola su tutto il totale (intercept=0,00617284 e slope=0,001240741), mentre quando seleziono A mi aspetto rispettivamente -0,833333333 e 0,0015, per B 2,166666667 e 0,0005 e per C -0,166666667 e 0,001166667

Grazie
Allegati
excel.xlsx
(13.72 KiB) Scaricato 230 volte
file.pbix
(128.35 KiB) Scaricato 74 volte
Avatar utente

Andrea90
Messaggi: 2309 | Topic creati
Iscritto il: dom 28 giu 2020, 19:41
Luogo: Bologna
Ringraziato: 676 volte
Contatta:

mi aiutate con LINEST() filtrato per specifiche righe?

Messaggio da Andrea90 »

@auato,

Se tu utilizzi quella formula per generarti una tabella all'interno del modello è chiaro che poi essa non risentirà delle selezioni che effettuerai sugli oggetti filtro inseriti nel tuo report. Devi lavorare a livello di misura, e visto che quella funzione restituisce una tabella con diverse colonne ed una sola riga, puoi ottenere tutti i valori di cui necessiti semplicemente richiamandoli, vedi formula che segue:

Codice: Seleziona tutto

MyMeasure = 
VAR tab_stat2 = LINEST( TAB[Y], TAB[X] )
VAR intercept = SELECTCOLUMNS(tab_stat2, [Intercept])
VAR slope = SELECTCOLUMNS(tab_stat2, [Slope1])
RETURN intercept
A seconda di cosa richiami dopo RETURN potrai avere i valori restituiti dalla tabella, ma questa volta risentiranno delle selezioni eseguite dai filtri che hai applicato.

Andrea
Se hai gradito l'aiuto che hai ricevuto considera di contribuire alle spese per il mantenimento del forum facendo una libera DONAZIONE --> Link

Ricordarsi di segnare come "RISOLTE" le discussioni per le quali si è ricevuto un feedback positivo. Per vedere come fare --> Link

Autore del topic
auato
Messaggi: 8 | Topic creati
Iscritto il: mer 23 ago 2023, 13:21
Ringraziato: 2 volte

mi aiutate con LINEST() filtrato per specifiche righe?

Messaggio da auato »

Andrea90 ha scritto: mar 19 set 2023, 12:22 @auato,

Se tu utilizzi quella formula per generarti una tabella all'interno del modello è chiaro che poi essa non risentirà delle selezioni che effettuerai sugli oggetti filtro inseriti nel tuo report. Devi lavorare a livello di misura, e visto che quella funzione restituisce una tabella con diverse colonne ed una sola riga, puoi ottenere tutti i valori di cui necessiti semplicemente richiamandoli, vedi formula che segue:

Codice: Seleziona tutto

MyMeasure = 
VAR tab_stat2 = LINEST( TAB[Y], TAB[X] )
VAR intercept = SELECTCOLUMNS(tab_stat2, [Intercept])
VAR slope = SELECTCOLUMNS(tab_stat2, [Slope1])
RETURN intercept
A seconda di cosa richiami dopo RETURN potrai avere i valori restituiti dalla tabella, ma questa volta risentiranno delle selezioni eseguite dai filtri che hai applicato.

Andrea
Andrea sei un fenomeno! Grazie mille! Accetto la tua soluzione e il forum merita una donazione.
La tua soluzione, concettualmente, la sto ancora digerendo perche' non l'ho capita bene bene ma questo dipende ancora dalla mia mancanza di basi.
Avatar utente

Andrea90
Messaggi: 2309 | Topic creati
Iscritto il: dom 28 giu 2020, 19:41
Luogo: Bologna
Ringraziato: 676 volte
Contatta:

mi aiutate con LINEST() filtrato per specifiche righe?

Messaggio da Andrea90 »

@auato,

Se può aiutare per il tuo apprendimento il codice che ho scritto utilizza la formula che già utilizzavi tu, la quale come sappiamo restituisce una tabella che contiene diversi campi che definiscono ciascuno un valore specifico della regressione tutti in una sola riga.

Il risultato di questa tabella lo salvo temporaneamente all'interno di una variabile che chiamo tab_stat2. Le variabili si creano con VAR seguite dal nome che vuoi assegnare. Sono molto utili per tenere pulito il codice, così da poter essere letto facilmente ed inoltre possono anche essere utilizzate come strumento di debug perché quando crei una misura con più VAR puoi scegliere quale risultato mostrare semplicemente richiamandolo dopo RETURN (che è obbligatorio quando lavori con le VAR).

Ti ho scritto due variabili come esempio, ma bastava anche scriverne una sola con l'output desiderato per la misura che stavi creando. La formula che utilizzo è SELECTCOLUMNS() la quale, come dice il nome, seleziona campi all'interno di una tabella, ed io le ho chiesto di prenderli dalla tabella che ho salvato dentro la prima variabile, ed il cui nome è quello dato dal sistema quando si utilizza LINEST() --> se vedi nella guida online, di default ci sono diversi campi che questa tabella crea assegnandoli specifici nomi.

Il resto è un semplice RETURN seguito dal nome della VAR che voglio richiamare.

Andrea
Se hai gradito l'aiuto che hai ricevuto considera di contribuire alle spese per il mantenimento del forum facendo una libera DONAZIONE --> Link

Ricordarsi di segnare come "RISOLTE" le discussioni per le quali si è ricevuto un feedback positivo. Per vedere come fare --> Link

Autore del topic
auato
Messaggi: 8 | Topic creati
Iscritto il: mer 23 ago 2023, 13:21
Ringraziato: 2 volte

mi aiutate con LINEST() filtrato per specifiche righe?

Messaggio da auato »

Andrea90 ha scritto: mar 19 set 2023, 14:57 @auato,

Se può aiutare per il tuo apprendimento il codice che ho scritto utilizza la formula che già utilizzavi tu, la quale come sappiamo restituisce una tabella che contiene diversi campi che definiscono ciascuno un valore specifico della regressione tutti in una sola riga.

...

Andrea
Ho avuto tempo di analizzare meglio il tuo codice e' ed semplicissimo. @Andrea90 grazie ancora
Rispondi