Power Query, benutzerdefinierte Funktion GetTableOfDateAndDatetime

Flexibles Erstellen einer Datumstabelle mit benutzerdefinierter M Code Funktion.

weitere Datumsfunktionen

Folgenden M Code in eine neue Abfrage kopieren (Funktionsname GetTableOfDateAndDatetime)

--- SCHNIPP ---

let
  fn = (Start as any, End as any, Schritt as number, Einheit as text, DatumUndUhrzeitTrennen as text) as table =>
  let
      TypeStart = GetTypeAsText(Start),
      TypeEnde = GetTypeAsText(End),

      GetTypeAsText = (Value as any) as text =>
        let
           NonNullableType = Type.NonNullable(Value.Type(Value)),
           FindType =
             if Type.Is(NonNullableType, type date) then "date"
             else if Type.Is(NonNullableType, type datetime) then "datetime"
             else error "unbekannter Datentyp"
        in
          FindType,

      //haben beide Parameter den gleichen Datentyp ?
      Output =
       if TypeStart <> TypeEnde then
         Table.FromList({"Eingabe Datumswerte haben unterschiedliche Datentypen!"})
      //ist der Datentyp date oder datetime?
       else if GetTypeAsText(Start) = "unbekannter Datentyp" then
         Table.FromList({"Datumswerte müssen vom Datentyp date oder datetime sein!"})
      //ist Start > End ?
       else if Start > End then
         Table.FromList({"Ende Parameter muß größer sein als Start Parameter!"})
      //ist "Schritt" positiv ?
       else if Schritt < 0 then
         Table.FromList({"Schritt muss eine positive Nummer sein!"})           
       else
          try
             Table.TransformColumnTypes(
               Table.FromList(
                 List.Generate(
                   ()=>Number.From(Start),
                   each _ <= Number.From(End),
                   each _ +
                     (
                       if Einheit = "Tag" then
                         Schritt
                       else if Einheit = "Stunde" then
                         Schritt/24
                       else if Einheit = "Minute" then
                         Schritt/24/60
                       else Schritt/24/60/60
                     )
                 ),
               Splitter.SplitByNothing(), null, null, ExtraValues.Error),
              //{{"Column1", Value.Type(Start)}}
                {{"Column1", if Einheit = "Tag" then type date else type datetime}}
             )
          otherwise Table.FromList({"Error"}),
      OutputSplit =
             if DatumUndUhrzeitTrennen = "ja" then
                 if Einheit <> "Tag" then
                    //Split Date and time
                    Table.RemoveColumns(
                       Table.AddColumn(
                            Table.AddColumn(Output, "Date", each DateTime.Date([Column1]), type date),
                           "Time", each DateTime.Time([Column1]), type time
                       ),{"Column1"}
                    )
                 else
                    Output
             else
                 Output
  in
      OutputSplit,
fnType = type function(
            Start as any,
            Ende as any,
            Schritt as number,
            Einheit as (type text meta [Documentation.AllowedValues =
                   {"Tag", "Stunde", "Minute", "Sekunde"}]),
            DatumUndUhrzeitTrennen  as (type text meta [Documentation.AllowedValues={"ja", "nein"}])
         ) as list meta [
                          Documentation.Name = "GetTableOfDateAndDateTime",
                          Documentation.LongDescription =
                               "Einfaches Erstellen einer Spalte mit date oder datetime Werten,
                                mit jedem positiven Inkrement für Tag-, Stunde-, Minute-
                                oder Sekunde-Level.",
                          Documentation.Author = "Lars Schreiber, www.ssbi-blog.de"
                        ]
in
Value.ReplaceType(fn, fnType)

--- SCHNAPP ---

weiterführende Informationen siehe hier

Kommentare

Beliebte Posts aus diesem Blog

Vergleich mit 2 Bedingungen, INDEX(), VERGLEICH()

Dropdown Liste mit Mehrfachauswahl

nützliche Text Funktionen in Power Query