ตัวอย่างนิพจน์ในตัวสร้างรายงานใน Power BI
นําไปใช้กับ: Power BI Report Builder
Power BI Desktop
นิพจน์จะถูกนํามาใช้บ่อยในตัวสร้างรายงานที่มีการแบ่งหน้าของ Power BI เพื่อควบคุมเนื้อหาและลักษณะที่ปรากฏของรายงาน นิพจน์จะถูกเขียนขึ้นใน Microsoft Visual Basic และสามารถใช้ฟังก์ชันที่มีอยู่ภายใน รหัสที่กําหนดเอง รายงานและตัวแปรกลุ่ม และตัวแปรที่ผู้ใช้กําหนดเองได้ นิพจน์เริ่มต้นด้วยเครื่องหมายเท่ากับ (=)
บทความนี้แสดงตัวอย่างของนิพจน์ที่สามารถใช้สําหรับงานทั่วไปในรายงาน
ฟังก์ชัน Visual Basic: ตัวอย่างสําหรับวันที่ สตริง การแปลง และฟังก์ชัน Visual Basic แบบมีเงื่อนไข
ฟังก์ชันรายงาน: ตัวอย่างสําหรับการรวมและฟังก์ชันรายงานที่มีอยู่ภายในอื่น ๆ
ลักษณะของข้อมูลรายงาน: ตัวอย่างสําหรับการเปลี่ยนแปลงลักษณะที่ปรากฏของรายงาน
คุณสมบัติ: ตัวอย่างสําหรับการตั้งค่าคุณสมบัติหน่วยข้อมูลของรายงานเป็นรูปแบบการควบคุมหรือการมองเห็น
พารามิเตอร์: ตัวอย่างสําหรับการใช้พารามิเตอร์ในนิพจน์
รหัสที่กําหนดเอง: ตัวอย่างของรหัสที่กําหนดเองแบบฝังตัว
สําหรับข้อมูลเพิ่มเติมเกี่ยวกับนิพจน์ธรรมดาและรูปแบบซับซ้อนได้ ซึ่งคุณสามารถใช้นิพจน์และชนิดของการอ้างอิงที่คุณสามารถรวมไว้ในนิพจน์ได้ โปรดดู นิพจน์ในตัวสร้างรายงาน Power BI
ฟังก์ชัน
นิพจน์หลายรายการในรายงานมีฟังก์ชันต่าง ๆ คุณสามารถจัดรูปแบบข้อมูล นําตรรกะไปใช้ และเข้าถึงรายงานเมตาดาต้าได้โดยใช้ฟังก์ชันเหล่านี้ คุณสามารถเขียนนิพจน์ที่ใช้ฟังก์ชันจากไลบรารีรันไทม์ Microsoft Visual Basic และจาก xref:System.Convert
และ xref:System.Math
namespace ได้ คุณสามารถเพิ่มการอ้างอิงไปยังฟังก์ชันในรหัสที่กําหนดเองได้ คุณยังสามารถใช้คลาสจาก Microsoft .NET Framework รวมถึงxref:System.Text.RegularExpressions
ฟังก์ชัน Visual Basic
คุณสามารถใช้ฟังก์ชัน Visual Basic เพื่อจัดการข้อมูลที่แสดงในกล่องข้อความ หรือใช้สําหรับพารามิเตอร์ คุณสมบัติ หรือพื้นที่อื่นๆ ของรายงานได้ ส่วนนี้มีตัวอย่างที่แสดงให้เห็นถึงฟังก์ชันบางอย่างเหล่านี้ สําหรับข้อมูลเพิ่มเติม ให้ดู สมาชิก ไลบรารีรันไทม์ Visual Basic บน MSDN
.NET Framework มีตัวเลือกรูปแบบที่กําหนดเองมากมาย ตัวอย่างเช่น สําหรับรูปแบบวันที่เฉพาะ สําหรับข้อมูลเพิ่มเติม ดู ที่ชนิดของการจัดรูปแบบ
ฟังก์ชันทางคณิตศาสตร์
ฟังก์ชัน Round มีประโยชน์ในการปัดตัวเลขเป็นจํานวนเต็มที่ใกล้ที่สุด นิพจน์ต่อไปนี้ปัด 1.3 เป็น 1:
=Round(1.3)
คุณยังสามารถเขียนนิพจน์เพื่อปัดค่าเป็นตัวคูณที่คุณระบุ คล้ายกับ ฟังก์ชัน MRound ใน Excel คูณค่าโดยใช้ตัวคูณที่สร้างจํานวนเต็ม ปัดเศษตัวเลข แล้วหารด้วยตัวคูณเดียวกัน ตัวอย่างเช่น หากต้องการปัด 1.3 เป็นผลคูณที่ใกล้เคียงที่สุดของ 0.2 ซึ่งเท่ากับ 1.4 ให้ใช้นิพจน์ต่อไปนี้:
=Round(1.3*5)/5
ฟังก์ชันวันที่
ฟังก์ชัน Today มีวันที่ปัจจุบัน นิพจน์นี้สามารถใช้ในกล่องข้อความเพื่อแสดงวันที่ในรายงาน หรือในพารามิเตอร์เพื่อกรองข้อมูลตามวันที่ปัจจุบัน
=Today()
ใช้ฟังก์ชัน DateInterval เพื่อดึงส่วนที่เฉพาะเจาะจงของวันที่ออก ต่อไปนี้คือพารามิเตอร์ DateInterval ที่ถูกต้องบางตัว:
- DateInterval.Second
- DateInterval.Minute
- DateInterval.Hour
- DateInterval.Weekday
- DateInterval.Day
- DateInterval.DayOfYear
- DateInterval.WeekOfYear
- DateInterval.Month
- DateInterval.Quarter
- DateInterval.Year
ตัวอย่างเช่น นิพจน์นี้จะแสดงหมายเลขของสัปดาห์ในปีปัจจุบันสําหรับวันที่วันนี้:
=DatePart(DateInterval.WeekOfYear, today())
ฟังก์ชัน DateAdd มีประโยชน์สําหรับการจัดช่วงวันที่ตามพารามิเตอร์เดียว นิพจน์ต่อไปนี้มีวันที่หกเดือนหลังจากวันที่จากพารามิเตอร์ที่มีชื่อว่า StartDate
=DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)
ฟังก์ชัน Year แสดงปีสําหรับวันที่ที่เฉพาะเจาะจง คุณสามารถจัดกลุ่มวันที่เข้าด้วยกันหรือเพื่อแสดงปีเป็นป้ายชื่อสําหรับชุดของวันที่ได้ นิพจน์นี้มีปีสําหรับกลุ่มที่กําหนดของวันที่ในใบสั่งขาย ฟังก์ชัน Month และฟังก์ชันอื่น ๆ ยังสามารถใช้เพื่อจัดการวันที่ได้ สําหรับข้อมูลเพิ่มเติม ให้ดูคู่มือ Visual Basic
=Year(Fields!OrderDate.Value)
คุณสามารถรวมฟังก์ชันในนิพจน์เพื่อกําหนดรูปแบบได้ นิพจน์ต่อไปนี้จะเปลี่ยนแปลงรูปแบบของวันที่ในฟอร์มเดือน-วัน-ปี เป็นเดือน-สัปดาห์-หมายเลขสัปดาห์ ตัวอย่างเช่น เปลี่ยน "12/18/2022" เป็น "สัปดาห์ที่ 3 ของเดือนธันวาคม":
=Format(Fields!MyDate.Value, "MMMM") & " Week " & (Int(DateDiff("d", DateSerial(Year(Fields!MyDate.Value), Month(Fields!MyDate.Value),1), Fields!FullDateAlternateKey.Value)/7)+1).ToString
เมื่อใช้เป็นเขตข้อมูลจากการคํานวณในชุดข้อมูล คุณสามารถใช้นิพจน์นี้บนแผนภูมิเพื่อรวมค่าตามสัปดาห์ภายในแต่ละเดือนได้
นิพจน์ต่อไปนี้จัดรูปแบบค่า SellStartDate เป็น MMM-yyy เขตข้อมูล SellStartDate เป็นชนิดข้อมูลวันที่เวลา
=FORMAT(Fields!SellStartDate.Value, "MMM-yy")
นิพจน์ต่อไปนี้จัดรูปแบบค่า SellStartDate เป็น วว/ดด/ปปปป เขตข้อมูล SellStartDate เป็นชนิดข้อมูลวันที่เวลา
=FORMAT(Fields!SellStartDate.Value, "dd/MM/yyyy")
ฟังก์ชัน CDate แปลงค่าเป็นวันที่ ฟังก์ชัน Now ส่งกลับค่าวันที่ที่มีวันที่และเวลาปัจจุบันตามระบบของคุณ DateDiff ส่งกลับค่า Long โดยระบุจํานวนช่วงเวลาระหว่างค่าวันที่สองค่า
ตัวอย่างต่อไปนี้แสดงวันที่เริ่มต้นของปีปัจจุบัน
=DateAdd(DateInterval.Year,DateDiff(DateInterval.Year,CDate("01/01/1900"),Now()),CDate("01/01/1900"))
ตัวอย่างต่อไปนี้แสดงวันที่เริ่มต้นสําหรับเดือนก่อนหน้าตามเดือนปัจจุบัน
=DateAdd(DateInterval.Month,DateDiff(DateInterval.Month,CDate("01/01/1900"),Now())-1,CDate("01/01/1900"))
นิพจน์ต่อไปนี้สร้างช่วงปีระหว่าง SellStartDate และ LastReceiptDate เขตข้อมูลเหล่านี้อยู่ในชุดข้อมูลที่แตกต่างกันสองชุดได้แก่ DataSet1 และ DataSet2
=DATEDIFF("yyyy", First(Fields!SellStartDate.Value, "DataSet1"), First(Fields!LastReceiptDate.Value, "DataSet2"))
ฟังก์ชัน DatePart คืนค่าจํานวนเต็มที่มีคอมโพเนนต์ที่ระบุของค่าวันที่ที่กําหนด นิพจน์ต่อไปนี้แสดงปีสําหรับค่าแรกของ SellStartDate ใน DataSet1 มีการระบุขอบเขตชุดข้อมูลเนื่องจากมีชุดข้อมูลหลายชุดในรายงาน
=Datepart("yyyy", First(Fields!SellStartDate.Value, "DataSet1"))
ฟังก์ชัน DateSerial ส่งกลับ ค่า วันที่ ซึ่งแสดงปี เดือน และวันที่ระบุ พร้อมด้วยข้อมูลเวลาที่ตั้งค่าถึงเที่ยงคืน ตัวอย่างต่อไปนี้แสดงวันที่สิ้นสุดสําหรับเดือนก่อนตามเดือนปัจจุบัน
=DateSerial(Year(Now()), Month(Now()), "1").AddDays(-1)
นิพจน์ต่อไปนี้แสดงวันที่ต่าง ๆ ตามค่าพารามิเตอร์วันที่ที่ผู้ใช้เลือก
คําอธิบายตัวอย่าง | ตัวอย่าง |
---|---|
เมื่อวานนี้ | =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)-1) |
สองวันที่ผ่านมา | =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)-2) |
หนึ่งเดือนที่ผ่านมา | =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value)-1,Day(Parameters!TodaysDate.Value)) |
สองเดือนที่ผ่านมา | =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value)-2,Day(Parameters!TodaysDate.Value)) |
หนึ่งปีที่ผ่านมา | =DateSerial(Year(Parameters!TodaysDate.Value)-1,Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)) |
สองปีที่ผ่านมา | =DateSerial(Year(Parameters!TodaysDate.Value)-2,Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)) |
ฟังก์ชันสตริง
รวมเขตข้อมูลมากกว่าหนึ่งรายการโดยใช้ตัวดําเนินการเรียงต่อกันและค่าคงที่ของ Visual Basic นิพจน์ต่อไปนี้ส่งกลับสองเขตข้อมูล แต่ละเขตข้อมูลอยู่บนบรรทัดที่แยกจากกันในกล่องข้อความเดียวกัน:
=Fields!FirstName.Value & vbCrLf & Fields!LastName.Value
จัดรูปแบบวันที่และตัวเลขในสตริงด้วยฟังก์ชัน Format นิพจน์ต่อไปนี้แสดงค่าของ พารามิเตอร์ StartDate และ EndDate ในรูปแบบวันที่แบบยาว:
=Format(Parameters!StartDate.Value, "D") & " through " & Format(Parameters!EndDate.Value, "D")
ถ้ากล่องข้อความมีเพียงวันที่หรือหมายเลข คุณควรใช้คุณสมบัติรูปแบบของกล่องข้อความเพื่อนําการจัดรูปแบบมาใช้แทน ฟังก์ชัน Format ภายในกล่องข้อความ
ฟังก์ชัน Right, Len และ InStr มีประโยชน์สําหรับการส่งคืนสตริงย่อย ตัวอย่างเช่น การตัดแต่งชื่อผู้ใช้ DOMAIN\ให้เป็นเพียงชื่อผู้ใช้ นิพจน์ต่อไปนี้ส่งกลับส่วนของสตริงทางด้านขวาของอักขระเครื่องหมายทับขวา (\) จากพารามิเตอร์ที่ ชื่อ User:
=Right(Parameters!User.Value, Len(Parameters!User.Value) - InStr(Parameters!User.Value, "\"))
นิพจน์ต่อไปนี้ให้ผลลัพธ์เป็นค่าเดียวกันกับค่าก่อนหน้านี้ โดยใช้สมาชิกคลาส .NET Framework
xref:System.String
แทนฟังก์ชัน Visual Basic:=Parameters!User.Value.Substring(Parameters!User.Value.IndexOf("\")+1, Parameters!User.Value.Length-Parameters!User.Value.IndexOf("\")-1)
แสดงค่าที่เลือกจากพารามิเตอร์ที่มีหลายค่า ตัวอย่างต่อไปนี้ใช้ ฟังก์ชัน Join เพื่อเชื่อมค่าของพารามิเตอร์ MySelection ที่เลือกเข้าด้วยกันเป็นสตริงเดียวที่สามารถตั้งค่าเป็นนิพจน์สําหรับค่าของกล่องข้อความในหน่วยข้อมูลของรายงาน:
= Join(Parameters!MySelection.Value)
ตัวอย่างต่อไปนี้เหมือนกับตัวอย่างก่อนหน้านี้ และแสดงสตริงข้อความก่อนรายการของค่าที่เลือก
="Report for " & JOIN(Parameters!MySelection.Value, " & ")
ฟังก์ชัน Regex จาก .NET Framework
xref:System.Text.RegularExpressions
มีประโยชน์สําหรับการเปลี่ยนแปลงรูปแบบของสตริงที่มีอยู่ ตัวอย่างเช่น การจัดรูปแบบหมายเลขโทรศัพท์ นิพจน์ต่อไปนี้ใช้ ฟังก์ชัน Replace เพื่อเปลี่ยนรูปแบบหมายเลขโทรศัพท์ 10 หลักในเขตข้อมูลจาก "nnn-nnn-nnnn" เป็น "(nnn) nnn-nnnn":=System.Text.RegularExpressions.Regex.Replace(Fields!Phone.Value, "(\d{3})[ -.]*(\d{3})[ -.]*(\d{4})", "($1) $2-$3")
หมายเหตุ
ตรวจสอบว่าค่าสําหรับเขตข้อมูล! Phone.Value ไม่มีช่องว่างเพิ่มเติมและ เป็นชนิด
xref:System.String
การค้นหา
คุณสามารถใช้ฟังก์ชัน Lookup เพื่อดึงค่าจากชุดข้อมูลสําหรับความสัมพันธ์แบบหนึ่งต่อหนึ่ง ตัวอย่างเช่น คู่ค่าคีย์ โดยการระบุเขตข้อมูลหลัก นิพจน์ต่อไปนี้แสดงชื่อผลิตภัณฑ์จากชุดข้อมูล ("ผลิตภัณฑ์") ซึ่งกําหนดตัวระบุผลิตภัณฑ์เพื่อให้ตรงกับ:
=Lookup(Fields!PID.Value, Fields!ProductID.Value, Fields.ProductName.Value, "Product")
LookupSet
คุณสามารถใช้ฟังก์ชัน LookupSet เพื่อดึงชุดของค่าจากชุดข้อมูลสําหรับความสัมพันธ์แบบหนึ่งต่อกลุ่มโดยการระบุเขตข้อมูลหลัก ตัวอย่างเช่น บุคคลหนึ่งสามารถมีหมายเลขโทรศัพท์ได้หลายหมายเลข ในตัวอย่างต่อไปนี้ สมมติว่าชุดข้อมูล PhoneList มีตัวระบุบุคคลและหมายเลขโทรศัพท์ในแต่ละแถว LookupSet ส่งกลับอาร์เรย์ของค่า นิพจน์ต่อไปนี้รวมค่าที่ส่งกลับเป็นสตริงเดียวและแสดงรายการหมายเลขโทรศัพท์สําหรับบุคคลที่ระบุโดย ContactID:
=Join(LookupSet(Fields!ContactID.Value, Fields!PersonID.Value, Fields!PhoneNumber.Value, "PhoneList"),",")
ฟังก์ชันการแปลง
คุณสามารถใช้ฟังก์ชัน Visual Basic เพื่อแปลงเขตข้อมูลจากชนิดข้อมูลหนึ่งไปเป็นชนิดข้อมูลอื่นได้ ฟังก์ชันการแปลงสามารถใช้ในการแปลงชนิดข้อมูลเริ่มต้นสําหรับเขตข้อมูลเป็นชนิดข้อมูลที่จําเป็นสําหรับการคํานวณหรือในการรวมข้อความ
นิพจน์ต่อไปนี้แปลงค่าคงที่ 500 เป็นชนิดทศนิยมเพื่อเปรียบเทียบกับชนิดข้อมูลการเงิน Transact-SQL ในเขตข้อมูลค่าสําหรับนิพจน์ตัวกรอง
=CDec(500)
นิพจน์ต่อไปนี้แสดงจํานวนของค่าที่เลือกสําหรับพารามิเตอร์ที่มีหลายค่า MySelection
=CStr(Parameters!MySelection.Count)
ฟังก์ชันการตัดสินใจ
ฟังก์ชัน IIF ส่งกลับค่าหนึ่งในสองค่า ทั้งนี้ขึ้นอยู่กับว่านิพจน์นั้นเป็นจริงหรือไม่ นิพจน์ต่อไปนี้ใช้ ฟังก์ชัน IIF เพื่อส่งกลับค่าบูลีนของ True ถ้าค่าของ LineTotal เกิน 100 มิฉะนั้นจะส่งกลับ False:
=IIF(Fields!LineTotal.Value > 100, True, False)
ใช้ฟังก์ชัน IIF หลายรายการ (หรือที่เรียกว่า "IIF ที่ซ้อนกัน") เพื่อแสดงค่าหนึ่งในสามค่า ทั้งนี้ขึ้นอยู่กับค่าของ PctComplete นิพจน์ต่อไปนี้สามารถวางในสีเติมของกล่องข้อความเพื่อเปลี่ยนสีพื้นหลังทั้งนี้ขึ้นอยู่กับค่าในกล่องข้อความ
=IIF(Fields!PctComplete.Value >= 10, "Green", IIF(Fields!PctComplete.Value >= 1, "Blue", "Red"))
ค่าที่มากกว่าหรือเท่ากับ 10 จะแสดงด้วยพื้นหลังสีเขียว ค่าระหว่าง 1 กับ 9 แสดงด้วยพื้นหลังสีน้ําเงิน และค่าที่น้อยกว่า 1 แสดงด้วยพื้นหลังสีแดง
วิธีอื่นในการรับฟังก์ชันเดียวกันใช้ฟังก์ชัน Switch ฟังก์ชัน Switch มีประโยชน์เมื่อมีเงื่อนไขสามอย่างหรือมากกว่านั้นในการทดสอบ ฟังก์ชัน Switch ส่งกลับค่าที่เกี่ยวข้องกับนิพจน์แรกในชุดข้อมูลที่ประเมินเป็น true:
=Switch(Fields!PctComplete.Value >= 10, "Green", Fields!PctComplete.Value >= 1, "Blue", Fields!PctComplete.Value = 1, "Yellow", Fields!PctComplete.Value <= 0, "Red")
ค่าที่มากกว่าหรือเท่ากับ 10 จะแสดงด้วยพื้นหลังสีเขียว ค่าระหว่าง 1 กับ 9 แสดงด้วยพื้นหลังสีฟ้า ค่าที่เท่ากับ 1 แสดงด้วยพื้นหลังสีเหลือง และค่า 0 หรือค่าน้อยกว่านั้นแสดงด้วยพื้นหลังสีแดง
ทดสอบค่าของ เขตข้อมูล ImportantDate และส่งกลับ "สีแดง" ถ้ามีอายุมากกว่าหนึ่งสัปดาห์ และ "สีฟ้า" ถ้าเป็นอย่างอื่น นิพจน์นี้สามารถใช้เพื่อควบคุมคุณสมบัติสีของกล่องข้อความในหน่วยข้อมูลของรายงาน:
=IIF(DateDiff("d",Fields!ImportantDate.Value, Now())>7,"Red","Blue")
ทดสอบค่าของ เขตข้อมูล PhoneNumber และส่งกลับ "ไม่มีค่า" หากเป็น null (Nothing ใน Visual Basic) หรือส่งกลับค่าหมายเลขโทรศัพท์ นิพจน์นี้สามารถใช้เพื่อควบคุมค่าของกล่องข้อความในหน่วยข้อมูลของรายงาน
=IIF(Fields!PhoneNumber.Value Is Nothing,"No Value",Fields!PhoneNumber.Value)
ทดสอบค่าของ เขตข้อมูลแผนก และส่งกลับชื่อรายงานย่อยหรือ null (Nothing ใน Visual Basic) นิพจน์นี้สามารถใช้สําหรับรายงานย่อย Drillthrough ตามเงื่อนไข
=IIF(Fields!Department.Value = "Development", "EmployeeReport", Nothing)
ทดสอบถ้าค่าเขตข้อมูลเป็น Null นิพจน์นี้สามารถใช้เพื่อควบคุม คุณสมบัติที่ซ่อนอยู่ ของหน่วยข้อมูลของรายงานรูปภาพ ในตัวอย่างต่อไปนี้ รูปที่ระบุโดยเขตข้อมูล LargePhoto จะแสดงเฉพาะเมื่อค่าของเขตข้อมูลไม่ใช่ null
=IIF(IsNothing(Fields!LargePhoto.Value),True,False)
ฟังก์ชัน MonthName จะส่งกลับค่าสตริงที่มีชื่อของเดือนที่ระบุ ตัวอย่างต่อไปนี้แสดง NA ในเขตข้อมูลเดือนเมื่อเขตข้อมูลมีค่าเป็น 0
IIF(Fields!Month.Value=0,"NA",MonthName(IIF(Fields!Month.Value=0,1,Fields!Month.Value)))
ฟังก์ชันรายงาน
ในนิพจน์ คุณสามารถเพิ่มการอ้างอิงไปยังฟังก์ชันรายงานเพิ่มเติมที่จัดการข้อมูลในรายงาน ส่วนนี้มีตัวอย่างสําหรับสองฟังก์ชันเหล่านี้
ผลรวม
ฟังก์ชัน Sum สามารถรวมค่าในกลุ่มหรือขอบเขตข้อมูลได้ ฟังก์ชันนี้มีประโยชน์ในส่วนหัวหรือส่วนท้ายของกลุ่ม นิพจน์ต่อไปนี้แสดงผลรวมของข้อมูลในกลุ่ม คําสั่งซื้อ หรือขอบเขตข้อมูล:
=Sum(Fields!LineTotal.Value, "Order")
คุณยังสามารถใช้ ฟังก์ชัน Sum สําหรับการคํานวณค่ารวมที่มีเงื่อนไข ตัวอย่างเช่น หากชุดข้อมูลมีเขตข้อมูลที่มีชื่อสถานะพร้อมด้วยค่าที่เป็นไปได้เช่น ยังไม่เริ่มต้น เริ่มต้นแล้ว เสร็จสิ้น นิพจน์ต่อไปนี้เมื่อวางลงในส่วนหัวของกลุ่ม จะคํานวณผลรวมสําหรับค่าที่เสร็จสิ้นเท่านั้น:
=Sum(IIF(Fields!State.Value = "Finished", 1, 0))
RowNumber
ฟังก์ชัน RowNumber เมื่อนํามาใช้ในกล่องข้อความภายในขอบเขตข้อมูล จะแสดงหมายเลขแถวสําหรับแต่ละอินสแตนซ์ของกล่องข้อความที่นิพจน์ปรากฏขึ้น ฟังก์ชันนี้มีประโยชน์ในการให้หมายเลขแถวในตาราง นอกจากนี้ยังมีประโยชน์สําหรับงานที่ซับซ้อนมากขึ้น เช่น การมีตัวแบ่งหน้าตามจํานวนแถว สําหรับข้อมูลเพิ่มเติม ดู ตัวแบ่ง หน้า ในบทความนี้
ขอบเขตที่คุณระบุสําหรับ ตัวควบคุม RowNumber เมื่อเริ่มต้นการเรียงลําดับใหม่ คํา หลัก Nothing ระบุว่าฟังก์ชันจะเริ่มต้นการนับที่แถวแรกในขอบเขตข้อมูลที่อยู่นอกสุด หากต้องการเริ่มต้นการนับภายในขอบเขตข้อมูลที่ซ้อนกัน ให้ใช้ชื่อของขอบเขตข้อมูล หากต้องการเริ่มต้นการนับภายในกลุ่ม ให้ใช้ชื่อของกลุ่ม
=RowNumber(Nothing)
ลักษณะที่ปรากฏของข้อมูลรายงาน
คุณสามารถใช้นิพจน์เพื่อจัดการวิธีที่ข้อมูลจะปรากฏบนรายงาน ตัวอย่างเช่น คุณสามารถแสดงค่าของสองเขตข้อมูลในกล่องข้อความเดียว ได้ แสดงข้อมูลเกี่ยวกับรายงาน หรือส่งผลต่อวิธีการแทรกตัวแบ่งหน้าในรายงาน
ส่วนหัวและส่วนท้ายของหน้า
เมื่อคุณออกแบบรายงาน คุณสามารถแสดงชื่อของรายงานและหมายเลขหน้าในส่วนท้ายของรายงานได้ ในการทําเช่นนี้ คุณสามารถใช้นิพจน์ต่อไปนี้:
นิพจน์ต่อไปนี้มีชื่อของรายงานและเวลาที่เรียกใช้ ซึ่งสามารถวางในกล่องข้อความในส่วนท้ายของรายงานหรือในเนื้อความของรายงาน เวลาถูกจัดรูปแบบด้วยสตริงการจัดรูปแบบใน .NET Framework สําหรับวันที่สั้น:
=Globals.ReportName & ", dated " & Format(Globals.ExecutionTime, "d")
นิพจน์ต่อไปนี้ซึ่งวางในกล่องข้อความในส่วนท้ายของรายงาน จะมีหมายเลขหน้าและหน้าทั้งหมดในรายงาน:
=Globals.PageNumber & " of " & Globals.TotalPages
ตัวอย่างต่อไปนี้อธิบายวิธีการแสดงค่าแรกและค่าสุดท้ายจากหน้าในส่วนหัวของหน้า คล้ายกับที่คุณอาจพบในรายการไดเรกทอรี ตัวอย่างจะถือว่าขอบเขตข้อมูลที่มีกล่องข้อความชื่อว่า LastName
นิพจน์ต่อไปนี้ที่วางในกล่องข้อความทางด้านซ้ายของส่วนหัวของหน้า จะมีค่าแรกของ กล่องข้อความ LastName บนหน้า:
=First(ReportItems("LastName").Value)
นิพจน์ต่อไปนี้ที่วางในกล่องข้อความทางด้านขวาของส่วนหัวของหน้า จะมีค่าสุดท้ายของ กล่องข้อความ LastName บนหน้า:
=Last(ReportItems("LastName").Value)
ตัวอย่างต่อไปนี้อธิบายวิธีการแสดงผลรวมของหน้า ตัวอย่างจะถือว่าขอบเขตข้อมูลที่ประกอบด้วยกล่องข้อความที่ชื่อว่าต้นทุน
นิพจน์ต่อไปนี้ที่วางในส่วนหัวหรือส่วนท้ายของหน้า จะมีผลรวมของค่าใน กล่องข้อความ ต้นทุน สําหรับหน้า:
=Sum(ReportItems("Cost").Value)
หมายเหตุ
คุณสามารถอ้างอิงถึงหน่วยข้อมูลของรายงานได้เพียงหนึ่งหน่วยต่อนิพจน์ในส่วนหัวหรือส่วนท้ายของหน้า นอกจากนี้ คุณยังสามารถอ้างอิงถึงชื่อกล่องข้อความแต่ไม่ใช่นิพจน์ข้อมูลจริงภายในกล่องข้อความ ในนิพจน์ส่วนหัวและส่วนท้ายของหน้า
ตัวแบ่งหน้า
ในบางรายงาน คุณสามารถวางตัวแบ่งหน้าที่ส่วนท้ายของจํานวนแถวที่ระบุแทน หรือเพิ่มเติมจากบนกลุ่มหรือหน่วยข้อมูลของรายงานได้ สร้างกลุ่มที่มีกลุ่มหรือรายละเอียดระเบียนที่คุณต้องการ เพิ่มตัวแบ่งหน้าลงในกลุ่ม จากนั้นเพิ่มนิพจน์กลุ่มเพื่อจัดกลุ่มตามจํานวนแถวที่ระบุ
นิพจน์ต่อไปนี้เมื่อวางในนิพจน์กลุ่ม จะกําหนดตัวเลขให้กับแถว 25 แถวแต่ละชุด เมื่อมีการกําหนดตัวแบ่งหน้าสําหรับกลุ่ม นิพจน์นี้ส่งผลให้มีตัวแบ่งหน้าทุก ๆ 25 แถว
=Ceiling(RowNumber(Nothing)/25)
หากต้องการอนุญาตให้ผู้ใช้สามารถตั้งค่าสําหรับจํานวนแถวต่อหน้า ให้สร้างพารามิเตอร์ที่ ชื่อว่า RowsPerPage และยึดนิพจน์กลุ่มตามพารามิเตอร์ ดังที่แสดงในนิพจน์ต่อไปนี้:
=Ceiling(RowNumber(Nothing)/Parameters!RowsPerPage.Value)
คุณสมบัติ
นิพจน์ไม่ได้ใช้เพื่อแสดงข้อมูลในกล่องข้อความเท่านั้น นอกจากนี้ยังสามารถใช้เพื่อเปลี่ยนวิธีการนําคุณสมบัติไปใช้กับหน่วยข้อมูลของรายงานได้อีกด้วย คุณสามารถเปลี่ยนข้อมูลรูปแบบสําหรับหน่วยข้อมูลของรายงาน หรือเปลี่ยนการมองเห็นของรายงานได้
การจัดรูปแบบ
นิพจน์ต่อไปนี้เมื่อนํามาใช้ในคุณสมบัติสีของกล่องข้อความ จะเปลี่ยนสีของข้อความ โดยขึ้นอยู่กับค่าของเขตข้อมูลกําไร:
=Iif(Fields!Profit.Value < 0, "Red", "Black")
คุณยังสามารถใช้ตัวแปร ออบเจ็กต์ Visual Basic Me ได้ ตัวแปรนี้เป็นอีกวิธีหนึ่งในการอ้างอิงถึงค่าของกล่องข้อความ
=Iif(Me.Value < 0, "Red", "Black")
นิพจน์ต่อไปนี้เมื่อนํามาใช้ใน คุณสมบัติสี พื้นหลังของหน่วยข้อมูลรายงานในขอบเขตข้อมูล จะเปลี่ยนสีพื้นหลังของแต่ละแถวระหว่างสีเขียวอ่อนและสีขาว:
=Iif(RowNumber(Nothing) Mod 2, "PaleGreen", "White")
ถ้าคุณใช้นิพจน์สําหรับขอบเขตที่ระบุ คุณอาจต้องระบุชุดข้อมูลสําหรับฟังก์ชันการรวม:
=Iif(RowNumber("Employees") Mod 2, "PaleGreen", "White")
หมายเหตุ
สีที่พร้อมใช้งานมาจากการแจงนับ KnownColor .NET Framework
สีแผนภูมิ
ในการระบุสีสําหรับแผนภูมิรูปร่าง คุณสามารถใช้รหัสแบบกําหนดเองเพื่อควบคุมลําดับที่สีจะถูกแมปกับค่าของจุดข้อมูลได้ ซึ่งช่วยให้คุณใช้สีที่สอดคล้องกันสําหรับแผนภูมิหลายแผนภูมิที่มีกลุ่มประเภทเดียวกัน
การมองเห็นได้
คุณสามารถแสดงและซ่อนหน่วยข้อมูลในรายงานโดยใช้คุณสมบัติการมองเห็นสําหรับหน่วยข้อมูลของรายงาน ในขอบเขตข้อมูล เช่น ตาราง คุณสามารถซ่อนแถวรายละเอียดในขั้นต้นได้ตามค่าในนิพจน์
นิพจน์ต่อไปนี้เมื่อนํามาใช้สําหรับการมองเห็นเริ่มต้นของแถวรายละเอียดในกลุ่ม จะแสดงแถวรายละเอียดสําหรับยอดขายทั้งหมดไม่เกิน 90 เปอร์เซ็นต์ใน เขตข้อมูล PctQuota :
=IIF(Fields!PctQuota.Value>.9, False, True)
นิพจน์ต่อไปนี้เมื่อตั้งค่าใน คุณสมบัติที่ซ่อนอยู่ ของตาราง จะแสดงตารางก็ต่อเมื่อมีมากกว่า 12 แถว:
=IIF(CountRows()>12,false,true)
นิพจน์ต่อไปนี้เมื่อตั้งค่าใน คุณสมบัติที่ซ่อนอยู่ ของคอลัมน์ จะแสดงคอลัมน์ก็ต่อเมื่อมีเขตข้อมูลอยู่ในชุดข้อมูลรายงานหลังจากข้อมูลถูกดึงมาจากแหล่งข้อมูล:
=IIF(Fields!Column_1.IsMissing, true, false)
URL
คุณสามารถกําหนด URL เองได้โดยใช้ข้อมูลรายงาน และยังสามารถควบคุมอย่างมีเงื่อนไขว่าจะเพิ่มเป็นการดําเนินการสําหรับกล่องข้อความหรือไม่
นิพจน์ต่อไปนี้เมื่อนํามาใช้เป็นการดําเนินการบนกล่องข้อความ จะสร้าง URL ที่กําหนดเองที่ระบุเขตข้อมูล ชุดข้อมูล EmployeeID เป็นพารามิเตอร์ URL
="https://adventure-works/MyInfo?ID=" & Fields!EmployeeID.Value
นิพจน์ต่อไปนี้ควบคุมอย่างมีเงื่อนไขว่าจะเพิ่ม URL ในกล่องข้อความหรือไม่ นิพจน์นี้ขึ้นอยู่กับพารามิเตอร์ที่มีชื่อ ว่า IncludeURLs ที่อนุญาตให้ผู้ใช้ตัดสินใจว่าจะรวม URL ที่ใช้งานอยู่ในรายงานหรือไม่ นิพจน์นี้ถูกตั้งค่าเป็นการดําเนินการบนกล่องข้อความ โดยการตั้งค่าพารามิเตอร์เป็นเท็จและจากนั้นดูรายงาน คุณสามารถส่งออกรายงานไปยัง Microsoft Excel ได้โดยไม่ต้องมีไฮเปอร์ลิงก์
=IIF(Parameters!IncludeURLs.Value,"https://adventure-works.com/productcatalog",Nothing)
หมายเหตุ
รายงานแบบแบ่งหน้าของ Power BI ไม่สนับสนุนการใช้ JavaScript ภายในนิพจน์ Go To URL
ข้อมูลรายงาน
นิพจน์สามารถใช้ในการจัดการข้อมูลที่ใช้ในรายงาน คุณสามารถอ้างอิงถึงพารามิเตอร์และข้อมูลรายงานอื่นๆ ได้ คุณยังสามารถเปลี่ยนคิวรีที่ใช้ในการดึงข้อมูลสําหรับรายงานได้
พารามิเตอร์
คุณสามารถใช้นิพจน์ในพารามิเตอร์เพื่อเปลี่ยนแปลงค่าเริ่มต้นสําหรับพารามิเตอร์ได้ ตัวอย่างเช่น คุณสามารถใช้พารามิเตอร์เพื่อกรองข้อมูลให้กับผู้ใช้ที่เฉพาะเจาะจงตามรหัสผู้ใช้ที่ใช้ในการเรียกใช้รายงานได้
นิพจน์ต่อไปนี้เมื่อนํามาใช้เป็นค่าเริ่มต้นสําหรับพารามิเตอร์ จะรวบรวมรหัสผู้ใช้ของบุคคลที่เรียกใช้รายงาน:
=User!UserID
หากต้องการอ้างอิงถึงพารามิเตอร์ในพารามิเตอร์คิวรี นิพจน์ตัวกรอง กล่องข้อความ หรือพื้นที่อื่น ๆ ของรายงาน ให้ใช้คอลเลกชันส่วนกลางของพารามิเตอร์ ตัวอย่างนี้ถือว่าพารามิเตอร์มีชื่อว่า แผนก:
=Parameters!Department.Value
พารามิเตอร์สามารถสร้างขึ้นในรายงาน แต่ตั้งค่าเป็นซ่อนอยู่ เมื่อรายงานทํางานบนเซิร์ฟเวอร์รายงาน พารามิเตอร์จะไม่ปรากฏในแถบเครื่องมือและโปรแกรมอ่านรายงานจะไม่สามารถเปลี่ยนค่าเริ่มต้นได้ คุณสามารถใช้พารามิเตอร์ที่ซ่อนอยู่ โดยตั้งค่าเป็นค่าเริ่มต้นที่เป็นค่าคงที่ที่กําหนดเอง คุณสามารถใช้ค่านี้ในนิพจน์ใด ๆ รวมถึงนิพจน์ของเขตข้อมูลได้ นิพจน์ต่อไปนี้ระบุเขตข้อมูลที่ระบุโดยค่าพารามิเตอร์เริ่มต้นสําหรับพารามิเตอร์ที่มี ชื่อ ParameterField:
=Fields(Parameters!ParameterField.Value).Value
โค้ดแบบกำหนดเอง
คุณสามารถใช้รหัสที่กําหนดเองที่ฝังในรายงานได้
การใช้ตัวแปรกลุ่มสําหรับการรวมที่กําหนดเอง
คุณสามารถเริ่มต้นค่าสําหรับตัวแปรกลุ่มที่อยู่ภายในเครื่องสําหรับขอบเขตกลุ่มเฉพาะ จากนั้นรวมการอ้างอิงไปยังตัวแปรนั้นในนิพจน์ได้ หนึ่งในวิธีที่คุณสามารถใช้ตัวแปรกลุ่มด้วยรหัสที่กําหนดเองได้คือการนําค่ารวมที่กําหนดเองไปใช้
การระงับค่า null หรือค่าศูนย์ในเวลาที่เรียกใช้งาน
บางค่าในนิพจน์สามารถประเมินเป็น null หรือไม่ได้ระบุไว้เมื่อถึงเวลาการประมวลผลรายงาน ซึ่งสามารถสร้างข้อผิดพลาดขณะทํางานที่ส่งผลให้ #Error แสดงในกล่องข้อความแทนนิพจน์ที่ได้รับการประเมิน ฟังก์ชัน IIF มีความไวต่อลักษณะการทํางานนี้เป็นพิเศษ เนื่องจากการเลิกชอบ คําสั่ง If-Then-Else แต่ละส่วนของ คําสั่ง IIF จะได้รับการประเมิน (รวมถึงการเรียกฟังก์ชัน) ก่อนที่จะส่งผ่านไปยังรูทีนที่ทดสอบว่า true หรือ false =IIF(Fields!Sales.Value is NOTHING, 0, Fields!Sales.Value)
คําสั่ง สร้าง #Error ในรายงานที่แสดงผลถ้าเขตข้อมูล! Sales.Value เป็น NOTHING
หากต้องการหลีกเลี่ยงเงื่อนไขนี้ ให้ใช้หนึ่งในกลยุทธ์ต่อไปนี้:
ตั้งค่าตัวเศษเป็น 0 และตัวหารเป็น 1 ถ้าค่าของเขตข้อมูล B เป็น 0 หรือไม่ได้ระบุไว้ มิฉะนั้น ให้ตั้งค่าตัวเศษเป็นค่าสําหรับเขตข้อมูล A และตัวหารเป็นค่าสําหรับเขตข้อมูล B
=IIF(Field!B.Value=0, 0, Field!A.Value / IIF(Field!B.Value =0, 1, Field!B.Value))
ใช้ฟังก์ชันรหัสที่กําหนดเองเพื่อส่งคืนค่าสําหรับนิพจน์ ตัวอย่างต่อไปนี้ส่งกลับค่าความแตกต่างเป็นเปอร์เซ็นต์ระหว่างค่าปัจจุบันกับค่าก่อนหน้า ซึ่งสามารถใช้เพื่อคํานวณความแตกต่างระหว่างค่าต่อเนื่องสองค่าใดๆ และจัดการกับกรณีขอบของการเปรียบเทียบครั้งแรก (เมื่อไม่มีค่าก่อนหน้า) และกรณีที่ค่าก่อนหน้าหรือค่าปัจจุบันเป็น null (Nothing ใน Visual Basic)
Public Function GetDeltaPercentage(ByVal PreviousValue, ByVal CurrentValue) As Object If IsNothing(PreviousValue) OR IsNothing(CurrentValue) Then Return Nothing Else if PreviousValue = 0 OR CurrentValue = 0 Then Return Nothing Else Return (CurrentValue - PreviousValue) / CurrentValue End If End Function
นิพจน์ต่อไปนี้แสดงวิธีการเรียกใช้รหัสที่กําหนดเองนี้จากกล่องข้อความสําหรับ คอนเทนเนอร์ ColumnGroupByYear (กลุ่มหรือขอบเขตข้อมูล)
=Code.GetDeltaPercentage(Previous(Sum(Fields!Sales.Value),"ColumnGroupByYear"), Sum(Fields!Sales.Value))
รหัสนี้จะช่วยหลีกเลี่ยงข้อยกเว้นในเวลาที่เรียกใช้ ตอนนี้คุณสามารถใช้นิพจน์เช่น
=IIF(Me.Value < 0, "red", "black")
ใน คุณสมบัติ Color ของกล่องข้อความเพื่อแสดงข้อความตามเงื่อนไขขึ้นอยู่กับว่าค่ามากกว่าหรือน้อยกว่า 0 หรือไม่