Datatyper i uttryck i en sidnumrerad rapport (Power BI Report Builder)
GÄLLER FÖR: Power BI Report Builder Power BI Desktop
Datatyper representerar olika typer av data i en sidnumrerad rapport så att de kan lagras och bearbetas effektivt. Vanliga datatyper är text (kallas även strängar), tal med och utan decimaler, datum och tider samt bilder. Värden i en rapport måste vara en RDL-datatyp (Report Definition Language). Du kan formatera ett värde enligt dina inställningar när du visar det i en rapport. Ett fält som representerar valuta lagras till exempel i rapportdefinitionen som ett flyttalsnummer, men kan visas i olika format beroende på vilken formategenskap du väljer.
Mer information om visningsformat finns i Formatera rapportobjekt (Power BI Report Builder).
Datatyper för rapportdefinitionsspråk (RDL) och CLR-datatyper (Common Language Runtime)
Värden som anges i en RDL-fil måste vara en RDL-datatyp. När rapporten kompileras och bearbetas konverteras RDL-datatyper till CLR-datatyper. I följande tabell visas konverteringen, som är markerad som Standard:
RDL-typ | CLR-typer |
---|---|
String | Standard: Sträng Diagram, GUID, Tidsintervall |
Booleskt | Standard: Boolesk |
Integer | Standard: Int64 Int16, Int32, Uint16, Uint64, Byte, Sbyte |
Datum/tid | Standard: DateTime DateTimeOffset |
Flyttal | Standard: Dubbelt Enkel, decimal |
Binära | Standard: Byte[] |
Variant | Något av ovanstående förutom Byte[] |
VariantArray | Matris med variant |
Serialiserbar | Variant eller typer som har markerats med Serializable eller som implementerar ISerializable. |
Förstå datatyper och skrivuttryck
Det är viktigt att förstå datatyper när du skriver uttryck för att jämföra eller kombinera värden, till exempel när du definierar grupp- eller filteruttryck eller beräknar aggregeringar. Jämförelser och beräkningar är endast giltiga mellan objekt av samma datatyp. Om datatyperna inte matchar måste du uttryckligen konvertera datatypen i rapportobjektet med hjälp av ett uttryck.
I följande lista beskrivs fall då du kan behöva konvertera data till en annan datatyp:
Jämföra värdet för en rapportparameter av en datatyp med ett datauppsättningsfält av en annan datatyp.
Skriva filteruttryck som jämför värden för olika datatyper.
Skriva sorteringsuttryck som kombinerar fält med olika datatyper.
Skriva grupputtryck som kombinerar fält med olika datatyper.
Konvertera ett värde som hämtats från datakällan från en datatyp till en annan datatyp.
Fastställa datatypen för rapportdata
Om du vill fastställa datatypen för ett rapportobjekt kan du skriva ett uttryck som returnerar dess datatyp. Om du till exempel vill visa datatypen för fältet MyField
lägger du till följande uttryck i en tabellcell: =Fields!MyField.Value.GetType().ToString()
. Resultatet visar den CLR-datatyp som används för att representera MyField
, till exempel System.String eller System.DateTime.
Konvertera datauppsättningsfält till en annan datatyp
Du kan också konvertera datauppsättningsfält innan du använder dem i en rapport. I följande lista beskrivs hur du kan konvertera ett befintligt datauppsättningsfält:
Ändra datamängdsfrågan för att lägga till ett nytt frågefält med konverterade data. För relations- eller flerdimensionella datakällor använder detta datakällans resurser för att utföra konverteringen.
Skapa ett beräknat fält baserat på ett befintligt rapportdatauppsättningsfält genom att skriva ett uttryck som konverterar alla data i en resultatuppsättningskolumn till en ny kolumn med en annan datatyp. Följande uttryck konverterar till exempel fältet År från ett heltalsvärde till ett strängvärde:
=CStr(Fields!Year.Value)
. Mer information finns i Add, Edit, Refresh Fields in the Report Data Pane (Power BI Report Builder).Kontrollera om det databehandlingstillägg som du använder innehåller metadata för att hämta förformaterade data. En SQL Server Analysis Services MDX-fråga innehåller till exempel en FORMATTED_VALUE utökad egenskap för kubvärden som redan har formaterats när kuben bearbetas. Mer information finns i Utökade fältegenskaper för en Analysis Services-databas (SSRS).
Förstå parameterdatatyper
Rapportparametrarna måste vara en av fem datatyper: Boolesk, DateTime, Heltal, Flyttal eller Text (kallas även sträng). När en datamängdsfråga innehåller frågeparametrar skapas rapportparametrar automatiskt och länkas till frågeparametrarna. Standarddatatypen för en rapportparameter är Sträng. Om du vill ändra standarddatatypen för en rapportparameter väljer du rätt värde i listrutan Datatyp på sidan Allmänt i dialogrutan Egenskaper för rapportparameter.
Kommentar
Rapportparametrar som är DateTime-datatyper stöder inte millisekunder. Även om du kan skapa en parameter baserat på värden som innehåller millisekunder kan du inte välja ett värde från en listruta med tillgängliga värden som innehåller datum- eller tidsvärden som innehåller millisekunder.
Skriva uttryck som konverterar datatyper eller extraherar delar av data
När du kombinerar text- och datauppsättningsfält med hjälp av sammanlänkningsoperatorn (&), tillhandahåller CLR (Common Language Runtime) vanligtvis standardformat. När du uttryckligen behöver konvertera ett datauppsättningsfält eller en parameter till en viss datatyp måste du använda en CLR-metod eller en Visual Basic-körningsbiblioteksfunktion för att konvertera data.
I följande tabell visas exempel på konvertering av datatyper.
Typ av konvertering | Exempel |
---|---|
DateTime till sträng | =CStr(Fields!Date.Value) |
Sträng till DateTime | =DateTime.Parse(Fields!DateTimeinStringFormat.Value) |
Sträng till DateTimeOffset | =DateTimeOffset.Parse(Fields!DateTimeOffsetinStringFormat.Value) |
Extrahera året | =Year(Fields!TimeinStringFormat.Value) -- or -- =Year(Fields!TimeinDateTimeFormat.Value) |
Booleskt till heltal | =CInt(Parameters!BooleanField.Value) -1 är Sant och 0 är Falskt. |
Booleskt till heltal | =System.Convert.ToInt32(Fields!BooleanFormat.Value) 1 är Sant och 0 är Falskt. |
Bara DateTime-delen av ett DateTimeOffset-värde | =Fields!MyDatetimeOffset.Value.DateTime |
Bara förskjutningsdelen av ett DateTimeOffset-värde | =Fields!MyDatetimeOffset.Value.Offset |
Du kan också använda funktionen Format för att styra visningsformatet för värdet. Mer information finns i Functions (Visual Basic).
Avancerade exempel
När du ansluter till en datakälla med en dataprovider som inte tillhandahåller konverteringsstöd för alla datatyper i datakällan är standarddatatypen för datakälltyper som inte stöds Sträng. I följande exempel finns lösningar på specifika datatyper som returneras som en sträng.
Sammanfoga en sträng och en CLR DateTimeOffset-datatyp
För de flesta datatyper tillhandahåller CLR standardkonverteringar så att du kan sammanfoga värden som är olika datatyper i en sträng med hjälp av operatorn &. Följande uttryck sammanfogar till exempel texten "Datum och tid är: " med ett datauppsättningsfält StartDate, vilket är ett DateTime värde: ="The date and time are: " & Fields!StartDate.Value
.
För vissa datatyper kan du behöva inkludera funktionen ToString. Följande uttryck visar till exempel samma exempel med hjälp av CLR-datatypen DateTimeOffset, som inkluderar datum, tid och en tidszonsförskjutning i förhållande till UTC-tidszonen: ="The time is: " & Fields!StartDate.Value.ToString()
.
Konvertera en strängdatatyp till en CLR DateTime-datatyp
Om ett databehandlingstillägg inte stöder alla datatyper som definierats i en datakälla kan data hämtas som text. Ett datetimeoffset(7) datatypsvärde kan till exempel hämtas som en strängdatatyp. I Perth, Australien, skulle strängvärdet för 1 juli 2008, kl. 06:05:07.99999999 a.M. likna:
2008-07-01 06:05:07.9999999 +08:00
Det här exemplet visar datumet (1 juli 2008), följt av tiden till en 7-siffrig precision (6:05:07.999999999 E.M.), följt av en UTC-tidszonsförskjutning i timmar och minuter (plus 8 timmar, 0 minuter). I följande exempel har det här värdet placerats i ett strängfält med namnet MyDateTime.Value
.
Du kan använda någon av följande strategier för att konvertera dessa data till ett eller flera CLR-värden:
I en textruta använder du ett uttryck för att extrahera delar av strängen. Till exempel:
Följande uttryck extraherar bara timdelen av UTC-tidszonsförskjutningen och konverterar den till minuter:
=CInt(Fields!MyDateTime.Value.Substring(Fields!MyDateTime.Value.Length-5,2)) * 60
Resultatet är
480
.Följande uttryck konverterar strängen till ett datum- och tidsvärde:
=DateTime.Parse(Fields!MyDateTime.Value)
Om strängen
MyDateTime.Value
har en UTC-förskjutningDateTime.Parse
justeras funktionen först för UTC-förskjutningen (07.00 – [+08:00
] till UTC-tiden 23.00 kvällen innan). FunktionenDateTime.Parse
tillämpar sedan utc-förskjutningen för den lokala rapportservern och justerar vid behov tiden igen för sommartid. I Redmond, Washington, är[-07:00]
till exempel den lokala tidsförskjutningen justerad för sommartid , eller 7 timmar tidigare än 23:00. Resultatet är följande DateTime-värde :2007-07-06 04:07:07 PM
(6 juli 2007 kl. 16:07).
Mer information om hur du konverterar strängar till DateTime-datatyper finns i Parsa datum- och tidssträngar, formatera datum och tid för en specifik kultur och välja mellan DateTime, DateTimeOffset och TimeZoneInfo.
Lägg till ett nytt beräknat fält i rapportdatauppsättningen som använder ett uttryck för att extrahera delar av strängen. Mer information finns i Add, Edit, Refresh Fields in the Report Data Pane (Power BI Report Builder).
Ändra rapportens datauppsättningsfråga så att transact-SQL-funktioner används för att extrahera datum- och tidsvärdena oberoende av varandra för att skapa separata kolumner. I följande exempel visas hur du använder funktionen DatePart för att lägga till en kolumn för året och en kolumn för UTC-tidszonen som konverterats till minuter:
SELECT
MyDateTime,
DATEPART(year, MyDateTime) AS Year,
DATEPART(tz, MyDateTime) AS OffsetinMinutes
FROM MyDates
Resultatuppsättningen har tre kolumner. Den första kolumnen är datum och tid, den andra kolumnen är året och den tredje kolumnen är UTC-förskjutningen i minuter. Följande rad visar exempeldata:
2008-07-01 06:05:07 2008 480
Mer information om SQL Server-databasdatatyper finns i Datatyper (Transact-SQL) och Datatyper och funktioner för datum och tid (Transact-SQL).
Mer information om SQL Server Analysis Services-datatyper finns i Datatyper i Analysis Services.