Excel VBA:数据透视表CubeField事实表名称?

时间:2012-12-04 17:39:39

标签: excel vba excel-vba cube olap-cube

我正在使用大型OLAP多维数据集,我正在构建非常基本的搜索功能,以帮助我解析数据量(~30个事实表,30个维度,加上计算的度量),但我来了跨越一个有趣的问题。当我访问事实表成员或计算度量的CubeField.Name属性时,它会以[Measures].[FieldName]的形式出现,而不是指向正确的事实表/计算度量文件夹。
这是我正在使用的代码:

Sub X()

    Dim pvtTable As PivotTable
    Dim oCubeField As CubeField

    Set pvtTable = ActiveSheet.PivotTables(1)
    For Each oCubeField In pvtTable.CubeFields
        If InStr(LCase(oCubeField.Name), "spread") > 0 Then
            Debug.Print oCubeField.Parent & ": " & oCubeField.Name
        End If

    Next

End Sub

关于如何实际获取事实表名称的任何想法?或计算出的度量的文件夹结构?谢谢!

2 个答案:

答案 0 :(得分:0)

也许尝试oCubeField.Value。 CubeField对象的reference表示:

  

名称返回表示对象名称的String值。

     

返回表示指定字段名称的String值。

答案 1 :(得分:0)

不幸的是,您不能这样做,因为度量表达式可能链接到一些事实表。

但是您可以使用OpenSchema()函数查询和分析多维数据集元数据。

类似这样的东西:

Sub GetMeasuresList()
    Const adSchemaMeasures = 36

    Set ADOCon = ActiveCell.PivotTable.PivotCache.ADOConnection

    Set RecSet = ADOCon.OpenSchema(adSchemaMeasures)

    While Not RecSet.EOF
        Debug.Print RecSet!MEASURE_NAME & ": " & RecSet!EXPRESSION
        RecSet.MoveNext
    Wend

End Sub

OLE DB for OLAP Schema Rowsets

How To Use the ADO OpenSchema Method in Visual Basic