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:
Filtrer efter relaterede kolonner
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.

Sådan kan du udvikle de overlappende parametre:
Opret de fem rapportparametre i den korrekte rækkefølge.
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]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]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]Fortsæt med dette mønster for at oprette datasættet PostalCode.
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]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.

Sådan kan du udvikle de overlappende parametre:
Opret rapportparametrene ReportGroup og Reseller i den rigtige rækkefølge.
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]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]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.

Sådan kan du udvikle de overlappende parametre:
Opret rapportparametrene Search og Reseller i den rigtige rækkefølge.
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]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.

Sådan kan du udvikle de overlappende parametre:
Opret rapportparametrene OrderDateStart, OrderDateEnd og Reseller i den korrekte rækkefølge.
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: