5

假设我foo在多维数据集中有一个度量 ,并且我有一个报告要求,即用户希望在报告中查看以下度量:

total foo
total foo excluding instances where foo > 10
total foo excluding instances where foo > 30

处理这个问题的最佳方法是什么?过去,我添加了命名计算,它返回NULLiffoo > 10或 just fooelse。我觉得必须有一种方法可以在 MDX 中实现这一点(类似于Filter([Measures].[foo], [Measures].[foo] > 10)),但我一生都无法弄清楚任何事情。

有任何想法吗?

4

3 回答 3

3

诀窍是你需要在你的集合上应用过滤器,而不是在你的度量上。

例如,使用通常的 Microsoft 'warehouse and sales' 演示多维数据集,以下 MDX 将显示销售额超过 2000 美元的所有商店的销售额。

SELECT Filter([Store].[Stores].[Store].members, [Unit Sales] > 2000) ON COLUMNS,
[单位销售] ON ROWS
FROM [仓库和销售]
于 2009-11-20T16:13:04.983 回答
2

我在使用saiku(使用Mondrain的后端)时遇到了类似的问题,因为我还没有找到任何明确的“在度量上添加过滤器”的解决方案,我在这里添加了它,这可能对其他人有用。

在 Saiku3.8 中,您可以在 UI 上添加过滤器:“列”->“过滤器”->“自定义”,然后您可能会看到过滤器 MDX 表达式。

假设我们希望广告中的点击次数大于 1000,然后在此处添加以下行:

[Measures].[clicks] > 1000

保存并关闭,然后该过滤器将对点击次数大于 1000 的 find elem 有效。

MDX like 下面(假设 dt 为维度,点击次数为度量,我们要找到点击次数超过 1000 的 dt)

WITH
SET [~ROWS] AS
    Filter({[Dt].[dt].[dt].Members}, ([Measures].[clicks] > 1000))
SELECT
NON EMPTY {[Measures].[clicks]} ON COLUMNS,
NON EMPTY [~ROWS] ON ROWS
FROM [OfflineData]
于 2016-12-27T08:37:51.880 回答
0

我认为你有两个选择:

1-将列添加到您的事实(或基于事实表的数据源视图上的视图),例如:

case when unit_Price>2000 then 1 
     else 0  
end as Unit_Price_Uper_Or_Under_10 

并根据此列值添加一个虚构的维度。并为新维度添加命名查询(比如数据源视图中的 Range_Dimension :选择 1 作为范围联合全部选择 0 作为范围

之后你不能像其他维度和属性一样使用这个过滤器。

 SELECT [Store].[Stores].[Store].members ON COLUMNS,
[Unit Sales] ON ROWS
FROM [Warehouse and Sales]
WHERE [Test_Dimension].[Range].&[1]

问题在于您必须添加When条件的每个范围,并且仅当范围是静态的时,此解决方案才是一个好的解决方案。对于动态范围,最好制定范围(基于离散化方法)

2-在基于事实表的事实表附近添加具有粒度的维度,例如,如果我们有带有主键的事实表。Sale_id我们可以添加基于只有一列的事实表的维度,sale_Id并且dimension Usage tab 我们可以将其new dimensionmeasure group关系类型相关联Fact,然后在mdx 我们可以使用类似的东西:

filter([dim Sale].[Sale Id].[Sale Id].members,[Measures].[Unit Price]>2000)
于 2012-07-19T15:32:00.910 回答