Anvend overlappende parametre i sideinddelte rapporter

Denne artikel henvender sig til rapportforfattere, der designer sideinddelte rapporter i Power BI. Den indeholder scenarier til design af overlappende parametre. Overlappende parametre er rapportparametre med afhængigheder. Når en rapportbruger vælger en eller flere parameterværdier, bruges den/de til at angive tilgængelige værdier for en anden parameter.

Bemærk

En introduktion til overlappende parametre, og hvordan du konfigurerer dem, er ikke omfattet af denne artikel. Hvis du ikke har fuldstændig kendskab til overlappende parametre, anbefaler vi, at du først læser Føj overlappende parametre til en rapport (Report Builder og SSRS).

Designscenarier

Der er to designscenarier til brug af overlappende parametre. De kan bruges effektivt til at:

  • Filtrere store sæt elementer
  • Præsentere relevante elementer

Eksempeldatabase

De eksempler, der præsenteres i denne artikel, er baseret på en Azure SQL-database. Databasen registrerer salgshandlinger og indeholder forskellige tabeller, der lagrer forhandlere, produkter og salgsordrer.

En tabel med navnet Reseller gemmer én post for hver forhandler og indeholder tusindvis af poster. Tabellen Reseller har følgende kolonner:

  • ResellerCode (heltal)
  • ResellerName
  • Land-område
  • State-Province
  • By
  • Postnummer

Der er også en tabel med navnet Sales. Den gemmer salgsordreposter og har en fremmed nøgle-relation til tabellen Reseller i kolonnen ResellerCode.

Eksempel på krav

Der er et krav om at udvikle en rapport over forhandlerprofiler. Rapporten skal være designet til at vise oplysninger om en enkelt forhandler. Det er ikke hensigtsmæssigt, at rapportbrugeren skal angive en forhandlerkode, da brugerne sjældent kan dem udenad.

Filtrer store sæt elementer

Lad os se på tre eksempler, som kan hjælpe dig med at begrænse store sæt tilgængelige elementer, f.eks. forhandlere. De er:

I dette eksempel interagerer rapportbrugeren med fem rapportparametre. Brugeren skal vælge land/område, stat/provins, by og derefter postnummer. En endelig parameter viser derefter de forhandlere, der er placeret i den pågældende geografiske placering.

Skærmbillede af parametre for sideinddelte rapporter i Power BI, der viser filtrering efter relaterede kolonner.

Sådan kan du udvikle de overlappende parametre:

  1. Opret de fem rapportparametre i den korrekte rækkefølge.

  2. Opret datasættet CountryRegion, der henter entydige værdier for land/område, ved hjælp af følgende forespørgselssætning:

    SELECT DISTINCT
      [Country-Region]
    FROM
      [Reseller]
    ORDER BY
      [Country-Region]
    
  3. Opret datasættet StateProvince, der henter entydige stat-/provinsværdier for det valgte land/område, ved hjælp af følgende forespørgselssætning:

    SELECT DISTINCT
      [State-Province]
    FROM
      [Reseller]
    WHERE
      [Country-Region] = @CountryRegion
    ORDER BY
      [State-Province]
    
  4. Opret datasættet City, der henter entydige byværdier for det valgte land/område og den valgte stat/provins, ved hjælp af følgende forespørgselssætning:

    SELECT DISTINCT
      [City]
    FROM
      [Reseller]
    WHERE
      [Country-Region] = @CountryRegion
      AND [State-Province] = @StateProvince
    ORDER BY
      [City]
    
  5. Fortsæt med dette mønster for at oprette datasættet PostalCode.

  6. Opret datasættet Reseller for at hente alle forhandlere for de valgte geografiske værdier ved hjælp af følgende forespørgselssætning:

    SELECT
      [ResellerCode],
      [ResellerName]
    FROM
      [Reseller]
    WHERE
      [Country-Region] = @CountryRegion
      AND [State-Province] = @StateProvince
      AND [City] = @City
      AND [PostalCode] = @PostalCode
    ORDER BY
      [ResellerName]
    
  7. For hvert datasæt undtagen det første skal du knytte forespørgselsparametrene til de tilsvarende rapportparametre.

Bemærk

Alle forespørgselsparametre (har symbolet @ som præfiks), der vises i disse eksempler, kan integreres i SELECT-sætninger eller overføres til lagrede procedurer.

Lagrede procedurer er generelt den bedste designmetode. Det skyldes, at deres forespørgselsplaner cachelagres for at køre hurtigere, og de giver dig mulighed for at udvikle mere avanceret logik, når det er nødvendigt. De understøttes dog ikke i øjeblikket for datakilder, der er baseret på gateways, hvilket betyder SQL Server, Oracle og Teradata.

Endelig skal du altid sikre, at der findes egnede indekser til at understøtte effektiv datahentning. Ellers kan det tage lang tid at udfylde rapportparametrene, og databasen kan blive overbelastet. Du kan finde flere oplysninger om SQL Server-indeksering under Arkitektur af SQL Server-indeks og designvejledning.

Filtrer efter en grupperingskolonne

I dette eksempel interagerer rapportbrugeren med en rapportparameter for at vælge det første bogstav i forhandleren. En anden parameter viser derefter de forhandlere, hvis navn begynder med det valgte bogstav.

Skærmbillede af parametre for sideinddelte rapporter i Power BI, der viser filtrering efter en grupperingskolonne.

Sådan kan du udvikle de overlappende parametre:

  1. Opret rapportparametrene ReportGroup og Reseller i den rigtige rækkefølge.

  2. Opret datasættet ReportGroup for at hente de første bogstaver, der bruges af alle forhandlere, ved hjælp af følgende forespørgselssætning:

    SELECT DISTINCT
      LEFT([ResellerName], 1) AS [ReportGroup]
    FROM
      [Reseller]
    ORDER BY
      [ReportGroup]
    
  3. Opret datasættet Reseller for at hente alle forhandlere, der starter med det pågældende bogstav, ved hjælp af følgende forespørgselssætning:

    SELECT
      [ResellerCode],
      [ResellerName]
    FROM
      [Reseller]
    WHERE
      LEFT([ResellerName], 1) = @ReportGroup
    ORDER BY
      [ResellerName]
    
  4. Knyt forespørgselsparameteren for datasættet Reseller til den tilsvarende rapportparameter.

Det er mere effektivt at føje grupperingskolonnen til tabellen Reseller. Når den er permanent og indekseret, giver den det bedste resultat. Du kan finde flere oplysninger under Angiv beregnede kolonner i en tabel.

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

Denne teknik rummer et endnu større potentiale. Overvej følgende script, der tilføjer en ny grupperingskolonne, til at filtrere forhandlere efter foruddefinerede felter af bogstaver. Der oprettes også et indeks for effektivt at hente de data, der kræves af rapportparametrene.

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

Filtrer efter søgemønster

I dette eksempel interagerer rapportbrugeren med en rapportparameter for at angive et søgemønster. En anden parameter viser derefter forhandlere, når navnet indeholder mønsteret.

Skærmbillede af parametre for sideinddelte rapporter i Power BI, der viser filtrering efter søgemønster.

Sådan kan du udvikle de overlappende parametre:

  1. Opret rapportparametrene Search og Reseller i den rigtige rækkefølge.

  2. Opret datasættet Reseller for at hente alle forhandlere, der indeholder søgeteksten, ved hjælp af følgende forespørgselssætning:

    SELECT
      [ResellerCode],
      [ResellerName]
    FROM
      [Reseller]
    WHERE
      [ResellerName] LIKE '%' + @Search + '%'
    ORDER BY
      [ResellerName]
    
  3. Knyt forespørgselsparameteren for datasættet Reseller til den tilsvarende rapportparameter.

Tip

Du kan forbedre dette design for at give brugerne mere kontrol over rapporterne. Det giver dem mulighed for at definere deres egen værdi, der stemmer overens med et mønster. Søgeværdien "red%" filtrerer f.eks. forhandlere efter navne, der begynder med tegnene "red".

Du kan finde flere oplysninger under LIKE (Transact-SQL).

Her kan du se, hvordan du kan give rapportbrugerne mulighed for at definere deres eget mønster.

WHERE
  [ResellerName] LIKE @Search

Mange medarbejdere uden databaseerfaring kender ikke til procent-jokertegnet (%). De er i stedet bekendt med stjernetegnet (*). Hvis du ændrer WHERE-delsætningen, kan du lade dem bruge dette tegn.

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

Præsenter relevante elementer

I dette scenarie kan du bruge faktadata til at begrænse de tilgængelige værdier. Rapportbrugere får vist de elementer, hvor der er registreret aktivitet.

I dette eksempel interagerer rapportbrugeren med tre rapportparametre. De to første angiver et datointerval for salgsordredatoer. Den tredje parameter viser derefter de forhandlere, hvor der er oprettet ordrer i løbet af den pågældende tidsperiode.

Skærmbillede af parametre for sideinddelte rapporter i Power BI, der viser tre parametre: Start Order Date, End Order Date og Reseller.

Sådan kan du udvikle de overlappende parametre:

  1. Opret rapportparametrene OrderDateStart, OrderDateEnd og Reseller i den korrekte rækkefølge.

  2. Opret datasættet Reseller for at hente alle de forhandlere, der oprettede ordrer i perioden, ved hjælp af følgende forespørgselssætning:

    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]
    

Anbefalinger

Vi anbefaler, at du designer dine rapporter med overlappende parametre, når det er muligt. Det skyldes, at de:

  • Giver dine brugere intuitive og nyttige oplevelser.
  • Er effektive, da de henter mindre sæt af tilgængelige værdier.

Sørg for at optimere dine datakilder ved at:

  • Bruge lagrede procedurer, når det er muligt.
  • Tilføje relevante indekser for at hente data effektivt.
  • Vise kolonneværdier – og endda rækker – for at undgå dyre evalueringer i forespørgselstiden.

Næste trin

Du kan finde flere oplysninger, der er relateret til denne artikel, i følgende ressourcer: