我经常与基于 OLAP 的大型数据透视表进行交互。通常这些或多或少是无证的。因此,它们很难让我真正理解并有效地使用它们。
我了解正在呈现什么数据的策略之一是将鼠标悬停在数据透视表字段列表中的字段上,然后按向下箭头以查看选项中不同的值列表。见下图。
我想“哇,也许我可以写一些 VBA 来为我做这件事,我可以在多维数据集中生成一个唯一值列表,这样我就可以快速扫描/搜索我要查找的内容。”
现在,我相当擅长 VBA,但我似乎无法理解它。我猜我需要的方法不存在。但是,我想我会在这里尝试。
第一次尝试:
Sub list_cube_fields()
Set objNewSheet = Worksheets.Add
objNewSheet.Activate
intRow = 1
For Each objCubeFld In Worksheets("Sheet1").PivotTables(1).CubeFields
objNewSheet.Cells(intRow, 1).Value = objCubeFld.Name
intRow = intRow + 1
Next objCubeFld
End Sub
这会生成所有可用数据透视表字段的列表(这实际上可能很有用!),但似乎没有办法获取 a 的子/叶/后代Cubefield
接下来我尝试了:
Sub test_field_list()
Worksheets("sheet4").Activate
With Worksheets("sheet1").PivotTables(1)
c = 1
For i = 1 To .PivotFields.Count
r = 1
Cells(r, c) = .PivotFields(i).Name
r = r + 1
For X = 1 To .PivotFields(i).PivotItems.Count
name1 = .PivotFields(i).PivotItems(X).Name
'cleans up name by eliminating the hierarchy labels
splitName = Split(name1, "&")
Cells(r, c) = splitName(2)
r = r + 1
Next
c = c + 1
Next
End With
End Sub
这将获取我在数据透视表中使用的所有唯一值的列表,但甚至不会触及未使用的字段。同样,这可能会有所帮助,但并不完全存在。
我真正需要的是每一种都适合我的喜好,再说一次,我不认为这些方法存在。我确实理解我所问的内容可能在计算上很昂贵并且可能很慢,而且我没有使用正确的工具来完成手头的任务。“OLAP 尊重 [应用程序] 权限,而给予 [我] 直接 SQL 访问权限则不会”是我的 IT 部门的借口。
无论如何,如果您有任何想法,我会全力以赴。
谢谢!汤姆