Usare i parametri a cascata nei report impaginati

Questo articolo è rivolto agli autori di report che progettano report impaginati di Power BI. Offre scenari per la progettazione di parametri a cascata. I parametri a cascata sono parametri di report con dipendenze. Quando l'utente di un report seleziona il valore (o i valori) di un parametro, esso viene usato per impostare i valori disponibili per un altro parametro.

Nota

Questo articolo non include un'introduzione ai parametri a cascata e alla relativa configurazione. Se non si ha familiarità con i parametri a catena, è consigliabile leggere prima di tutto Aggiungere parametri a catena a un report in Generatore report di Power BI.

Scenari di progettazione

Esistono due scenari di progettazione per l'uso dei parametri a cascata. Possono essere usati in modo efficace per:

  • Filtrare set di elementi di grandi dimensioni
  • Presentare elementi pertinenti

Esempio di database

Gli esempi presentati in questo articolo si basano su un database SQL di Azure. Il database registra le operazioni di vendita e contiene varie tabelle in cui vengono archiviati rivenditori, prodotti e ordini cliente.

Una tabella denominata Reseller, contenente molte migliaia di record, archivia un record per ogni rivenditore. La tabella Reseller contiene queste colonne:

  • ResellerCode (Integer)
  • ResellerName
  • Country-Region
  • State-Province
  • Città
  • PostalCode

È presente anche una tabella denominata Sales. La tabella archivia i record degli ordini cliente e ha una relazione di chiave esterna con la tabella Reseller nella colonna ResellerCode.

Esempio di richiesta

Viene richiesto di sviluppare un report Profilo del rivenditore. Il report deve essere progettato in modo da visualizzare le informazioni relative a un singolo rivenditore. Non è appropriato richiedere all'utente del report di immettere i codici dei rivenditori poiché è raro che questi vengano memorizzati.

Filtrare set di elementi di grandi dimensioni

Verranno ora esaminati tre esempi che consentono di limitare i set di elementi disponibili di grandi dimensioni, come i rivenditori, Sono:

In questo esempio l'utente del report interagisce con cinque parametri del report. Deve selezionare il paese, la provincia, la città e quindi il codice postale. Un parametro finale elenca quindi i rivenditori presenti in quella posizione geografica.

Screenshot dei parametri relativi ai report impaginati di Power BI che mostra l'applicazione di un filtro in base alle colonne correlate.

Di seguito viene illustrato come sviluppare i parametri a cascata:

  1. Creare i cinque parametri del report, ordinati nella sequenza corretta.

  2. Creare il set di dati CountryRegion che recupera i singoli valori dei paesi usando l'istruzione di query seguente:

    SELECT DISTINCT
      [Country-Region]
    FROM
      [Reseller]
    ORDER BY
      [Country-Region]
    
  3. Creare il set di dati StateProvince che recupera i singoli valori delle province per il paese selezionato usando l'istruzione di query seguente:

    SELECT DISTINCT
      [State-Province]
    FROM
      [Reseller]
    WHERE
      [Country-Region] = @CountryRegion
    ORDER BY
      [State-Province]
    
  4. Creare il set di dati City che recupera i singoli valori delle città per il paese e la provincia selezionati usando l'istruzione di query seguente:

    SELECT DISTINCT
      [City]
    FROM
      [Reseller]
    WHERE
      [Country-Region] = @CountryRegion
      AND [State-Province] = @StateProvince
    ORDER BY
      [City]
    
  5. Continuare in questo modo per creare il set di dati PostalCode.

  6. Creare il set di dati Reseller per recuperare tutti i rivenditori per i valori geografici selezionati usando l'istruzione di query seguente:

    SELECT
      [ResellerCode],
      [ResellerName]
    FROM
      [Reseller]
    WHERE
      [Country-Region] = @CountryRegion
      AND [State-Province] = @StateProvince
      AND [City] = @City
      AND [PostalCode] = @PostalCode
    ORDER BY
      [ResellerName]
    
  7. Per ogni set di dati, ad eccezione del primo, eseguire il mapping dei parametri di query ai parametri del report corrispondenti.

