c# - 对数据透视表的行和列进行排序
问题描述
尝试使用已排序的行和列输出数据透视表
我尝试了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
或不适用,从不同时适用。
解决方案
首先请注意,当您设置PreserveGroupOrder=true
数据透视表行/列总是按标签排序时,即使您调用SortRowKeysByColumnKey
或SortColumnKeysByRowKey
按值排序,这种排序仅适用于组内的行/列。在您的情况下,每个轴只有一个维度,并且此选项不会改变任何内容。
让我们看看接下来会发生什么:
pvtTbl.SortRowKeysByColumnKey(null, 1, ListSortDirection.Ascending);
在这里,您按行总计值对行进行了排序(因为标识具有要排序的值的列的列键为空),并且度量索引为 1(这意味着第二个度量)。重要提示:这意味着您slicedCube
应该至少有 2 个使用 CompositeAggregatorFactory 定义的度量。
然后你打电话:
pvtTbl.SortColumnKeysByRowKey(null, 1, ListSortDirection.Ascending);
现在按列总值对列进行排序(同样,按 2-nd 度量)。调用顺序很重要,因为按列的值排序可能取决于先前对行的排序。
希望这个解释有所帮助。
推荐阅读
- android - Amazon RDS 与 MariaDB
- css - 深色模式主题 ASP.NET MVC
- nan - Meshlab nan 坐标和退化的面
- python - 无法安装cartopy
- node.js - Google API Node.js YouTube 示例:oauth2.keys.json 位置和重定向 URL
- javascript - jQuery追加重复循环
- java - EditText 到 String 返回 Null
- c# - 让 XDocument 识别嵌入式 SSML
- r - 将文件名作为列添加到循环内的 data.frame
- python - 将图像转换为矢量数组以进行图形绘制