Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Gælder for:✅ Power BI Desktop og Power BI-tjeneste
Betinget formatering gør det muligt at styre diagramfarver ved hjælp af gradueringer, regler eller feltværdier. Brug den til at fremhæve vigtige linjer og datapunkter, få vist ændringer på en linje eller til at holde kategorifarverne konsistente på tværs af rapportvisualiseringer.
I denne artikel kan du se, hvordan du anvender betinget formatering i seks almindelige scenarier. Du kan få en oversigt over understøttede visualiseringer og formateringstypografier under Betinget formatering i Power BI visualiseringer.
Forudsætninger
Hvis du vil følge disse eksempler, skal du bruge:
- Rediger adgangen til en rapport i Power BI Desktop eller Power BI-tjeneste.
- Et diagram, der understøtter betinget formatering af dets linjer, mærker, udsnit, søjler eller kolonner.
- Et numerisk felt til gradueringsformatering eller et tekstfelt eller en måling, der returnerer et farvenavn, en hexadecimal kode eller et temafarvenavn for feltværdiformatering.
- Power BI Desktop eller redigere adgang til en eksisterende semantisk model i Power BI-tjeneste, hvis du vil oprette eksempeldataene ved hjælp af TMDL-scriptet (Tabular Model Definition Language).
Konfigurer eksemplerne med TMDL
Du kan oprette de tabeller, målinger og feltparametre, der bruges i disse eksempler, ved at anvende et TMDL-script. Anvend scriptet på en tom fil i Power BI Desktop eller på en eksisterende semantisk model ved hjælp af TMDL-visning (prøveversion) på Power BI-tjeneste- eller Fabric-portalen. Du kan få flere oplysninger om anvendelse af scripts i Brug TMDL-visning i Power BI.
Advarsel!
Dette createOrReplace script overskriver alle tabeller i den semantiske model, der har de samme navne som tabeller i scriptet.
Sådan opretter du eksempelmodellen:
- Åbn en tom fil i Power BI Desktop eller en eksisterende semantisk model i Power BI-tjeneste.
- Åbn TMDL-visning.
- Vælg kodeeditoren, og indsæt derefter følgende script.
- Vælg Anvend.
createOrReplace
model Model
culture: en-US
defaultPowerBIDataSourceVersion: powerBI_V3
sourceQueryCulture: en-US
valueFilterBehavior: independent
dataAccessOptions
legacyRedirects
returnErrorValuesAsNull
/// Sample monthly sales, units, and cost data by year used to demonstrate line trends and measure-based color formatting.
table 'Trending data'
/// Returns total monthly sales in the current filter context.
measure Sales = sum('Trending data'[Monthly sales])
formatString: \$#,0;(\$#,0);\$#,0
annotation PBI_FormatHint = {"currencyCulture":"en-US"}
/// Returns total units sold in the current filter context.
measure 'Units sold' = sum('Trending data'[Units])
formatString: #,0
/// Returns total cost of goods sold in the current filter context.
measure COGS = sum('Trending data'[Cost])
formatString: \$#,0.###############;(\$#,0.###############);\$#,0.###############
/// Returns the latest year in the current filter context for emphasizing the most recent line with conditional formatting.
measure 'Latest year' = max('Trending data'[Year])
formatString: 0
/// Calendar year associated with each monthly observation.
column Year
formatString: 0
summarizeBy: none
isNameInferred
sourceColumn: [Year]
annotation SummarizationSetBy = User
/// Numeric month from 1 through 12 used to sort the Month labels chronologically.
column MonthNum
isHidden
formatString: 0
summarizeBy: sum
isNameInferred
sourceColumn: [MonthNum]
annotation SummarizationSetBy = Automatic
/// Abbreviated month label used on chart axes and sorted by MonthNum.
column Month
summarizeBy: none
isNameInferred
sourceColumn: [Month]
sortByColumn: MonthNum
annotation SummarizationSetBy = Automatic
/// Number of units sold in the month; source column for the Units sold measure.
column Units
isHidden
formatString: 0
summarizeBy: sum
isNameInferred
sourceColumn: [Units]
annotation SummarizationSetBy = Automatic
/// Cost of goods sold for the month; source column for the COGS measure.
column Cost
isHidden
formatString: 0
summarizeBy: sum
isNameInferred
sourceColumn: [Cost]
annotation SummarizationSetBy = Automatic
/// Month-level date used for chronological axes, filtering, and date slicers.
column Date
formatString: mmm, yyyy
summarizeBy: none
isNameInferred
sourceColumn: [Date]
annotation SummarizationSetBy = Automatic
annotation PBI_FormatHint = {"isCustom":true}
/// Sales amount for the month; source column for the Sales measure.
column 'Monthly sales'
isHidden
formatString: 0
summarizeBy: sum
isNameInferred
sourceColumn: [Monthly sales]
annotation SummarizationSetBy = Automatic
partition 'Trending data' = calculated
mode: import
source =
ADDCOLUMNS(
DATATABLE(
"Year", INTEGER,
"MonthNum", INTEGER,
"Month", STRING,
"Monthly sales", INTEGER,
"Units", INTEGER,
"Cost", INTEGER,
{
{ 2023, 1, "Jan", 53000, 1060, 32860 },
{ 2023, 2, "Feb", 43000, 860, 26660 },
{ 2023, 3, "Mar", 42000, 840, 26040 },
{ 2023, 4, "Apr", 61500, 1230, 38130 },
{ 2023, 5, "May", 40500, 810, 25110 },
{ 2023, 6, "Jun", 80500, 1610, 49910 },
{ 2023, 7, "Jul", 59500, 1190, 36890 },
{ 2023, 8, "Aug", 49500, 990, 30690 },
{ 2023, 9, "Sep", 45000, 900, 27900 },
{ 2023, 10, "Oct", 82500, 1650, 51150 },
{ 2023, 11, "Nov", 43500, 870, 26970 },
{ 2023, 12, "Dec", 79500, 1590, 49290 },
{ 2024, 1, "Jan", 57500, 1150, 35650 },
{ 2024, 2, "Feb", 47000, 940, 29140 },
{ 2024, 3, "Mar", 45500, 910, 28210 },
{ 2024, 4, "Apr", 67000, 1340, 41540 },
{ 2024, 5, "May", 44000, 880, 27280 },
{ 2024, 6, "Jun", 87500, 1750, 54250 },
{ 2024, 7, "Jul", 64500, 1290, 39990 },
{ 2024, 8, "Aug", 53500, 1070, 33170 },
{ 2024, 9, "Sep", 48500, 970, 30070 },
{ 2024, 10, "Oct", 89500, 1790, 55490 },
{ 2024, 11, "Nov", 47500, 950, 29450 },
{ 2024, 12, "Dec", 86500, 1730, 53630 },
{ 2025, 1, "Jan", 62500, 1250, 38750 },
{ 2025, 2, "Feb", 51000, 1020, 31620 },
{ 2025, 3, "Mar", 49000, 980, 30380 },
{ 2025, 4, "Apr", 72500, 1450, 44950 },
{ 2025, 5, "May", 47500, 950, 29450 },
{ 2025, 6, "Jun", 95000, 1900, 58900 },
{ 2025, 7, "Jul", 69500, 1390, 43090 },
{ 2025, 8, "Aug", 58000, 1160, 35960 },
{ 2025, 9, "Sep", 52500, 1050, 32550 },
{ 2025, 10, "Oct", 97000, 1940, 60140 },
{ 2025, 11, "Nov", 51500, 1030, 31930 },
{ 2025, 12, "Dec", 94000, 1880, 58280 },
{ 2026, 1, "Jan", 68000, 1360, 42160 },
{ 2026, 2, "Feb", 55500, 1110, 34410 },
{ 2026, 3, "Mar", 53500, 1070, 33170 },
{ 2026, 4, "Apr", 79000, 1580, 48980 },
{ 2026, 5, "May", 52000, 1040, 32240 },
{ 2026, 6, "Jun", 103000, 2060, 63860 },
{ 2026, 7, "Jul", 75500, 1510, 46810 },
{ 2026, 8, "Aug", 63000, 1260, 39060 },
{ 2026, 9, "Sep", 57500, 1150, 35650 },
{ 2026, 10, "Oct", 105500, 2110, 65410 },
{ 2026, 11, "Nov", 56000, 1120, 34720 },
{ 2026, 12, "Dec", 102500, 2050, 63550 }
}
),
"Date", DATE ( [Year], [MonthNum], 1 )
)
/// Generated time-series values with positive and negative spikes used to demonstrate conditional formatting for line segments, shading, and markers.
table 'Spikes and Dips'
/// Returns the theme positive color for the maximum selected value, the theme negative color for the minimum, and transparent for all other markers.
measure 'Min and max marker' =
VAR _maxValue =
CALCULATE ( MAX ( 'Spikes and Dips'[Value] ), ALLSELECTED () )
VAR _minValue =
CALCULATE ( MIN ( 'Spikes and Dips'[Value] ), ALLSELECTED () )
VAR _dataPoint =
SUM ( 'Spikes and Dips'[Value] )
RETURN
SWITCH (
TRUE (),
_dataPoint = _maxValue, "good",
_dataPoint = _minValue, "bad",
"#FFFFFF00"
)
/// Sequential period number used as the x-axis for the generated line series.
column Period
formatString: 0
summarizeBy: none
isNameInferred
sourceColumn: [Period]
annotation SummarizationSetBy = User
/// Generated value containing typical observations and deliberate positive and negative spikes.
column Value
formatString: 0
summarizeBy: sum
isNameInferred
sourceColumn: [Value]
annotation SummarizationSetBy = Automatic
partition 'Spikes and Dips' = calculated
mode: import
source =
SELECTCOLUMNS (
ADDCOLUMNS (
GENERATESERIES ( 1, 150, 1 ),
"ValueCol",
VAR p = [Value]
RETURN
SWITCH (
TRUE (),
p >= 30 && p <= 32, RANDBETWEEN ( 50, 80 ),
p >= 20 && p <= 23, RANDBETWEEN ( -40, -30 ),
RANDBETWEEN ( 1, 10 )
)
),
"Period", [Value],
"Value", [ValueCol]
)
/// Field parameter that switches among Units sold, Sales, and COGS and assigns a consistent color to each measure.
table Parameter
/// Display label for the measure selected through the field parameter.
column Parameter
summarizeBy: none
sourceColumn: [Value1]
sortByColumn: 'Parameter Order'
relatedColumnDetails
groupByColumn: 'Parameter Fields'
annotation SummarizationSetBy = Automatic
/// Internal field reference that identifies the measure used by each field parameter option.
column 'Parameter Fields'
isHidden
summarizeBy: none
sourceColumn: [Value2]
sortByColumn: 'Parameter Order'
extendedProperty ParameterMetadata = {"version":3,"kind":2}
annotation SummarizationSetBy = Automatic
/// Numeric sort order for the field parameter options.
column 'Parameter Order'
isHidden
formatString: 0
summarizeBy: sum
sourceColumn: [Value3]
annotation SummarizationSetBy = Automatic
/// CSS color name assigned to each field parameter measure for conditional formatting.
column Color
summarizeBy: none
sourceColumn: [Value4]
annotation SummarizationSetBy = Automatic
partition Parameter = calculated
mode: import
source =
{
("Units sold", NAMEOF('Trending data'[Units sold]), 0, "MidnightBlue"),
("Sales", NAMEOF('Trending data'[Sales]), 1, "MediumOrchid"),
("COGS", NAMEOF('Trending data'[COGS]), 2, "Crimson")
}
/// Disconnected measure selector that maps each measure choice to a color for dynamic measure and color formatting examples.
table 'Select measure'
/// Returns Units sold, Sales, or COGS according to the current Measure selection.
measure 'Selected measure' =
SWITCH (
SELECTEDVALUE ( 'Select measure'[Measure] ),
"Units sold", [Units sold],
"Sales", [Sales],
"COGS", [COGS],
BLANK ()
)
formatString: 0
/// Measure name selected by the report viewer to control the dynamic measure result.
column Measure
summarizeBy: none
sourceColumn: [Value1]
annotation SummarizationSetBy = Automatic
/// CSS color name associated with each measure selection for conditional formatting.
column Color
summarizeBy: none
sourceColumn: [Value2]
annotation SummarizationSetBy = Automatic
partition 'Select measure' = calculated
mode: import
source =
{
("Units sold", "MidnightBlue"),
("Sales", "MediumOrchid"),
("COGS", "Crimson")
}
/// Sample units by quarter and color category used to demonstrate synchronized legend colors and gradient formatting.
table 'Quarterly colors'
/// Returns the quarter with the highest units in the current context while preserving color and other filters.
measure 'Best Q' =
VAR _ColorQuarters =
SUMMARIZECOLUMNS (
'Quarterly colors'[Quarter],
ALL ( 'Quarterly colors'[Quarter] ),
"UnitsSold", SUM ( 'Quarterly colors'[Units] )
)
VAR _MaxUnits =
MAXX ( _ColorQuarters, [UnitsSold] )
VAR _BestRows =
FILTER ( _ColorQuarters, [UnitsSold] = _MaxUnits )
RETURN
MAXX ( _BestRows, 'Quarterly colors'[Quarter] )
/// CSS color name that identifies the category and supplies its conditional formatting color.
column Color
isNameInferred
sourceColumn: [Color]
/// Quarter label used to compare units across Q1, Q2, and Q3.
column Quarter
isNameInferred
sourceColumn: [Quarter]
/// Number of units associated with each color category and quarter.
column Units
isNameInferred
sourceColumn: [Units]
partition 'Quarterly colors' = calculated
mode: import
source =
DATATABLE (
"Color", STRING,
"Quarter", STRING,
"Units", INTEGER,
{
{ "Crimson", "Q1", 45 },
{ "Crimson", "Q2", 62 },
{ "Crimson", "Q3", 78 },
{ "MidnightBlue", "Q1", 72 },
{ "MidnightBlue", "Q2", 55 },
{ "MidnightBlue", "Q3", 88 },
{ "MediumSeaGreen", "Q1", 38 },
{ "MediumSeaGreen", "Q2", 71 },
{ "MediumSeaGreen", "Q3", 49 },
{ "Goldenrod", "Q1", 91 },
{ "Goldenrod", "Q2", 47 },
{ "Goldenrod", "Q3", 66 },
{ "MediumOrchid", "Q1", 56 },
{ "MediumOrchid", "Q2", 83 },
{ "MediumOrchid", "Q3", 60 }
}
)
cultureInfo en-US
annotation __PBI_TimeIntelligenceEnabled = 0
annotation PBI_QueryOrder = []
Udton linjer for forrige år
Når et kurvediagram sammenligner flere år, kan du bruge en graduering til at fremhæve det seneste år og vise tidligere år i gråtoner. Formateringen opdateres, når filtre eller nye data ændres, hvilket år der er seneste.
I dette eksempel skal du konfigurere et kurvediagram med Måned på x-aksen, Salg på y-aksen og År i forklaringen.
Sådan anvender du gradueringen:
Vælg kurvediagrammet, og vælg derefter Formatér visualisering.
Udvid Linjer, og udvid derefter Farve.
Vælg Alle serier, og vælg derefter knappen Betinget formatering (fx) ud for Farve.
I dialogboksen betinget formatering skal du angive Formatér typografi til Graduering.
Under Hvilket felt skal vi basere dette på?skal du vælge den måling, der returnerer det seneste år.
Angiv Minimum til lyse grå og Maksimum til blå.
Vælg Tilføj en midterste farve, angiv den midterste farve til en mørkere grå farve, og vælg derefter OK.
Det seneste år vises med blåt, mens tidligere år toner gennem gråtoner.
Stregfarven styrer også mærke- og seriemærkatfarverne. Brug mærker og seriemærkater som ikke-farve-tegn, der hjælper med at skelne mellem linjerne. Hvis du vil have dem vist, skal du udvide Markører og aktivere Vis for alle serier. Udvid derefter Serienavne, og slå dem til.
Når rapportens datovalg ændres, forbliver det senest valgte år blåt. Tidligere år fortsætter med at levere kontekst i grå.
Hvis du vil redigere den betingede formatering, skal du vælge knappen fx igen. Hvis du vil fjerne den og vende tilbage til statiske farver, skal du vælge viskelæderknappen ud for Farve.
Formatér stregsegmenter og skygge
Du kan formatere segmenter på en enkelt linje for at skelne mellem høje og lave værdier eller stigninger og fald. I dette eksempel bruges et kurvediagram med Period på x-aksen og Sum af værdi på y-aksen.
Sådan formaterer du linjesegmenterne:
Vælg kurvediagrammet, og vælg derefter Formatér visualisering.
Udvid Linjer, og udvid derefter Farve.
Vælg knappen Betinget formatering (fx) ud for Farve.
Angiv Formatér typografi til Graduering.
Under Hvilket felt skal vi basere dette på?, vælg Sum af værdi.
Angiv Minimum til mørkerød og Maksimum til mørkeblå.
Vælg Tilføj en midterste farve, angiv Centrer til den brugerdefinerede værdi
0, vælg grå som farve, og vælg derefter OK.
Linjesegmenterne skifter fra rød for lave værdier til grå ved nul til blå for høje værdier. Indstillingen Segmenttype vises og er som standard Centreret. Indstillingen Graduering er som standard slået til.
Skift segmenttype til Venstre eller Højre for at anvende hvert datapunkts farve på segmentet på den pågældende side. Gradueringsblanding er ikke tilgængelig, når du vælger Venstre eller Højre.
Hvis du vil gøre farverne mere fremtrædende, skal du slå skyggeområdet til. I det nedtonede område bruges de betinget formaterede stregfarver.
Fremhæv markerede mærker
Anvend betinget formatering direkte på stregmærker for at fremhæve bestemte datapunkter. I dette eksempel tildeler en DAX-måling (Data Analysis Expressions) rapporttemaets positive farve til den maksimale værdi og den negative farve til minimumværdien. Den tildeler en gennemsigtig farve til alle andre mærker.
Uden betinget formatering vises mærker på hvert datapunkt og kan gøre det svært at scanne diagrammet.
Opret følgende måling:
Min and max marker =
VAR _maxValue =
CALCULATE (
MAX ( 'Spikes and Dips'[Value] ),
ALLSELECTED ()
)
VAR _minValue =
CALCULATE (
MIN ( 'Spikes and Dips'[Value] ),
ALLSELECTED ()
)
VAR _dataPoint =
SUM ( 'Spikes and Dips'[Value] )
RETURN
SWITCH (
TRUE (),
_dataPoint = _maxValue, "good",
_dataPoint = _minValue, "bad",
"#FFFFFF00"
)
Sådan anvender du målingen på mærkerne:
- Vælg kurvediagrammet, og vælg derefter Formatér visualisering.
- Udvid Mærker, og udvid derefter Farve.
- Vælg knappen Betinget formatering (fx) ud for Farve.
- Angiv Formattypografi til Feltværdi.
- Under Hvilket felt skal vi basere dette på?skal du vælge Min. og maks. mærke.
- Vælg OK.
Det er kun mærkerne minimum og maksimum, der forbliver synlige. Da målingen returnerer temafarvenavne, opdateres mærkefarverne, når du ændrer rapporttemaets synspunktsfarver.
Synkroniser forklaringsfarver på tværs af diagrammer
Brug en kolonne eller måling, der returnerer farveværdier, til at bevare den samme kategorifarve på tværs af flere visualiseringer. Når du definerer farver i den semantiske model, kan du opdatere farven ét sted.
I følgende eksempel bruges kategorier, hvis navne er farver. Før betinget formatering stemmer de visuelle farver ikke overens med deres kategorinavne.
Sådan anvender du farvefeltet på et kransediagram:
- Vælg kransediagrammet, og vælg derefter Formatér visualisering.
- Udvid Udsnit, og udvid derefter Farver.
- Vælg knappen Betinget formatering (fx) ud for Farve.
- Angiv Formattypografi til Feltværdi.
- Under Hvilket felt skal vi basere dette på?skal du vælge det felt, der indeholder kategorifarverne.
- Vælg OK.
Gentag disse trin for de andre diagrammer. Formateringskortnavnet varierer efter visualisering. Brug f.eks . Kolonner til et søjlediagram og Kurver til et kurvediagram. Du kan bruge én visualisering som en central forklaring og deaktivere forklaringerne på de andre visualiseringer.
Når en rapportfremviser vælger en kategori i den centrale forklaring, forbliver den samme kategorifarve ensartet på tværs af alle visualiseringerne.
Anvend en graduering på forklaringskategorier
Når et diagram har en forklaring, kan du anvende en graduering baseret på en numerisk værdi. Den almindelige kategoriforklaring forbliver synlig. Uden en kategoriforklaring kan visualiseringen i stedet vise gradueringsskalaen for betinget formatering.
Sådan anvender du en graduering:
- Vælg diagrammet, og vælg derefter Formatér visualisering.
- Udvid formateringskortet for visualiseringens datafarver, f.eks . kolonner, søjler eller udsnit.
- Vælg knappen Betinget formatering (fx) ud for Farve.
- Angiv Formatér typografi til Graduering.
- Vælg det numeriske felt eller den numeriske måling, som formateringen skal baseres på.
- Konfigurer minimum-, maksimum- og valgfri midterfarver, og vælg derefter OK.
Da gradueringen er baseret på værdier i stedet for bestemte kategorier, gælder den fortsat, når nye forklaringskategorier vises.
Anvend farver ved hjælp af feltparametre
Feltparametre giver rapportlæsere mulighed for at skifte de målinger eller dimensioner, som en visualisering bruger. Feltparameteren i eksemplet TMDL-script indeholder en farvekolonne, der tildeler en ensartet farve til hver parametervalg.
Sådan anvender du farvekolonnen:
- Vælg diagrammet, og vælg derefter Formatér visualisering.
- Udvid formateringskortet for diagrammets datafarver.
- Vælg knappen Betinget formatering (fx) ud for Farve.
- Angiv Formattypografi til Feltværdi.
- Under Hvilket felt skal vi basere dette på?skal du vælge feltparameterens farvekolonne.
- Vælg OK.
Farven på visualiseringen ændres med den valgte feltparameter. Anvend det samme farvefelt på andre visualiseringer for at bevare en ensartet farve for den valgte måling på tværs af rapporten.
Overvejelser og begrænsninger
- Gradueringsformatering kræver et numerisk felt eller en måling.
- Regelbaseret formatering understøtter numeriske værdier og tekstværdier, men de tilgængelige indstillinger varierer efter visualisering og formateringsegenskab.
- Formatering af feltværdier kræver et felt eller en måling, der returnerer understøttede farveværdier, f.eks. farvenavne, hexadecimale koder eller farvenavne for rapporttemaer.
- Farvemetoden for feltparametre fungerer kun, når du vælger én parameterindstilling. Den tildeler ikke separate farver, når der vises flere parameterindstillinger i ét diagram.
- Formateringen af linjesegmentet gælder for en enkelt linjeserie. Hvis du tilføjer en forklaring, oprettes der flere serier, og segmentformatering deaktiveres.
- Betinget formatering kræver en sammenlægning eller måling for det felt, der styrer formateringen.