【问题标题】:Filter MDX measure by dimension members按维度成员筛选 MDX 度量
【发布时间】:2014-05-26 11:07:36
【问题描述】:

假设我有一个客户维度,我想获得所有那些产生大于 100 的收入的客户...在 MDX 中如何做到这一点?我创建了一个成员,使用这样的过滤器

Filter([Dim Customer].[Id].Members, [Measures].[Revenue] > 150)

但是它没有按预期工作。你通常如何解决这个问题?我想看到 1 行,2 列,所有收入和产生超过 150 的客户的收入。我的问题是,因为我不希望客户的行显示在行轴上 - 它是不考虑每个客户的过滤器,而是从整体上考虑[措施]。[收入]。

【问题讨论】:

    标签: mdx


    【解决方案1】:

    请记住,Filter() 函数返回一个集合,即收入超过 150 的所有客户的集合。然后您需要指定要在该集合上聚合某些内容。这意味着您计算出的度量值应如下所示:

    WITH MEMBER [Measures].[Revenue for Customers over 150] AS
        Aggregate(
            Filter(Existing ([Dim Customer].[Id].Members),
                [Measures].[Revenue] > 150),
            [Measures].[Revenue]
        )
    

    【讨论】:

    • 谢谢@Dan。当我这样做并创建我的 MDX 查询以显示此列时,相对于 [Measures].[Revenue] 的总数,我看到 [Measures].[Revenue] 小于 150 岁以上客户的收入。这是不可能的,因为 [措施].[150 岁以上客户的收入] 是 [措施].[收入] 的子集。有什么想法吗?
    • 你有没有收入为负的客户?
    • 这听起来很奇怪。直接执行下面的MDX语句会得到什么:WITH MEMBER [Measures].[Revenue for Customers over 150] AS Aggregate(Filter([Dim Customer].[Id].Members, [Measures].[Revenue] > 150), [Measures].[Revenue]) SELECT {[Measures].[Revenue],[Measures].[Revenue for Customers over 150]} ON 0 FROM [MyCube]
    • 如果我直接执行,它显示的总金额要大得多。我认为该成员出于某种奇怪的原因没有考虑 WHERE 中的过滤子句,但事实并非如此。
    • 您是否过滤掉了 WHERE 子句中的一些客户?这就解释了它,因为 FILTER() 函数不考虑当前上下文,而是在整个多维数据集的上下文中评估集合。要解决这个问题,请将EXISTING 添加到您的计算度量中 - 我已经编辑了我的帖子以说明如何。
    【解决方案2】:

    filter() 函数应该做的:

    SELECT [Measures].[Internet Sales Amount] ON 0,
    filter(
    [Customer].[Customer].[Customer].MEMBERS
    , [Measures].[Internet Sales Amount] > 150
    ) ON 1 
    FROM [Adventure Works]
    

    大约一半的客户被过滤掉了。

    菲利普,

    【讨论】:

    • 嗨,菲利普,您指的是层次结构,但就我而言,我没有。我在客户维度中有一个属性 [Id]。
    猜你喜欢
    • 2016-01-29
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多