Brug overlappende parametre i sideinddelte rapporter
Denne artikel henvender sig til dig som rapportforfatter, der designer Power BI sideinddelte rapporter. Den indeholder scenarier til design af overlappende parametre. Overlappende parametre er rapportparametre med afhængigheder. Når en rapportbruger vælger en parameterværdi (eller værdier), bruges den til at angive tilgængelige værdier for en anden parameter.
Seddel
En introduktion til overlappende parametre, og hvordan du konfigurerer dem, er ikke beskrevet i denne artikel. Hvis du ikke er helt fortrolig med overlappende parametre, anbefaler vi, at du først læser Føj overlappende parametre til en rapport i Power BI Report Builder.
Designscenarier
Der er to designscenarier til brug af overlappende parametre. De kan effektivt bruges til at:
- Filtrer store sæt elementer
- Præsenter 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 mange tusinde poster. Tabellen Reseller
indeholder følgende kolonner:
- ResellerCode (heltal)
- ResellerName
- Country-Region
- State-Province
- By
- Postnummer
Der er også en tabel med navnet Sales
. Den gemmer salgsordreposter og har en fremmed nøglerelation til tabellen Reseller
i kolonnen ResellerCode
.
Eksempel på krav
Der er et krav om at udvikle en forhandlerprofilrapport. Rapporten skal være designet til at vise oplysninger for en enkelt forhandler. Det er ikke hensigtsmæssigt at få rapportbrugeren til at angive en forhandlerkode, da de sjældent husker dem.
Filtrer store sæt elementer
Lad os se på tre eksempler, der 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. De skal vælge land-område, delstatsprovins, by og derefter postnummer. En endelig parameter viser derefter forhandlere, der er placeret på den pågældende geografiske placering.
Sådan kan du udvikle de overlappende parametre:
Opret de fem rapportparametre sorteret 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 værdier for delstat/provins 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 delstatsprovins, 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 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.
Seddel
Alle forespørgselsparametre (præfikset med symbolet @), der vises i disse eksempler, kan integreres i SELECT
-sætninger eller overføres til lagrede procedurer.
Lagrede procedurer er generelt en bedre designtilgang. Det skyldes, at deres forespørgselsplaner cachelagres til hurtigere udførelse, 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 relationelle datakilder for gatewayen, hvilket betyder SQL Server, Oracle og Teradata.
Endelig skal du altid sikre, at der findes passende indekser til at understøtte effektiv datahentning. Ellers kan rapportparametrene være langsomme at udfylde, og databasen kan blive overbelastet. Du kan få flere oplysninger om SQL Server-indeksering under SQL Server Index Architecture and Design Guide.
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 forhandlere, når navnet begynder med det valgte bogstav.
Sådan kan du udvikle de overlappende parametre:
Opret ReportGroup- og Reseller rapportparametre sorteret i den korrekte rækkefølge.
Opret ReportGroup datasæt 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 begynder med det valgte brev, 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 bevares og indekseres, giver den det bedste resultat. Du kan få flere oplysninger i Angiv beregnede kolonner i en tabel.
ALTER TABLE [Reseller]
ADD [ReportGroup] AS LEFT([ResellerName], 1) PERSISTED
Denne teknik kan give endnu større potentiale. Overvej følgende script, der tilføjer en ny grupperingskolonne for at filtrere forhandlere efter foruddefinerede 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 sorteret i den korrekte 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.
Drikkepenge
Du kan forbedre dette design for at give rapportbrugerne mere kontrol. Det giver dem mulighed for at definere deres egen mønstermatchværdi. Søgeværdien "red%" filtrerer f.eks. til forhandlere med navne, der begynder med tegnene "red".
Du kan få flere oplysninger under LIKE (Transact-SQL).
Her kan du se, hvordan du kan lade rapportbrugerne definere deres eget mønster.
WHERE
[ResellerName] LIKE @Search
Mange fagfolk, der ikke er databasemedarbejdere, kender dog ikke til jokertegnet i procent (%). I stedet kender de stjernetegnet (*). Ved at ændre 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 tilgængelige værdier. Rapportbrugere får vist elementer, hvor aktiviteten er blevet registreret.
I dette eksempel interagerer rapportbrugeren med tre rapportparametre. De første to angiver et datointerval for salgsordredatoer. Den tredje parameter viser derefter forhandlere, hvor der er oprettet ordrer i den pågældende tidsperiode.
Sådan kan du udvikle de overlappende parametre:
Opret rapportparametrene OrderDateStart, OrderDateEndog Reseller rapport i den korrekte rækkefølge.
Opret datasættet Reseller for at hente alle forhandlere, der har oprettet ordrer i datoperioden, 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 er fordi, de:
- Giv dine rapportbrugere intuitive og nyttige oplevelser
- Er effektive, fordi de henter mindre sæt tilgængelige værdier
Sørg for at optimere dine datakilder ved at:
- Brug af lagrede procedurer, når det er muligt
- Tilføjelse af relevante indeks til effektiv datahentning
- Materialiserer kolonneværdier – og lige rækker – for at undgå dyre evalueringer af forespørgselstid
Relateret indhold
Du kan få flere oplysninger, der er relateret til denne artikel, i følgende ressourcer: