формулировка запроса SSRS для включения нулевых / пустых строк в GROUP BY - PullRequest
0 голосов
/ 29 сентября 2011

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

В крайнем левом столбце, в первом ряду (технически 2-й по изображению), всегда должно появляться имя моего растения:

enter image description here

enter image description here

По сути, первое изображение показывало только мои пустые строки / столбцы. Первый столбец, первая строка, где всегда должно быть название моего завода. Остальные столбцы - мои возвращенные данные, основанные на выборе даты.

На втором изображении будет показано, что все работает, как и должно быть, когда есть данные.

Я группируюсь по PlantCode в SSRS, что и дает моему заводу название. Я не знаю, как заставить название растения появляться, даже если нет доступных данных.

Возможно ли это?

Я ДУМАЛ, что мог бы использовать что-то вроде iif(salesvolume is NOTHING, [PlantCODE],[PlantCode])

Вот запрос к базе данных для отчета

SELECT
    PInv.[Plant_Numer],
    PInv.[Plant_Code],
    PInv.{Department_number],
    PInv.[Inventory_Volume],
    Pinv.[Inventory_Date], -- 'Last Inventory Date'
    pls.[Actual_Volume],
    pls.[Budget_Volume],
    ppf.[Good_Output_Product_Units] AS 'Production Volume', -- 'Next Day Production
    CASE 
        WHEN coalesce (pls.[Acutal_Volume],0) = 0 and coalesce (pls.[Actual_Sales_Dollars],0) = 0 THEN 0
        ELSE ((pls.[Actual_Sales_Dollars/pls.[Actual_Volume])) AS 'Average Price' -- 'Next Day Sales'
FROM
    [TrueOpportunity].[dbo].[Production_Fact] pf
    inner join [TrueOpportunity].[dbo].[Production_Process_Fact] ppf on ppf.production_number = pf.production_number
    inner join [TrueOpportunity].[dbo].[Process] prc on prc.process_number = pf.process_number
    inner join [TrueOpportunity].[dbo].[Department] dpt on dpt.department_number = prc.department_number
    inner join [WoodProduction_New].[dbo].[Plywood_Layup_Sales] pls on pls.procesS_number = pf.procesS_number
    inner join [WoodProduction_New].[dbo].[Process_Inventory] Pinv on PInv.[Inventory_Date] = pf.date 
        and pls.product_date = pf.date 
        and dpt.department_number = pinv.department_number
WHERE
    pf.date between @BeginningDate and @EndingDate

1 Ответ

0 голосов
/ 29 сентября 2011

Я думаю, что вы хотите изменить свой запрос таким образом, чтобы инвентаризация процессов была вашей основной таблицей, а все остальные таблицы LEFT JOINED соответствовали этой таблице. Таким образом, номер и код завода будут отображаться независимо от того, есть ли соответствующие данные в других таблицах.

Этот синтаксис, вероятно, не совсем корректен, но я бы начал с изменения вашего предложения FROM, чтобы оно выглядело примерно так:

FROM
    [WoodProduction_New].[dbo].[Process_Inventory] Pinv
    LEFT JOIN [TrueOpportunity].[dbo].[Production_Fact] pf 
        ON PInv.[Inventory_Date] = pf.date
    LEFT JOIN [TrueOpportunity].[dbo].[Production_Process_Fact] ppf 
        ON ppf.production_number = pf.production_number
    LEFT JOIN [TrueOpportunity].[dbo].[Process] prc 
        ON prc.process_number = pf.process_number
    LEFT JOIN [TrueOpportunity].[dbo].[Department] dpt 
        ON dpt.department_number = prc.department_number 
        AND dpt.department_number = pinv.department_number
    LEFT JOIN [WoodProduction_New].[dbo].[Plywood_Layup_Sales] pls 
        ON pls.process_number = pf.process_number 
        AND pls.product_date = pf.date 

Поэкспериментируйте с этим и посмотрите, сможете ли вы отобразить нужные вам данные.

...