Como posso alterar minha Tabela Dinâmica para que ela exiba os dados da maneira desejada?
Consegui arrastar uma Tabela Dinâmica para a pista de dança, mas não consegui fazê-la dançar - parece que continuamos pisando nos dedos uns dos outros. Já tenho dados na planilha para criar a tabela dinâmica. Esta classe descreve esses dados:
public class PriceVarianceData
{
public String Unit { get; set; }
public String ShortName { get; set; }
public String ItemCode { get; set; }
public String Description { get; set; }
public String PriceWeek { get; set; }
public String Week { get; set; }
public String Price { get; set; }
public String Variance { get; set; }
public String VarianceAverage { get; set; }
public int RegionOrder { get; set; }
public int ContractPrice { get; set; }
}
A primeira coluna ("A") na planilha contém os valores da Unidade, a segunda coluna ("B") exibe os valores de ShortName, etc.
Estou usando o código a seguir para criar uma Tabela Dinâmica a partir desses dados:
private void AddPivotTable()
{
pivotData = _xlSheet.Range["A1:K1600"];
pivotDestination = _xlSheet.Range["A1602", useDefault];
_xlBook.PivotTableWizard(
Excel.XlPivotTableSourceType.xlDatabase,
pivotData,
pivotDestination,
pivotTableName,
true,
true,
true,
true,
useDefault,
useDefault,
false,
false,
Excel.XlOrder.xlDownThenOver,
0,
useDefault,
useDefault
);
// Set variables used to manipulate the Pivot Table.
pivotTable = (Excel.PivotTable)_xlSheet.PivotTables(pivotTableName);
shortnamePivotField = (Excel.PivotField)pivotTable.PivotFields(2);
itemcodePivotField = (Excel.PivotField)pivotTable.PivotFields(3);
descriptionPivotField = (Excel.PivotField)pivotTable.PivotFields(4);
priceweekPivotField = (Excel.PivotField)pivotTable.PivotFields(5);
weekPivotField = (Excel.PivotField)pivotTable.PivotFields(6);
regionorderPivotField = (Excel.PivotField)pivotTable.PivotFields(10);
// Format the Pivot Table.
pivotTable.Format(Excel.XlPivotFormatType.xlReport2);
pivotTable.InGridDropZones = false;
pivotTable.SmallGrid = false;
pivotTable.ShowTableStyleRowStripes = true;
pivotTable.TableStyle2 = "PivotStyleLight1";
// The PivotFields have the following interesting properties:
// Orientation, Function, Calculation
// Page Field
//shortnamePivotField.Orientation = Excel.XlPivotFieldOrientation.xlPageField;
// Column Field
priceweekPivotField.Orientation = Excel.XlPivotFieldOrientation.xlColumnField;
// Row Fields
descriptionPivotField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;
//regionorderPivotField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;
// Data Fields
//contractPricePivotField.Orientation = Excel.XlPivotFieldOrientation.xlDataField;
//contractPricePivotField.Function = Excel.XlConsolidationFunction.xlSum;
itemcodePivotField.Orientation = Excel.XlPivotFieldOrientation.xlDataField;
itemcodePivotField.Function = Excel.XlConsolidationFunction.xlSum;
}
É certo que a codificação dos valores do intervalo é um pouco inútil, mas este é um projeto experimental que sempre retornará os mesmos (quantidade de) dados, por isso funciona neste caso com este caso um tanto artificial.
O código acima adiciona uma tabela dinâmica à planilha, mas fornece o valor escasso do visualizador, pois faz pouco sentido (as últimas linhas de dados brutos são mostradas na parte superior; a tabela dinâmica começa na linha 1602):
Sei que o problema existe porque não estou designando os PivotFields corretos como xlPageField, xlColumnField [s], xlRowField [s] e xlDataField [s]. O problema é de falta de nervosismo da minha parte; em vez de compreender esses dados, minha massa cinzenta está flácida em um ângulo de repouso ao longo das muralhas da Tabela Dinâmica.
O que preciso fazer para alterar a aparência da Tabela Dinâmica para que ela mostre:
Totais para cada ItemCode (como "110051"), independentemente do ShortName.
... e talvez em outra tabela dinâmica:
Totais para cada Nome abreviado (como "T&T"), independentemente do ItemCode.
???
ATUALIZARInspirado por um comentárioaqui, Adicionei títulos de coluna, que alteraram um pouco a tabela dinâmica:
ATUALIZAÇÃO 2Aqui está uma tabela dinâmica gerada de maneira falsa (com a GUI, não no código) que eu quero criar no código:
Qual código é necessário para especificar "SHORT NAME" como o "Filtro de relatório", para gerar um menu suspenso, como mostrado acima, com os vários valores de ShortName selecionáveis?
ATUALIZAÇÃO 3Este foi o meu melhor palpite:
// Page Field
shortnamePivotField.Orientation = Excel.XlPivotFieldOrientation.xlPageField;
// Row Fields
descriptionPivotField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;
itemcodePivotField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;
// Data Fields
pricePivotField.Orientation = Excel.XlPivotFieldOrientation.xlDataField;
pricePivotField.Function = Excel.XlConsolidationFunction.xlSum;
... mas não era melhor do que jogar código na parede, pois não funcionava: