Общее выражение не отображает правильные данные в SSRS 2008 - PullRequest
2 голосов
/ 15 июля 2011

Долгое время читатель. Огромное количество информации на этом сайте.

Надеюсь, это не глупый вопрос, но я изо всех сил пытался найти правильные итоги в моем отчете.

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

Вот мои данные:

Correct Data

Specialist  Total Sales     Budget          Difference
DICK        "$35,174.00"    "$63,530.00"    "($28,356.00)"
NATHAN      "$16,193.00"    "$40,000.00"    "($23,807.00)"
PAUL        "$52,096.00"    "$55,000.00"     "($2,904.00)"
STEVE       "$31,185.44"    "$66,700.00"    "($35,514.56)"

**Totals:  "$134,648.44"   "$225,230.00"    "($90,581.56)"**

Incorrect Data that is in my report

Specialist   Total Sales     Budget          Difference
DICK         "$35,174.00"    "$63,530.00"    "($28,356.00)"
NATHAN       "$16,193.00"    "$40,000.00"    "($23,807.00)"
PAUL         "$52,096.00"    "$55,000.00"     "($2,904.00)"
STEVE        "$31,185.44"    "$66,700.00"    "($35,514.56)"

**TOTALS:   "$134,648.44"   "$225,230.00"     "$71,118.44"**

Как видите, данные показывают, что общая разница составляет 71 118,44 долл. США, когда она должна быть (90 581,56 долл. США).

Вот мое выражение, чтобы получить результат разницы:

=Sum(Fields!TotalSales.Value)-Fields!Budget.Value

Я щелкнул правой кнопкой мыши на текстовом поле и выбрал «Добавить итог», чтобы получить общий итог для поля Разница. Я также попробовал это предложение:

=Sum(Fields!TotalSales.Value)-Sum(Fields!Budget.Value)

А это:

=ReportItems!textbox14.Value - ReportItems!textbox15.Value

Еще одна вещь, которую стоит упомянуть, это группировка по специалисту. Поле «Всего продаж» - это общее количество продаж в группе за этот конкретный месяц. Поле «Бюджет» - это отдельное поле вне группы.

Кажется, что ежу понятно, что это должно работать. Может быть, кто-нибудь может дать мне некоторое руководство по этому вопросу.

Заранее спасибо.

EDIT:

Спасибо за помощь, но, к сожалению, проблема сложнее :) Я должен был быть более ясным по этому поводу. Я извлекаю данные из 3-4 баз данных, и у них нет общего поля для ссылки. То, что я использую номер строки, чтобы уменьшить дубликаты промежуточных итогов и установить их равными 0. Я использовал круглое число для номера бюджета, но данные, которые я получал, были поддельными. Вот данные, которые у меня есть:

Name    Team    SubTotal Budget 
SCOTT   Vikings 202      25000.00 
SCOTT   Vikings 1890     25000.00 
SCOTT   Vikings 5167     25000.00 
SCOTT   Vikings 20256    25000.00 
SCOTT   Vikings 0        25000.00 
SCOTT   Vikings 0        25000.00

А вот данные, которые я хочу получить:

Name    Team    SubTotal Budget 
SCOTT   Vikings 202      25000.00 
SCOTT   Vikings 1890         0.00 
SCOTT   Vikings 5167         0.00 
SCOTT   Vikings 20256        0.00 
SCOTT   Vikings 0            0.00 
SCOTT   Vikings 0            0.00

Если номер бюджета повторяется более одного раза, я хочу, чтобы он был равен 0. Я думаю, именно поэтому мои итоги не отображаются правильно в SSRS. Я вычисляю поле Разница, беря GrandTotal подытогов Продавца и вычитая их из поля бюджета, которое было помещено в нижний колонтитул группы (поскольку я новичок, я не могу публиковать изображения, извините. Вот гиперссылка) *

http://i55.tinypic.com/124jw2u.png

Вот и мой SQL-оператор:

WITH InvoicedAndPaid
AS

(
SELECT KEY1
  ,ltrim(rtrim(CustomText01)) as CustomText01
  ,ROW_NUMBER() OVER(PARTITION BY DocNo ORDER BY DocNo) AS RowNumber      
  ,SubTotal
  ,OrderDate     
      ,INVOICEDATE
FROM DocumentHeadersItems AS AA
JOIN SorArCombined AS BB
ON AA.DocNo = ('AA' + BB.CustomerPoNumber)
JOIN CONTACT1 AS CC
ON AA.SoldToCMAccountNo = CC.ACCOUNTNO
WHERE CreatedBy != 'NOAHDM'
  AND KEY1 IN (@org)
  AND SubTotal != 0
  AND LEN(INVOICE) > 0
  AND
     (

        (
            CUSTOMER = 'QAA'
            AND (INVOICEDATE IS NOT NULL)
            AND (DATEPART(MM,INVOICEDATE) = DATEPART(MM,@start))
            AND (DATEPART(YYYY,INVOICEDATE) = DATEPART(YYYY,@end))
         )
      OR
         (
            CUSTOMER != 'QAA'
            AND (YearInvBalZero > 0)
            AND (YearInvBalZero = DATEPART(YYYY,@start))
            AND (MonthInvBalZero = DATEPART(MM,@start))
            AND (YearInvBalZero = DATEPART(YYYY,@end))
            AND (MonthInvBalZero = DATEPART(MM,@end))               
          )
      )
)

SELECT bb.team_id
  ,bb.specialist_id
  ,dd.Budget
  ,cc.team_name
  ,KEY1
  ,CustomText01
  ,CASE WHEN RowNumber = 1 THEN SubTotal ELSE 0 END as SubTotal
FROM InvoicedAndPaid as aa
join SalesReporting.dbo.team_members as bb
on rtrim(aa.CustomText01) = rtrim(bb.specialist_name)
join SalesReporting.dbo.team_master as cc
on bb.team_id = cc.team_id
join SalesReporting.dbo.sales_goals as dd
on bb.specialist_id = dd.specialist_id
WHERE dd.time_span LIKE 'M%'
  AND dd.month = DATENAME(MONTH,@end)
  AND dd.Org = aa.KEY1
  AND cc.team_name in (@team)
  AND dd.period_no = DATEPART(MM,@end)
ORDER BY team_name, CustomText01

Это немного помогает? Я стараюсь избегать хранимых процедур, потому что я довольно новичок в SSRS и SQL Server.

Ответы [ 2 ]

2 голосов
/ 16 июля 2011

Одним из вариантов будет вычисление общих продаж в запросе SQL Server, который используется в наборе данных SSRS. Следующий пример показывает образец. Образец был создан на основе предположения о том, как я предполагал, что таблица может быть. Отчет был создан в SSRS 2008 R2 и использовалась база данных SQL Server 2008 R2.

  1. Предполагается, что исходная таблица такая, как показано на скриншоте # 1 . Таблица не нормализована, но показана здесь только для примера.

  2. Запрос к базе данных отчетов будет таким, как показано на скриншоте # 2 . Запрос также предоставляется в разделе Запрос набора данных SSRS .

  3. Отчет будет выглядеть так, как показано на скриншоте # 3 . Выражение в разделе a будет =Fields!TotalSales.Value - Fields!Budget.Value, а выражение в разделе b будет =Sum(Fields!TotalSales.Value, "SalesData") - Sum(Fields!Budget.Value, "SalesData").

  4. Снимок экрана # 4 показывает выполнение отчета.

Надеюсь, это поможет.

Запрос набора данных SSRS:

SELECT      Specialist
        ,   SUM(Sales) AS TotalSales
        ,   SUM(DISTINCT(Budget)) AS Budget 
FROM        dbo.SalesData 
GROUP BY    Specialist

Скриншот № 1:

1

Скриншот № 2:

2

Снимок экрана № 3:

3

Снимок экрана № 4:

3

1 голос
/ 19 июля 2011

В этом редком случае мне пришлось добавить нижний колонтитул и связать формулы сумм с фактическими текстовыми полями. Очень странно, что это сработало, но регулярные выражения - нет.

Я ценю вашу помощь в этом!

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