แชร์ผ่าน


ฟังก์ชัน With

ใช้กับ: แอปพื้นที่ทำงาน โฟลว์เดสก์ท็อป แอปแบบจำลอง Power Platform CLI

คำนวณค่าและดำเนินการสำหรับ เรกคอร์ด เดียว รวมถึงเรกคอร์ดแบบอินไลน์ของค่าที่มีชื่อ

คำอธิบาย

ฟังก์ชัน With ประเมินสูตรสำหรับเรกคอร์ดเดียว สูตรสามารถคำนวณค่าและ/หรือทำการดำเนินการ เช่น การปรับเปลี่ยนข้อมูล หรือการทำงานกับการเชื่อมต่อ ใช้ ฟังก์ชัน ForAll เพื่อประเมินสูตรสำหรับเรกคอร์ดทั้งหมดในตารางของเรกคอร์ด

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

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

ใช้ With เพื่อเข้าถึงฟิลด์ของเรกคอร์ดที่ส่งกลับโดยฟังก์ชันต่างๆ เช่น Patch หรือ Match With เก็บค่าจากฟังก์ชันเหล่านี้นานพอที่จะใช้ในการคำนวณหรือการดำเนินการเพิ่มเติม

หากอาร์กิวเมนต์ เรกคอร์ด กับ With เป็นข้อผิดพลาด ข้อผิดพลาดนั้นจะถูกส่งกลับโดยฟังก์ชัน และ สูตร จะไม่ได้รับการประเมิน

ไวยากรณ์

With( เรกคอร์ด, สูตร )

  • เรกคอร์ด – จำเป็น เรกคอร์ดที่จะดำเนินการ สำหรับค่าของชื่อ ให้ใช้ไวยากรณ์อินไลน์ { name1: value1, name2: value2, ... }
  • สูตร – จำเป็น สูตรในการประเมินสำหรับ เรกคอร์ด สูตรสามารถอ้างอิงฟิลด์ใดก็ได้ของ เรกคอร์ด โดยตรงเป็นขอบเขตของเรกคอร์ด

ตัวอย่าง

ค่าที่กำหนดชื่อง่ายๆ

With( { radius: 10,
        height: 15 },
    Pi() * (radius*radius) * height
)
// Result: 4712.38898038 (as shown in a label control)

ตัวอย่างนี้ใช้เรกคอร์ดของค่าที่กำหนดชื่อ เพื่อคำนวณปริมาตรของทรงกระบอก With กำลังใช้เพื่อบันทึกค่าการป้อนข้อมูลทั้งหมดเข้าด้วยกัน ทำให้ง่ายต่อการแยกออกจากการคำนวณเอง

With ซ้อนกัน

เครื่องคิดเลขดอกเบี้ยใช้ฟังก์ชัน With

With( { AnnualRate: RateSlider/8/100,        // slider moves in 1/8th increments and convert to decimal
        Amount: AmountSlider*10000,          // slider moves by 10,000 increment
        Years: YearsSlider,                  // slider moves in single year increments, no adjustment required
        AnnualPayments: 12 },                // number of payments per year
      With( { r: AnnualRate/AnnualPayments,  // interest rate
              P: Amount,                     // loan amount
              n: Years*AnnualPayments },     // number of payments
            r*P / (1 - (1+r)^-n)             // standard interest calculation
      )
)

ตัวอย่างนี้ซ้อนฟังก์ชัน With เพื่อสร้างการคำนวณสองชั้นสำหรับ การชำระเงินจำนองรายเดือน ตราบใดที่ไม่มีความขัดแย้ง ค่าที่กำหนดชื่อ With ภายนอกทั้งหมดมีอยู่ภายใน With ด้านใน

เนื่องจากตัวควบคุมแถบเลื่อนสามารถเลื่อนได้ทีละหนึ่งเท่านั้น ตัวเลื่อนจะถูกแบ่งหรือคูณเพื่อสร้างส่วนเพิ่มที่กำหนดเองอย่างมีประสิทธิภาพ ในกรณีของอัตราดอกเบี้ย RateSlider มีคุณสมบัติ Max ตั้งค่าเป็น 48 หารด้วย 8 สำหรับการเพิ่มจุดร้อยละ 1/8 และหารด้วย 100 เพื่อแปลงจากเปอร์เซ็นต์เป็นทศนิยม ครอบคลุมช่วง 0.125% ถึง 6% ในกรณีของจำนวนเงินกู้ AmountSlider มีคุณสมบัติ Max ตั้งค่าเป็น 60 และคูณด้วย 10,000 ครอบคลุมช่วง 10,000 ถึง 600,000

