Salta al contenuto

Come elencare i valori di una colonna che massimizzano una misura

In un precedente articolo, è stato mostrato come calcolare una misura in corrispondenza dei valori di una colonna che la massimizzano. In questo articolo, si vogliono elencare tali valori mediante una misura.

In figura 1 è mostrato il modello dati usato.

Figura 1

In figura 2 è mostrato il risultato raggiunto nel precedente articolo e, in figura 3, ciò che si vuole ottenere in questo articolo.

Figura 2
Figura 3

Sviluppo

Due premesse:

  1. in figura 3 si nota un singolo valore massimizzante in ogni periodo, tuttavia nulla esclude a priori che possano essere più valori;
  2. ogni misura è uno scalare (un singolo valore, che sia una data, un testo, un numero, un valore logico). Dunque, l’elenco di valori massimizzanti dovrà essere trasformato un valore singolo, il che porta subito a identificare l’iteratore necessario, cioè CONCATENATEX.

Il codice della misura Vendite @ Colori Max Vendite, creato nel precedente articolo e che costituisce un naturale punto di partenza per raggiungere l’obiettivo scelto, è il seguente:

Vendite @ Colori Max Vendite =
VAR Colori =
    VALUES ( ‘Product'[Color] )
VAR ColoriVendite =
    ADDCOLUMNS ( Colori“@VenditeColore”, [Vendite] )
VAR MassimeVenditeColore =
    MAXX ( ColoriVendite, [@VenditeColore] )
VAR ColoriConMassimeVendite =
    FILTER ( ColoriVendite, [@VenditeColore] = MassimeVenditeColore )
VAR ColoriCheMassimizzanoLeVendite =
    SELECTCOLUMNS (
        ColoriConMassimeVendite,
        “@ColoriMassimeVendite”, ‘Product'[Color]
    )
RETURN
    CALCULATE ( [Vendite], ‘Product'[Color] IN ColoriCheMassimizzanoLeVendite )

Come va modificato il codice della misura Vendite @ Colori Max Vendite, per ottenere la lista dei colori massimizzanti? La modifica è semplice e riguarda soltanto la parte di codice che segue la chiamata a RETURN: invece di calcolare la misura Vendite in corrispondenza dei colori massimizzanti, si userà CONCATENATEX per elencarli, usando un separatore nel caso in cui siano effettivamente più di uno. Il codice della misura Colori Max Vendite è a seguire.

Colori Max Vendite =
VAR Colori =
    VALUES ( ‘Product'[Color] )
VAR ColoriVendite =
    ADDCOLUMNS ( Colori“@VenditeColore”, [Vendite] )
VAR MassimeVenditeColore =
    MAXX ( ColoriVendite, [@VenditeColore] )
VAR ColoriConMassimeVendite =
    FILTER ( ColoriVendite, [@VenditeColore] = MassimeVenditeColore )
VAR ColoriCheMassimizzanoLeVendite =
    SELECTCOLUMNS (
        ColoriConMassimeVendite,
        “@ColoriMassimeVendite”, ‘Product'[Color]
    )
RETURN
    IF (
        [Vendite] <> 0,
        CONCATENATEX ( ColoriCheMassimizzanoLeVendite, [@ColoriMassimeVendite], ” / “ )
    )

Conclusioni

Spesso, in DAX, si può riusare una logica in diverse misure. Ciò è garantito dal fatto che in DAX si ragiona per tabelle. Immaginate le tabelle necessarie, si cercano le funzioni che permettono di crearle. A questo punto, la maggior parte del problema è risolto, si tratta, infine, di lavorare sulla tabella per generare i valori desiderati, ma questa è la parte più semplice. Si ricordi che le tabelle create saranno valutate nel filter context del caso.

Autore del Post

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *