OLAP数据透视表VBA多交易日期过滤问题求助
问题描述
- 现有一段用于过滤OLAP数据透视表的VBA代码,需要改成多交易日期过滤(原代码仅支持单个日期)
- 已知
CurrentPageName不支持多值,想确认有没有办法实现多值添加 - 第二行
AddPageItem代码报错,怀疑是OLAP多维数据集的限制,而且没法用EnableMultiplePageItems属性
原代码如下:
Sheets(I).PivotTables(tbl.Name).PivotFields( _ "[Position].[Trade Date Hierarchy].[Trade Year]").CurrentPageName = _ ("[Position].[Trade Date Hierarchy].[Trade Date]." & f_tdhdate1) Sheets(i).PivotTables(tbl.Name).PivotFields( _ "[Position].[Trade Date Hierarchy].[Trade year]").AddPageItem = _ ("[Position].[Trade Date Hierarchy].[Trade Date]." & f_tdhdate2)
解决方案
关于CurrentPageName的多值问题
CurrentPageName确实不支持多值,这是OLAP透视表的设计限制——页字段的这个属性只能绑定单个层级成员,没法直接通过它实现多日期过滤,必须换用其他方法。
关于AddPageItem报错的问题
AddPageItem是普通非OLAP透视表的方法,对OLAP多维数据集的透视表完全不适用,而且EnableMultiplePageItems属性也无法在OLAP透视表上生效,这都是微软针对OLAP透视表的操作逻辑设定的限制。
正确实现多日期过滤的代码
针对OLAP透视表,要实现多成员过滤,必须使用VisibleItemsList属性,它接受一个包含成员唯一名称的数组。具体代码如下:
Dim pvt As PivotTable Dim pvtDateField As PivotField Dim targetDates As Variant ' 把需要过滤的日期成员整理成数组,可按需添加更多日期 targetDates = Array( _ "[Position].[Trade Date Hierarchy].[Trade Date]." & f_tdhdate1, _ "[Position].[Trade Date Hierarchy].[Trade Date]." & f_tdhdate2 _ ) ' 绑定目标透视表和日期字段 Set pvt = Sheets(i).PivotTables(tbl.Name) Set pvtDateField = pvt.PivotFields("[Position].[Trade Date Hierarchy].[Trade Date]") ' 直接设置可见项列表,实现多日期过滤 pvtDateField.VisibleItemsList = targetDates
额外注意事项
- 原代码错误操作了
Trade Year层级字段,要过滤具体日期,必须直接操作最底层的Trade Date字段 - 如果需要先按年份筛选,再选该年份下的多个日期,可以先设置
Trade Year的CurrentPageName,再设置Trade Date的VisibleItemsList - 使用
VisibleItemsList时,数组里的成员名称必须和OLAP数据集中的成员唯一名称完全匹配,否则会报错
内容的提问来源于stack exchange,提问作者Originalcntent
相关产品推荐
相关产品推荐

