Share via


การทําความเข้าใจฟังก์ชันของ Power Query M

ในภาษา สูตร Power Query M ฟังก์ชัน จะเป็นการแมปจากชุดของค่าอินพุตไปยังค่าเอาต์พุตเดียว ฟังก์ชันจะถูกเขียนโดยการตั้งชื่อพารามิเตอร์ฟังก์ชันก่อน จากนั้นจึงใส่นิพจน์เพื่อคํานวณผลลัพธ์ของฟังก์ชัน เนื้อความของฟังก์ชันจะต่อหลังสัญลักษณ์ไปเป็น (=>) อีกทางหนึ่งคือ สามารถรวมข้อมูลชนิดไว้บนพารามิเตอร์และค่าผลลัพธ์ของฟังก์ชัน มีการกําหนดและเรียกใช้ฟังก์ชันในเนื้อความของคําสั่ง let พารามิเตอร์และ/หรือค่าผลลัพธ์อาจเป็นทางอ้อมหรือทางอ้อม พารามิเตอร์ทางอ้อมและ/หรือค่าผลลัพธ์คือชนิด ใด ๆ พิมพ์ ใด ๆ คล้ายกับชนิดออบเจ็กต์ในภาษาอื่น ๆ ชนิดทั้งหมดใน M รับมาจากชนิด ใด ๆ

ฟังก์ชัน เป็นค่าเช่นเดียวกับค่าตัวเลขหรือข้อความ และสามารถรวมไว้ในบรรทัดเช่นเดียวกับนิพจน์อื่น ๆ ตัวอย่างต่อไปนี้แสดงฟังก์ชันที่เป็นค่าของตัวแปร เพิ่ม ซึ่งจากนั้นจะถูกเรียกใช้ หรือปฏิบัติการ จากตัวแปรอื่นๆ หลายตัว เมื่อมีการเรียกใช้ฟังก์ชัน ระบบจะระบุชุดของค่าซึ่งถูกแทนที่เชิงตรรกะสําหรับชุดค่าอินพุตที่จําเป็นภายในนิพจน์เนื้อความของฟังก์ชัน

ตัวอย่าง – พารามิเตอร์ทางชัดแจ้งและค่าผลลัพธ์

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 ..." เป็นน้ําตาลทรายไวยากรณ์สําหรับลายเซ็นของฟังก์ชันที่ใช้พารามิเตอร์ _ "(_) => ..."

แต่ละรายการจะมีประโยชน์เมื่อรวมกับตัวดําเนินการค้นหาซึ่งจะใช้ตามค่าเริ่มต้นเป็น _
ตัวอย่างเช่น [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"