Генерация отчетов SSRS без выбора всех параметров - PullRequest
0 голосов
/ 28 июня 2019

Я устанавливаю отчет SSRS без обязательных полей, нужно несколько значений.

Согласно сайту https://www.mssqltips.com/sqlservertip/3502/allow-null-value-in-multi-value-report-parameter-in-sql-server-reporting-services/

, все же клиенту нужен вывод без предоставления какого-либо ввода, т. Е. Если есть 10 параметров, нам нужен вывод, основанный на выборе 3 или 4 или любого количества других параметров.

Я сделаю запрос, который выполняется согласно
https://www.tutorialgateway.org/sql-query-to-select-all-if-parameter-is-empty-or-null/ проверить эту строку

WHERE Occupation = IIF(@Occupation IS NULL, Occupation, @Occupation)

Это также используется в моем коде.

SELECT [Order].[PartNumber],
        [Order].[BuildCode],[Order].[Product],[Order].[AssemblyUnitName],[Order].[ProductionStatus]  ,
            SUM([Order].[QTY]) AS [QTY]  FROM  (SELECT [Order].[PartNumber],[Order].[AssemblyUnitName],[Order].[BuildCode]    ,
    CASE WHEN 
        [Order].[BuildCode] LIKE '%-230B-%' THEN     
    CASE WHEN 
        [Order].[BuildCode] LIKE '%-HIGH-%' THEN '230B-HIGH' WHEN [Order].[BuildCode] LIKE '%-LOW-%' THEN '230B-LOW'        
            ELSE '230B-SPORT'     END    
            ELSE     
    CASE WHEN 
        [Order].[BuildCode] LIKE '%-0TAL-%' THEN 'NCAP-0T' WHEN [Order].[BuildCode] LIKE '%-AURA-%' THEN 'NCAP-AURA'    WHEN [Order].[BuildCode] LIKE '%-DUNE-%' THEN 'NCAP-DUNE'        WHEN [Order].[BuildCode] LIKE '%-24TK-%' THEN 'NCAP-24TK'        WHEN [Order].[BuildCode] LIKE '%-COST-%' THEN 'NCAP-COSTA'        ELSE 'NCAP-2T'     
            END    END   
    +CASE WHEN 
        [Order].[AssemblyUnitName] ='230B FS RH MAIN' THEN '-RH'        
            WHEN [Order].[AssemblyUNitName] ='230B FS LH MAIN' THEN '-LH'        
            WHEN [Order].[AssemblyUNitName] ='230B RSB 40 MAIN' THEN '-RSB40'        
            WHEN [Order].[AssemblyUNitName] ='230B RSB 60 MAIN' THEN '-RSB60'        
            WHEN [Order].[AssemblyUNitName] ='230B RSB 100 MAIN' THEN '-RSB100'        
            WHEN [Order].[AssemblyUNitName] ='230B RSC 100 MAIN' THEN '-RSC100'   
            END AS [Product]  ,
    CASE WHEN 
        [Order].[ProcessStatus]>=50 AND [Order].[ProductionStatus]>=100 THEN 'FG'        
            WHEN MAX([Operation2].[Status]) IS NULL THEN 'FG'        
            WHEN [Order].[ProcessStatus]>=20 OR [Order].[ProductionStatus]>=20 THEN 'WIP' END AS [ProductionStatus]  ,
            1.0 AS [QTY]  ,
        SUBSTRING('>= CAST(CAST({FN NOW()} AS DATETIME)-60.2430555555555556',0,0) AS 'UNWANTED'  
            FROM [Order] WITH (NOLOCK)    LEFT JOIN [Operation] AS [Operation2] WITH (NOLOCK) ON  [Order].[Id]=[Operation2].[OrderId] AND [Operation2].[OperationTemplateReference]<>1039 AND [Operation2].[Status]<>'F'   
             WHERE 

[Order].[PartNumber] in (IIF(@PartNumber IS NULL, [Order].[PartNumber], @PartNumber)  )
and [Order].[BuildCode] in( IIF(@BuildCode IS NULL, [Order].[BuildCode], @BuildCode) )
and [Order].[AssemblyUnitName] in (IIF(@AssemblyUnitName IS NULL, [Order].[AssemblyUnitName], @AssemblyUnitName) )

GROUP BY 
                [Order].[Id],[Order].[OrderNumber],
                [Order].[PartNumber],[Order].[BuildCode], 
                                [Order].[AssemblyUnitName],
                [Order].[IsScrap],[Order].[ProcessStatus],
                [Order].[ProductionStatus]) AS [Order]  GROUP 
                                BY [Order].[PartNumber],
                [Order].[BuildCode],[Order].[Product],
                [Order].[AssemblyUnitName],
                [Order].[ProductionStatus]  ORDER BY [Order]. 
                         [BuildCode]  OPTION (MAXDOP 2, MAX_GRANT_PERCENT=10)

Ожидаемый результат: создание отчета SSRS без выбора параметров. Если что-то не так в условии запроса, поменяйте местами.

Токовый выход: enter image description here

enter image description here

1 Ответ

0 голосов
/ 06 июля 2019

Спасибо @Alan Schofield, я заменил

[Order].[PartNumber] in (IIF(@PartNumber IS NULL, [Order].[PartNumber], @PartNumber)  )
and [Order].[BuildCode] in( IIF(@BuildCode IS NULL, [Order].[BuildCode], @BuildCode) )
and [Order].[AssemblyUnitName] in (IIF(@AssemblyUnitName IS NULL, [Order].[AssemblyUnitName], @AssemblyUnitName) )

на это.

(@PartNumber IS NULL OR [Order].[PartNumber] IN (@PartNumber))
and (@BuildCode IS NULL OR [Order].[BuildCode] IN(@BuildCode) )
and (@AssemblyUnitName IS NULL OR [Order].[AssemblyUnitName] IN (@AssemblyUnitName) )

Включая информацию с двух вышеупомянутых сайтов, мы получим отчеты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...