Nota

Tutti i parametri di query (preceduti dal simbolo @) indicati in questi esempi possono essere incorporati all'interno di istruzioni SELECT o passati alle stored procedure.

Le stored procedure costituiscono in genere un approccio migliore alla progettazione. I piani di query sono infatti memorizzati nella cache per garantire un'esecuzione più rapida. Esse consentono inoltre di sviluppare una logica più sofisticata, se necessario. Attualmente non sono tuttavia supportate per le origini dati relazionali del gateway, ovvero SQL Server, Oracle e Teradata.

Infine, è consigliabile assicurarsi sempre della presenza di indici adeguati per supportare un recupero dati efficiente. In caso contrario, il popolamento dei parametri del report potrebbe risultare lento e sovraccaricare il database. Per altre informazioni sull'indicizzazione di SQL Server, vedere Architettura e guida per la progettazione degli indici di SQL Server.

Filtrare in base a una colonna di raggruppamento

In questo esempio l'utente del report interagisce con un parametro del report per selezionare la prima lettera del rivenditore. Un secondo parametro elenca quindi i rivenditori quando il nome inizia con la lettera selezionata.

Screenshot dei parametri relativi ai report impaginati di Power BI che mostra l'applicazione di un filtro in base a una colonna di raggruppamento.

Di seguito viene illustrato come sviluppare i parametri a cascata:

  1. Creare i parametri del report ReportGroup e Reseller, ordinati nella sequenza corretta.

  2. Creare il set di dati ReportGroup per recuperare le prime lettere usate da tutti i rivenditori usando l'istruzione di query seguente:

    SELECT DISTINCT
      LEFT([ResellerName], 1) AS [ReportGroup]
    FROM
      [Reseller]
    ORDER BY
      [ReportGroup]
    
  3. Creare il set di dati Reseller per recuperare tutti i rivenditori il cui nome inizia con la lettera selezionata usando l'istruzione di query seguente:

    SELECT
      [ResellerCode],
      [ResellerName]
    FROM
      [Reseller]
    WHERE
      LEFT([ResellerName], 1) = @ReportGroup
    ORDER BY
      [ResellerName]
    
  4. Eseguire il mapping del parametro di query del set di dati Reseller al parametro del report corrispondente.

Un modo più efficiente consiste nell'aggiungere la colonna di raggruppamento alla tabella Reseller. Se è salvata in modo permanente e indicizzata, restituisce il risultato migliore. Per altre informazioni, vedere Specificare le colonne calcolate in una tabella.

ALTER TABLE [Reseller]
ADD [ReportGroup] AS LEFT([ResellerName], 1) PERSISTED

Questa tecnica può offrire un potenziale ancora maggiore. Si osservi lo script seguente che aggiunge una nuova colonna di raggruppamento per filtrare i rivenditori in base a gruppi di lettere predefiniti. Crea anche un indice per recuperare in modo efficiente i dati richiesti dai parametri del report.

ALTER TABLE [Reseller]
ADD [ReportGroup2] AS CASE
  WHEN [ResellerName] LIKE '[A-C]%' THEN 'A-C'
  WHEN [ResellerName] LIKE '[D-H]%' THEN 'D-H'
  WHEN [ResellerName] LIKE '[I-M]%' THEN 'I-M'
  WHEN [ResellerName] LIKE '[N-S]%' THEN 'N-S'
  WHEN [ResellerName] LIKE '[T-Z]%' THEN 'T-Z'
  ELSE '[Other]'
END PERSISTED
GO

CREATE NONCLUSTERED INDEX [Reseller_ReportGroup2]
ON [Reseller] ([ReportGroup2]) INCLUDE ([ResellerCode], [ResellerName])
GO

