Sql 使用MDX从层次结构中获取当前会计年度

Sql 使用MDX从层次结构中获取当前会计年度,sql,ssas,mdx,Sql,Ssas,Mdx,我正在ReportingServices2005中基于SSAS2005多维数据集构建一个报告。该报告的基本思想是,他们希望看到本财年迄今为止的销售额与去年迄今为止的销售额。这听起来很简单,但由于这是我第一份基于SSAS的真实报告,所以我过得非常愉快 首先,如何计算当前会计年度、季度或月份。我有一个包含所有信息的会计日期层次结构,但我不知道如何说:根据今天的日期,查找当前会计年度、季度和月份 我的第二个小问题是去年的销售额与今年的销售额相比。我已经看到了许多关于如何执行此操作的示例,但它们都假设您

我正在ReportingServices2005中基于SSAS2005多维数据集构建一个报告。该报告的基本思想是,他们希望看到本财年迄今为止的销售额与去年迄今为止的销售额。这听起来很简单,但由于这是我第一份基于SSAS的真实报告,所以我过得非常愉快

首先,如何计算当前会计年度、季度或月份。我有一个包含所有信息的会计日期层次结构,但我不知道如何说:根据今天的日期,查找当前会计年度、季度和月份

我的第二个小问题是去年的销售额与今年的销售额相比。我已经看到了许多关于如何执行此操作的示例,但它们都假设您手动选择日期。由于这是一个报告,并且几乎可以独立运行,因此我需要一种方法将当前会计年度、季度和月份插入PERIODSTODATE或PARALLELPERIOD函数中,以获得所需内容


因此,我在此请求您的帮助。

您可能需要手动修改SSRS MDX才能做到这一点。现在可以使用SSA,通常是这样做的:

WITH 
MEMBER [Today]
 AS {
StrToMember("[Date].[Date Key].&[" + Format(now(), "yyyyMMdd") + "]")
}


SELECT
    [Measures].[Some Measure]
ON COLUMNS
FROM    
    [Cube]
WHERE
    {[Today]}
SET CurrentFiscalYear AS 
(
    StrToSet("[Dim Date Name].[Fiscal Year].&[" + Format(IIF(Month(Now()) > MonthOffSetNumber, Year(Now()) + 1,Year(Now()))) + "]")
)
当然,你需要改变它以适应你自己的立方体结构


因此,假设您有一个会计年度,并且您希望插入值,请修改以上内容以适应?把一个字符串放在一起,就像我向您展示的,它等于您想要使用的值。听上去你没事吧?

你应该能够通过各种功能来解决这个问题,这些功能可以告诉你“你在层次结构中的位置”

e、 g


我知道这有点太晚了,但对于到达此问题页面的人来说,这可能会有所帮助:

IIF(Month(Now()) > MonthOffSetNumber, Year(Now()) + 1,Year(Now())) 
这是为了获取当前财政年度。这将应用于以下情况:

WITH 
MEMBER [Today]
 AS {
StrToMember("[Date].[Date Key].&[" + Format(now(), "yyyyMMdd") + "]")
}


SELECT
    [Measures].[Some Measure]
ON COLUMNS
FROM    
    [Cube]
WHERE
    {[Today]}
SET CurrentFiscalYear AS 
(
    StrToSet("[Dim Date Name].[Fiscal Year].&[" + Format(IIF(Month(Now()) > MonthOffSetNumber, Year(Now()) + 1,Year(Now()))) + "]")
)

这将有助于以后在查询中进行交叉联接。

我们找到了一种使用参数在mdx中计算会计期间截止日期的简单方法。假设我们从2014年4月1日开始,到2015年3月31日结束。以下是公式。单击报表数据中的参数beginDate-右键单击参数-指定值-添加表达式值:

=DATEADD
("M"
,IIF(Month(Today())<4
 ,-Month(Today())-8
 ,-Month(Today())+4
 )
,DATEADD("D",0-DATEPART("D",Today())+1,Today()))
=DATEADD("D",-1,DATEADD("M",12,DATEADD
("M"
,IIF(Month(Today())<4
 ,-Month(Today())-8
 ,-Month(Today())+4
 )
,DATEADD("D",0-DATEPART("D",Today())+1,Today()))))
对第二个参数EndDate执行相同操作,并设置Defualt值-指定值并添加表达式值:

=DATEADD
("M"
,IIF(Month(Today())<4
 ,-Month(Today())-8
 ,-Month(Today())+4
 )
,DATEADD("D",0-DATEPART("D",Today())+1,Today()))
=DATEADD("D",-1,DATEADD("M",12,DATEADD
("M"
,IIF(Month(Today())<4
 ,-Month(Today())-8
 ,-Month(Today())+4
 )
,DATEADD("D",0-DATEPART("D",Today())+1,Today()))))
现在,您的ssrs报告将会计期间作为默认期间。 莫伊丝·卡邦戈