Apakah ada cara untuk menambahkan baris kosong ke kumpulan data SSRS berdasarkan parameter?

Saya memiliki laporan SSRS yang mencetak label alamat, 30 halaman, dalam 3 kolom.

Saya telah membuat laporan yang mirip dengan instruksi yang ditemukan di sini

Jarang sekali saya harus mencetak tepat 30 label. Jadi, untuk menghemat kertas dan uang, saya ingin menambahkan parameter pada laporan ini dengan angka 1-30 untuk menentukan lokasi halaman mana yang akan mulai dicetak.

Jika saya sudah mencetak 16 label pada satu halaman, saya kemudian dapat memilih 17 pada parameter dan hasil saya akan mulai dicetak pada label ke-17 pada halaman tersebut.

Jika saya dapat menggunakan parameter untuk menambahkan sejumlah baris kosong ke kumpulan hasil saya, saya dapat mencapainya. Apakah ini mungkin?


person kmorris84    schedule 19.08.2016    source sumber
comment
Akan berguna untuk mengetahui kueri kumpulan data Anda di sini. Naluri pertama saya adalah menyatukan baris 'kosong' ke dalam kumpulan data Anda dan mereplikasinya untuk jumlah parameter Anda, dikurangi 1. Namun tanpa mengetahui seperti apa kumpulan data tersebut, sulit untuk mengetahui seperti apa seharusnya gabungan tersebut   -  person Gallus    schedule 22.08.2016


Jawaban (3)


Saya tidak yakin ini solusi terbaik tetapi lihat pertanyaan di bawah ini

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

Anda akan mendapatkan hasil seperti ini

masukkan deskripsi gambar di sini

Kemudian jalankan itu akan terlihat kosong ketika nilai nol dalam laporan (saya pikir Anda menggunakan Grup dalam laporan untuk mencetak beberapa baris)

person Chanom First    schedule 23.08.2016

Saya menghadapi masalah serupa, misalnya memilih label mana yang akan dicetak, tetapi juga harus mencetak lebih dari 1 label per klien. Masalah saya adalah saya tidak dapat mengakses SQL (kami menggunakan kubus). Saya menggunakan SSRS 2012 dengan SharePoint. Itu tidak cantik, tapi berhasil.

Saya memiliki 1 kumpulan data di laporan saya. Saya memiliki 14 label - 7 di bawah & 2 melintang. Setiap label diatur sebagai tablixnya sendiri.

Tablix diberi nomor 1 sampai 14, dimulai dari kiri atas. Jadi, 1-7, di bawah "kolom" kiri & kemudian 8-14 dari atas "kolom" kanan.

Yang menjengkelkan adalah nilai parameter dimulai dari 0, jadi diberi nomor 0-13 Setiap tablix diatur untuk disesuaikan dengan nilai parameter tertentu, misalnya tablix 1 diatur untuk difilter berdasarkan nilai parameter 0, tablix 2 difilter berdasarkan nilai parameter 1, tablix 3 difilter berdasarkan nilai parameter 2, tablix 4 difilter berdasarkan nilai parameter 3, dst.

Saya harus mencetak data dua kali di label jadi saya menggunakan 2 kotak teks di dalam tablix saya.

Buat parameter

Pengguna akan menggunakan Id Klien (angka 6 digit) sebagai nilai parameter. Saya membuat parameter yang disebut ClientID. Untuk prompt saya masukkan "Ganti 000000 untuk setiap label yang diperlukan. 000000 = label kosong"

  1. Di bawah opsi Umum, saya:

    • changed Data type to Text
    • diaktifkan Izinkan nilai kosong ("")
    • diaktifkan Izinkan beberapa nilai
    • atur Pilih visibilitas parameter ke Terlihat
  2. Nilai yang Tersedia

    • left as None
  3. Default Values
    • selected Specify values
    • klik Tambah dan atur Nilai menjadi 00000 Saya melakukan ini 14 kali (jadi saya memiliki nilai default 000000 untuk setiap label)

Buat tablik

Saya kemudian membuat tablix untuk setiap label. Mereka semua menunjuk ke kumpulan data saya (secara imajinatif disebut "DataSet1"). Mereka terdiri dari satu sel. Ini cocok dengan tinggi dan lebar area cetak label saya.

Buat kotak teks

Saya menambahkan kotak teks pertama saya di dalam sel tablix. Saya membuatnya sedikit lebih kecil dari lebar tablix dan tepat di bawah bagian atas tablix.

Membuat kotak teks kedua & memindahkannya ke bawah hingga sesuai dengan kebutuhan saya. Itu menggunakan rumus yang sama seperti kotak teks pertama. (ingat saya perlu mencetak nama klien dua kali).

Saya menggunakan pencarian kumpulan data di laporan saya. Ya, meskipun tablix sudah didasarkan pada kumpulan data ini.

Untuk label pertama, rumus untuk kedua kotak teks adalah:

=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")

Buat filter untuk tablix

Saya juga harus menerapkan filter ke setiap tablix, sehingga akan mencetak informasi klien yang dipilih melalui parameter.

Pada Tablix Properties di bawah opsi Filters + klik Add + dari ekspresi, saya memilih ClientID saya + dari Operator, saya memilih In + di Value, saya mengklik tombol Fx untuk membuat rumus =Parameters!ClientID.Value(0 )

Jangan tampilkan nilai parameter default

Tentunya jika Anda membiarkan nilai parameter sebagai default (000000), maka nilai ini akan dicetak.
Satu-satunya cara agar saya dapat mencegah hal ini adalah dengan menggunakan warna Font (saya tidak dapat mengaktifkan Visibilitas). + Klik kanan pada Kotak Teks + Pilih Properti Kotak Teks + Klik pada opsi Font + Di bawah Warna, klik tombol Fx + Gunakan rumus ini:

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

Untuk label berikutnya

Untuk label kedua, saya mengindeks nilainya di dalam tanda kurung, misal (0) hingga (1) baik untuk rumus kotak teks maupun untuk filternya, misal

=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")

dan di filter Properti Tablix,

=Parameters!ClientID.Value(1)

dan dalam rumus Font Kotak Teks

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

Saya kemudian mengindeks nomor ini untuk setiap label berikutnya, sehingga label terakhir (label 14), nilainya adalah:

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

dan di filter Properti Tablix,

=Parameters!ClientID.Value(13)

dan dalam rumus Font Kotak Teks =iif(Parameters!ClientID.Value(13)="000000", "White", "Black")

Jadi, ketika pengguna menjalankan laporan, mereka mengganti 000000, 000000, 000000, dll dengan ID Klien yang sesuai

person Adrift    schedule 05.10.2017

Chanom membawa saya ke jalur yang benar, solusi saya adalah membuat kueri kumpulan data seperti yang ditunjukkan pada contoh di bawah.

    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)

Di sini @paramStartLocation adalah slot label yang mulai dicetak dan catatan "null" ditampilkan sebagai kosong dalam laporan. Solusi Chanom berfungsi untuk melewatkan catatan dan menampilkan catatan kosong, solusi saya tidak perlu melewatkan catatan tetapi menambahkan sejumlah X catatan kosong.

person kmorris84    schedule 09.10.2017