Κατανόηση συναρτήσεων Power Query M

Στη γλώσσα τύπων Power Query M, μια συνάρτηση είναι μια αντιστοίχιση από ένα σύνολο τιμών εισόδου σε μία μόνο τιμή εξόδου. Μια συνάρτηση συντάσσεται πρώτα ονομάζοντας τις παραμέτρους της συνάρτησης και, στη συνέχεια, παρέχοντας μια παράσταση για τον υπολογισμό του αποτελέσματος της συνάρτησης. Το σώμα της συνάρτησης ακολουθεί το σύμβολο goes-to (=>). Προαιρετικά, μπορείτε να συμπεριλάβετε πληροφορίες τύπου στις παραμέτρους και την τιμή επιστροφής της συνάρτησης. Μια συνάρτηση ορίζεται και καλείται στο σώμα μιας δήλωσης let . Οι παράμετροι ή/και η τιμή επιστροφής μπορεί να είναι έμμεσες ή ρητές. Οι έμμεσες παράμετροι ή/και η τιμή επιστροφής είναι τύπου any. Ο τύπος any είναι παρόμοιος με έναν τύπο αντικειμένου σε άλλες γλώσσες. Όλοι οι τύποι στην M προέρχονται από τον τύπο any.

Μια συνάρτηση είναι μια τιμή ακριβώς όπως ένας αριθμός ή μια τιμή κειμένου και μπορεί να συμπεριληφθεί εντός γραμμής όπως με κάθε άλλη παράσταση. Το παρακάτω παράδειγμα δείχνει μια συνάρτηση που είναι η τιμή μιας μεταβλητής Add η οποία έπειτα καλείται ή εκτελείται από πολλές άλλες μεταβλητές. Κατά την κλήση μιας συνάρτησης, καθορίζεται ένα σύνολο τιμών, οι οποίες υποκαθίστανται λογικά για το απαιτούμενο σύνολο τιμών εισόδου εντός της παράστασης του σώματος της συνάρτησης.

Παράδειγμα – Ρητές παράμετροι και τιμή επιστροφής

let  
    AddOne = (x as number) as number => x + 1,  
    //additional expression steps  
    CalcAddOne = AddOne(5)  
in  
    CalcAddOne  

Παράδειγμα – Έμμεσες παράμετροι και τιμή επιστροφής

let  
    Add = (x, y) => x + y,  
    AddResults =   
        [  
            OnePlusOne = Add(1, 1),     // equals 2  
            OnePlusTwo = Add(1, 2)      // equals 3  
    ]  
in  
    AddResults  

Εύρεση του πρώτου στοιχείου μιας λίστας που είναι μεγαλύτερη από 5 ή null σε διαφορετική περίπτωση

let  
    FirstGreaterThan5 = (list) =>   
        let   
            GreaterThan5 = List.Select(list, (n) => n> 5),  
            First = List.First(GreaterThan5)  
        in  
            First,  
    Results =   
    [  
            Found    = FirstGreaterThan5({3,7,9}),  // equals 7  
            NotFound = FirstGreaterThan5({1,3,4})   // equals null  
    ]  
in  
    Results  

Οι συναρτήσεις μπορούν να χρησιμοποιηθούν αναδρομικά. Για να αναφέρετε αναδρομικά τη συνάρτηση, ορίστε το πρόθημα στο αναγνωριστικό στο @.

let   
    fact = (num) => if num = 0 then 1 else num * @fact (num-1)   
in   
    fact(5) // equals 120  

Λέξη-κλειδί Each

Η λέξη-κλειδί each χρησιμοποιείται για την εύκολη δημιουργία απλών συναρτήσεων. "each ..." Το είναι συντακτικό ζάχαρη για μια υπογραφή συνάρτησης που λαμβάνει την παράμετρο _ "(_) => ..."

Κάθε στοιχείο είναι χρήσιμο όταν συνδυάζεται με τον τελεστή αναζήτησης, ο οποίος εφαρμόζεται από προεπιλογή στο _
Για παράδειγμα, κάθε [CustomerID] είναι το ίδιο με κάθε _[CustomerID], το οποίο είναι το ίδιο με το (_) => _[CustomerID]

Παράδειγμα – Χρήση καθενός στο φίλτρο γραμμής πίνακα

Table.SelectRows(  
      Table.FromRecords({  
            [CustomerID = 1, Name = "Bob", Phone = "123-4567"],  
            [CustomerID = 2, Name = "Jim", Phone = "987-6543"] ,  
            [CustomerID = 3, Name = "Paul", Phone = "543-7890"] ,  
            [CustomerID = 4, Name = "Ringo", Phone = "232-1550"]  
      }),   
      each [CustomerID] = 2  
)[Name]  
  
// equals "Jim"