Trapsgewijze parameters gebruiken in gepagineerde rapporten
Dit artikel is bedoeld voor u als auteur van rapporten die gepagineerde Power BI-rapporten ontwerpen. Het biedt scenario's voor het ontwerpen van trapsgewijze parameters. Trapsgewijze parameters zijn rapportparameters met afhankelijkheden. Wanneer een rapportgebruiker een parameterwaarde (of waarden) selecteert, wordt deze gebruikt om beschikbare waarden in te stellen voor een andere parameter.
Notitie
Een inleiding tot trapsgewijze parameters en hoe u deze configureert, wordt niet behandeld in dit artikel. Als u niet helemaal bekend bent met trapsgewijze parameters, raden we u aan eerst Trapsgewijze parameters toevoegen aan een rapport in Power BI Report Builder te lezen.
Ontwerpscenario's
Er zijn twee ontwerpscenario's voor het gebruik van trapsgewijze parameters. Ze kunnen effectief worden gebruikt om:
- Grote sets items filteren
- Relevante items presenteren
Voorbeeld database
De voorbeelden in dit artikel zijn gebaseerd op een Azure SQL Database. De database registreert verkoopbewerkingen en bevat verschillende tabellen waarin resellers, producten en verkooporders worden opgeslagen.
Een tabel met de naam Reseller slaat één record op voor elke reseller en bevat vele duizenden records. De tabel Reseller bevat de volgende kolommen:
- ResellerCode (geheel getal)
- ResellerName
- Land-regio
- Staat-provincie
- Plaats
- PostalCode
Er is ook een tabel met de naam Sales. In de kolom ResellerCode worden verkooporderrecords opgeslagen en een refererende-sleutelrelatie met de tabel Reseller.
Voorbeeldvereiste
Er is een vereiste om een resellerprofielrapport te ontwikkelen. Het rapport moet zijn ontworpen om informatie voor één reseller weer te geven. Het is niet geschikt om ervoor te zorgen dat de rapportgebruiker een resellercode invoert, omdat ze ze zelden onthouden.
Grote sets items filteren
Laten we eens kijken naar drie voorbeelden waarmee u grote sets beschikbare items, zoals resellers, kunt beperken. Dit zijn:
Filteren op gerelateerde kolommen
In dit voorbeeld communiceert de rapportgebruiker met vijf rapportparameters. Ze moeten land-regio, provincie, plaats en postcode selecteren. Met een laatste parameter worden vervolgens resellers vermeld die zich op die geografische locatie bevinden.
U kunt als volgt de trapsgewijze parameters ontwikkelen:
Maak de vijf rapportparameters, geordend in de juiste volgorde.
Maak de landregiogegevensset waarmee afzonderlijke land-regiowaarden worden opgehaald met behulp van de volgende query-instructie:
SELECT DISTINCT [Country-Region] FROM [Reseller] ORDER BY [Country-Region]
Maak de StateProvince-gegevensset waarmee afzonderlijke provinciewaarden voor de geselecteerde landregio worden opgehaald met behulp van de volgende query-instructie:
SELECT DISTINCT [State-Province] FROM [Reseller] WHERE [Country-Region] = @CountryRegion ORDER BY [State-Province]
Maak de gegevensset Plaats waarmee unieke plaatswaarden worden opgehaald voor de geselecteerde land-regio en provincie, met behulp van de volgende query-instructie:
SELECT DISTINCT [City] FROM [Reseller] WHERE [Country-Region] = @CountryRegion AND [State-Province] = @StateProvince ORDER BY [City]
Ga door met dit patroon om de gegevensset PostalCode te maken.
Maak de gegevensset Reseller om alle resellers voor de geselecteerde geografische waarden op te halen met behulp van de volgende query-instructie:
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE [Country-Region] = @CountryRegion AND [State-Province] = @StateProvince AND [City] = @City AND [PostalCode] = @PostalCode ORDER BY [ResellerName]
Wijs voor elke gegevensset, behalve de eerste, de queryparameters toe aan de bijbehorende rapportparameters.
Notitie
Alle queryparameters (voorafgegaan door het @-symbool) die in deze voorbeelden worden weergegeven, kunnen worden ingesloten in SELECT-instructies of worden doorgegeven aan opgeslagen procedures.
Over het algemeen zijn opgeslagen procedures een betere ontwerpbenadering. Dit komt doordat hun queryplannen in de cache worden opgeslagen voor snellere uitvoering en u zo nodig geavanceerdere logica kunt ontwikkelen. Ze worden momenteel echter niet ondersteund voor relationele gatewaygegevensbronnen, wat betekent dat SQL Server, Oracle en Teradata.
Ten slotte moet u er altijd voor zorgen dat er geschikte indexen bestaan ter ondersteuning van efficiënt ophalen van gegevens. Anders kunnen uw rapportparameters traag worden ingevuld en kan de database overbelast raken. Zie de sql Server-indexarchitectuur en ontwerphandleiding voor meer informatie over HET indexeren van SQL Server.
Filteren op een groepeerkolom
In dit voorbeeld communiceert de rapportgebruiker met een rapportparameter om de eerste letter van de reseller te selecteren. Een tweede parameter vermeldt vervolgens resellers wanneer de naam begint met de geselecteerde letter.
U kunt als volgt de trapsgewijze parameters ontwikkelen:
Maak de rapportparameters ReportGroup en Reseller , geordend in de juiste volgorde.
Maak de ReportGroup-gegevensset om de eerste letters op te halen die door alle resellers worden gebruikt, met behulp van de volgende query-instructie:
SELECT DISTINCT LEFT([ResellerName], 1) AS [ReportGroup] FROM [Reseller] ORDER BY [ReportGroup]
Maak de gegevensset Reseller om alle resellers op te halen die beginnen met de geselecteerde letter, met behulp van de volgende query-instructie:
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE LEFT([ResellerName], 1) = @ReportGroup ORDER BY [ResellerName]
Wijs de queryparameter van de gegevensset Reseller toe aan de bijbehorende rapportparameter.
Het is efficiënter om de groepeerkolom toe te voegen aan de tabel Reseller . Wanneer deze blijft bestaan en geïndexeerd, levert het het beste resultaat. Zie Berekende kolommen opgeven in een tabel voor meer informatie.
ALTER TABLE [Reseller]
ADD [ReportGroup] AS LEFT([ResellerName], 1) PERSISTED
Deze techniek kan nog meer potentieel opleveren. Houd rekening met het volgende script waarmee een nieuwe groeperingskolom wordt toegevoegd om resellers te filteren op vooraf gedefinieerde stroken met brieven. Er wordt ook een index gemaakt om de gegevens die nodig zijn voor de rapportparameters efficiënt op te halen.
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
Filteren op zoekpatroon
In dit voorbeeld communiceert de rapportgebruiker met een rapportparameter om een zoekpatroon in te voeren. Een tweede parameter vermeldt vervolgens resellers wanneer de naam het patroon bevat.
U kunt als volgt de trapsgewijze parameters ontwikkelen:
Maak de rapportparameters Search and Reseller , geordend in de juiste volgorde.
Maak de gegevensset Reseller om alle resellers op te halen die de zoektekst bevatten, met behulp van de volgende query-instructie:
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE [ResellerName] LIKE '%' + @Search + '%' ORDER BY [ResellerName]
Wijs de queryparameter van de gegevensset Reseller toe aan de bijbehorende rapportparameter.
Tip
U kunt dit ontwerp verbeteren om meer controle te bieden voor uw rapportgebruikers. Hiermee kunnen ze hun eigen patroonkoppelingswaarde definiëren. De zoekwaarde 'rood%' wordt bijvoorbeeld gefilterd op resellers met namen die beginnen met de tekens 'rood'.
Zie LIKE (Transact-SQL) voor meer informatie.
U kunt de rapportgebruikers als volgt hun eigen patroon laten definiëren.
WHERE
[ResellerName] LIKE @Search
Veel niet-databaseprofessionals weten echter niet wat het percentage (%) jokerteken is. In plaats daarvan zijn ze bekend met het sterretje (*) . Door de WHERE-component te wijzigen, kunt u dit teken laten gebruiken.
WHERE
[ResellerName] LIKE SUBSTITUTE(@Search, '%', '*')
Relevante items presenteren
In dit scenario kunt u feitengegevens gebruiken om de beschikbare waarden te beperken. Rapportgebruikers krijgen items te zien waarin de activiteit is vastgelegd.
In dit voorbeeld communiceert de rapportgebruiker met drie rapportparameters. De eerste twee stellen een datumbereik van verkooporderdatums in. De derde parameter vermeldt vervolgens resellers waar orders in die periode zijn gemaakt.
U kunt als volgt de trapsgewijze parameters ontwikkelen:
Maak de rapportparameters OrderDateStart, OrderDateEnd en Reseller , geordend in de juiste volgorde.
Maak de gegevensset Reseller om alle resellers op te halen die orders in de datumperiode hebben gemaakt, met behulp van de volgende query-instructie:
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]
Aanbevelingen
U wordt aangeraden uw rapporten te ontwerpen met trapsgewijze parameters, indien mogelijk. Dat komt omdat ze:
- Intuïtieve en nuttige ervaringen bieden voor uw rapportgebruikers
- Efficiënt zijn, omdat ze kleinere sets beschikbare waarden ophalen
Zorg ervoor dat u uw gegevensbronnen optimaliseert door:
- Opgeslagen procedures gebruiken, indien mogelijk
- Juiste indexen toevoegen voor efficiënt ophalen van gegevens
- Kolomwaarden en zelfs rijen materialiseren om dure querytijdevaluaties te voorkomen
Gerelateerde inhoud
Raadpleeg de volgende bronnen voor meer informatie over dit artikel: