MDX-如何跳过MIN汇总中的0值,以及如何排除某些百分比的结果?

时间:2019-01-03 20:47:29

标签: mdx

我的立方体中有

  • 通过MIN聚合衡量收入
  • 维度:[本地化]。[类型]。&[中心]
  • 维度:{[Date]。[Year]。&[2017],[Date]。[Year]。&[2018]}

我的查询是:

What are the minimum earnings of the person who decides to buy
apartments in the city center, excluding 5% of the lowest, within
last 2 years?

现在我的mdx查询如下:

SELECT
[Measures].[MinEarnings] ON COLUMNS
FROM [cube]
WHERE
(
    BottomCount ([Localization].[Type].&[center], 95, [Measures].[MinEarnings]),
    {[Date].[Year].&[2017], [Date].[Year].&[2018]}
)

我有两个问题:

  1. 某些收入为0-如何在计算中跳过它们?
  2. 如果我的查询正确地排除了最低收入的5%?

1 个答案:

答案 0 :(得分:1)

首先,您应该使用toppercent而不是bottomcount。您想要一个不在最后5%的人的最低薪水而不是最近5个的薪水。Toppercent将为您提供最高的95%。

第二个可以过滤0的语法

toppercent (
filter([Localization].[Type].&[center], [Measures].[MinEarnings]>0)
, 95, [Measures].[MinEarnings])

即使现在将代码放在where子句中也可能不起作用,但是请尝试一下。我建议您将toppercent移至rows,然后对其进行排序,然后选择top1

topcount(
order(
toppercent (
filter([Localization].[Type].&[center], [Measures].[MinEarnings]>0)
,95, [Measures].[MinEarnings])
,[Measures].[MinEarnings],asc)
,1)

我有一个给出城市最小销售量的示例,请注意,我已将null替换为0,以使其尽可能接近您的情况

具有成员[Measures]。[Internet Sales Amount2] 如 当[[Measures]。[Internet Sales Amount]] = null时,则为0,否则[Measures]。[Internet Sales Amount]结束

select [Measures].[Internet Sales Amount2]
on columns ,
topcount(order(toppercent(filter([Customer].[City].[City],[Measures].[Internet Sales Amount2]>0),95,[Measures].[Internet Sales Amount2]),[Measures].[Internet Sales Amount2],asc),1)
 on rows 
from [Adventure Works]
where [Customer].[Country].&[Canada]
下图中的

是最高计数1之前的结果 enter image description here