Ssas 每个事务的MDX开始和结束时间
我希望你能帮助我,我已经尝试了很多方法,但都没有成功。我正在尝试获取玩家帐号、日期、开始和结束日期时间,并可能计算开始和结束时间之间的游戏持续时间 我希望输出像这样 玩家帐号|游戏日期|开始时间|结束时间|游戏持续时间|实际时间 我似乎总是返回一整天的开始和结束时间,而不是每个帐户Ssas 每个事务的MDX开始和结束时间,ssas,mdx,cubes,Ssas,Mdx,Cubes,我希望你能帮助我,我已经尝试了很多方法,但都没有成功。我正在尝试获取玩家帐号、日期、开始和结束日期时间,并可能计算开始和结束时间之间的游戏持续时间 我希望输出像这样 玩家帐号|游戏日期|开始时间|结束时间|游戏持续时间|实际时间 我似乎总是返回一整天的开始和结束时间,而不是每个帐户 WITH SET [MySet] AS [Customer].[Player Account Number].Children* Head ( NonEm
WITH
SET [MySet] AS
[Customer].[Player Account Number].Children*
Head
(
NonEmpty
(
[Start Time].[Hour].Children
,[Measures].[Actual Win]
)
,1
)*
Tail
(
NonEmpty
(
[End Time].[Hour].Children
,[Measures].[Actual Win]
)
,1
)
SELECT
{[Measures].[Actual Win]} ON 0
,{[MySet]} ON 1
FROM
(
SELECT
[Customer].[Player Account Number].&[1040002184]
:
[Customer].[Player Account Number].&[1040002198] ON 0
FROM Ratings
)
WHERE
{[Gaming Date].[Full Date].&[20150101]};
您有一个静态集(总是返回相同的成员)。使用
EXISTING
关键字计算当前上下文中的开始和结束时间
with member [Measures].[StartDate] as
EXISTING
HEAD(
nonempty(
[Start Time].[Hour].Children,[Measures].[Actual Win]
) ,1
).ITEM(0).ITEM(0).MEMBERVALUE
member [Measures].[EndDate] as
EXISTING
TAIL(
nonempty(
[End Time].[Hour].children,[Measures].[Actual Win]
) ,1
).ITEM(0).ITEM(0).MEMBERVALUE
select
{
[Measures].[Actual Win],
[Measures].[StartDate],
[Measures].[EndDate]
} on 0,
[Customer].[Player Account Number].children on 1
from
(
select (
[Customer].[Player Account Number].&[1040002184]:
[Customer].[Player Account Number].&[1040002198]
) on 0
from Ratings
)
where {[Gaming Date].[Full Date].&[20150101]}
重新排列了[Customer].[Player Account Number]
,以便在每个玩家帐户的上下文中计算日期。希望没问题
编辑
此方法的简化AdWrks版本如下:仍然不太有效:
WITH
SET [aSet] AS
(EXISTING
Head
(
NonEmpty
(
[Date].[Date].[Date].MEMBERS
,[Measures].[Internet Sales Amount]
)
))
SELECT
{[Measures].[Internet Sales Amount]} ON 0
,NON EMPTY
{[Promotion].[Promotion].MEMBERS * [aSet]} ON 1
FROM [Adventure Works];
您有一个静态集(总是返回相同的成员)。使用
EXISTING
关键字计算当前上下文中的开始和结束时间
with member [Measures].[StartDate] as
EXISTING
HEAD(
nonempty(
[Start Time].[Hour].Children,[Measures].[Actual Win]
) ,1
).ITEM(0).ITEM(0).MEMBERVALUE
member [Measures].[EndDate] as
EXISTING
TAIL(
nonempty(
[End Time].[Hour].children,[Measures].[Actual Win]
) ,1
).ITEM(0).ITEM(0).MEMBERVALUE
select
{
[Measures].[Actual Win],
[Measures].[StartDate],
[Measures].[EndDate]
} on 0,
[Customer].[Player Account Number].children on 1
from
(
select (
[Customer].[Player Account Number].&[1040002184]:
[Customer].[Player Account Number].&[1040002198]
) on 0
from Ratings
)
where {[Gaming Date].[Full Date].&[20150101]}
重新排列了[Customer].[Player Account Number]
,以便在每个玩家帐户的上下文中计算日期。希望没问题
编辑
此方法的简化AdWrks版本如下:仍然不太有效:
WITH
SET [aSet] AS
(EXISTING
Head
(
NonEmpty
(
[Date].[Date].[Date].MEMBERS
,[Measures].[Internet Sales Amount]
)
))
SELECT
{[Measures].[Internet Sales Amount]} ON 0
,NON EMPTY
{[Promotion].[Promotion].MEMBERS * [aSet]} ON 1
FROM [Adventure Works];
通常,第一个日期和最后一个日期都是度量值。如果您只想要这两个玩家的结果,请使用WHERE子句而不是子选择:
WITH
MEMBER [Measures].[fDate] AS
Head
(
NonEmpty
(
[Start Time].[Hour].MEMBERS
,[Measures].[Actual Win]
)
).Item(0).Item(0).Member_Caption
MEMBER [Measures].[lDate] AS
Tail
(
NonEmpty
(
[End Time].[Hour].MEMBERS
,[Measures].[Actual Win]
)
).Item(0).Item(0).Member_Caption
SELECT
{
[Measures].[fDate]
,[Measures].[lDate]
,[Measures].[Actual Win]
} ON 0
,{[Customer].[Player Account Number].Children} ON 1
FROM Ratings
WHERE
([Gaming Date].[Full Date].&[20150101],
{ [Customer].[Player Account Number].&[1040002184]
,[Customer].[Player Account Number].&[1040002198]});
这是一个有效的AdvWrks
脚本,它完成了您试图实现的任务:
WITH
MEMBER [Measures].[firstDate] AS
Head
(
NonEmpty
(
[Date].[Date].[Date].MEMBERS
,[Measures].[Internet Sales Amount]
)
).Item(0).Item(0).Member_Caption
MEMBER [Measures].[lastDate] AS
Tail
(
NonEmpty
(
[Date].[Date].[Date].MEMBERS
,[Measures].[Internet Sales Amount]
)
).Item(0).Item(0).Member_Caption
SELECT
{
[Measures].[Internet Sales Amount]
,[Measures].[firstDate]
,[Measures].[lastDate]
} ON 0
,NON EMPTY {[Promotion].[Promotion].MEMBERS} ON 1
FROM [Adventure Works];
如果您希望撤回一个成员而不是使用度量,我认为GENERATE
函数的工作方式如下AdvWrks示例:
WITH
SET [aSet] AS
Generate
(
[Promotion].[Promotion].MEMBERS
,
[Promotion].[Promotion].CurrentMember
*
Head
(
NonEmpty
(
[Date].[Date].[Date].MEMBERS
,[Measures].[Internet Sales Amount]
)
)
)
SELECT
{[Measures].[Internet Sales Amount]} ON 0
,NON EMPTY
{[aSet]} ON 1
FROM [Adventure Works];
通常,第一个日期和最后一个日期都是度量值。如果您只想要这两个玩家的结果,请使用WHERE子句而不是子选择:
WITH
MEMBER [Measures].[fDate] AS
Head
(
NonEmpty
(
[Start Time].[Hour].MEMBERS
,[Measures].[Actual Win]
)
).Item(0).Item(0).Member_Caption
MEMBER [Measures].[lDate] AS
Tail
(
NonEmpty
(
[End Time].[Hour].MEMBERS
,[Measures].[Actual Win]
)
).Item(0).Item(0).Member_Caption
SELECT
{
[Measures].[fDate]
,[Measures].[lDate]
,[Measures].[Actual Win]
} ON 0
,{[Customer].[Player Account Number].Children} ON 1
FROM Ratings
WHERE
([Gaming Date].[Full Date].&[20150101],
{ [Customer].[Player Account Number].&[1040002184]
,[Customer].[Player Account Number].&[1040002198]});
这是一个有效的AdvWrks
脚本,它完成了您试图实现的任务:
WITH
MEMBER [Measures].[firstDate] AS
Head
(
NonEmpty
(
[Date].[Date].[Date].MEMBERS
,[Measures].[Internet Sales Amount]
)
).Item(0).Item(0).Member_Caption
MEMBER [Measures].[lastDate] AS
Tail
(
NonEmpty
(
[Date].[Date].[Date].MEMBERS
,[Measures].[Internet Sales Amount]
)
).Item(0).Item(0).Member_Caption
SELECT
{
[Measures].[Internet Sales Amount]
,[Measures].[firstDate]
,[Measures].[lastDate]
} ON 0
,NON EMPTY {[Promotion].[Promotion].MEMBERS} ON 1
FROM [Adventure Works];
如果您希望撤回一个成员而不是使用度量,我认为GENERATE
函数的工作方式如下AdvWrks示例:
WITH
SET [aSet] AS
Generate
(
[Promotion].[Promotion].MEMBERS
,
[Promotion].[Promotion].CurrentMember
*
Head
(
NonEmpty
(
[Date].[Date].[Date].MEMBERS
,[Measures].[Internet Sales Amount]
)
)
)
SELECT
{[Measures].[Internet Sales Amount]} ON 0
,NON EMPTY
{[aSet]} ON 1
FROM [Adventure Works];
感谢万分之三的原因。第(0)项。第(0)项。会员的标题让一切都不同了。结果似乎马上就出来了。最终的解决方案现在看起来是这样的
with set [MySet]
as
[Casino Hierarchy].[Casino Key].children *
[Gaming Date].[Date].currentmember *
[Customer].[Player Account Number].children *
[Start Time].[Hour].children
member [measures].[Mindate]
as
HEAD(nonempty([End Time].[Hour].children,[Measures].[Actual Win]),1).Item(0).Item(0).Member_Caption
member [measures].[Maxdate]
as
TAIL(nonempty([Start Time].[Hour].children,[Measures].[Actual Win]),1).Item(0).Item(0).Member_Caption
select non empty
{
[Measures].[Actual Win],[measures].[Mindate],[measures].[Maxdate]
} on 0, non empty
{
[Customer].[Player Account Number].children
} on 1
from
(
select ([Customer].[Player Account Number].&[1040002184]:[Customer].[Player Account Number].&[1040002198]) on 0 from Ratings
)
where
{
[Gaming Date].[Full Date].&[20150101]
}
感谢万分之三的原因。第(0)项。第(0)项。会员的标题让一切都不同了。结果似乎马上就出来了。最终的解决方案现在看起来是这样的
with set [MySet]
as
[Casino Hierarchy].[Casino Key].children *
[Gaming Date].[Date].currentmember *
[Customer].[Player Account Number].children *
[Start Time].[Hour].children
member [measures].[Mindate]
as
HEAD(nonempty([End Time].[Hour].children,[Measures].[Actual Win]),1).Item(0).Item(0).Member_Caption
member [measures].[Maxdate]
as
TAIL(nonempty([Start Time].[Hour].children,[Measures].[Actual Win]),1).Item(0).Item(0).Member_Caption
select non empty
{
[Measures].[Actual Win],[measures].[Mindate],[measures].[Maxdate]
} on 0, non empty
{
[Customer].[Player Account Number].children
} on 1
from
(
select ([Customer].[Player Account Number].&[1040002184]:[Customer].[Player Account Number].&[1040002198]) on 0 from Ratings
)
where
{
[Gaming Date].[Full Date].&[20150101]
}
我想你需要在
[Customer].[Player Account Number]周围放置现有的。孩子们不在日期上,因为他们没有被分割。我对使用现有的很陌生,但我知道它会将cellset上下文拉到WITH
子句中-因此我添加了[Customer].[Player Account Number].children
进入单元集中,然后使用现有的
将该上下文拉入WITH
子句?我将对此进行回顾并进行回复。我已尝试从您的两个示例中添加现有的,但仍然得到相同的结果,我确信这与我的集合有关,但在这里完全丢失了,对MDX来说非常陌生,那就容易多了TSql@smckechnie-我的第一个脚本是垃圾,因为刚刚对AdvWrks进行了测试,所以我删除了它。我正在测试第二个。我想你需要在[Customer].[Player Account Number]周围放置现有的
。孩子们
不在日期上,因为他们没有被切片。我不熟悉使用现有的
,但我知道它会将单元集上下文拉到WITH
子句中-因此我添加了[Customer]。[玩家帐号].children
进入单元集中,然后使用现有的将该上下文拉入WITH
子句?我将对此进行回顾并进行回复。我已尝试从您的两个示例中添加现有的,但仍然得到相同的结果,我确信这与我的集合有关,但在这里完全丢失了,对MDX来说非常陌生,太多了席尔TSql@smckechnie-我的第一个脚本是垃圾,因为刚刚针对AdvWrks进行了测试,所以我已将其删除。我正在测试第二个脚本。请检查我的尝试。@Sourav_Agasti我对这种方法有点不确定-传统上,firstdates或lastdate或lastdatesWithdata是使用[度量]完成的
。因此,虽然很有趣,但我认为最好不要使用自定义设置?你绝对是对的。理想情况下,我们应该有措施来完成这项工作。这就是为什么我的方法也不起作用的原因。我在回答中添加的AdvWrks措施方法工作请检查我的尝试。@Sourav\u Agasti我对这种方法有点不确定-traditi所有firstdates或lastdates,或lastdatesWithdata都是使用[度量]完成的
。虽然很有趣,但我认为最好不要使用自定义设置?你绝对是对的。理想情况下,我们应该有措施来完成这项工作。这就是为什么我的方法也不起作用的原因。我在回答中添加的AdvWrks措施方法worksThank@Sourav_Agasti。如果我有一个玩家帐户,解决方案会非常有效,b但是,当a有一个帐户列表时,它会返回整个列表的第一个小时和整个列表的最后一个小时,而不是每个玩家帐户的最后一个小时。如果你想玩它,我有一个相当于你脚本的AdvWrks?(如果你愿意,我可以添加到你的答案中?)…我很想知道您是否可以使用这种方法。@Sourav您编辑的代码在measures@Sourav_Agasti-我已经添加了AdvWrks模型的简化版本。如果你能让它正常工作,那就好了-我认为这是一个比使用member\u caption
@smckechnie更快的解决方案-我忘了添加项(0).ITEM(0)
。已添加相同的now谢谢@Sourav\u Agasti。如果我有一个玩家帐户,解决方案会非常有效,但a有帐户列表时,它会返回e的第一个小时