0

我经常与基于 OLAP 的大型数据透视表进行交互。通常这些或多或少是无证的。因此,它们很难让我真正理解并有效地使用它们。

我了解正在呈现什么数据的策略之一是将鼠标悬停在数据透视表字段列表中的字段上,然后按向下箭头以查看选项中不同的值列表。见下图。

你看不到我的鼠标,但它在点击 o

我想“哇,也许我可以写一些 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 部门的借口。

无论如何,如果您有任何想法,我会全力以赴。

谢谢!汤姆

4

1 回答 1

1

我将使用允许编写普通 MDX 请求的客户端工具直接连接到 OLAP 服务器:您仍然满足 IT 人员的安全要求;-)

在 MDX 中,获取任何层次结构中的成员列表并对其进行过滤非常容易。如果使用 SSAS,每个层次结构甚至也可以作为多维数据集使用(名称中带有 $ 的东西),但这不是必需的。

如果没有可用的工具,那么您可以在 Excel 中编写普通的 MDX 请求 - 我猜交互性较低,但应该可以使用数据透视表首先识别层次结构;我不是 Excel 专家,但这里有一些链接解释如何:

https://msolap.wordpress.com/2008/10/07/returning-mdx-query-results-in-an-excel-matrix-formula/

http://cwebbbi.wordpress.com/2009/12/18/binding-an-excel-table-to-the-results-of-an-mdx-query/

于 2013-10-03T23:58:51.360 回答