1

假设我有一个称为图书馆书籍的维度和一个称为逾期天数的事实。如何编写一个 mdx 表达式,该表达式将返回每个 num days 过期值处存在的书籍数量?换句话说:

Days Overdue | Num books
1            | 3498
2            | 237
3            | 57

在 SQL 中,答案很简单:

select days_late,count(*) from days_overdue_fact group by days_late

在 mdx 中,我试过这个:

with member [Measures].[Overdue Count] as 'count([Book].[System Id].members) '
select  [Measures].[Overdue Count] on 0,
[Measures].[Days Late] on 1
FROM [myCube] 

但我收到了蒙德里安的抱怨:“[措施]”出现在多个独立轴上。

我只是想按事实值分组。

4

2 回答 2

2

解决方案是认识到这个过期的度量只是累积快照事实的一部分(参见数据仓库工具包,第 2 版,Ralph Kimball 或http://www.kimballgroup.com/2008/11/05/fact-tables / ),随着时间的推移跟踪图书的状态,因为它在其结帐/处理过程中移动。

在多维数据集中拥有像这样的累积快照事实并没有错。您只需要了解它是什么以及如何查询它。在这种情况下,我想计算出现在这个事实中的每个值的出现次数,最简单的方法是使用 sql group by 而不是 mdx。

答案是他在原始问题中的 sql。没有我知道的按度量值分组的 mdx 解决方案。MDX 是此查询的错误工具。

于 2013-07-05T15:27:35.487 回答
1

在我看来,您构建立方体的方式是错误的。[Days Overdue] 不需要(甚至最好不要)作为衡量标准。最常见的测量是一个相关的数值,应为每个可能的尺寸值组合计算。它绝对可以取值为null,但很少。我真的不明白您如何将 [Days Overdue] 与所有可能的维度值组合联系起来。
您在这里所拥有的度量很容易成为一个计算维度字段,您可以在其中扣除借用日期NOW(). 在这种情况下,只剩下一个问题需要回答,那就是知道借阅日期(借书的日期)是否属于事实表。如果这是真的,那么您必须定义一个新的事实维度并在那里定义您的关系,如此所述。

于 2013-07-09T08:38:32.727 回答