Улучшение конвейера агрегации MongoDB для итогов сводных таблиц в Blazor WASMC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Улучшение конвейера агрегации MongoDB для итогов сводных таблиц в Blazor WASM

Сообщение Anonymous »

Я работаю над приложением Blazor WASM с базой данных MongoDB, где я реализую сводную таблицу. Приведенный ниже API генерирует сгруппированные данные на основе запрошенных строк, столбцов и значений. Вот код моего текущего конвейера:

Код: Выделить всё

public class PivotRequest
{
public List Rows { get; set; } // E.g., ["Category", "Sub-Category"]
public List Columns { get; set; } // E.g., ["Region", "Salesperson"]
public List Values { get; set; } // E.g., ["Amount", "Quantity"]
}

[Authorize]
[HttpPost("GetPivotTableAsync")]
public async Task GetPivotTableAsync(PivotRequest request)
{
var pipeline = new List();

// AddFields to ensure values are numeric
foreach (var value in request.Values)
{
pipeline.Add(new BsonDocument("$addFields", new BsonDocument(value, new BsonDocument("$toDouble", $"${value}"))));
}

// Grouping Key
var groupKey = new BsonDocument();
foreach (var row in request.Rows)
groupKey.Add(row, $"${row}");
foreach (var column in request.Columns)
groupKey.Add(column, $"${column}");

// $group stage with accumulations
var groupStage = new BsonDocument("$group", new BsonDocument { { "_id", groupKey } });
foreach (var value in request.Values)
{
groupStage["$group"].AsBsonDocument.Add(value, new BsonDocument("$sum", new BsonDocument("$ifNull", new BsonArray { $"${value}", 0 })));
}
pipeline.Add(groupStage);

// Projection to flatten the output
var projection = new BsonDocument { { "_id", 0 } };
foreach (var row in request.Rows)
projection.Add(row, $"$_id.{row}");
foreach (var column in request.Columns)
projection.Add(column, $"$_id.{column}");
foreach (var value in request.Values)
projection.Add(value, $"${value}");
pipeline.Add(new BsonDocument("$project", projection));

// Execute pipeline
var collection = GetMyDb().MDB.GetCollection("d_sales_date");
var result = await collection.Aggregate(pipeline).ToListAsync();

return result.ToJson();
}

Этот конвейер генерирует данные со всеми строками и столбцами, я хочу сгенерировать это тоже, но с отдельной строкой и отдельной группой столбцов, а также общую сумму для строк и столбцов, как на этом рисунке Таблицы Google:
Изображение

На этом изображении есть одна группа строк с отдельными столбцами. например Всего по аксессуарам, Всего по электронике, Итого по Востоку, Итого по Северу. Он также имеет общий итог для всех строк и столбцов, а также общий итог для всей таблицы. Текущий конвейер генерирует только Периферийные устройства с Алисой, Периферийные устройства с Бобом, мощность с Бобом и т. д.
Как я могу изменить свой конвейер агрегации MongoDB, чтобы включить эти строки и динамические итоги столбцов?
Будем благодарны за любые рекомендации и предложения.>

Подробнее здесь: https://stackoverflow.com/questions/792 ... lazor-wasm
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»