Bruke gjennomgripende parametere i paginerte rapporter
Denne artikkelen er rettet mot deg som rapportforfatter som utformer Power BI paginerte rapporter. Den inneholder scenarioer for utforming av gjennomgripende parametere. Gjennomgripende parametere er rapportparametere med avhengigheter. Når en rapportbruker velger en parameterverdi (eller verdier), brukes den til å angi tilgjengelige verdier for en annen parameter.
Notat
En innføring i gjennomgripende parametere og hvordan du konfigurerer dem, dekkes ikke i denne artikkelen. Hvis du ikke er helt kjent med gjennomgripende parametere, anbefaler vi at du først leser Legg til gjennomgripende parametere i en rapport i Power BI Report Builder.
Utformingsscenarioer
Det finnes to utformingsscenarioer for bruk av gjennomgripende parametere. De kan brukes effektivt til å:
- Filtrere store sett elementer
- Presentere relevante elementer
Eksempeldatabase
Eksemplene som presenteres i denne artikkelen, er basert på en Azure SQL Database. Databasen registrerer salgsoperasjoner, og inneholder ulike tabeller som lagrer forhandlere, produkter og salgsordrer.
En tabell med navnet Reseller
lagrer én post for hver forhandler, og den inneholder mange tusen poster. Tabellen Reseller
har disse kolonnene:
- Forhandlerkode (heltall)
- ResellerName
- Country-Region
- State-Province
- By
- PostalCode
Det finnes også en tabell med navnet Sales
. Den lagrer salgsordreposter og har en sekundærnøkkelrelasjon til Reseller
-tabellen i kolonnen ResellerCode
.
Eksempelkrav
Det er et krav om å utvikle en forhandlerprofilrapport. Rapporten må være utformet for å vise informasjon for én enkelt forhandler. Det er ikke riktig at rapportbrukeren skriver inn en forhandlerkode, da de sjelden husker dem.
Filtrere store sett med elementer
La oss ta en titt på tre eksempler for å hjelpe deg med å begrense store sett med tilgjengelige elementer, for eksempel forhandlere. De er:
Filtrer etter relaterte kolonner
I dette eksemplet samhandler rapportbrukeren med fem rapportparametere. De må velge landområde, delstat-område, poststed og deretter postnummer. En endelig parameter viser deretter forhandlere som befinner seg på den geografiske plasseringen.
Slik kan du utvikle gjennomgripende parametere:
Opprett de fem rapportparameterne, sortert i riktig rekkefølge.
Opprett CountryRegion-datasettet som henter distinkte landområdeverdier, ved hjelp av følgende spørringssetning:
SELECT DISTINCT [Country-Region] FROM [Reseller] ORDER BY [Country-Region]
Opprett StateProvince- datasett som henter distinkte verdier for delstat-området for det valgte landområdet, ved hjelp av følgende spørringssetning:
SELECT DISTINCT [State-Province] FROM [Reseller] WHERE [Country-Region] = @CountryRegion ORDER BY [State-Province]
Opprett datasettet By som henter distinkte byverdier for det valgte landområdet og delstat-området, ved hjelp av følgende spørringssetning:
SELECT DISTINCT [City] FROM [Reseller] WHERE [Country-Region] = @CountryRegion AND [State-Province] = @StateProvince ORDER BY [City]
Fortsett dette mønsteret for å opprette datasettet PostalCode.
Opprett forhandler datasett for å hente alle forhandlere for de valgte geografiske verdiene ved hjelp av følgende spørringssetning:
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE [Country-Region] = @CountryRegion AND [State-Province] = @StateProvince AND [City] = @City AND [PostalCode] = @PostalCode ORDER BY [ResellerName]
For hvert datasett unntatt det første tilordner du spørringsparameterne til de tilsvarende rapportparameterne.
Notat
Alle spørringsparametere (prefikset med @-symbolet) som vises i disse eksemplene, kan bygges inn i SELECT
setninger eller sendes til lagrede prosedyrer.
Vanligvis er lagrede prosedyrer en bedre utformingstilnærming. Det er fordi spørringsplanene deres bufres for raskere kjøring, og de lar deg utvikle mer sofistikert logikk ved behov. De støttes imidlertid ikke for gateway-relasjonelle datakilder, som betyr SQL Server, Oracle og Teradata.
Til slutt bør du alltid sørge for at det finnes egnede indekser for å støtte effektiv datahenting. Ellers kan rapportparameterne være trege å fylle ut, og databasen kan bli overbelastet. Hvis du vil ha mer informasjon om SQL Server-indeksering, kan du se SQL Server Index Architecture and Design Guide.
Filtrer etter en grupperingskolonne
I dette eksemplet samhandler rapportbrukeren med en rapportparameter for å velge den første bokstaven i forhandleren. En annen parameter viser deretter forhandlere når navnet begynner med den valgte bokstaven.
Slik kan du utvikle gjennomgripende parametere:
Opprett ReportGroup- og forhandler rapportparametere, sortert i riktig rekkefølge.
Opprett ReportGroup-datasettet for å hente de første bokstavene som brukes av alle forhandlere, ved hjelp av følgende spørringssetning:
SELECT DISTINCT LEFT([ResellerName], 1) AS [ReportGroup] FROM [Reseller] ORDER BY [ReportGroup]
Opprett datasettet forhandler for å hente alle forhandlere som begynner med den valgte bokstaven, ved hjelp av følgende spørringssetning:
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE LEFT([ResellerName], 1) = @ReportGroup ORDER BY [ResellerName]
Tilordne spørringsparameteren for forhandler datasettet til den tilsvarende rapportparameteren.
Det er mer effektivt å legge til grupperingskolonnen i Reseller
tabellen. Når den beholdes og indekseres, gir den det beste resultatet. Hvis du vil ha mer informasjon, kan du se Angi beregnede kolonner i en tabell.
ALTER TABLE [Reseller]
ADD [ReportGroup] AS LEFT([ResellerName], 1) PERSISTED
Denne teknikken kan gi enda større potensial. Vurder følgende skript som legger til en ny grupperingskolonne for å filtrere forhandlere etter forhåndsdefinerte bokstaver. Det oppretter også en indeks for effektivt å hente dataene som kreves av rapportparameterne.
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 etter søkemønster
I dette eksemplet samhandler rapportbrukeren med en rapportparameter for å angi et søkemønster. En annen parameter viser deretter forhandlere når navnet inneholder mønsteret.
Slik kan du utvikle gjennomgripende parametere:
Opprett Search og Reseller rapportparametere, sortert i riktig rekkefølge.
Opprett forhandler datasett for å hente alle forhandlere som inneholder søketeksten, ved hjelp av følgende spørringssetning:
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE [ResellerName] LIKE '%' + @Search + '%' ORDER BY [ResellerName]
Tilordne spørringsparameteren for forhandler datasettet til den tilsvarende rapportparameteren.
Tips
Du kan forbedre denne utformingen for å gi mer kontroll for rapportbrukerne. Den lar dem definere sin egen mønstersamsvarsverdi. Søkeverdien "rød%" filtreres for eksempel til forhandlere med navn som starte med tegnene "rød".
Hvis du vil ha mer informasjon, kan du se LIKE (Transact-SQL).
Slik kan du la rapportbrukerne definere sitt eget mønster.
WHERE
[ResellerName] LIKE @Search
Mange ikke-databaseteknikere vet imidlertid ikke om jokertegnet prosent (%). I stedet er de kjent med stjernetegnet (*). Ved å endre WHERE
-setningsdelen kan du la dem bruke dette tegnet.
WHERE
[ResellerName] LIKE SUBSTITUTE(@Search, '%', '*')
Presentere relevante elementer
I dette scenarioet kan du bruke faktadata til å begrense tilgjengelige verdier. Rapportbrukere presenteres med elementer der aktiviteten er registrert.
I dette eksemplet samhandler rapportbrukeren med tre rapportparametere. De to første angir et datointervall med salgsordredatoer. Den tredje parameteren viser deretter forhandlere der ordrer er opprettet i denne tidsperioden.
Slik kan du utvikle gjennomgripende parametere:
Opprett OrderDateStart-, OrderDateEndog Reseller rapportparametere, sortert i riktig rekkefølge.
Opprett datasettet forhandler for å hente alle forhandlere som opprettet ordrer i datoperioden, ved hjelp av følgende spørringssetning:
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 utformer rapportene med gjennomgripende parametere når det er mulig. Det er fordi de:
- Gi intuitive og nyttige opplevelser for rapportbrukerne
- Er effektive fordi de henter mindre sett med tilgjengelige verdier
Pass på å optimalisere datakildene ved å:
- Bruke lagrede prosedyrer når det er mulig
- Legge til riktige indekser for effektiv datahenting
- Materialisere kolonneverdier – og til og med rader – for å unngå dyre evalueringer av spørringstid
Relatert innhold
Hvis du vil ha mer informasjon om denne artikkelen, kan du se følgende ressurser: