Använda sammanhängande parametrar i sidnumrerade rapporter
Den här artikeln är avsedd för rapportförfattare som skapar sidnumrerade rapporter i Power BI. Den innehåller scenarier för att utforma sammanhängande parametrar. Sammanhängande parametrar är rapportparametrar med beroenden. När en rapportanvändare väljer ett parametervärde (eller -värden) används det för att ange tillgängliga värden för en annan parameter.
Anteckning
En introduktion till sammanhängande parametrar och hur du konfigurerar dem, tas inte upp i den här artikeln. Om du inte är helt bekant med sammanhängande parametrar rekommenderar vi att du först läser Lägga till sammanhängande parametrar till en rapport (Report Builder och SSRS).
Designscenarier
Det finns två designscenarier när man använder sammanhängande parametrar. De kan användas effektivt för att:
- Filtrera stora uppsättningar med poster
- Presentera relevanta poster
Exempeldatabas
Exemplen som presenteras i den här artikeln baseras på en Azure SQL Database. Databasen registrerar försäljningsåtgärder och innehåller olika tabeller som lagrar åter försäljare, produkter och försäljnings order.
En tabell med namnet Reseller (Återförsäljare) lagrar en post för varje återförsäljare och innehåller många tusentals poster. Tabellen Reseller (Återförsäljare) innehåller följande kolumner:
- ResellerCode (Återförsäljarkod) (heltal)
- ResellerName (Återförsäljarnamn)
- Land/Region
- State-Province (Delstat-provins)
- Stad
- Postnummer
Det finns en tabell med namnet Sales (Försäljning) också. Den lagrar poster från försäljningsorder och har en sekundärnyckelrelation till tabellen Reseller (Återförsäljare) i kolumnen ResellerCode (Återförsäljarkod).
Exempelkrav
Det krävs att man utvecklar en profilrapport för återförsäljare. Rapporten måste vara utformad för att visa information för en enskild återförsäljare. Det är inte lämpligt att låta rapportanvändaren ange en återförsäljarkod, eftersom de sällan kommer ihåg dem.
Filtrera stora uppsättningar med poster
Vi tar en titt på tre exempel för att hjälpa dig att begränsa stora mängder tillgängliga poster, t. ex. återförsäljare. De är:
Filtrera efter relaterade kolumner
I det här exemplet interagerar rapportanvändaren med fem rapportparametrar. Användaren måste välja land/region, delstat/provins, ort och sedan postnummer. En slutgiltig parameter listar sedan återförsäljare som finns på den geografiska platsen.

Så här kan du utveckla de sammanhängande parametrarna:
Skapa de fem rapportparametrarna, sorterade i rätt ordning.
Skapa datamängden CountryRegion (Land/region) som hämtar distinkta värden för land/region med hjälp av följande frågeuttryck:
SELECT DISTINCT [Country-Region] FROM [Reseller] ORDER BY [Country-Region]Skapa datamängden StateProvince (Delstat/provins) som hämtar distinkta delstats-/provinsvärden för det valda landet/den valda regionen med följande frågeuttryck:
SELECT DISTINCT [State-Province] FROM [Reseller] WHERE [Country-Region] = @CountryRegion ORDER BY [State-Province]Skapa datamängden City (Ort) som hämtar distinkta ortvärden för det valda landet/den valda regionen med följande frågeuttryck:
SELECT DISTINCT [City] FROM [Reseller] WHERE [Country-Region] = @CountryRegion AND [State-Province] = @StateProvince ORDER BY [City]Fortsätt det här mönstret för att skapa datamängden PostalCode (Postnummer).
Skapa datamängden Reseller (Återförsäljare) för att hämta alla återförsäljare för de valda geografiska värdena med följande frågeuttryck:
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE [Country-Region] = @CountryRegion AND [State-Province] = @StateProvince AND [City] = @City AND [PostalCode] = @PostalCode ORDER BY [ResellerName]För varje datamängd förutom den första mappar du frågeparametrar till motsvarande rapportparametrar.
Anteckning
Alla frågeparametrar (prefix med @-symbolen) som visas i dessa exempel kan bäddas in i SELECT-uttryck eller skickas till lagrade procedurer.
I allmänhet är lagrade procedurer ett bättre tillvägagångssätt för design. Det beror på att deras frågeplaner cachelagras för snabbare körning och låter dig utveckla mer avancerad logik när det behövs. De stöds dock för närvarande inte för gateway-relationella datakällor, vilket innebär SQL Server, Oracle och Teradata.
Slutligen bör du alltid se till att lämpliga index finns för att stödja effektiv datahämtning. Annars kan rapportparametrarna bli långsamma att fylla i och databasen kan bli överbelastad. Mer information om SQL Server-indexering finns i SQL Server-indexarkitektur och designguide.
Filtrera efter en grupperad kolumn
I det här exemplet interagerar rapportanvändaren med en rapportparameter för att välja den första bokstaven i återförsäljarens namn. En andra parameter visar sedan återförsäljare när namnet börjar med den valda bokstaven.

