2016-04-28 4 views
3

У меня есть отчет SSRS, который показывает мне общий доход, сгруппированный по финансовому году, финансовому кварталу и типу бизнеса. Мне нужно добавить последний столбец, который подсчитывает числовые строки, которые составляют общий номер дохода, где каждая строка представляет один бизнес.Как сделать подсчет строк с определенным набором данных в SSRS

В основном мне нужно знать, сколько отдельных предприятий в конкретном типе бизнеса способствовало сумме за это время. Я подробно объясню ниже.

Во-первых здесь есть хранимая процедура, которая подает данные отчета:

SELECT 
id 
,assess_year 
,CASE 
    WHEN MONTH(date_received) IN (7,8,9) THEN 1 
    WHEN MONTH(date_received) IN (10, 11, 12) THEN 2 
    WHEN MONTH(date_received) IN (1, 2, 3) THEN 3 
    WHEN MONTH(date_received) IN (4, 5, 6) THEN 3 
    WHEN date_received is null THEN 0 
    ELSE 0 
END as Fiscal_Quarter 
,s_gross_revenue 
,CASE 
    WHEN LEFT(segment, 1) = 'A' THEN 'Accommodations' 
    WHEN segment BETWEEN 'B100' AND 'B699' THEN 'Restaurant' 
    WHEN segment BETWEEN 'B700' AND 'B999' THEN 'Retail' 
    WHEN LEFT(segment, 1) = 'C' THEN 'Attractions/Recreation' 
    WHEN LEFT(segment, 1) = 'D' THEN 'Travel Services' 
    WHEN LEFT(segment, 1) = 'E' THEN 'Rental Cars' 
    WHEN LEFT(segment, 1) = 'N' THEN 'Other' 
    ELSE 'UNDEFINED' 
END as Segement 
FROM mytable 
WHERE s_gross_revenue >0 AND assess_year IS NOT NULL 
    AND assess_year <> '' AND segment IS NOT NULL AND segment <>'' 
ORDER BY ASSESS_YEAR, FISCAL_QUARTER, SEGEMENT 

Я прикрепил изображение (Raw Data Image), чтобы показать пример необработанных данных, возвращаемых процедурой.

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

Мне просто нужна формула или группировка для подсчета всех строк для каждого бизнеса, составляющего общий доход.

Я также приложил изображение отчета (SSRS Report Image) с пустой колонкой в ​​конце, где должен идти счетчик строк.

Таким образом, в отчете SSRS укажите тип бизнеса «Ночлег» за 2014/15 финансовый год и финансовый квартал 1 должен иметь число строк в 4455 в последнем столбце, так как было 4455 отдельных предприятий, которые были указаны как помещения, получил доход в первом квартале 2014/15 года. Я просто не знаю, как сделать подсчет строк на основе определенных критериев в SSRS.

(Кроме того, я знаю, кварталы выглядят странно в SQL, наш бизнес год начинается в июле)

+0

Является ли бит MON MON (date_received) IN (4,5,6), который должен возвращать 3 или 4? – Kidiskidvogingogin

+0

Предполагается вернуть 4. Я видел его и исправил его, но только после того, как я отправил старый код. Спасибо, хотя, хороший улов. – ekim110575

+0

Какую версию SQL Server вы используете? – Kidiskidvogingogin

ответ

1

Если я правильно понимаю ваш вопрос, и если вы используете SQL Server 2008+, то вы можете вам OVER(...) чтобы сделать COUNT(...), сохраняя ваши данные о деталях.

Для бизнеса посчитать это будет выглядеть следующим образом:

COUNT(*) OVER (PARTITION BY assess_year, Fiscal_quarter, Segement) 

Здесь полностью измененный запрос, но выше часть действительно единственное изменение:

SELECT 
    id 
    ,assess_year 
    ,Fiscal_Quarter 
    ,s_gross_revenue 
    ,Segement 
    ,COUNT(*) OVER (PARTITION BY assess_year, Fiscal_quarter, Segement) BusinessCount 
FROM (
     SELECT 
      id 
      ,assess_year 
      ,CASE 
       WHEN MONTH(date_received) IN (7,8,9) THEN 1 
       WHEN MONTH(date_received) IN (10, 11, 12) THEN 2 
       WHEN MONTH(date_received) IN (1, 2, 3) THEN 3 
       WHEN MONTH(date_received) IN (4, 5, 6) THEN 4 
       WHEN date_received is null THEN 0 
       ELSE 0 
      END as Fiscal_Quarter 
      ,s_gross_revenue 
      ,CASE 
       WHEN LEFT(segment, 1) = 'A' THEN 'Accommodations' 
       WHEN segment BETWEEN 'B100' AND 'B699' THEN 'Restaurant' 
       WHEN segment BETWEEN 'B700' AND 'B999' THEN 'Retail' 
       WHEN LEFT(segment, 1) = 'C' THEN 'Attractions/Recreation' 
       WHEN LEFT(segment, 1) = 'D' THEN 'Travel Services' 
       WHEN LEFT(segment, 1) = 'E' THEN 'Rental Cars' 
       WHEN LEFT(segment, 1) = 'N' THEN 'Other' 
       ELSE 'UNDEFINED' 
      END as Segement 
     FROM mytable 
     WHERE s_gross_revenue > 0 
      AND ISNULL(assess_year,'') <> '' 
      AND ISNULL(segement,'') <> '' 
    ) data 
ORDER BY ASSESS_YEAR, FISCAL_QUARTER, SEGEMENT 

Я также сделал небольшой синтаксических изменение предложения where, это та же логика, но своего рода сокращенный способ сделать это. Вместо того, чтобы проверить, если SEGEMENT и ASSESS_YEAR являются NOT NULL AND NOT '' в отдельных отчетах вы можете объединить их в единой ISNULL(...,'') <> '', если SEGEMENT и ASSESS_YEAR являются значением типа текста, в противном случае вам придется использовать COALESCE(...) сделать то же самое. ISNULL(...) может быть заменен на COALESCE(...), если это необходимо.

Это также возможно, просто используя count(<field name>) в столбце id в отчете SSRS. Он должен дать вам те же результаты.

+0

Отлично. Именно то, что я искал. Я ценю помощь. – ekim110575

+0

@ ekim110575 Рад помочь, где я могу. – Kidiskidvogingogin

Смежные вопросы