Saya memiliki prosedur tersimpan yang mengembalikan beberapa set hasil seperti di bawah ini
Create StoredProcedure sp_MultipleDataSets
as
begin
SELECT EMPID, ENAME, JOB, SAL, DEPTID FROM EMP -- first result set
SELECT DEPTID, DNAME, LOC FROM DEPT --second result set
end
Di BIDS, saat membuat laporan baru, saya mengonfigurasi prosedur tersimpan untuk kumpulan data. Prosedur ini membuat dataset HANYA dengan kolom yang dikembalikan dari set hasil pertama. Itu tidak mengidentifikasi set hasil kedua.
Bagaimana cara membuat dataset untuk kedua set hasil dari prosedur tersimpan seperti di atas
Sayangnya, seperti yang dijelaskan oleh dokumentasi di sini:
Jika beberapa set hasil diambil melalui satu kueri, hanya set hasil pertama yang diproses, dan semua set hasil lainnya diabaikan.
(Ditemukan melalui pertanyaan ini.)
Oleh karena itu, saya sarankan untuk menggunakan salah satu dari dua kemungkinan:
(1) Membagi prosedur menjadi dua prosedur terpisah - satu yang mengembalikan data dari EMP, dan satu lagi dari DEPT - dan mengakses prosedur baru sebagai dua set data terpisah.
(2) Menyatukan dua kueri terpisah (dengan kolom tambahan untuk menunjukkan kueri mana yang menghasilkan setiap baris) dan memfilter atau memformat laporan Anda secara kondisional dengan tepat. Kueri yang disatukan mungkin terlihat seperti ini:
SELECT EMPID ID, ENAME NAME, JOB JOB_LOC, SAL, DEPTID, 'EMP' SOURCE
FROM EMP
UNION ALL
SELECT DEPTID ID, DNAME NAME, LOC JOB_LOC, NULL SAL, DEPTID DEPTID, 'DEPT' SOURCE
FROM DEPT
Saya menggunakan Parameter di SP untuk menarik beberapa set Hasil di SSRS sepanjang waktu. Anda harus memisahkannya dengan pernyataan IF di SP dan juga Anda harus MENGETIKAN FIELDS dalam pengaturan Dataset SSRS.
Kelihatannya aneh, tapi itu berhasil...
Berikut ini contohnya.
Stored Procedure (SP) memiliki 2 Parameter yang didefinisikan @OfficerID @DatasetFlag
@OfficerID adalah # Karyawan yang harus dilewatkan atau dimasukkan ke dalam (formulir input Data SSRS) DatasetFlag adalah cara untuk mengontrol pernyataan IF mana yang dieksekusi dalam SP.
CREATE PROCEDURE [dbo].[StoredProcedureNameHere]
@OfficerID VARCHAR(7),
@DatasetFlag VARCHAR(60)
WITH RECOMPILE
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET NOCOUNT ON;
BEGIN TRY
IF @DatasetFlag = 'EmployeeName'
Begin
SELECT [EmployeeName]
FROM [DatabaseName].[scema].[Employee]
where EmployeeBNumber = @OfficerID
END
ELSE
IF @DatasetFlag = 'Expect'
Begin
SELECT
[TerritoryName]
,[TestNumber]
,[RuleNumber]
,[Expectation]
,[TestCount]
,[PercentToGoal]
FROM [Database].[scema].[Table2]
WHERE OfficerID = @OfficerID
ORDER BY TerritoryID
,TestNumber
,RuleNumber
END
RETURN
GO
REPORT memiliki 2 Dataset, satu yang saya buat dan akan menarik parameter dan NamaKaryawan yang lainnya saya buat dan menarik NamaKaryawan karena SSRS hanya dapat menggunakan 1 Set Hasil ~! TAPI.... Saya membodohinya ....
tapi saya cukup MEMBUAT FIELD dengan OVERTYPING EMPLOYENAME dan kemudian MENAMBAH sisanya (Query) Jadi Edit FIELDS di PROPERTIES dari DATASET dan masukkan ke dalam Pilih Nama Kolom.
Kemudian saya menggunakan menu PARAMETER (Dataset Properties) untuk memasukkan EXPRESSION dari ="NamaKaryawan" untuk Dataset pertama dan ="Expect" untuk Dataset kedua. Saya juga mencocokkan @OfficeID pada layar tersebut.
kemudian ketika saya menjalankan ini... ia meminta OfficerID (RS membuat formulir input) dan ketika saya memasukkan ID dan menekan LIHAT LAPORAN. Atau kita dapat membuat RDL dengan OfficerID, seperti halnya formulir SSRS, tetapi dalam halaman ASPX.
KEDUA DATASET dikembalikan (disebut dua kali adalah asumsi saya)
Jadi TIDAK ADA FILTERING aneh pada dataset UNION atau trik lain yang harus saya tangani di SSRS, yang tidak menyenangkan... (serius IIF?)
Saya telah melihat satu Prosedur Tersimpan di mana kami memiliki sekitar 20 Parameter, sehingga Anda dapat memfilter OUTPUT dari laporan pada tingkat SQL, daripada menarik dan memfilter monster pada laporan.
Tidak dapatkah Anda hanya membuat 20 Stored Procedures, TENTU YA, tetapi dengan cara ini, semua kode berada di SATU lokasi, dan tentu saja dapat menggunakan pilihan ke dalam Tabel TEMP untuk menggabungkan banyak hal, dan pada akhirnya cukup POPULASI tabel yang merupakan RESULT SET ..
Sebagai seorang programmer, saya merasa SSRS sedikit aneh, tetapi sejauh ini saya bersenang-senang, mencoba menemukan cara untuk mendapatkan apa yang saya inginkan, bukan apa yang ditawarkannya...
Cobalah sesuatu seperti itu:
Create StoredProcedure sp_MultipleDataSets(@Param nvarchar(10))
as
begin
if(@Param == "first")
begin
SELECT EMPID, ENAME, JOB, SAL, DEPTID FROM EMP -- first result set
end
if(@Param == "second")
begin
SELECT DEPTID, DNAME, LOC FROM DEPT --second result set
end
end