Dela via


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 MyFieldlä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 Datatypsidan 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örskjutning DateTime.Parse justeras funktionen först för UTC-förskjutningen (07.00 – [+08:00] till UTC-tiden 23.00 kvällen innan). Funktionen DateTime.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.