Saya punya laporan SSRS yang memiliki 3 set data makan dari satu sumber data. Dataset utama adalah prosedur tersimpan yang menggabungkan beberapa data berdasarkan satu set parameter yang didukung oleh dua set data lainnya.
Prosedur tersimpan utama yang menjalankan laporan ini memiliki 4 parameter. Satu adalah ID untuk tipe data, dua untuk tanggal mulai dan berakhir dan yang ketiga hanyalah parameter flag. Parameter flag adalah parameter multi-nilai di mana saya ingin meneruskan beberapa nilai flag yang juga merupakan nilai VARCHAR.
Dalam prosedur tersimpan untuk parameter @Flag saya, saya memiliki kesamaan:
WHERE [Flag] IN (@Flag)
Kemudian tentu saja parameter @Flag pada laporan SSR diatur untuk memungkinkan 'Beberapa Nilai' yang juga diisi dari kueri yang menarik nilai-nilai @Flag dari tabel dimensi.
Masalahku
Dalam kebanyakan kasus ketika berhadapan dengan nilai INT, menggunakan teknik yang sama berfungsi. Namun, ketika saya berurusan dengan nilai karakter, itu gagal. Jika saya memilih satu bendera, laporan berfungsi ajaib. Jika saya memilih lebih dari satu flag, sepertinya tidak mengirimkan flag dengan benar ke prosedur tersimpan dan tidak ada hasil yang kembali.
Saat menguji bendera multi-nilai langsung di prosedur tersimpan:
WHERE [Flag] IN ('A', 'B', 'C')
Prosedur tersimpan bekerja dengan benar. Jadi masalahnya bukan prosedur tersimpan, tetapi bagaimana SSRS meneruskan nilai multi-nilai ke parameter @Flag.
Solusi Mencoba
Saya mencoba melakukan penyesuaian berikut untuk dataset SSRS untuk parameter @Flag ini:
=join(Parameters!<your param name>.Value,",")
DAN yang ini juga:
=SPLIT(JOIN(Parameters!<your param name>.Value,","),",")
Ini semua bekerja pada nilai-nilai tunggal, tetapi tidak pernah multi-nilai.
Apa yang kulewatkan di sini?
sumber
=join(Parameters!<your param name>.Value,",")
) dapat ditambahkan ke dataset yang membaca parameter, di bawah tab "Parameter": ada tombol "fx" untuk menambahkan ekspresi, di sebelah kanan drop "Nilai Parameter" -turun.WHERE <Table>.[<Column>] IN (@MultiValueParm)
, maka kode dalam prosedur tersimpan bisaWHERE CHARINDEX(<Table>.[<Column>], @MultiValueParmAsText) > 0