Я использую Blazor с Blazor Apex Charts, чтобы создавать диаграммы для информационной панели, над которой я работаю. Теперь у меня возникла небольшая проблема.
Веб-приложение основано на периоде. Под этим я подразумеваю показ только данных за выбранный период и в прошлом. Один период равен одному месяцу. Периоды обозначаются целыми числами, например: 202302, 202401 и т. д.
Мне нужна составная гистограмма. Каждая полоса сложена и показывает доход для каждого типа проекта. Данные на диаграмме начинаются с выбранного периода и возвращаются к первому месяцу этого года. Он должен иметь возможность сравнить его с теми же месяцами предыдущего года. В моем наборе данных существует вероятность того, что типы проектов не будут одинаковыми каждый месяц. 202301 и 202401 не обязательно должны иметь одинаковые типы проектов.
Как это должно выглядеть:

Когда я просматриваю документацию (https://apexcharts.github.io/Blazor-Ape ... bar-charts), каждый стек имеет свою собственную ApexPointSeries и ссылается на разные свойства. В моем примере ось Y всегда будет отражать доход, но для разных типов проектов.
Код:
[Введение] AppData appData {получить; набор; } [Параметр] общественный списокcharDataForStack {get; набор; } частный список testStack = новый список (); частные параметры ApexChartOptions; защищенное переопределение Task OnInitializedAsync() { options = новый ApexChartOptions { Диаграмма = новая диаграмма { Сложено = правда, }, PlotOptions = новые PlotOptions { Бар = новый PlotOptionsBar { Горизонтально = ложь } }, }; СортироватьДанные(); вернуть базу.OnInitializedAsync(); } публичная недействительная сортировка данных() { //chartDataForStack уже отсортирован по некоторым параметрам перед передачей этому компоненту. В частности, выбирается первый возможный месяц: Год. вар selectedYear = appData.SelectedPeriod / 100; var testData =chartDataForStack.Where(x => x.type == "доход") .GroupBy(g => g. period) .OrderBy(o => o.Key) .К списку(); var thisYear = новый List(); var LastYear = новый List(); testGroup2 = новый список(); foreach (группа var в testData) { if (group.Key / 100 == выбранный год) { thisYear.Add(группа); } иначе, если (group.Key % 100 x.project_type).ToList(); testGroup.AddRange(температура); } foreach (элемент var в testGroup) { вар revProjType = новый RevenueProjectType(); revProjType.revenue = item.Sum(x => x.acc); revProjType.projectType = item.Key; revProjType. period = item.FirstOrDefault(x => x. period != 0). period.ConvertRawPeriod(); testStack.Add(revProjType); } cshtml:
@foreach (элемент var в testStack) { } Элемент диаграммы дохода:
публичный класс RevenueProjectType { общественная строка projectType {get; набор; } публичная строка периода {get; набор; } общедоступная десятичная дробь? доход {получить; набор; } общественная строка projectTypeName {get; набор; } } В моем примере кода список testStack содержит по одной записи для каждого типа проекта за каждый период с суммированным доходом. В предоставленном коде я просто пытаюсь получить текущий год в виде сложенной гистограммы, чтобы, возможно, получить некоторое представление о том, как я это сделаю. Текущий код объединяет гистограммы, но данные на диаграмме неверны.
Любая помощь или подсказки будут очень признательны.