2016-12-21 10 views
0

Для каждой группы в SSRS (страны, города ...) рассчитать объем продаж, разделенных валютных курсов:Всего функции LOOKUP в SSRS

Sum(Fields!Net_Sales_Amount.Value)/LOOKUP(Fields!Country.Value, Fields!Country.Value, Fields!RATE.Value, "Currency") 

Как я могу создать Всего этой суммы (сумма в последней группе - страны)?

Каждое найденное мной решение показывает, как это сделать только для одной функции LOOKUP. Мне нужно разделить поле.

Вот схема моего доклада:

enter image description here

и структура:

enter image description here

Для расчета продаж для страны я просто нужно подвести продажи и разделить его на функции LOOKUP, но я не мог сделать это для Total. Мне нужно несколько значений ниже.

+1

Вы хотите суммировать каждую сумму (sales)/lookup (value) 'или вы хотите разделить общую сумму' sum (sales) 'на общую сумму всех' lookup (values) '? – iamdave

+0

Мне нужно разделить все продажи до суммы (у меня есть одно значение для каждой страны) – Testtest11

+1

Пожалуйста, добавьте фактический снимок экрана вашего отчета, а не его отдых в excel ... – iamdave

ответ

1

Думаю, вам просто нужно изменить данные, которые вы суммируете вместе, поскольку, похоже, вы просто находите обменные курсы?

Если это так, то вы должны быть в состоянии использовать только

=Sum(Fields!Net_Sales_Amount.Value/LOOKUP(Fields!Country.Value, Fields!Country.Value, Fields!RATE.Value, "Currency")) 

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


Если вы хотите для поиска много значений, а затем sum их все вместе, однако, это немного сложнее.

Вместо использования lookup вам необходимо использовать lookupset, который использует тот же синтаксис, но может возвращать более одного значения. Однако нет встроенной функции, которая может вернуть эти возвращаемые значения, так как значения, возвращаемые в функции lookupset, фактически являются объектами, а не цифрами. Таким образом, вам нужно будет использовать собственный код.

Откройте свое Свойство отчета, а затем окно пользовательского кода, в который можно вставить следующее:

Function SumLookup(ByVal items As Object()) As Decimal 
If items Is Nothing Then 
    Return Nothing 
End If 

Dim suma As Decimal = New Decimal() 
Dim ct as Integer = New Integer() 
suma = 0 
ct = 0 

For Each item As Object In items 
    suma += Convert.ToDecimal(item) 
    ct += 1 
Next 

If (ct = 0) Then return 0 else return suma 
End Function 

Это может быть использовано в текстовом поле как выражение:

=Code.SumLookup(LookupSet(Fields!Country.Value, Fields!Country.Value, Fields!RATE.Value, "Currency")) 

которые вы можете использовать наряду с другими числовыми значениями для агрегаций или вычислений.

+0

Да, я просто ищу обменный курс для каждый продажа. Первый подход возвращает мне значение NAN, даже если я конвертирую NULL в 0 (используя пользовательскую функцию). – Testtest11

+1

@ Testtest11 У вас есть значения 'NULL' в ваших наборах данных? Кроме того, почему вы не включаете свои курсы обмена в набор данных 'Sales' и не делаете этот расчет до того, как данные попадут в ваш отчет? – iamdave

+0

Я получаю правильные значения для групп. У меня есть NaN только для общего.Это разные курсы обмена, используемые для планирования бюджета (один обменный курс для страны/валюты). Я беру данные из куба OLAP и делаю LOOKUP, потому что не нашел лучшего решения. – Testtest11

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