首页 > 解决方案 > 对数据透视表的行和列进行排序

问题描述

尝试使用已排序的行和列输出数据透视表

我尝试了sortrowkey,col键等的不同组合,但找不到正确的语法。最近的尝试是确保在对数据透视表进行排序之前将数据放入多维数据集并使用preservegrouporder.

var pvtTbl = new PivotTable(
    new[] { "YearQuarterMonth" },
    new[] { "StageName" },
    slicedCube);
_ = pvtTbl.PreserveGroupOrder == true;
pvtTbl.SortRowKeysByColumnKey(null, 1, ListSortDirection.Ascending);
_ = pvtTbl.PreserveGroupOrder == true;
pvtTbl.SortColumnKeysByRowKey(null, 1, ListSortDirection.Ascending);
//pvtTbl.SortRowKeys(null, 1, ListSortDirection.Ascending);
//pvtTbl.SortColumnKeys(null, 1, ListSortDirection.Ascending);
var strJsonWr = new StringWriter();
var jsonWr = new PivotTableJsonWriter(strJsonWr);

到目前为止,它似乎只适用1或不适用,从不同时适用。

标签: c#pivot-tablenreco

解决方案


首先请注意,当您设置PreserveGroupOrder=true数据透视表行/列总是按标签排序时,即使您调用SortRowKeysByColumnKeySortColumnKeysByRowKey排序,这种排序仅适用于组的行/列。在您的情况下,每个轴只有一个维度,并且此选项不会改变任何内容。

让我们看看接下来会发生什么:

pvtTbl.SortRowKeysByColumnKey(null, 1, ListSortDirection.Ascending);

在这里,您按总计值对行进行了排序(因为标识具有要排序的值的列的列键为空),并且度量索引为 1(这意味着第二个度量)。重要提示:这意味着您slicedCube应该至少有 2 个使用 CompositeAggregatorFactory 定义的度量。

然后你打电话:

pvtTbl.SortColumnKeysByRowKey(null, 1, ListSortDirection.Ascending);

现在按列总值对列进行排序(同样,按 2-nd 度量)。调用顺序很重要,因为按列的值排序可能取决于先前对行的排序。

希望这个解释有所帮助。


推荐阅读