Как обойти сумму (первое (...)) недопустимое ограничение SSRS2005 - PullRequest
5 голосов
/ 21 апреля 2009

Проблема, с которой я сталкиваюсь, состоит в том, что службы отчетов SQL Server не любят нотацию Sum (First ()). Это позволит только Sum () или First ().

Контекст
Я создаю отчет о сверке. то есть. какой носок у нас был в начале периода, что было заказано и какой запас у нас был в конце.

Набор данных возвращает что-то вроде
Type,Product,Customer,Stock at Start(SAS), Ordered Qty, Stock At End (SAE)
Export,1,1,100,5,90
Export,1,2,100,5,90
Domestic,2,1,200,10,150
Domestic,2,2,200,20,150
Domestic,2,3,200,30,150

Я группирую по типу, затем по продукту и перечисляю клиентов, которые купили этот продукт Я хочу отобразить итоговые значения для SAS, Упорядоченного Кол-во и SAE, но если я сделаю Сумму для SAS или SAE, я получу значение 200 и 600 для Продукта 1 и 2 соответственно, когда оно должно быть 100 и 200 соответственно.

Я думал, что мог бы сделать Sum (First ()), но SSRS жалуется, что у меня не может быть агрегата в агрегате.

В идеале для SSRS требуется сумма (Distinct ())

Решения пока что
1. Не показывайте Запас в начале и Запас в конце как часть итогов.
2. Напишите некоторый код прямо в отчете, чтобы сделать расчет. попробовал это - не сработало, как я ожидал. 3. Напишите сборку, чтобы сделать расчет. (Не пробовал этот)

Правка - Разрешение проблем
Проблема связана с тем, что на самом деле это два отчета, объединенных в один (как я вижу). Производственный отчет и отчет о продажах.
В отчете пытались учесть эти критерии

  • рынок, на который мы его продали (внутренний, экспорт)
  • сколько у нас было в наличии,
  • сколько было произведено,
  • сколько было продано,
  • кому мы его продали,
  • сколько у нас осталось.

Сложным фактором является тот, кому мы его продали. без этого это было бы относительно легко. Но в том числе это означает, что другие верхние показатели (запас в начале и запас в конце) не имеют ничего общего с тем, что продается, кроме конкретного продукта.

Ответы [ 4 ]

5 голосов
/ 21 апреля 2009

У меня была похожая проблема, и в результате я использовал ROW_NUMBER в своем запросе для предоставления целого числа для значения строки, а затем использовал SUM (IIF (myRowNumber = 1, myValue, 0)).

Я отредактирую это, когда доберусь до работы и предоставлю больше данных, но подумал, что этого может быть достаточно, чтобы вы начали. Мне тоже интересно решение Адольфа.

1 голос
/ 27 апреля 2009

ваш набор данных немного странный, но я думаю, что понимаю, куда вы идете.

попробуйте вернуть набор данных в следующем порядке: Тип, продукт, SAS, SAE, клиент, заказанный кол-во

я бы создал отчет с контролем таблицы. я бы настроил тип, продукт и клиента как три отдельные группы. я бы поместил данные sas и sae в ту же группу, что и продукт, а количество в группу клиентов. это должно напоминать то, что я считаю, что вы пытаетесь пойти на. ваш sas и sae должны быть в первом ()

1 голос
/ 21 апреля 2009

Пух! Где мой колышек?!

Задумывались ли вы об использовании в SQL функций управления окнами / ранжирования?

Это позволяет объединять данные без потери детализации

например. Представьте, что для диапазона значений вы хотите вернуть Min и Max, но вы также хотите вернуть исходные данные (без сводки данных).

Group Value Min Max
A      3    2    9
A      7    2    9
A      9    2    9
A      2    2    9
B      5    5    7
B      7    5    7
C etc..

Синтаксис выглядит странно, но это просто

AggregateFunctionYouWant  OVER (WhatYouWantItGroupedBy, WhatYouWantItOrderedBy) as AggVal

Оконная

Рейтинг

0 голосов
/ 21 апреля 2009

Написать подзапрос.

В идеале для SSRS требуется сумма (Distinct ())

Перепишите ваш запрос, чтобы сделать это правильно.

Я подозреваю, что ваша проблема в том, что вы написали запрос, который дает неверные результаты, или у вас плохо спроектированные таблицы. Не зная больше о том, что вы пытаетесь сделать, я не могу сказать вам, как это исправить, но у него плохой «запах».

...