หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
ฟังก์ชันที่ผู้ใช้กําหนดเอง (UDF) นิพจน์การวิเคราะห์ข้อมูล (DAX) ช่วยให้คุณสามารถจัดแพคเกจตรรกะ DAX ที่มีพารามิเตอร์และนํากลับมาใช้ใหม่ได้ในแบบจําลองของคุณ แทนที่จะทําซ้ําสูตรในหน่วยวัด คอลัมน์จากการคํานวณ และวิชวล UDF จะนําความยืดหยุ่นของรูปแบบการเขียนโปรแกรมมาสู่แบบจําลองความหมายของคุณ ซึ่งช่วยให้คุณสามารถกําหนดฟังก์ชันเพียงครั้งเดียวและใช้ได้ทุกที่ที่รองรับ DAX
โดยทั่วไปแล้ว DAX UDF จะพร้อมใช้งานใน Power BI Desktop และบริการของ Power BI โดยเริ่มจากรุ่นเดือนมิถุนายน 2026 เมื่อต้องการเรียนรู้เพิ่มเติม โปรดดู ฟังก์ชันที่ผู้ใช้กําหนดเองของ DAX
เหตุใดจึงต้องใช้ฟังก์ชันที่ผู้ใช้กําหนด
- การนํากลับมาใช้ใหม่และความสม่ําเสมอ: กําหนดการคํานวณเพียงครั้งเดียวและนํากลับมาใช้ใหม่ได้ทุกที่
- ความสามารถในการบํารุงรักษา: อัปเดตตรรกะในที่เดียวเพื่อแก้ไขหรือพัฒนากฎ
- การเขียนที่ปลอดภัยยิ่งขึ้น: คําแนะนําประเภทเสริมและตัวช่วยตรวจสอบประเภทรองรับโค้ดที่คาดเดาได้และทนต่อข้อผิดพลาด
- ออบเจ็กต์โมเดลระดับเฟิร์สคลาส: UDF อยู่ในโมเดลและสามารถดูได้ใน Model Explorer
กําหนดฟังก์ชัน
คุณสามารถกําหนดฟังก์ชันที่ผู้ใช้กําหนดเองใน Power BI Desktop โดยใช้มุมมองคิวรี DAX (DQV) หรือมุมมอง TMDL
ไวยากรณ์ทั่วไป
ไวยากรณ์ทั่วไปสําหรับ UDF คือ:
/// Optional description above the function
/// @param {ParameterType} ParameterName - ParameterDescription
/// ...
/// @returns Return description
FUNCTION <FunctionName> = ( [<ParameterName> [: [<ParameterType>] [<ParameterSubtype>] [<ParameterPassingMode>]] [= <DefaultExpression>], ...] ) => <FunctionBody>
ตัวอย่าง: ฟังก์ชันภาษีอย่างง่าย
นี่คือตัวอย่างง่ายๆ ใน DQV ที่เพิ่มภาษีในจํานวนเงินที่กําหนด คุณยังสามารถประเมิน UDF ใน DQV ได้อีกด้วย
DEFINE
/// AddTax takes in amount and returns amount including tax
FUNCTION AddTax = (
amount : NUMERIC
) =>
amount * 1.1
EVALUATE
{ AddTax ( 10 ) }
// Returns 11
หลังจากกําหนด UDF แล้ว คุณสามารถอัปเดตโมเดลหรือใช้เลนส์โค้ดเพื่อเพิ่มฟังก์ชันให้กับโมเดลของคุณได้
ตัวอย่างเดียวกันนี้สามารถสร้างขึ้นในมุมมอง TMDL
createOrReplace
/// AddTax takes in amount and returns amount including tax
function AddTax = (amount : NUMERIC) => amount * 1.1
หลังจากกําหนด UDF แล้ว คุณสามารถใช้การเปลี่ยนแปลงเพื่อเพิ่มฟังก์ชันให้กับโมเดลของคุณได้
จัดการฟังก์ชันที่ผู้ใช้กําหนดเอง
เมื่อกําหนดและเพิ่มลงในโมเดลแล้ว คุณสามารถดูและจัดการฟังก์ชันที่ผู้ใช้กําหนดทั้งหมดได้จาก Model explorer ภายใต้โหนด ฟังก์ชัน
ใน มุมมองคิวรี DAX (DQV) คุณสามารถใช้ คิวรีด่วน ผ่านตัวสํารวจแบบจําลองเพื่อกําหนดและประเมินฟังก์ชันได้อย่างง่ายดาย
ใน มุมมอง TMDL คุณสามารถ ลากและวาง ฟังก์ชันลงในพื้นที่ทํางาน หรือใช้ สคริปต์ TMDL เพื่อ ผ่านตัวสํารวจแบบจําลอง
หากใช้ Power BI Project ฟังก์ชันจะถูกเก็บไว้ใน functions.tmdl ภายในโฟลเดอร์ definition
ใช้ฟังก์ชันที่ผู้ใช้กําหนดเอง
หลังจากเพิ่ม UDF ลงในแบบจําลองแล้ว คุณสามารถใช้ได้ทุกที่ที่รองรับ DAX ที่นี่เราใช้ AddTax เป็นตัวอย่าง
ใช้ UDF ที่มีบริบทตัวกรองเต็มรูปแบบพร้อมหน่วยวัด
Total Sales with Tax = AddTax ( [Total Sales] )
ใช้ UDF กับทุกแถวในตารางที่มีคอลัมน์จากการคํานวณ
Sales Amount with Tax = CONVERT ( AddTax ( 'Sales'[Sales Amount] ), CURRENCY )
ใช้ UDF โดยตรงในวิชวลด้วยการคํานวณด้วยภาพ
Sales Amount with Tax = AddTax ( [Sales Amount] )
ซ้อน UDF สําหรับสถานการณ์ขั้นสูง
DEFINE
/// AddTax takes in amount and returns amount including tax
FUNCTION AddTax = (
amount : NUMERIC
) =>
amount * 1.1
FUNCTION AddTaxAndDiscount = (
amount : NUMERIC,
discount : NUMERIC
) =>
AddTax ( amount - discount )
EVALUATE
{ AddTaxAndDiscount ( 10, 2 ) }
// Returns 8.8
พารามิเตอร์
DAX UDF สนับสนุนพารามิเตอร์เป็นศูนย์หรือมากกว่า เพื่อให้ฟังก์ชันของคุณปลอดภัยและคาดเดาได้มากขึ้น คุณสามารถเลือกระบุคําแนะนําประเภทพารามิเตอร์ได้ดังนี้
-
ชนิด: ชนิดของค่าที่พารามิเตอร์ยอมรับ (
AnyVal,Scalar,Table,AnyRef,CalendarRef,ColumnRefMeasureRef, หรือTableRef) -
ชนิดย่อย (สําหรับชนิดสเกลาร์เท่านั้น): ชนิดข้อมูลสเกลาเฉพาะ (
Variant, ,Int64,DecimalDouble,StringDateTimeBooleanหรือ )Numeric -
ParameterMode: เมื่อมีการประเมินอาร์กิวเมนต์ (
valสําหรับกระตือรือร้นหรือexprขี้เกียจ)
คําแนะนําประเภทเป็นไปตามแบบฟอร์ม: [type] [subtype] [parameterMode]
ตัวอย่าง: การแคสต์ประเภท
DEFINE
/// returns x cast to an Int64
FUNCTION CastToInt = (
x : SCALAR INT64 VAL
) =>
x
EVALUATE
{ CastToInt ( 3.4 ), CastToInt ( 3.5 ), CastToInt ( "5" ) }
// returns 3, 4, 5
ตัวอย่างนี้ใช้ Scalar ชนิด Int64 ชนิดย่อย และ val parameterMode คุณยังสามารถบรรลุเอฟเฟกต์เดียวกันได้โดยการรวม Int64 ประเภทย่อยตามที่เห็นในตัวอย่างด้านล่าง สตริงที่ไม่ใช่ตัวเลขส่งผลให้เกิดข้อผิดพลาด
DEFINE
/// returns x as an Int64
FUNCTION CastToInt = (
x : INT64
) =>
x
EVALUATE
{ CastToInt ( 3.4 ), CastToInt ( 3.5 ), CastToInt ( "5" ) }
// returns 3, 4, 5
การตรวจสอบประเภท
ตรวจสอบความถูกต้องของชนิดพารามิเตอร์ภายในฟังก์ชันของคุณโดยใช้ฟังก์ชันการตรวจสอบชนิด DAX ที่มีอยู่แล้วภายใน เช่น:
สําหรับรายการทั้งหมดของฟังก์ชันการตรวจสอบชนิดที่พร้อมใช้งาน โปรดดู ฟังก์ชันที่ผู้ใช้กําหนดเอง DAX
เนื้อหาที่เกี่ยวข้อง
สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ฟังก์ชันที่ผู้ใช้กําหนดเอง โปรดดูแหล่งข้อมูลต่อไปนี้: