【问题标题】:Setting the role for a calculated dimension (SSAS Cube)设置计算维度的角色(SSAS Cube)
【发布时间】:2016-12-16 12:37:15
【问题描述】:

多维数据集 (sql Server 2016) 包含维度 [Unit].[Unit].&[1][Unit].[Unit].&[2]。我创建了一个计算维度:

CREATE MEMBER CURRENTCUBE.[Unit].[Unit].[All].[1/2] AS [Unit].[Unit].&[1]/[Unit].[Unit].&[2]

为了限制对[Unit].[Unit].[All].[1/2] 维度的访问,我创建了角色。 但是我不能在 DimensionData-Basic 选项卡中选择[Unit].[Unit].[All].[1/2],因为该属性没有出现在属性列表中。 如果我在 MDX 脚本 Denied member set: {[Unit].[Unit].[All].[1/2]} 的 DimensionData-Advanced 选项卡中指定属性 [Unit].[Unit].[All].[1/2],则用户会看到此属性。 如何限制对计算维度的访问?

【问题讨论】:

    标签: ssas mdx cube


    【解决方案1】:

    如果您将 DimUnit SQL 表更改为包含“1/2”行,然后将您的 CREATE MEMBER 语句替换为以下内容,它应该可以正常工作,并且您应该能够在部署后在维度数据安全中看到此成员并处理立方体:

    ([Unit].[Unit].[1/2]) 
         = DIVIDE([Unit].[Unit].&[1], [Unit].[Unit].&[2]);
    

    然后,在您创建了一个使 1/2 成员消失的角色后,您在与该用户一起浏览多维数据集时会收到错误消息。将上面的行更改为以下内容:

    (IIf(IsError(StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED)),Head([Unit].[Unit].Members,0),StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED))
        = DIVIDE([Unit].[Unit].&[1], [Unit].[Unit].&[2]);
    

    顺便说一句,DIVIDE 会进行安全除法,因此除以零不会导致问题。

    我想不起来 StrToMember 是否是必要的,而只是一个成员参考,所以我谨慎行事。在没有 StrToMember 的情况下随意尝试。

    要清楚整个脚本应该说:

    CALCULATE;
    
    (IIf(IsError(StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED)),Head([Unit].[Unit].Members,0),StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED))
        = DIVIDE([Unit].[Unit].&[1], [Unit].[Unit].&[2]);
    

    【讨论】:

    • 我替换了旧的“创建成员”,并且在使用该用户浏览多维数据集时出错。我不明白应该在哪里插入(IIf(IsError(StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED)),Head([Unit].[Unit].Members,0),StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED)) = DIVIDE([Unit].[Unit].&[1], [Unit].[Unit].&[2]) 在多维数据集的«Calculation» 中或角色的DimensionData-Advanced 选项卡中(“Denied member set”)?
    • 转到计算选项卡并翻转到脚本视图。该声明在CALCULATE 之后出现
    • 感谢您的帮助!我正在写一个脚本:CALCULATE; CREATE MEMBER CURRENTCUBE.[Unit].[Unit].[1/2] AS (IIF(IsError(StrToMember('[Unit].[Unit].[1/2]', CONSTRAINED)), HEAD([Unit].[Unit].Members,0), StrToMember('[Unit].[Unit].[1/2]', CONSTRAINED)) = DIVIDE([Unit].[Unit].&[1], [Unit].[Unit].&[2])); 但我得到一个错误“当字符串 [Unit].[Unit].&[1/2] 被解析时,在多维数据集中找不到对象”。
    • @Natalya 在您将额外的行添加到维度表并重新处理维度以更改脚本之后。我编辑了我的答案以使其更清楚。你不需要CREATE MEMBER
    猜你喜欢
    • 1970-01-01
    • 2016-12-16
    • 2021-12-12
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多