Datatyper i udtryk i en sideinddelt rapport (Power BI Report Builder)
GÆLDER FOR: Power BI Report Builder
Power BI Desktop
Datatyper repræsenterer forskellige typer data i en sideinddelt rapport, så de kan gemmes og behandles effektivt. Typiske datatyper omfatter tekst (også kaldet strenge), tal med og uden decimaler, datoer og klokkeslæt samt billeder. Værdier i en rapport skal være en RDL-datatype (Report Definition Language). Du kan formatere en værdi i henhold til dine præferencer, når du viser den i en rapport. Et felt, der repræsenterer valuta, gemmes f.eks. i rapportdefinitionen som et flydende tal, men det kan vises i forskellige formater afhængigt af den formategenskab, du vælger.
Du kan få flere oplysninger om visningsformater under Formatering af rapportelementer (Power BI Report Builder).
RDL-datatyper (Report Definition Language) og CLR-datatyper (Common Language Runtime)
Værdier, der er angivet i en RDL-fil, skal være en RDL-datatype. Når rapporten kompileres og behandles, konverteres RDL-datatyper til CLR-datatyper. I følgende tabel vises konverteringen, som er markeret som Standard:
RDL-type | CLR-typer |
---|---|
String | Standard: Streng Diagram, GUID, tidsrum |
Boolean | Standard: Boolesk |
Heltal | Standard: Int64 Int16, Int32, Uint16, Uint64, Byte, Sbyte |
Dato/klokkeslæt | Standard: DateTime DateTimeOffset |
Flyde | Standard: Dobbelt Enkelt, decimal |
Binær | Standard: Byte[] |
Variant | En af ovenstående undtagen Byte[] |
VariantArray | Matrix af variant |
Serialiserbar | Variant eller typer, der er markeret med Serializable, eller som implementerer ISerializable. |
Forstå datatyper og skrivningsudtryk
Det er vigtigt at forstå datatyper, når du skriver udtryk for at sammenligne eller kombinere værdier, f.eks. når du definerer gruppe- eller filterudtryk eller beregner aggregeringer. Sammenligninger og beregninger er kun gyldige mellem elementer af samme datatype. Hvis datatyperne ikke stemmer overens, skal du eksplicit konvertere datatypen i rapportelementet ved hjælp af et udtryk.
På følgende liste beskrives de tilfælde, hvor du muligvis skal konvertere data til en anden datatype:
Sammenligning af værdien af en rapportparameter af én datatype med et datasætfelt af en anden datatype.
Skriver filterudtryk, der sammenligner værdier for forskellige datatyper.
Skriver sorteringsudtryk, der kombinerer felter med forskellige datatyper.
Skriver gruppeudtryk, der kombinerer felter med forskellige datatyper.
Konvertering af en værdi, der er hentet fra datakilden fra én datatype, til en anden datatype.
Bestem datatypen for rapportdata
Hvis du vil bestemme datatypen for et rapportelement, kan du skrive et udtryk, der returnerer datatypen. Hvis du f.eks. vil have vist datatypen for feltet MyField
, skal du føje følgende udtryk til en tabelcelle: =Fields!MyField.Value.GetType().ToString()
. Resultatet viser den CLR-datatype, der bruges til at repræsentere MyField
, f.eks. System.String eller System.DateTime.
Konvertér datasætfelter til en anden datatype
Du kan også konvertere datasætfelter, før du bruger dem i en rapport. På følgende liste beskrives, hvordan du kan konvertere et eksisterende datasætfelt:
Rediger datasætforespørgslen for at tilføje et nyt forespørgselsfelt med de konverterede data. I forbindelse med relationsdatakilder eller flerdimensionelle datakilder bruges datakilderessourcer til at udføre konverteringen.
Opret et beregnet felt baseret på et eksisterende rapportdatasætfelt ved at skrive et udtryk, der konverterer alle dataene i én resultatsætkolonne til en ny kolonne med en anden datatype. Følgende udtryk konverterer f.eks. feltet Year fra en heltalsværdi til en strengværdi:
=CStr(Fields!Year.Value)
. Du kan få flere oplysninger under Tilføj, Rediger, Opdater felter i ruden Rapportdata (Power BI Report Builder).Kontrollér, om den databehandlingsudvidelse, du bruger, indeholder metadata til hentning af forudformaterede data. En SQL Server Analysis Services MDX-forespørgsel indeholder f.eks. en FORMATTED_VALUE udvidet egenskab for kubeværdier, der allerede er formateret ved behandling af kuben. Du kan få flere oplysninger under Udvidede feltegenskaber for en SSRS (Analysis Services-database).
Forstå parameterdatatyper
Rapportparametre skal være en af fem datatyper: Boolesk, DateTime, Integer, Float eller Text (også kendt som String). Når en forespørgsel for et datasæt indeholder forespørgselsparametre, oprettes og sammenkædes rapportparametre automatisk med forespørgselsparametrene. Standarddatatypen for en rapportparameter er Streng. Hvis du vil ændre standarddatatypen for en rapportparameter, skal du vælge den korrekte værdi på rullelisten Datatype på siden Generelt i dialogboksen Egenskaber for rapportparameter.
Bemærk
Rapportparametre, der er Datatime-datatyper, understøtter ikke millisekunder. Selvom du kan oprette en parameter, der er baseret på værdier, der indeholder millisekunder, kan du ikke vælge en værdi på en rulleliste med tilgængelige værdier, der indeholder dato- eller klokkeslætsværdier, der indeholder millisekunder.
Skriv udtryk, der konverterer datatyper eller udtrækker datadele
Når du kombinerer tekst- og datasætfelter ved hjælp af sammenkædningsoperatoren (&), indeholder CLR (Common Language Runtime) generelt standardformater. Når du eksplicit har brug for at konvertere et datasætfelt eller en parameter til en bestemt datatype, skal du bruge en CLR-metode eller en biblioteksfunktion i Visual Basic-kørsel til at konvertere dataene.
I følgende tabel vises eksempler på konvertering af datatyper.
Konverteringstype | Eksempel |
---|---|
DateTime til streng | =CStr(Fields!Date.Value) |
Streng til DateTime | =DateTime.Parse(Fields!DateTimeinStringFormat.Value) |
Streng til DateTimeOffset | =DateTimeOffset.Parse(Fields!DateTimeOffsetinStringFormat.Value) |
Udtrækning af året | =Year(Fields!TimeinStringFormat.Value) -- or -- =Year(Fields!TimeinDateTimeFormat.Value) |
Boolesk til heltal | =CInt(Parameters!BooleanField.Value) -1 er Sand, og 0 er Falsk. |
Boolesk til heltal | =System.Convert.ToInt32(Fields!BooleanFormat.Value) 1 er Sand, og 0 er False. |
Kun datetime-delen af en DateTimeOffset-værdi | =Fields!MyDatetimeOffset.Value.DateTime |
Kun forskydningsdelen af en DateTimeOffset-værdi | =Fields!MyDatetimeOffset.Value.Offset |
Du kan også bruge funktionen Format til at styre visningsformatet for værdien. Du kan få flere oplysninger under Funktioner (Visual Basic).
Avancerede eksempler
Når du opretter forbindelse til en datakilde med en dataprovider, der ikke understøtter konvertering for alle datatyperne i datakilden, er standarddatatypen for ikke-understøttede datakildetyper Streng. Følgende eksempler indeholder løsninger på bestemte datatyper, der returneres som en streng.
Sammenkæde en streng og en CLR DateTimeOffset-datatype
For de fleste datatyper leverer CLR standardkonverteringer, så du kan sammenkæde værdier, der er forskellige datatyper, til én streng ved hjælp af operatoren &. Følgende udtryk sammenkæder f.eks. teksten "Dato og klokkeslæt er: " med et datasætfelt StartDate, som er en DateTime værdi: ="The date and time are: " & Fields!StartDate.Value
.
For nogle datatyper skal du muligvis inkludere funktionen ToString. Følgende udtryk viser f.eks. det samme eksempel ved hjælp af CLR-datatypen DateTimeOffset, som omfatter dato, klokkeslæt og en tidszoneforskydning i forhold til UTC-tidszonen: ="The time is: " & Fields!StartDate.Value.ToString()
.
Konvertér en strengdatatype til en CLR DateTime-datatype
Hvis en databehandlingsudvidelse ikke understøtter alle de datatyper, der er defineret i en datakilde, kan dataene hentes som tekst. En datatypeværdi af typen datetimeoffset(7) kan f.eks. hentes som datatypen Streng. I Perth, Australien vil strengværdien for 1. juli 2008 kl. 6:05:07.9999999 A.M. ligne:
2008-07-01 06:05:07.9999999 +08:00
I dette eksempel vises datoen (1. juli 2008), efterfulgt af klokkeslættet til en 7-cifret præcision (6:05:07.9999999 A.M.), efterfulgt af en UTC-tidszoneforskydning i timer og minutter (plus 8 timer, 0 minutter). I følgende eksempler er denne værdi placeret i et strengfelt med navnet MyDateTime.Value
.
Du kan bruge en af følgende strategier til at konvertere disse data til en eller flere CLR-værdier:
Brug et udtryk i et tekstfelt til at udtrække dele af strengen. Eksempler:
Følgende udtryk udtrækker kun timedelen af UTC-tidszoneforskydningen og konverterer den til minutter:
=CInt(Fields!MyDateTime.Value.Substring(Fields!MyDateTime.Value.Length-5,2)) * 60
Resultatet er
480
.Følgende udtryk konverterer strengen til en dato- og klokkeslætsværdi:
=DateTime.Parse(Fields!MyDateTime.Value)
Hvis strengen
MyDateTime.Value
har en UTC-forskydning,DateTime.Parse
justeres funktionen først for UTC-forskydningen (7 A.M. - [+08:00
] til UTC-tidspunktet på 11 p.M. aftenen før). FunktionenDateTime.Parse
anvender derefter den lokale rapportservers UTC-forskydning og justerer om nødvendigt tiden igen for sommertid. I Redmond, Washington, er[-07:00]
den lokale tidsforskydning, der er justeret for Sommertid, f.eks. , eller 7 timer tidligere end kl. 11. Resultatet er følgende DateTime-værdi :2007-07-06 04:07:07 PM
(6. juli 2007 kl. 16:07).
Du kan finde flere oplysninger om konvertering af strenge til DateTime-datatyper under Fortolkning af dato- og klokkeslætsstrenge, Formatering af dato og klokkeslæt for en bestemt kultur og Valg mellem DateTime, DateTimeOffset og TimeZoneInfo.
Føj et nyt beregnet felt til rapportdatasættet, der bruger et udtryk til at udtrække dele af strengen. Du kan få flere oplysninger under Tilføj, Rediger, Opdater felter i ruden Rapportdata (Power BI Report Builder).
Rediger forespørgslen for rapportdatasættet for at bruge Transact-SQL-funktionerne til at udtrække dato- og klokkeslætsværdierne uafhængigt af hinanden for at oprette separate kolonner. I følgende eksempel kan du se, hvordan du bruger funktionen DatePart til at tilføje en kolonne for året og en kolonne for UTC-tidszonen, der er konverteret til minutter:
SELECT
MyDateTime,
DATEPART(year, MyDateTime) AS Year,
DATEPART(tz, MyDateTime) AS OffsetinMinutes
FROM MyDates
Resultatsættet har tre kolonner. Den første kolonne er dato og klokkeslæt, den anden kolonne er året, og den tredje kolonne er UTC-forskydningen i minutter. I følgende række vises eksempeldata:
2008-07-01 06:05:07 2008 480
Du kan få flere oplysninger om SQL Server-databasedatatyper under Datatyper (Transact-SQL) og Datatyper og funktioner for dato og klokkeslæt (Transact-SQL).
Du kan få flere oplysninger om SQL Server Analysis Services-datatyper under Datatyper i Analysis Services.