SQL到MDX查询转换

SQL到MDX查询转换,sql,mdx,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 creat

下面是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]

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

成员[measures]。[actor creation date]为 计数(([Measures].[actor creation date]

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

在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];
它返回以下内容:


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

您不应该混淆“集合”和“度量”。度量值只是一个数字/字符串实体,本质上是逻辑的。在本质上,你无法计算一些合乎逻辑的东西。它需要是物理性质的可数。在MDX术语中,它需要是一个集合。更精确地说,是一组项目

select date(actor_creation_date),count(*) 
from fse_master 
group by (actor_creation_date) 
limit 3;
在查询中,
actor\u creation\u date
实际上是数据库中存在的一组内容(日期)。它本质上是物理的。在RDBMS术语中,这是一个列。在MDX术语中,这需要是一个集合

如果你有一个日期度量,你不能简单地期望在它上面加上一个计数,并期望它工作

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

您需要的是在一组日期上运行
COUNT
函数

您必须有一个日期维度,该维度将
参与者创建日期作为属性之一

让我们假设它如下所示:

[Date].[actor creation date].[actor creation date]
现在,您尝试拥有一个计算过的成员,该成员将保存每个日期的计数

WITH MEMBER Measures.CountOfDate
AS
COUNT([Date].[actor creation date].[actor creation date].CURRENTMEMBER)
limit 3
建议您选择前3个日期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”,即轴1上的特定成员。

sourav-(upped)对于集合和计数的解释,很高兴您有耐心。我不同意你的
度量。CountOfDate
作为
。如果你有
[Date].[actor creation Date].[actor creation Date].[actor creation Date],那么CountOfDate
只能是单个成员。成员在一个轴上-因此你的度量值将始终是1(你可以在AdvWrks中测试)@whytheq谢谢你指出这一点!我已经编辑了我的答案。我喜欢那个额外的脚本-你能添加一个AdvWrks等效请我想玩一下。