mdx中的最后一个非空值,用于在两个日期和状态之间过滤事件

问题描述 投票:0回答:1

我有正在进行的活动。每个活动都有日期,金额和状态。我需要一个计算成员,它按事件,状态以及1月的第一天到同一年的选定日期之间返回最后一笔金额

我尝试了半加法LastChildNonEmpty,但只为具有最后日期的事件返回一行

有了这些数据,我希望:


|活动|日期|金额|状态|

| Event1 | 20180301 | 05 |打开|

| Event1 | 20180311 | 12 |打开|

| Event2 | 20180406 | 02 |打开|

| Event1 | 20180523 | 60 |关闭|

| Event2 | 20180809 | 07 |关闭|

| Event1 | 20190104 | 27 |打开|

问题和结果

- 20180101和20180331之间的活动状态: EVENT1 20180311 12开放

- 20180101和20180430之间的活动状态开启 EVENT1 20180311 12开放

EVENT2 20180406 2开放

- 20180101和20180531之间的活动状态开启 EVENT2 20180406 2开放

- 20180101和20180531之间的事件状态关闭 EVENT1 20180523 60关闭

我很抱歉,如果格式不好,但我已阅读,我不知道如何创建一个包含数据的表

谢谢

mdx
1个回答
0
投票

您可以使用计算的度量来解决上述问题。 mdx函数BottomCount将解决您的问题。这是一个基于AdventureWorks的示例。以下查询列出了日期,销售共振和客户数量。

select [Measures].[Customer Count] on columns,
nonempty(
{(
{[Date].[Date].&[20130101]:[Date].[Date].&[20130713]},
[Sales Reason].[Sales Reason].[Sales Reason])}
,[Measures].[Customer Count]
)
on rows
from [Adventure Works]
where 
([Date].[Calendar Year].&[2013])

结果enter image description here

现在让我们进行计算测量并测试是否为样本案例。

with member measures.t 
as 
(bottomcount(
nonempty(
existing
{([Date].[Date].[Date].members,[Sales Reason].[Sales Reason].currentmember)}
,[Measures].[Customer Count]),
1
).item(0)
,[Measures].[Customer Count])

select measures.t on columns 
from [Adventure Works]
where 
([Date].[Date].&[20130101]:[Date].[Date].&[20130111],
[Sales Reason].[Sales Reason].[Other])

enter image description here

我们的想法是,您可以将日期范围和销售原因传递到哪里,并且度量将列出最后一个值。

编辑:以下查询将处理用户传递一个日期和属性层次结构时的情况。如果传递用户层次结构,则可以防止年份启动的硬编码

with member measures.t 
as 
(bottomcount(
nonempty(
{({[Date].[Date].&[20130101]:[Date].[Date].currentmember},[Sales Reason].[Sales Reason].currentmember)}
,[Measures].[Customer Count]),
1
).item(0)
,[Measures].[Customer Count])
select measures.t on columns 
from [Adventure Works]
where 
([Date].[Date].&[20130111],
[Sales Reason].[Sales Reason].[Other])
© www.soinside.com 2019 - 2024. All rights reserved.