在VB.NET中获取给定维度的相关度量值组的有效方法

在VB.NET中获取给定维度的相关度量值组的有效方法,vb.net,ssas,data-warehouse,Vb.net,Ssas,Data Warehouse,我正在使用VB.NET连接并解析Analysis Services数据库中的数据 我遇到的问题是,在试图找到与给定维度相关的所有度量值组时。我一直在深入研究API,维度似乎根本没有关于度量值组的任何信息,但度量值组可以包含维度 如果我想获得给定度量值组的相关维度列表(measureGroup.Dimensions),这会很容易,但我要寻找的恰恰相反 我唯一能想到的就是循环遍历多维数据集中的所有度量值组,并检查它是否包含对所讨论维度的引用: Dim dimID As String = "SOME_

我正在使用VB.NET连接并解析Analysis Services数据库中的数据

我遇到的问题是,在试图找到与给定维度相关的所有度量值组时。我一直在深入研究API,维度似乎根本没有关于度量值组的任何信息,但度量值组可以包含维度

如果我想获得给定度量值组的相关维度列表(
measureGroup.Dimensions
),这会很容易,但我要寻找的恰恰相反

我唯一能想到的就是循环遍历多维数据集中的所有度量值组,并检查它是否包含对所讨论维度的引用:

Dim dimID As String = "SOME_DIM_ID"
Dim relatedMeasureGroups As New List(Of Amo.MeasureGroup)
For Each mg As Amo.MeasureGroup In _cube.MeasureGroups
    If mg.Dimensions.Contains(dimID) Then
        relatedMeasureGroups.Add(mg)
        Continue For
    End If
Next
这是可行的,但显然是非常缓慢和低效的。有没有更直接的方式,我只是看不见



编辑:我应该说,我需要这样做,因为我正在努力寻找所有的潜力。正如您所知,我这样做的方式有点手动(查找与初始维度相关的度量值组,查找与其相关的所有维度,然后再次查找与这些维度相关的所有度量值组),因此如果有更直接的方法来解决该问题,它可以绕过我解决原始问题的需要。

您可以查询SSAS DMV$SYSTEM.MDSCHEMA\u度量组\u维度

SELECT  *
FROM    $SYSTEM.MDSCHEMA_MEASUREGROUP_DIMENSIONS
WHERE   MEASUREGROUP_CARDINALITY = 'MANY' AND
        DIMENSION_CARDINALITY = 'MANY' AND
        [DIMENSION_UNIQUE_NAME] = '[Business Unit]'
此外,这可能会派上用场-->

这是XMLA版本

<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">
    <RequestType>MDSCHEMA_MEASUREGROUP_DIMENSIONS</RequestType>
    <Restrictions>
        <RestrictionList xmlns="urn:schemas-microsoft-com:xml-analysis">
            <DIMENSION_UNIQUE_NAME>[<<insert dimension>>]</DIMENSION_UNIQUE_NAME>
        </RestrictionList>
    </Restrictions>
    <Properties/>
</Discover>

MDSCHEMA_度量组_维度
[]

这看起来很有希望,但在进一步挖掘之后,我无法假设客户会感谢所有的帮助。我相信这是一条正确的道路,但我仍然有一些困难。如果这还不明显的话,我对SSAS的东西还是很生疏的XMLA方法部分工作,但对任何MDSCHEMA类型的每个查询似乎都不会返回任何实际行。相反,我只得到xsd定义。例如,查询MDSCHEMA_多维数据集返回,实际上并没有告诉我服务器上的任何多维数据集。我遗漏了什么吗?为了清楚起见,我在我的查询中提供了一个目录名,因为我看到了一些关于这可能是一个问题的帖子。当我查询DBSCHEMA_目录时,该目录显示得很好,但是对该目录的MDSCHEMA查询似乎没有返回任何内容。在SQLServerManagementStudio中尝试MDX查询(返回0行)时,我遇到了相同的问题。啊,看来我只需要在BI中处理多维数据集。再次感谢!