With จะถูกคำนวณใหม่โดยอัตโนมัติ เมื่อตัวเลื่อนเลื่อน และแสดงการชำระคืนเงินกู้ใหม่ ไม่มีการใช้ตัวแปร และไม่จำเป็นต้องใช้คุณสมบัติ OnChange ของตัวควบคุมแถบเลื่อน

นี่คือคำแนะนำโดยละเอียดสำหรับการสร้างแอปนี้:

  1. สร้างแอปใหม่
  2. เพิ่ม ตัวควบคุม แถบเลื่อน และตั้งชื่อว่า RateSlider ตั้งค่าคุณสมบัติ Max เป็น 48
  3. เพิ่ม ตัวควบคุม ป้ายชื่อ ไปทางด้านซ้ายของตัวควบคุมแถบเลื่อน ตั้งค่าคุณสมบัติ Text ไปยัง "อัตราดอกเบี้ย:"
  4. เพิ่มตัวควบคุม Label ไปทางด้านขวาของตัวควบคุมแถบเลื่อน ตั้งค่าคุณสมบัติ Text ในสูตร RateSlider/8 & " %"
  5. เพิ่มตัวควบคุม Slider อื่น และตั้งชื่อว่า AmountSlider ตั้งค่าคุณสมบัติ Max เป็น 60
  6. เพิ่มตัวควบคุม ป้ายชื่อ ไปทางด้านซ้ายของตัวควบคุมแถบเลื่อนนี้ ตั้งค่าคุณสมบัติ Text ไปยัง "จำนวนเงินกู้:"
  7. เพิ่มตัวควบคุม ป้ายชื่อ ไปทางด้านขวาของตัวควบคุมแถบเลื่อนนี้ ตั้งค่าคุณสมบัติ Text ในสูตร AmountSlider/8 * 10000
  8. เพิ่มตัวควบคุม แถบเลื่อน อื่น และตั้งชื่อว่า YearsSlider ตั้งค่าคุณสมบัติ Max เป็น 40
  9. เพิ่มตัวควบคุม ป้ายชื่อ ไปทางด้านซ้ายของตัวควบคุมแถบเลื่อนนี้ ตั้งค่าคุณสมบัติ Text ไปยัง "จำนวนปี:"
  10. เพิ่มตัวควบคุม ป้ายชื่อ ไปทางด้านขวาของตัวควบคุมแถบเลื่อนนี้ ตั้งค่าคุณสมบัติ Text ในสูตร YearsSlider
  11. เพิ่มตัวควบคุม ป้ายชื่อ แล้วตั้งค่าคุณสมับติ Text เป็นสูตรที่แสดงข้างต้น:
  12. เพิ่มตัวควบคุม ป้ายชื่อ ไปทางด้านซ้ายของตัวควบคุมป้ายชื่อสุดท้าย ตั้งค่าคุณสมบัติ Text ไปยัง "การชำระเงินรายเดือนที่เกิดขึ้น:"

คีย์หลักส่งกลับจาก Patch

With( Patch( Orders, Defaults( Orders ), { OrderStatus: "New" } ),
      ForAll( NewOrderDetails,
              Patch( OrderDetails, Defaults( OrderDetails ),
                     { Order: OrderID,          // from With's first argument, primary key of Patch result
                       Quantity: Quantity,      // from ForAll's NewOrderDetails table
                       ProductID: ProductID }   // from ForAll's NewOrderDetails table
              )
      )
)

ตัวอย่างนี้เพิ่มเรกคอร์ดไปที่ตาราง ใบสั่ง ใน SQL Server จากนั้นใช้คีย์หลักที่ส่งกลับสำหรับใบสั่ง ส่งกลับโดยฟังก์ชัน Patch ในฟิลด์ OrderID เพื่อสร้างเรกคอร์ดที่เกี่ยวข้องในตาราง OrderDetails

ค่าที่แยกด้วยนิพจน์ทั่วไป

With(
    Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
    Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
// Result: 2:01 AM (as shown in a label control, use the Text function to see the seconds)

ตัวอย่างนี้แยกชั่วโมง นาที และวินาทีจากค่าระยะเวลา ISO 8601 แล้วใช้การจับคู่ย่อยเหล่านี้เพื่อสร้างค่า วันที่/เวลา

โปรดทราบว่าแม้ว่าการจับคู่ย่อยจะมีตัวเลข แต่ยังคงอยู่ในสตริงของข้อความ ใช้ฟังก์ชัน Value แปลงเป็นตัวเลขก่อนดำเนินการทางคณิตศาสตร์

แมปเรกคอร์ดในส่วนประกอบ

ดูที่ แมปเรกคอร์ด