MDX查询STRTOSET CONSTRAINED标志

时间:2016-02-11 09:25:47

标签: ssas mdx business-intelligence

我不熟悉MDX语言,我遇到了数据集(DataBatchProcessData)的问题,这是MDX查询:

SELECT 
  NON EMPTY 
    {
      [Measures].[Germ1 Delta Temp In Out Inf]
     ,[Measures].[Germ2 Delta Temp In Out Sup]
     ,[Measures].[Germ2 Delta Temp In Out Inf]
     ,[Measures].[Germ1 Delta Temp In Out Sup]
     ,[Measures].[Germ Nb Sprays]
    } ON COLUMNS
 ,NON EMPTY 
    {
        [65 Batch Process Data].[Batch Number].[Batch Number].ALLMEMBERS*
        [01 Plants].[Plant Name].[Plant Name].ALLMEMBERS*
        [04 Production Units].[Production Unit].[Production Unit].ALLMEMBERS*
        [65 Batch Process Data].[Steeping Start Date].[Steeping Start Date].ALLMEMBERS
    }
  DIMENSION PROPERTIES 
    MEMBER_CAPTION
   ,MEMBER_UNIQUE_NAME
   ON ROWS
FROM 
(
  SELECT 
    StrToSet
    ("{[65 Batch Process Data].[Batch Number].&[1320165073],[65 Batch Process Data].[Batch Number].&[1320165074],[65 Batch Process Data].[Batch Number].&[1320165075]}"
     ,CONSTRAINED
    ) ON COLUMNS
  FROM 
  (
    SELECT 
      StrToSet
      ("[04 Production Unit].[Production Unit].&[1]"
       ,CONSTRAINED
      ) ON COLUMNS
    FROM 
    (
      SELECT 
        StrToSet
        ("[01 Plants].[Plant Name].&[Rostock]"
         ,CONSTRAINED
        ) ON COLUMNS
      FROM [Supervision]
    )
  )
)
CELL PROPERTIES 
  VALUE
 ,BACK_COLOR
 ,FORE_COLOR
 ,FORMATTED_VALUE
 ,FORMAT_STRING
 ,FONT_NAME
 ,FONT_SIZE
 ,FONT_FLAGS;

此MDX查询由SSRS自动生成,但无法正常运行,我在运行报告时遇到此错误:

Query (8, 9) The restrictions imposed by the CONSTRAINED flag in the STRTOSET function were violated.

我得到了另一个与此数据集非常相似的DataSet(DataGermination),它采用相同的参数(不在同一维度中):

SELECT 
  NON EMPTY 
    {
      [Measures].[Air Temperature Out - Fact Germination Continue]
    } ON COLUMNS
 ,NON EMPTY 
    {
        [81 Germination Continue].[Batch Number].[Batch Number].ALLMEMBERS*
        [80 Germination General].[Plant Name].[Plant Name].ALLMEMBERS*
        [80 Germination General].[Production Unit].[Production Unit].ALLMEMBERS*
        [81 Germination Continue].[Characteristic Date].[Characteristic Date].ALLMEMBERS*
        [80 Germination General].[Start Date  Unloading].[Start Date  Unloading].ALLMEMBERS*
        [80 Germination General].[Start Date].[Start Date].ALLMEMBERS*
        [80 Germination General].[End Date].[End Date].ALLMEMBERS
    }
  DIMENSION PROPERTIES 
    MEMBER_CAPTION
   ,MEMBER_UNIQUE_NAME
   ON ROWS
FROM 
(
  SELECT 
    StrToSet
    ("[80 Germination General].[Production Unit].&[1]"
     ,CONSTRAINED
    ) ON COLUMNS
  FROM 
  (
    SELECT 
      StrToSet
      ("[80 Germination General].[Plant Name].&[Rostock]"
       ,CONSTRAINED
      ) ON COLUMNS
    FROM 
    (
      SELECT 
        StrToSet
        ("{[81 Germination Continue].[Batch Number].&[1320165073],[81 Germination Continue].[Batch Number].&[1320165074],[81 Germination Continue].[Batch Number].&[1320165075]}"
         ,CONSTRAINED
        ) ON COLUMNS
      FROM [Supervision]
    )
  )
)
CELL PROPERTIES 
  VALUE
 ,BACK_COLOR
 ,FORE_COLOR
 ,FORMATTED_VALUE
 ,FORMAT_STRING
 ,FONT_NAME
 ,FONT_SIZE
 ,FONT_FLAGS;

当我在SSMS中运行这些查询时,第二个正在运行(DataGermination),但我不知道为什么,数据集DataBatchProcessData不是。

3 个答案:

答案 0 :(得分:1)

我怀疑您指定的其中一个成员在多维数据集中不存在。

易于测试。

如果您将以下内容添加到非常简单的mdx脚本中,它会运行吗?

{[65 Batch Process Data].[Batch Number].&[1320165073]
,[65 Batch Process Data].[Batch Number].&[1320165074]
,[65 Batch Process Data].[Batch Number].&[1320165075]}

以下内容应阐明是否承认这些成员:

SELECT 
  {} ON ROWS
 ,{
    [81 Germination Continue].[Batch Number].&[1320165073]
   ,[81 Germination Continue].[Batch Number].&[1320165074]
   ,[81 Germination Continue].[Batch Number].&[1320165075]
  } ON COLUMNS
FROM [Supervision];

答案 1 :(得分:1)

来自BOL:

  

使用CONSTRAINED标志时,设置规范必须包含   限定或不合格的成员名称或一组包含的元组   括号{}括起来的限定或不合格的成员名称。这面旗帜   用于通过指定的方式降低注射攻击的风险   串。如果提供的字符串无法直接解析   限定或不合格的成员名称,出现以下错误:   " STRTROSET标志在STRTOSET中施加的限制   功能受到了侵犯。

您似乎没有使用属性的完全限定成员名称。

需要

Dimension Name.Hierarchy Name.Level Name.Member Name

Dimension Name.Hierarchy Name.Level Name.&[Member Value] 

答案 2 :(得分:0)

你是对的SouravA,我的问题是批号。

期待像[65 Batch Process Data].[Batch Number].&[Batch Number]

这样的东西

我正在给他func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { NSThread.sleepForTimeInterval(5.0) return true }

感谢您的帮助!