Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Сводная таблица обычно агрегирует каждое поле данных с помощью агрегирующей функции, такой как Sum или Count. Функция Excel Show Values As заменяет каждый отображаемый результат вторичным вычислением, полученным из этой агрегированной величины — например, процентом от общего итога, накопительным итогом, разницей от выбранного базового элемента или рангом — так что можно выполнять сравнительный анализ без вспомогательных формул или вычисляемых столбцов.
Типичные применения включают анализ доли от общего итога, включая проценты по строке, столбцу или общему итогу; накопительный отчёт с использованием накопительного итога в поле периода; анализ отклонений относительно эталонного элемента с помощью разницы или процентной разницы от базового элемента; а также ранжирование значений от наименьшего к наибольшему или наоборот.
В Aspose.Cells for C++ параметр PivotFieldDataDisplayFormat выбирает вторичное вычисление. Метод доступа PivotField.GetShowValuesSetting() возвращает объект PivotShowValuesSetting, у которого методы SetCalculationType, SetBaseFieldIndex, SetBaseItemPositionType и SetBaseItemIndex задают поведение; удобный метод PivotField.ShowValuesAs(...) применяет те же четыре настройки одним вызовом. Применяйте эти настройки к полю данных или значений, полученному из PivotTable.GetDataFields().
Поле данных сохраняет свою агрегирующую функцию, такую как Sum или Count, в то время как Show Values As изменяет только способ отображения агрегированного значения.
Помимо прямой записи значений PivotShowValuesSetting (см. последний раздел), удобный метод одним вызовом применяет ту же конфигурацию:
void ShowValuesAs(PivotFieldDataDisplayFormat displayFormat, int32_t baseField, PivotItemPositionType baseItemPositionType, int32_t baseItem);
| Параметр | Описание | Когда требуется |
|---|---|---|
displayFormat |
Вторичный расчёт PivotFieldDataDisplayFormat, который необходимо применить. |
Всегда. |
baseField |
Индекс (ноль‑базовый) базового поля среди базовых полей сводной таблицы (например, индекс строкового поля, к которому относится базовый элемент). | Только шесть базовых форматов ниже (DifferenceFrom, PercentageOf, PercentageDifferenceFrom, RunningTotalIn, PercentageOfRunningTotalIn, PercentageOfParentTotal); игнорируется всеми остальными форматами. |
baseItemPositionType |
Способ выбора базового элемента относительно текущего: PivotItemPositionType::Previous, ::Next или ::Custom. |
Только три формата базового элемента (DifferenceFrom, PercentageOf, PercentageDifferenceFrom); игнорируется всеми остальными форматами. |
baseItem |
Индекс (ноль‑базовый) базового элемента. | Только когда baseItemPositionType установлен в Custom (индекс указывает точный базовый элемент); игнорируется для Previous/Next и всеми форматами, не использующими базовый элемент — передайте 0. |
| Тип расчета | Поведение | Параметры базового элемента |
|---|---|---|
Normal |
Нет вторичного вычисления; агрегированное значение отображается как есть (по умолчанию). | — |
DifferenceFrom |
Отображает значение как разницу с значением базового элемента в базовом поле. | baseField + Previous/Next/Custom (baseItem только при Custom) |
PercentageOf |
Отображает значение как процент от значения базового элемента в базовом поле. | baseField + Previous/Next/Custom (baseItem только при Custom) |
PercentageDifferenceFrom |
Отображает значение как процентную разницу с базовым элементом в базовом поле. | baseField + Previous/Next/Custom (baseItem только при Custom) |
RunningTotalIn |
Отображает значение как накопительный итог для последовательных элементов базового поля. | baseField (поле, определяющее порядок накопления) |
PercentageOfRow |
Отображает значение как процент от итога строки. | — |
PercentageOfColumn |
Отображает значение как процент от итога столбца. | — |
PercentageOfTotal |
Отображает значение как процент от общего итога. | — |
Index |
Отображает значение по формуле индекса Excel ((value * grand total) / (row total * column total)). | — |
PercentageOfParentRowTotal |
Отображает значение как процент от итоговой суммы родительской строки (для вложенных полей строк). | — |
PercentageOfParentColumnTotal |
Отображает значение как процент от итоговой суммы родительского столбца (для вложенных полей столбцов). | — |
PercentageOfParentTotal |
Отображает значение как процент от итоговой суммы родительского уровня. | baseField (базовое родительское поле) |
PercentageOfRunningTotalIn |
Отображает значение как процент от накопительного итога в базовом поле. | baseField (поле накопления) |
RankSmallestToLargest |
Присваивает ранги от наименьшего (1) к наибольшему. | — |
RankLargestToSmallest |
Присваивает ранги от наибольшего (1) к наименьшему. | — |
ShowValuesAs(...) записывает значения PivotShowValuesSetting (CalculationType, BaseFieldIndex, BaseItemPositionType, BaseItemIndex) — метод и объект настроек представляют два способа конфигурировать одно и то же состояние, аналогично выборам базового поля и базового элемента в диалоговом окне Excel Show Values As.
Вызовите метод PivotField.ShowValuesAs с параметром PivotFieldDataDisplayFormat::PercentageOfTotal, чтобы преобразовать каждую ячейку поля данных, включая общий итог, в её долю от общего итога. Отображаемые числа тогда представляют собой части от полного набора результатов. Этот формат сравнивает каждое значение только с общим итогом, поэтому ему не требуется базовое поле или базовый элемент — конечные аргументы (0, PivotItemPositionType::Previous, 0) являются заполнителями, которые формат игнорирует, как указано в таблице параметров выше.
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
using namespace Aspose::Cells::Pivot;
int main() {
Aspose::Cells::Startup();
// Load or create a workbook with source data
Workbook workbook;
Worksheet dataSheet = workbook.GetWorksheets().Get(0);
Cells cells = dataSheet.GetCells();
cells.Get(0, 0).PutValue(U16String("Fruit"));
cells.Get(0, 1).PutValue(U16String("Amount"));
const char* fruits[6] = { "Apple", "Banana", "Apple", "Cherry", "Banana", "Apple" };
int32_t amounts[6] = { 10, 20, 30, 40, 50, 60 };
for (int32_t i = 0; i < 6; i++)
{
cells.Get(i + 1, 0).PutValue(U16String(fruits[i]));
cells.Get(i + 1, 1).PutValue(amounts[i]);
}
// Add a pivot table on a new worksheet
int32_t pivotSheetIndex = workbook.GetWorksheets().Add();
PivotTable pivotTable = workbook.GetWorksheets().Get(pivotSheetIndex).GetPivotTables().Add(u"=Sheet1!A1:B7", 2, 2);
pivotTable.AddFieldToArea(PivotFieldType::Row, u"Fruit");
pivotTable.AddFieldToArea(PivotFieldType::Data, u"Amount");
pivotTable.CalculateData();
// Show the Amount data field as a percentage of the grand total with the
// one-call method; PercentageOfTotal takes no base item, so the trailing
// base arguments (0, Previous, 0) are placeholders the format ignores
PivotField dataField = pivotTable.GetDataFields().Get(0);
dataField.ShowValuesAs(PivotFieldDataDisplayFormat::PercentageOfTotal, 0, PivotItemPositionType::Previous, 0);
pivotTable.CalculateData();
// Body now reads: Apple 47.62%, Banana 33.33%, Cherry 19.05%, Grand Total 100.00%
workbook.Save(u"ShowValuesAsPercentageOfTotal.xlsx");
Aspose::Cells::Cleanup();
return 0;
}
Считайте текущую конфигурацию через PivotField.GetShowValuesSetting(): метод доступа возвращает объект PivotShowValuesSetting поля, у которого четыре метода‑получения описывают активное вычисление Show Values As. Чтобы изменить конфигурацию, вызовите метод PivotField.ShowValuesAs — он записывает все четыре настройки одним вызовом, поэтому нет необходимости задавать их по отдельности.
Объект PivotShowValuesSetting раскрывает четыре значения, которые записывает ShowValuesAs:
GetCalculationType() / SetCalculationType() выбирают вторичный расчёт PivotFieldDataDisplayFormat.GetBaseFieldIndex() / SetBaseFieldIndex() указывают ноль‑базовый индекс базового поля среди полей сводной таблицы. Он используется базовыми форматами.GetBaseItemPositionType() / SetBaseItemPositionType() определяют, как базовый элемент позиционируется относительно текущего, и принимают значения PivotItemPositionType::Next, PivotItemPositionType::Previous или PivotItemPositionType::Custom.GetBaseItemIndex() / SetBaseItemIndex() задают ноль‑базовый индекс базового элемента и используются, когда тип позиции установлен в Custom.ShowValuesAs повторно вызовите PivotTable.CalculateData(), чтобы тело сводной таблицы пересчиталось и отобразилось с обновлённой конфигурацией.#include "Aspose.Cells.h"
#include <iostream>
using namespace Aspose::Cells;
using namespace Aspose::Cells::Pivot;
int main() {
Aspose::Cells::Startup();
Workbook workbook(u"ShowValuesAsPercentageOfTotal.xlsx");
PivotTable pivotTable = workbook.GetWorksheets().Get(1).GetPivotTables().Get(0);
PivotField dataField = pivotTable.GetDataFields().Get(0);
// Read the current show-values settings
PivotShowValuesSetting settings = dataField.GetShowValuesSetting();
std::cout << "CalculationType: " << static_cast<int32_t>(settings.GetCalculationType()) << std::endl;
std::cout << "BaseFieldIndex: " << settings.GetBaseFieldIndex() << std::endl;
std::cout << "BaseItemPositionType: " << static_cast<int32_t>(settings.GetBaseItemPositionType()) << std::endl;
std::cout << "BaseItemIndex: " << settings.GetBaseItemIndex() << std::endl;
// Switch to a base-item calculation with the one-call method: difference
// from the value of the previous item in the row field
dataField.ShowValuesAs(PivotFieldDataDisplayFormat::DifferenceFrom,
pivotTable.GetRowFields().Get(0).GetBaseIndex(), PivotItemPositionType::Previous, 0);
pivotTable.CalculateData();
// Note: the percentage number format saved by the previous example still
// clings to the data field cells; the underlying values are now differences
// Re-read the applied configuration
std::cout << "CalculationType now: " << static_cast<int32_t>(dataField.GetShowValuesSetting().GetCalculationType()) << std::endl;
workbook.Save(u"ShowValuesAsDifferenceFrom.xlsx");
Aspose::Cells::Cleanup();
return 0;
}
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.