MDX 计算成员带度量

Jam*_*iec 3 ssas mdx

我正在尝试将计算成员添加到 MDX 查询,这将为我的数据库中的人创建一组“年龄带”。我有一个包含每个人年龄的度量。

我已经开始使用这个 MDX

SELECT 
  NON EMPTY {[Measures].[Count of People]} ON COLUMNS,
  NON EMPTY {
    (
        [People].[Gender].[Gender],
        [People].[Some].[Other Attributes]
    )
  } ON ROWS
FROM [MyCube]
WHERE ( ... slicer here .... )
Run Code Online (Sandbox Code Playgroud)

我还有另一个措施([Measures].[Age] ),我想将其捆绑起来并与行一起返回,例如 0-25、26-50 岁等的任何人

这是我试过的

WITH SET [Age Band]
    AS IIF([Measures].[Age]<26,"0-26",IIF([Measures].[Age]<51,"26-51","Over 50"))
SELECT 
  NON EMPTY {[Measures].[Count of People]} ON COLUMNS,
  NON EMPTY {
    (
        [People].[Gender].[Gender],
        [People].[Some].[Other Attributes],
        [Age Band]
    )
  } ON ROWS
FROM [MyCube]
WHERE ( ... slicer here .... )
Run Code Online (Sandbox Code Playgroud)

但是我得到的错误是

该函数需要参数的元组集表达式。使用了字符串或数字表达式。

我究竟做错了什么?有没有更简单/更好的方法来做到这一点而无需链接IIF命令?

小智 5

如果除了将年龄作为People度量之外,您还希望将年龄作为维度中的一个属性,则可以将带定义为该属性层次结构的计算成员(计算成员不需要是计算度量,它们可以是任何层次结构的成员!):

WITH Member [People].[Age].[0-26] AS
            Aggregate([People].[Age].[0] : [People].[Age].[26])
     Member [People].[Age].[26-51] AS
            Aggregate([People].[Age].[26] : [People].[Age].[51])
     Member [People].[Age].[Over 50] AS
            Aggregate([People].[Age].[51] : null)
SELECT 
  NON EMPTY {[Measures].[Count of People]} ON COLUMNS,
  NON EMPTY 
    [People].[Gender].[Gender]
    *
    [People].[Some].[Other Attributes]
    *
    { [People].[Age].[0-26], [People].[Age].[26-51], [People].[Age].[Over 50] }
    ON ROWS
FROM [MyCube]
WHERE ( ... slicer here .... )
Run Code Online (Sandbox Code Playgroud)

请注意,我将边界年龄 26 和 51 分别保留在两个乐队中,因为您的乐队的名称似乎建议这样做。您可以在 MDX 中执行此操作,因为计算成员的每个定义都独立于其他成员,因此不禁止计算成员之间存在交集。但是您可能会选择调整表达方式,并且只将每个年龄包含在一个频段中。

您尝试的方式不起作用,因为 MDX 中的集合由元组组成,而您从IIF表达式中传递一个字符串。