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
相关产品推荐
相关产品推荐

