มีวิธีเพิ่มแถวว่างให้กับชุดข้อมูล SSRS ตามพารามิเตอร์หรือไม่

ฉันมีรายงาน SSRS ที่พิมพ์ป้ายกำกับที่อยู่ 30 หน้าใน 3 คอลัมน์

ฉันได้สร้างรายงานที่คล้ายกับคำแนะนำที่พบ ที่นี่

ฉันแทบไม่ต้องพิมพ์ฉลากถึง 30 ฉลากเลย ดังนั้น เพื่อประหยัดกระดาษและเงิน ฉันต้องการเพิ่มพารามิเตอร์ลงในรายงานนี้ด้วยหมายเลข 1-30 เพื่อตัดสินใจว่าจะเริ่มพิมพ์ตำแหน่งใดบนหน้า

หากฉันพิมพ์ป้ายกำกับ 16 ป้ายบนหน้าหนึ่งแล้ว ฉันสามารถเลือก 17 ป้ายในพารามิเตอร์ได้ และผลลัพธ์ของฉันจะเริ่มพิมพ์ในป้ายที่ 17 บนหน้านั้น

หากฉันสามารถใช้พารามิเตอร์เพื่อเพิ่มแถวว่างจำนวนหนึ่งให้กับชุดผลลัพธ์ของฉันได้ ฉันก็สามารถทำได้สำเร็จ เป็นไปได้ไหม?


person kmorris84    schedule 19.08.2016    source แหล่งที่มา
comment
การทราบแบบสอบถามชุดข้อมูลของคุณที่นี่จะเป็นประโยชน์ สัญชาตญาณแรกของฉันคือการรวมแถว 'ว่าง' เข้ากับชุดข้อมูลของคุณ และทำซ้ำตามจำนวนพารามิเตอร์ของคุณ ลบ 1 แต่ไม่รู้ว่าชุดข้อมูลนั้นเป็นอย่างไร ก็ยากที่จะรู้ว่าการรวมเข้าด้วยกันควรมีลักษณะอย่างไร   -  person Gallus    schedule 22.08.2016


คำตอบ (3)


ฉันไม่แน่ใจว่านี่เป็นทางออกที่ดีที่สุดแต่ดูคำถามนี้ด้านล่าง

DECLARE @StartColumn INT = 6

;WITH CTE
 AS (
       SELECT *
            ,ROW_NUMBER() OVER (ORDER BY q.value) AS [rowNum]
        FROM (
            values('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L')
        ) q (value)
    )

    SELECT CASE
                WHEN CTE.rowNum > @StartColumn THEN CTE.value
                ELSE NULL
            END AS [Value]
    FROM CTE

คุณจะได้ผลลัพธ์แบบนี้

ป้อนคำอธิบายรูปภาพที่นี่

จากนั้นรันมันจะแสดงค่าว่างเมื่อค่า Null ในรายงาน (ฉันคิดว่าคุณใช้ Group ในรายงานเพื่อพิมพ์หลายแถว)

person Chanom First    schedule 23.08.2016

ฉันประสบปัญหาคล้ายกัน เช่น การเลือกฉลากที่จะพิมพ์ แต่ยังต้องพิมพ์มากกว่า 1 ฉลากต่อลูกค้าหนึ่งราย ปัญหาของฉันคือฉันไม่สามารถเข้าถึง SQL ได้ (เราใช้คิวบ์) ฉันใช้ SSRS 2012 กับ SharePoint มันไม่สวย แต่มันได้ผล

ฉันมีชุดข้อมูล 1 ชุดในรายงานของฉัน ฉันมีป้ายกำกับ 14 ป้าย - ด้านล่าง 7 อันและแนวขวาง 2 อัน แต่ละป้ายกำกับได้รับการตั้งค่าเป็น tablix ของตัวเอง

tablix จะมีหมายเลข 1 ถึง 14 เริ่มจากซ้ายบน ดังนั้น 1-7 ลงมาทาง "คอลัมน์" ทางซ้าย และ 8-14 จากด้านบนของ "คอลัมน์" ทางขวา