Filtrare in base ai criteri di ricerca

In questo esempio l'utente del report interagisce con un parametro del report per immettere un criterio di ricerca. Un secondo parametro elenca quindi i rivenditori quando il nome contiene il criterio.

Screenshot dei parametri relativi ai report impaginati di Power BI che mostra l'applicazione di un filtro in base ai criteri di ricerca.

Di seguito viene illustrato come sviluppare i parametri a cascata:

  1. Creare i parametri del report Search e Reseller, ordinati nella sequenza corretta.

  2. Creare il set di dati Reseller per recuperare tutti i rivenditori il cui nome contiene il testo di ricerca usando l'istruzione di query seguente:

    SELECT
      [ResellerCode],
      [ResellerName]
    FROM
      [Reseller]
    WHERE
      [ResellerName] LIKE '%' + @Search + '%'
    ORDER BY
      [ResellerName]
    
  3. Eseguire il mapping del parametro di query del set di dati Reseller al parametro del report corrispondente.

Suggerimento

È possibile migliorare ulteriormente questa progettazione per offrire maggiore controllo agli utenti del report. Si può infatti consentire agli utenti di definire un valore dei criteri di ricerca. Ad esempio, il valore di ricerca "red%" filtrerà l'elenco in modo da visualizzare i rivenditori i cui nomi iniziano con i caratteri "red".

Per altre informazioni, vedere LIKE (Transact-SQL).

Di seguito è illustrato come è possibile consentire agli utenti del report di definire i propri criteri.

WHERE
  [ResellerName] LIKE @Search

Molti professionisti che non si occupano di database, tuttavia, non conoscono il carattere jolly percentuale (%). Hanno invece familiarità con il carattere asterisco (*). Modificando la clausola WHERE, è possibile consentire l'uso di questo carattere.

WHERE
  [ResellerName] LIKE SUBSTITUTE(@Search, '%', '*')

Presentare elementi pertinenti

In questo scenario è possibile usare i dati della tabella dei fatti per limitare i valori disponibili. Agli utenti del report verranno presentati gli elementi in cui è stata registrata attività.

In questo esempio l'utente del report interagisce con tre parametri del report. I primi due impostano un intervallo di date relativo alle date degli ordini cliente. Il terzo parametro elenca quindi i rivenditori presso i quali sono stati creati ordini durante questo periodo di tempo.

Screenshot dei parametri del report impaginati di Power BI che mostra tre parametri del report: Data ordine di inizio, Data ordine di fine e Rivenditore.

Di seguito viene illustrato come sviluppare i parametri a cascata:

  1. Creare i parametri del report OrderDateStart, OrderDateEnd e Reseller, ordinati nella sequenza corretta.

  2. Creare il set di dati Reseller per recuperare tutti i rivenditori che hanno creato ordini nell'intervallo di date, usando l'istruzione di query seguente:

    SELECT DISTINCT
      [r].[ResellerCode],
      [r].[ResellerName]
    FROM
      [Reseller] AS [r]
    INNER JOIN [Sales] AS [s]
      ON [s].[ResellerCode] = [r].[ResellerCode]
    WHERE
      [s].[OrderDate] >= @OrderDateStart
      AND [s].[OrderDate] < DATEADD(DAY, 1, @OrderDateEnd)
    ORDER BY
      [r].[ResellerName]
    

Consigli

È consigliabile progettare i report con parametri a cascata, ove possibile. Essi infatti:

  • Offrono esperienze utili e intuitive agli utenti dei report
  • Sono efficienti, poiché recuperano set più piccoli dei valori disponibili

Per assicurarsi di ottimizzare le origini dati:

  • Usare le stored procedure, ove possibile
  • Aggiungere indici appropriati per un recupero dati efficiente
  • Materializzare i valori delle colonne e persino le righe per evitare costose valutazioni in fase di query

Per altre informazioni correlate a questo articolo, vedere le risorse seguenti: