Переменная Выражение SSRS - Сумма, Сумма, Область?

Я пытаюсь написать выражение для переменной (не для параметра), чтобы я мог использовать / ссылаться на него, чтобы сделать расчет в другом текстовом поле. У меня есть несколько наборов данных, и мне нужно SUM(SUM(Fields!amount.Value)) для каждого из этих наборов данных. Затем я собираюсь использовать эти цифры в другом текстовом поле, добавляя их друг к другу. Мне нужна помощь с синтаксисом. Я могу использовать SUM самостоятельно, без проблем. Например, это прекрасно работает:

=SUM(Fields!Amount.Value, "DataSet1")

Но я получаю сообщение об ошибке при попытке изменить его следующим образом (что мне действительно нужно):

=SUM(SUM(Fields!amt.Value, "Acctrange_90300_90399_InterestExpenses"))

Я получаю сообщение об ошибке

"Выражение переменной для" тела "отчета использует агрегатное выражение без области. Область необходима для всех агрегатов, используемых вне области данных, если отчет не содержит ровно один набор данных".

У меня есть догадка, что есть проблема с моим размещением синтаксиса / паразитов. Какие-либо предложения?

3 ответа

Решение

Не могли бы вы предоставить подробный пример, возможно, с примерами данных и ожидаемым решением?

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

Еще раз извините за ответ, просто чтобы узнать больше информации, но я не вижу опции комментария.


ОБНОВИТЬ:

Хорошо, теперь я думаю, у вас есть что-то вроде

      | a  | b  | c  | d  |
---------------------------
1     | *  | *  | *  | *  |
---------------------------
2     | *  | *  | *  | *  |
---------------------------
3     | *  | *  | *  | *  |
---------------------------
total | w  | x  | y  | z  |

так SUM(Fields!a.Value) даст вам w, а также SUM(Fields!b.Value) даст вам x, и так далее. и вы хотите w+x+y+z? Если это так, то вы можете сделать это:

добавить вычисляемое поле в ваш набор данных, чтобы вычислить итоги строки, как

{ (a1+b1+c1+d1),(a2+b2+....), .... },

а затем из вашей переменной, вызовите

SUM(Fields!CalculatedField.Value),

для приведенного выше примера вы можете дать вычисляемому полю выражение в виде:

= CInt(Fields!a.Value)+CInt(Fields!b.Value)+CInt(Fields!c.Value)+CInt(Fields!d.Value)

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

Надеюсь, это то, что вы хотели. В противном случае, я попытался понять проблему.:)

Внешний SUM тоже нужна сфера Попробуй это:

=SUM(SUM(Fields!amt.Value,"Acctrange_90300_90399_InterestExpenses"),"Acctrange_90300_90399_InterestExpenses")

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

Когда SSRS хочет, чтобы у меня были такие головные боли, я обманываю. Я помещаю внутренний расчет в скрытое текстовое поле или называю поле, в котором он отображается, если я хочу, чтобы он отображался, а затем обращаюсь к нему по имени. Поэтому, если бы у меня была сумма первого столбца в текстовом поле с именем txtFirstColumnSum, а сумма второго столбца в текстовом поле с именем txtSecondColumnSum, я бы использовал:

=cdec(ReportItems!txtFirstColumnSum.Value)+ cdec(ReportItems!txtSecondColumnSum.Value)...

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

Public Function DeltaPercent(ByVal currentAmount as decimal,ByVal pastAmount as Decimal) as Decimal
    Dim difference as decimal
    Dim result as decimal
    if pastAmount<>0 then
        difference=currentAmount-pastAmount
        result=difference/pastamount
    else
        result=0
    end if
return result

End Function

Затем, чтобы получить% изменения, я называю это:

=Code.DeltaPercent(Sum(Fields!SalesYTD.Value, "SalesTerritory"),Sum(Fields!SalesPY1TD.Value, "SalesTerritory"))

Один совет, который я хотел бы знать раньше: если вы используете синтаксис

ReportItems("txtFirstColumnSum").Value 

Вы должны убедиться, что вы печатаете правильно. Если вы используете синтаксис взрыва (!) Выше, вы получите intellisense.

Другие вопросы по тегам