น่ารำคาญที่ค่าพารามิเตอร์เริ่มต้นจาก 0 ดังนั้นจึงมีหมายเลข 0-13 แต่ละ tablix ถูกตั้งค่าให้พอดีกับค่าพารามิเตอร์เฉพาะ เช่น tablix 1 ถูกตั้งค่าให้กรองด้วยค่าพารามิเตอร์ 0, tablix 2 ถูกกรองด้วยค่าพารามิเตอร์ 1, tablix 3 ถูกกรองด้วยค่าพารามิเตอร์ 2, tablix 4 ถูกกรองด้วยค่าพารามิเตอร์ 3 เป็นต้น

ฉันต้องพิมพ์ข้อมูลสองครั้งในฉลาก ดังนั้นฉันจึงใช้กล่องข้อความ 2 กล่องภายใน tablix ของฉัน

สร้างพารามิเตอร์

ผู้ใช้จะใช้รหัสลูกค้า (ตัวเลข 6 หลัก) เป็นค่าพารามิเตอร์ ฉันสร้างพารามิเตอร์ชื่อ ClientID สำหรับข้อความแจ้ง ฉันใส่ "แทนที่ 000000 สำหรับแต่ละป้ายกำกับที่ต้องการ 000000 = ป้ายกำกับว่างเปล่า"

  1. ภายใต้ตัวเลือกทั่วไป ฉัน:

    • changed Data type to Text
    • เปิดใช้งาน อนุญาตให้มีค่าว่าง ("")
    • เปิดใช้งาน อนุญาตให้มีหลายค่า
    • ตั้งค่าเลือกการมองเห็นพารามิเตอร์เป็นมองเห็นได้
  2. ค่าที่มีอยู่

    • left as None
  3. Default Values
    • selected Specify values
    • คลิกเพิ่มและตั้งค่าเป็น 00000 ฉันทำสิ่งนี้ 14 ครั้ง (ดังนั้นฉันจึงมีค่าเริ่มต้น 000000 สำหรับแต่ละป้ายกำกับ)

สร้าง tablix

จากนั้นฉันก็สร้าง tablix สำหรับแต่ละป้ายกำกับ พวกเขาทั้งหมดชี้ไปที่ชุดข้อมูลของฉัน (เรียกว่า "DataSet1" ในจินตนาการ) ประกอบด้วยเซลล์เดียว ซึ่งตรงกับความสูงและความกว้างของพื้นที่พิมพ์ฉลากของฉัน

สร้างกล่องข้อความ

ฉันเพิ่มกล่องข้อความแรกในเซลล์ tablix ฉันทำให้มันเล็กลงเล็กน้อยตามความกว้างของ tablix และลดลงจากด้านบนของ tablix

สร้างกล่องข้อความที่สองและย้ายลงจนกว่าจะตรงกับความต้องการของฉัน ใช้สูตรเดียวกันกับกล่องข้อความแรก (จำไว้ว่าฉันต้องพิมพ์ชื่อลูกค้าสองครั้ง)

ฉันใช้การค้นหาชุดข้อมูลในรายงานของฉัน ใช่ แม้ว่า tablix จะใช้ชุดข้อมูลนี้อยู่แล้วก็ตาม

สำหรับป้ายกำกับแรก สูตรสำหรับกล่องข้อความทั้งสองคือ:

=lookup(Parameters!ClientID.Value(0), 
Fields!ID.Value, 
UCase(Fields!Surname.Value), 
"DataSet1") 
& ", " & 
lookup(Parameters!ClientID.Value(0), 
Fields!ID.Value, 
Fields!Given.Value, 
"DataSet1")

สร้างตัวกรองสำหรับ tablix

ฉันยังต้องใช้ตัวกรองกับแต่ละ tablix ด้วย ดังนั้นมันจะพิมพ์ข้อมูลไคลเอนต์ที่เลือกผ่านพารามิเตอร์

ในคุณสมบัติ Tablix ภายใต้ตัวเลือกตัวกรอง + คลิกเพิ่ม + จากนิพจน์ ฉันเลือก ClientID ของฉัน + จากตัวดำเนินการ ฉันเลือก In + ในค่า ฉันคลิกปุ่ม Fx เพื่อสร้างสูตร =Parameters!ClientID.Value(0 )

ไม่แสดงค่าพารามิเตอร์เริ่มต้น

แน่นอนถ้าคุณปล่อยให้ค่าพารามิเตอร์เป็นค่าเริ่มต้น (000000) มันจะพิมพ์สิ่งนี้
วิธีเดียวที่ฉันสามารถป้องกันสิ่งนี้ได้คือการใช้สีแบบอักษร (ฉันไม่สามารถทำให้การมองเห็นทำงานได้) + คลิกขวาที่กล่องข้อความ + เลือกคุณสมบัติของกล่องข้อความ + คลิกที่ตัวเลือกแบบอักษร + ใต้สี คลิกปุ่ม Fx + ใช้สูตรนี้:

=iif(Parameters!ClientID.Value(0)="000000", "White", "Black")

สำหรับป้ายกำกับถัดไป

สำหรับป้ายกำกับที่สอง ฉันจัดทำดัชนีค่าในวงเล็บ เช่น (0) ถึง (1) สำหรับทั้งสูตรกล่องข้อความและสำหรับตัวกรองด้วย เช่น

=lookup(Parameters!ClientID.Value(1), 
Fields!ID.Value, 
UCase(Fields!Surname.Value), 
"DataSet1") 
& ", " & 
lookup(Parameters!ClientID.Value(1), 
Fields!ID.Value, 
Fields!Given.Value, 
"DataSet1")

และในตัวกรองคุณสมบัติ Tablix

=Parameters!ClientID.Value(1)

และในสูตรแบบอักษรของกล่องข้อความ

=iif(Parameters!ClientID.Value(1)="000000", "White", "Black")

จากนั้น ฉันจัดทำดัชนีตัวเลขนี้สำหรับป้ายกำกับแต่ละรายการถัดไป ดังนั้นป้ายกำกับสุดท้าย (ป้ายกำกับ 14) ค่าคือ:

=lookup(Parameters!ClientID.Value(13) etc 

และในตัวกรองคุณสมบัติ Tablix

=Parameters!ClientID.Value(13)

และในสูตรแบบอักษรของกล่องข้อความ =iif(Parameters!ClientID.Value(13)="000000", "White", "Black")

ดังนั้น เมื่อผู้ใช้เรียกใช้รายงาน ผู้ใช้จะแทนที่ 000000, 000000, 000000 ฯลฯ ด้วยรหัสลูกค้าที่เหมาะสม

person Adrift    schedule 05.10.2017

Chanom พาฉันมาถูกทาง วิธีแก้ปัญหาของฉันคือสร้างการสืบค้นชุดข้อมูลตามที่แสดงในตัวอย่างด้านล่าง

    declare @cnt int = 1
    declare @string varchar(max) = ''
    declare @varID varchar(max) = cast(@paramID as varchar(max))

    IF @paramStartLocation > 1
        WHILE @cnt < @paramStartLocation
        BEGIN 
           set @string = @string + 'select null as Column1
                 ,null as Column2
                 ,null as Column3
                 ,null as Column4
                 ,null as Column5
                 ,null as Column6
                 UNION ALL
                 '
           set @cnt = @cnt + 1
        END 

    set @string = @string + 'SELECT [TableName].[Column1]
         , [TableName].[Column2]
         , [TableName].[Column3]
         , [TableName].[Column4]
         , [TableName].[Column5]
         , [TableName].[Column6]

      FROM [TableName]
     WHERE  [TableName].[IDColumn] in ('+@varID+')'

     exec(@string)

ที่นี่ @paramStartLocation คือช่องป้ายกำกับที่เริ่มพิมพ์และบันทึก "null" จะแสดงเป็นค่าว่างในรายงาน โซลูชันของ Chanom ทำงานเพื่อข้ามบันทึกและแสดงช่องว่างแทน โซลูชันของฉันต้องไม่ข้ามบันทึก แต่เพิ่มบันทึกเปล่าจำนวน X

person kmorris84    schedule 09.10.2017