簡體   English   中英

如何在SSRS中使用多值參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM