【问题标题】:Dynamic Where Clause Using MDX Query使用 MDX 查询的动态 Where 子句
【发布时间】:2016-08-03 15:19:15
【问题描述】:

我是 mdx 查询的新手,我想问一下我们如何使用动态 where 子句编写 MDX 查询。例如,我有员工 ID 列表,它将作为逗号分隔值“1,2,3,4”传递给程序。此列表可以包含任何员工 ID。在 mdx 中,我想要一些我们通常在 SQL 查询中使用的 IN 子句。我不想在 MDX Where 子句中给出静态值,例如 {[Member].[Member Key].&[1], [Member].[Member Key].&[2], [Member].[Member密钥].&[3]、[成员].[成员密钥].&[4]}。这件事可以通过动态 where 子句来实现,我可以将任何值传递给 storedprocedure 参数?

谢谢

【问题讨论】:

  • 稍微改进一下并分享一些代码。我不知道 MDX,但是使用常规存储过程,您可以发送您的列表,将其解析为参数并创建一个变量。然后将 where 子句编写为变量 @query = 'Select.... where '+@previouslycreatedvariable 然后运行 ​​exec(@query)
  • 你在使用 ssrs 吗?
  • 不,我正在使用 Ssas。实际上我正在使用 mdx 查询优化我在多维数据集中的 sql 查询

标签: sql ssas mdx cube


【解决方案1】:

您可以按照您编写的相同方式动态创建 where 子句,但使用 strtomember/strtoset 函数。

所以,而不是: {[Member].[Member Key].&[1], [Member].[Member Key].&[2], [Member].[Member Key].&[3], [Member].[Member Key ].&[4]}

会变成

strtoset("{[Member].[Member Key].&[1], [Member].[Member Key].&[2], [Member].[Member Key].&[3], [Member].[Member Key].&[4]}",false) //Or true if you want it to have constrained

如果在 SSRS 中,您将在参数中进行计算,MDX 将变成类似 strtoset(@Parameter.value,false) 的东西,您将使用字符串函数来设置正确的参数值。当使用不同的工具(不是 SSRS)时,这将是相同的概念。

参数不是硬编码的,可以使用字符串函数轻松更改。如果传递给 MDX 的字符串是合格的成员/集名称,它将正常工作。现在您只需要使用 String 函数来更改字符串

1,2,3,4 to become - {[Member].[Member Key].&[1], [Me...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 2015-11-11
    相关资源
    最近更新 更多