Så här kan du utveckla de sammanhängande parametrarna:
Skapa rapportparametrarna ReportGroup (Rapportgrupp) och Reseller (Återförsäljare), sorterade i rätt ordning.
Skapa datamängden ReportGroup (Rapportgrupp) för att hämta de första bokstäverna som används av alla återförsäljare med följande frågeuttryck:
SELECT DISTINCT LEFT([ResellerName], 1) AS [ReportGroup] FROM [Reseller] ORDER BY [ReportGroup]Skapa datamängden Reseller (Återförsäljare) för att hämta alla återförsäljare som börjar på den valda bokstaven med följande frågeuttryck:
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE LEFT([ResellerName], 1) = @ReportGroup ORDER BY [ResellerName]Mappa frågeparametern för datamängden Reseller (Återförsäljare) till motsvarande rapportparameter.
Det är mer effektivt att lägga till den grupperande kolumnen i tabellen Reseller (Återförsäljare). När det är beständigt och indexerat ger det bäst resultat. Mer information finns i Ange beräknade kolumner i en tabell.
ALTER TABLE [Reseller]
ADD [ReportGroup] AS LEFT([ResellerName], 1) PERSISTED
Den här tekniken kan ge ännu större potential. Överväg följande skript som lägger till en ny grupperande kolumn för att filtrera återförsäljare efter fördefinierade band med bokstäver. Det skapar också ett index för att effektivt hämta de data som krävs av rapportparametrarna.
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
Filtrera efter sökmönster
I det här exemplet interagerar rapportanvändaren med en rapportparameter för att ange ett sökmönster. En andra parameter visar sedan återförsäljare när namnet innehåller mönstret.

Så här kan du utveckla de sammanhängande parametrarna:
Skapa rapportparametrarna Search (Sök) och Reseller (Återförsäljare), sorterade i rätt ordning.
Skapa datamängden Reseller (Återförsäljare) för att hämta alla återförsäljare som innehåller söktexten med följande frågeuttryck:
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE [ResellerName] LIKE '%' + @Search + '%' ORDER BY [ResellerName]Mappa frågeparametern för datamängden Reseller (Återförsäljare) till motsvarande rapportparameter.
Tips
Du kan förbättra den här designen om du vill ha mer kontroll för dina rapportanvändare. Den låter dem definiera egna mönstermatchningsvärden. Till exempel kan sökvärdet ”red" filtrera efter återförsäljare med namn som börjar med tecknen ”red”.
Mer information finns i LIKE (Transact-SQL).
Så här kan du låta rapportanvändare definiera egna mönster.
WHERE
[ResellerName] LIKE @Search
Många som inte är experter på databaser känner dock inte till jokertecknet procentandel (%). De känner i stället till asterisken (*). Genom att ändra WHERE-satsen kan du låta dem använda det här specialtecknet.
WHERE
[ResellerName] LIKE SUBSTITUTE(@Search, '%', '*')
Presentera relevanta poster
I det här scenariot kan du använda faktauppgifter för att begränsa antalet tillgängliga värden. Rapportanvändare visas med objekt där aktivitet har registrerats.
I det här exemplet interagerar rapportanvändaren med tre rapportparametrar. De första två anger ett datumintervall för försäljningsorder. Den tredje parametern visar sedan återförsäljare där ordrar har skapats under den tidsperioden.

Så här kan du utveckla de sammanhängande parametrarna:
Skapa rapportparametrarna OrderDateStart (Orderns startdatum), OrderDateEnd (Orderns slutdatum) och Reseller (Återförsäljare), sorterade i rätt ordning.
Skapa datamängden Reseller (Återförsäljare) för att hämta alla återförsäljare som har skapat ordrar under datumperioden med följande frågeuttryck:
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]
Rekommendationer
Vi rekommenderar att du utformar dina rapporter med sammanhängande parametrar när det är möjligt. Det beror på att de:
- Ger intuitiva och användbara upplevelser för dina rapportanvändare
- Är effektiva, eftersom de hämtar mindre uppsättningar av tillgängliga värden
Se till att optimera dina datakällor genom att:
- Använda lagrade procedurer, närhelst det är möjligt
- Lägga till lämpliga index för effektiv datahämtning
- Materialisera kolumnvärden – och till och med rader – för att undvika kostsamma utvärderingar av frågetid
Nästa steg
Mer information om ämnet i den här artikeln finns i följande resurser: