【问题标题】:Dynamic declaration of variable in SQL Server Analysis Services MDX query?SQL Server Analysis Services MDX 查询中变量的动态声明?
【发布时间】:2015-05-27 11:26:27
【问题描述】:

有没有办法编写这样的查询,我们可以动态声明变量?

目前我正在使用如下所示的查询:

declare @pYear_Internal as NVarchar(100)

set @pYear_Internal = [D FISCALPERIOD].[FP CODE].[FP CODE]

WITH

MEMBER MEASURES.[REVENUE] AS [Measures].[TOTAL REVENUE]

SET LAST5YEARS AS STRTOMEMBER(@pYear_Internal).Lag(4) : 

STRTOMEMBER(@pYear_Internal)

SELECT 
{

[MEASURES].[REVENUE]

}

ON COLUMNS,

EXCEPT(LAST5YEARS,[D FISCALPERIOD].[COMP_FP].&[-1].&[-1])

ON ROWS

FROM 

( 

SELECT STRTOMEMBER(@pYear_Internal).PARENT ON 0

FROM [Quadrigence]

)

在执行上述查询时,得到错误 -

Query (1, 9) Parser: The syntax for '@pYear_Internal' is incorrect.  

它看起来不像 SQL 查询那样识别 DECLARE 关键字。我只想要一个直接针对服务器运行的查询。

请帮我看看我哪里做错了。

【问题讨论】:

  • 为什么要在脚本中声明一个变量?您是将此脚本提供给某个报表的数据集还是想从中创建一个存储过程?

标签: sql-server ssas mdx olap-cube


【解决方案1】:

我们处理这个需求的方式是构造一个动态的 MDX 字符串变量并使用 OPENQUERY 执行它:

DECLARE @pYear_Internal varchar(31)='SomeValue';
DECLARE @MDX varchar(max)='    
SELECT *
FROM OPENQUERY(MyLinkedServer,''
SELECT STRTOMEMBER('+@pYear_Internal+').PARENT ON 0
FROM [Quadrigence]
'')';
EXECUTE(@MDX);

当然,MyLinkedServer 是您的 SSAS 服务器的链接服务器。因此,整个查询必须在可以链接到 SSAS 服务器的 SQL Server 上执行。

【讨论】:

    猜你喜欢
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 2011-08-03
    相关资源
    最近更新 更多