[英]How to use multivalue parameters in SSRS
我有一張桌子。 1有1個多值參數列出所有稱為PROPERTIES的屬性。 我希望表一次顯示每行1個屬性。
該表大約有20列,引用了不同的數據集。
引用該屬性的所有數據集都有: WHERE RMPROPID IN (@PROPERTIES)
,數據集的@PROPERTIES
值為: =JOIN(Parameters!PROPERTIES.Value,",")
(這將創建所選屬性列表)
該表有一行,引用不同的數據集。 表數據集是SelectedProperties
,行上的group by是=Fields!RMPROPID.Value
SelectedProperties
數據集如下所示:
SELECT
RMPROPID,
propname
FROM
RMPROP
WHERE
RMPROPID IN (@PROPERTIES)
每當我選擇多個房產時,它都不起作用。 什么都沒有歸還。 有沒有我缺少的技巧? 我希望一行一行引用一行。
問題是您在將參數傳遞給查詢時重新定義參數:
你不應該有這個部分: =JOIN(Parameters!PROPERTIES.Value,",")
這不會創建所選值的列表。 它創建了一個單一的值是一個字符串組合所有選擇值的。
用just =Parameters!PROPERTIES.Value
替換上面的位。 SSRS會謹慎處理或將多個值放入SQL查詢中。
您應該能夠將索引放在最后,如下所示:
參數!<ParameterName> .Value(0)
您可以根據行返回或類似的行進行索引。
更多信息: http : //msdn.microsoft.com/en-us/library/aa337292(v = sql.90).aspx
一種非高效但有效的方法是使用varchar(MAX)並以逗號分隔的方式獲取UID。
然后你可以對它做一個喜歡:
CREATE FUNCTION [dbo].[tfu_RPT_SEL_Gebaeude]
(
--@in_mandant varchar(3)
--,@in_sprache varchar(2)
--,@in_groups varchar(8000)
--,@in_stichtag varchar(50)
@Standortkategorie varchar(MAX)
,@Standort varchar(MAX)
)
RETURNS table
AS
RETURN
(
SELECT '00000000-0000-0000-0000-000000000001' AS RPT_FID_SK_UID, '00000000-0000-0000-0000-000000000000' AS RPT_FID_SO_UID, '00000000-0000-0000-0000-000000000000' AS RPT_UID, 'Ohne' AS RPT_Name, 999999999 AS RPT_Sort
UNION
SELECT DISTINCT
ISNULL(T_AP_Gebaeude.GB_SK_UID, '00000000-0000-0000-0000-000000000000') AS RPT_FID_SK_UID
,T_AP_Gebaeude.GB_SO_UID AS RPT_FID_SO_UID
,T_AP_Gebaeude.GB_UID AS RPT_UID
--,T_AP_Gebaeude.GB_MDT_ID AS RPT_MDT_ID
--,ISNULL(GB_Nr, '') + ' - ' + ISNULL(GB_Bezeichnung, '') AS RPT_Name
,T_AP_Gebaeude.GB_Bezeichnung AS RPT_Name
--,T_AP_Gebaeude.GB_Bezeichnung AS RPT_Sort
,ROW_NUMBER() OVER (ORDER BY T_AP_Gebaeude.GB_Bezeichnung ASC) AS RPT_Sort
FROM T_AP_Gebaeude
WHERE (1=1)
-- AND (T_AP_Standort.SO_MDT_ID = @in_mandant)
AND (T_AP_Gebaeude.GB_Status = 1)
AND (T_AP_Gebaeude.GB_DatumBis >= CONVERT(char(8), { fn NOW() }, 112))
AND (T_AP_Gebaeude.GB_DatumVon <= { fn NOW() })
--AND ( ISNULL(T_AP_Gebaeude.GB_SK_UID, '00000000-0000-0000-0000-000000000000') IN (@Standortkategorie) )
AND ',' + @Standortkategorie + ',' LIKE '%,' + ISNULL(CAST(T_AP_Gebaeude.GB_SK_UID AS varchar(36)), '00000000-0000-0000-0000-000000000000') + ',%'
-- AND ( ISNULL(T_AP_Gebaeude.GB_SO_UID, '00000000-0000-0000-0000-000000000000') IN (@Standort) )
AND ',' + @Standort + ',' LIKE '%,' + ISNULL(CAST(T_AP_Gebaeude.GB_SO_UID AS varchar(36)), '00000000-0000-0000-0000-000000000000') + ',%'
/*
AND
(
( @in_groups = '0000')
OR
(
SELECT
ISNULL(SUM(CAST(SOR_IsRead AS int)), 0) AS SOR_IsRead
FROM T_SYS_Standortrechte
WHERE (1=1)
AND T_SYS_Standortrechte.SOR_SO_UID = T_AP_Standort.SO_UID
--AND SOR_SO_UID = '274751EB-AED4-4E4C-B6D1-57C4FDBC8925'
AND @in_groups LIKE '%,' + CAST(T_SYS_Standortrechte.SOR_GRANTEE_ID AS varchar(36)) + ',%'
) > 0
)
AND
(
( @in_groups = '0000')
OR
(
SELECT
ISNULL(SUM(CAST(GBR_IsRead AS int)), 0) AS GBR_IsRead
FROM T_SYS_Gebaeuderechte
WHERE (1=1)
AND T_SYS_Gebaeuderechte.GBR_GB_UID = T_AP_Gebaeude.GB_UID
--AND GBR_GB_UID = '274751EB-AED4-4E4C-B6D1-57C4FDBC8925'
AND @in_groups LIKE '%,' + CAST(T_SYS_Gebaeuderechte.GBR_GRANTEE_ID AS varchar(36)) + ',%'
) > 0
)
*/
)
GO
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.