แชร์ผ่าน


ตัวอย่างนิพจน์ในตัวสร้างรายงานใน 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 ที่กําหนดเองที่ระบุเขตข้อมูล ชุดข้อมูล 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 หรือไม่

ขั้นตอนถัดไป