Сводные значения и отображение на графике - PullRequest
0 голосов
/ 18 февраля 2019

Я борюсь с этой проблемой и не могу понять, как ее решить.

Это подробные данные моего набора данных:

Order  Item    StartDay      EndDay     EndYear  StartEndDiff
 1      1     01.01.2018   02.01.2018    2018         1
 1      2     03.01.2018   05.01.2018    2018         2
 2      1     05.01.2019   06.01.2019    2019         1
 2      2     06.01.2019   06.01.2019    2019         0
 2      3     08.01.2019   10.01.2019    2019         1
 3      1     07.01.2019   08.01.2019    2019         1

Теперь я сгруппировал их по Order (это прекрасно работает в таблице).Имя группы: OrderGroup:

Order   MinStartDay   MaxEndDay    EndYear  MinStartMaxEndDiff
 1      01.01.2018    05.01.2018    2018        4
 2      05.01.2019    10.01.2019    2019        5
 3      07.01.2019    08.01.2019    2019        1

Для MinStartMaxEndDiff Я получил следующее выражение:

=DateDiff("d", Min(Fields!StartDay.Value, "OrderGroup"), Max(Fields!EndDay.Value, "OrderGroup"))

Теперь я добавил еще одну группу в таблицу и вывел Avg(MinStartMaxEndDiff) вEndYear.Это все еще хорошо работает в tablix со всеми группировками.Результат:

Avg(MinStartMaxEnd)    Year
       4               2018
       3               2019

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

Проблема в том, что когда я пытаюсь добавить OrderGroup в диаграмму, она всегда показывает мне детали.Но мне нужна эта группа, чтобы получить правильные значения.Скрыть или установить метку категории на Nothing не сработало.Также установка DataElementOutput на NoOutput не помогла (реальный вид):

Actual Look

Мне просто нужно на оси XYears и в качестве значений Avg(MinStartMaxEnd).Это был бы мой желаемый результат, основанный на данных примера выше:

Desired Look

РЕДАКТИРОВАТЬ ПОСЛЕ РЕШЕНИЯ, КОТОРОЕ НАЙДЕНО:

Что я могу сделать, если данные строки выглядят так:

Order  Item    StartDay      EndDay     EndYear  StartEndDiff
 1      1     29.12.2018   02.01.2019    2019         4
 1      2     28.12.2018   30.12.2018    2018         2

Эта таблица будет разделена на два отдельных datarow в таблице вместе из-за группировки EndYear.Ожидаемый результат должен выглядеть следующим образом:

Order   MinStartDay   MaxEndDay    EndYear  MinStartMaxEndDiff
 1      28.12.2018    02.01.2019    2019        5

Но группировка года с выражением

=Max(CDate(Fields!EndYear.Value), "OrderGroup")

невозможна.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

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

Добавьте следующий пользовательский код в свой отчет

Public Dim YearAvg As New System.Collections.Generic.Dictionary(Of String , Decimal )

Public Function SetYearAverage( ByVal s As String,  ByVal d AS Decimal) As Decimal
YearAvg.Add(s,d)
Return d

End Function

В текстовом поле вы вычисляете среднее значение за год, измените выражение на следующее (внесите соответствующие изменения в имена полей)

= Code.SetYearAverage(Cstr(Fields!EndYear.Value), Avg ( DateDiff("d", Min(Fields!StartDay.Value,"OrderId"), Max(Fields!EndDay.Value,"OrderId"))))

Затем установите для выражения диаграммы значение

=   Code.YearAvg( Cstr( Fields!EndYear.Value))

enter image description here

enter image description here

0 голосов
/ 18 февраля 2019

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

Жаль, что сделать это на сервере было невозможно, так как это было бы действительно просто.

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

Группы категорий - нет

Группы серии 2. Родительская группав «EndYear», называемом «ChartYearGroup», дочерняя группа находится в OrderID, называемом «ChartOrderGroup»

Значения - здесь я устанавливаю поле категории в [EndYear], а выражение было

=AVG(DateDiff(
    "d"
    , Min(Fields!StartDay.Value, "ChartOrderGroup")
    , Max(Fields!EndDay.Value, "ChartOrderGroup")
    )
    , "ChartYearGroup"
    )

Этодает правильные цифры, но, к сожалению, показывает по заказам, а не по годам.

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

Вот конечный результат.

enter image description here

...