【问题标题】:MDX: IIf condition on the value of a dimension is always falseMDX:维度值的 IIf 条件始终为假
【发布时间】:2013-10-02 14:24:39
【问题描述】:

我正在尝试根据维度[Scenario].[Option] 的值是否为+5 在列中产生不同的输出,我尝试使用IIf 函数来实现这一点。

WITH MEMBER [XorY] AS
(
    IIf([Scenario].[Option] = +5, 'X', 'Y')
    --IIf([Scenario].[Option].&[+5], 'X', 'Y')
)
SELECT
NON EMPTY
(
    [Scenario].[Option].[Option]
) ON ROWS,
NON EMPTY
(
    [XorY]
) ON COLUMNS
FROM [RePro]
WHERE
(
    [ABC].[ABC].[Val]
) CELL PROPERTIES VALUE

但是,使用上述任一 IIf 语句,[XorY] 始终为 Y,无论 [Scenario].[Option] 的值如何。看来我正在做的比较只是语法错误之类的。我该怎么做呢?我注意到,如果我在 IIf 条件下的 [Measures] 维度中使用计算成员,效果会更好,但在我的情况下这是不可能的 - 我必须使用 [Scenario].[Option]

感谢您提供的任何帮助:)

【问题讨论】:

    标签: sql-server ssas mdx ssas-2008 iif


    【解决方案1】:

    当您使用成员语句时,您通常希望使用 currentmember,因为它引用当前单元格。将其与 membervalue 结合起来,您将获得价值。在这种情况下,我将预期的答案用引号括起来。

    WITH MEMBER [XorY] AS
    (
       IIf([Scenario].[Option].currentMember.membervalue = "+5", 'X', 'Y')
    )
    

    如果您要与一个数字进行比较,您会这样做:

    WITH MEMBER [XorY] AS
    (
       IIf(STRTOVALUE([Scenario].[Option].currentMember.membervalue) = 5, 'X', 'Y')
    )
    

    如果不是 [Scenario].[Option] 中的所有成员都是数字,这可能会返回错误。转换还存在潜在的性能问题。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多