Suchst du auch manchmal nach der Definition der Datentypen in der Power Query Skriptsprache M? Ich auch! Daher schreibe ich den Artikel auch für mich selbst. Dann muss ich nicht mehr suchen.

Typsicherheit

Power Query arbeitet typsicher. Das bedeutet, dass jede Variable, Spalte und jeder Parameter einen definierten Datentyp hat. Werden Daten aus einer Datenbank importiert, dann steht der Datentyp meist fest. Das liegt daran, dass die Datenbank selbst mit Datentypen arbeitet und diese Informationen daher mitliefern kann.

Beim Laden von unstrukturierten Quellen, wie CSV oder Textdateien, versucht Power Query die Datentypen der Spalten selbst herauszufinden. Dazu gibt es eine Transformation in Power Query unter Transformieren - Datentyp erkennen. Bei unstrukturierten Quellen legt Power Query diesen Schritt automatisch an.

Primitive Datentypen

Folgende Datentypen stehen dir in Power Query zur Verfügung:

  • null: das ist ein spezieller Datentyp für nichts. Also BLANK() in Power Pivot oder NULL in SQL Datenbanken. null ist nicht 0, sondern nichts - also das Fehlen einer Information.
  • logical: Boolean, also true oder false
  • number: Zahlen
  • time: Informationen über Uhrzeiten
  • date: Datumsinformationen
  • datetime: Datum und Uhrzeit (wie meist von Datenbanken übermittelt)
  • datetimezone: Datum mit Uhrzeit und Zeitzoneninfo 
  • duration: Dauer – beispielsweise aus der Differenz zweier datetime Informationen
  • text: beliebiger Text
  • binary: Binäre Informationen – dazu gehören beispielsweise Bilder oder nicht erkannte Dateiformate
  • type: der Typ selbst ist auch ein Datentyp. Wenn eine Funktion einen Parameter vom Type type will, übergibst du den via Date.Type oder Int64.Type
  • list: Liste - eine Liste unterscheidet sich von Tabellen dadurch, dass eine nur aus einer Spalte bestehen kann die keinen Namen hat
  • record: Darunter versteht man ein Verbund mehrerer Informationen – beispielsweise eine Zeile einer Tabelle
  • table: Tabelle, bestehend aus Zeilen, Spalten und Zeilenüberschriften
  • function: Abfragen können Funktionen zurückgeben. Dafür ist der Datentyp function
  • anynonnull: hier sind alle Werte außer null erlaubt.

any

Dieser Datentyp ist speziell. Wenn man keinen Datentyp angegeben hat gilt automatisch any als Datentyp. Einer Variable vom Typ any kann man Werte aller Datentypen zuweisen,

nullable

Bei Funktionen in Power Query übergibt man Parameter. Ist kein Datentyp angegeben wird automatisch any angenommen. Bei folgender Funktion ist x vom Typ any, y vom Typ text (die Funktion gibt immer “nothing” zurück ist also nicht wirklich sinnvoll):

Der Dialog des Aufrufs sieht wie folgt aus:

Power Query Funktionsdialog - text ist nicht optional

Dadurch, dass x vom Typ any ist, kann auch null, also nichts übergeben werden. Damit ist der Parameter optional. Anders verhält sich y. Hier muss ein Wert übergeben werden. Möchte man den Text aber ebenfalls optional machen, wird dem Datentyp ein nullable vorangestellt:

Jetzt ist y ebenfalls optional:

Power Query Funktionsdialog - text ist jetzt optional

Int32.Type, Int64.Type, Currency.Type

Der Datentyp ist immer number. Intern wird mit einem Double (64bit) oder einem Decimal (128bit!) gearbeitet. Bei einfachen arithmetischen Funktionen, wie +,-,/,* wird immer ein Double angenommen. Mit Hilfe der Funktionen

  • Value.Add
  • Value.Subtract
  • Value.Multiply
  • Value.Divide

kann diese Precision explicit übergeben werden. Wenn du ein Beispiel dafür hast, wo du das brauchst, bin ich (ernsthaft!) interessiert daran. Schreib mir!

Format versus Datentyp

Immer wieder stoße ich auf die Frage, ob das Datum denn jetzt dd.MM.yyyy oder yyyy/dd/mm abgelegt ist. Oder ob bei Zahlen als Tausender-Trennzeichen Apostroph (liebe Schweizer...) oder Punkt verwendet werden soll. 

Antwort: Das ist nur eine Frage der Anzeige, nicht der internen Datenspeicherung!

Die Zahl 1.000,98 wird intern nicht mit Punkt oder Komma abgelegt. Sondern nur die Info, dass vor dem Komma 1000 steht und hinter dem Komma 98. Und später, für die Ausgabe, wird dann festgelegt, ob Punkt, Komma oder Apostroph als Tausender-Trennzeichen verwendet wird. Damit kann man die Zahl für Amerikaner, Deutsche oder Schweizer formatieren.

Das gleiche gilt für das Datum. Intern wird eine Zahl abgelegt, die die Tage seit dem 1.1.0001 zählt. Wie diese Zahl nachher an der Oberfläche formatiert wird, ist eine völlig andere Fragestellung und hat mit dem Datentyp nichts zu tun!

Fun Fact: Die größte Zahl in des Datentyps date ist 3.652.058 und entspricht damit dem 31.12.9999. Wenn wir da immer noch mit Power Query arbeiten sind wir nicht voran gekommen Winking smile

Du brauchst Unterstützung in Power Query?

Power Query ist super. Power Query kann man mit reinem Excel, mit Excel Power Pivot, Power BI, SSIS (Integration Services) und mittlerweile auch Microsoft Flow verwenden. Mehr Anwendungen werden hinzukommen.

In unseren Trainings ist Power Query immer integraler Bestandteil. Auf Wunsch gehen wir auch tiefer in das Werkzeug und die Abfragesprache ein.

Interesse? Schreib uns eine E-Mail oder ruf uns doch direkt an!