SQL到MDX查询转换

时间:2015-04-06 17:59:14

标签: sql mdx

所以这是SQL查询:

select date(actor_creation_date),count(*) from fse_master group by (actor_creation_date) limit 3;

到目前为止,我已经能够想出这个:

with MEMBER [measures].[actor creation date] AS COUNT(([Measures].[actor creation date]))

select  [Measures].[actor creation date] on columns,
order([fse_master].members ,[Measures].[actor creation date],desc)
on rows
from [fse_masters]

2 个答案:

答案 0 :(得分:2)

你不应该在" set"之间感到困惑。和一个"衡量"。 Measure只是一个数字/字符串实体,本质上是逻辑。你无法计算出具有逻辑性的东西。它需要在物理上是可数的。在MDX术语中,它需要是一组。一组项目更精确。

select date(actor_creation_date),count(*) 
from fse_master 
group by (actor_creation_date) 
limit 3;

在您的查询中,actor_creation_date是数据库中存在的实际事物(日期)集。它本质上是物理的。在RDBMS术语中,这是一个列。在MDX术语中,这需要是一个集合。

如果您有日期衡量标准,那么您不能仅仅期望将重点放在其上并期望它能够正常工作。

COUNT([measures].[actor creation date])转换为类似的内容 COUNT({12345})这是一个集合的计数,它只包含一个值的成员。它的输出总是一个。

您需要的是在设置日期上运行COUNT功能。

您必须拥有一个日期维度,该维度将actor creation date作为其中一个属性。

让我们说它看起来如下:

[Date].[actor creation date].[actor creation date]

现在,您尝试使用一个计算成员来保存每个日期的计数。

WITH MEMBER Measures.CountOfDate
AS
COUNT([Date].[actor creation date].[actor creation date].CURRENTMEMBER)

limit 3表示您想要前3个日期。 MDX中的HEAD函数可以解决这个问题。

最终查询将是:

SELECT HEAD([Date].[actor creation date].[actor creation date].MEMBERS, 3) ON 1,
Measures.CountOfDate ON 0
FROM [fse_masters]

编辑 - 正如@whytheq所说,我的初步尝试不正确。

您可以尝试以下方面的内容:

WITH SET ActorCreationDates AS
[Date].[actor creation date].[actor creation date].MEMBERS

MEMBER Measures.CountOfDate
AS
COUNT(EXISTING ActorCreationDates)

SELECT HEAD(ActorCreationDates, 3) ON 1,
Measures.CountOfDate ON 0
FROM [fse_masters]

或者,如果您需要所有记录,而不仅仅是前三名,那么:

SELECT DISTINCT(ActorCreationDates) ON 1,
Measures.CountOfDate ON 0
FROM [fse_masters]

EXISTING子句计算' CountOfDate'在当前上下文中,即Axis 1上的特定成员。

答案 1 :(得分:0)

您正在定义一个名称与现有度量相同的度量 - 这是否会导致异常?

  

使用MEMBER [measure]。 [演员创建日期] AS   COUNT(([测量]。 [演员创建日期] ))

我认为对于任何层次结构的任何成员,该成员的每个度量都有1个,所以你的脚本每个计数只会生成1个?

在AdvWrks中我做到了:

WITH 
  MEMBER [Measures].[x] AS 
    Count([Measures].[Internet Sales Amount]) 
SELECT 
  {
    [Measures].[Internet Sales Amount]
   ,[Measures].[x]
  } ON 0
 ,[Product].[Product Categories].[Subcategory] ON 1
FROM [Adventure Works];

它返回:

enter image description here

是否可以根据需要将度量添加到多维数据集中?它需要包含相关的关系和度量类型,即计数。