You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server Analysis Services下MDX查询过滤问题:添加产品数量筛选后无结果

解决MDX过滤无结果问题的正确写法

嘿,我来帮你搞定这个MDX查询的问题!你添加过滤后没返回结果,大概率是过滤条件的逻辑没写对——咱们得准确计算每个类别+子类别组合下实际售出的不同产品数量,再筛选出≥10的组合才行。

下面是调整后的正确查询,分两种情况:

情况1:Cube里没有预定义的“不同产品计数”度量值

如果你的Cube里没有现成的度量值统计不同产品数,咱们可以用Count+Distinct来计算:

SELECT NON EMPTY { [DIM CUSTOMER].[Country Region Code].[Country Region Code].ALLMEMBERS } ON COLUMNS,
NON EMPTY Filter(
    CROSSJOIN( { [DIM PRODUCT].[Category Name].CHILDREN }, { [DIM PRODUCT].[Sub Category Name].CHILDREN } ),
    Count(
        Distinct(
            [DIM PRODUCT].[Product Key].CHILDREN,
            [CURRENTMEMBER] * [Measures].[Order Qty]
        )
    ) >= 10
) ON ROWS
FROM [Foo]
WHERE ( [Measures].[Order Qty] );

情况2:Cube里有预定义的“不同产品计数”度量值

如果你的Cube已经有类似[Measures].[Distinct Product Count]的度量值,用这个会更高效,写法也更简洁:

SELECT NON EMPTY { [DIM CUSTOMER].[Country Region Code].[Country Region Code].ALLMEMBERS } ON COLUMNS,
NON EMPTY Filter(
    CROSSJOIN( { [DIM PRODUCT].[Category Name].CHILDREN }, { [DIM PRODUCT].[Sub Category Name].CHILDREN } ),
    ([Measures].[Distinct Product Count]) >= 10
) ON ROWS
FROM [Foo]
WHERE ( [Measures].[Order Qty] );

关键点说明:

  • Filter()函数会遍历每一行的类别+子类别组合,逐个检查是否符合条件
  • 第一种写法里,Distinct结合当前行成员和[Product Key].CHILDREN,确保只统计该组合下实际有订单的不同产品(避免统计没卖出的产品)
  • 如果执行后还是没结果,建议先去掉Filter部分跑原始查询,确认数据里确实存在售出≥10种不同产品的类别+子类别组合

内容的提问来源于stack exchange,提问作者kolboc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:17:38