【问题标题】:SSAS: The way to hide certain fields in a table from certain usersSSAS:对某些用户隐藏表中某些字段的方法
【发布时间】:2021-08-17 03:25:17
【问题描述】:

对于 Microsoft Analysis Services 表格 (1500) 数据立方体,给定一个销售表:

CREATE TABLE SalesActual (
 Id Int,
 InvoiceNumber Char(10),
 InvoiceLineNumber Char(3),
 DateKey Date,
 SalesAmount money,
 CostAmount money )

DAX 中的 GP 计算在哪里

GP := SUM('SalesActual'[SalesAmount]) - SUM('SalesActual'[CostAmount])

我想限制某些用户访问成本/GP 数据。您会推荐哪种方法?

我能想到以下几点:

  1. 将所有 Sales 和 Cost 拆分为单独的行,并创建一个 MetricType 标志“C”、“S”等,并设置 Row-Level Security 以便某些人无法看到包含成本的行。

  2. 将其分成两个不同的表并通过OLS处理。

  3. 还有其他建议吗?

我倾向于方法 1,因为我有一些其他 RLS 设置并且 OLS 与 RLS 不能很好地混合,但我也想听听专家们有什么其他方法可以满足这些要求。

谢谢!


更新:我最终选择了第一种方法。

  1. 表格 DB 对于这种拆分速度很快
  2. OLS = 使字段无效;而且我必须创建和维护两个报告...这是不可取的
  3. RLS 更容易控制;我认为 cost / GP 是我目前唯一需要排除的内容,但如果我需要限制其他字段,它也为我提供了一些过滤器的灵活性;我的数据会垂直增长,但我也可以在未来的模型中添加额外的数据类型,如销售预算、销售预测、费用和其他成本等。全部由 RLS 轻松控制

接受的答案适用于许多场景。感谢回答者的分享,只是它并没有解决我的特殊情况。

【问题讨论】:

    标签: dax ssas tabular


    【解决方案1】:

    您可以创建一个让 CLS 完成工作的角色。 CLS 没有 gui,但我们可以使用脚本(您可以从 SSMS“脚本角色作为”编写当前角色的脚本来修改 - 但最好在新角色上测试)

    {
      "createOrReplace": {
        "object": {
          "database": "YourDatabase",
          "role": "CLS1"
        },
        "role": {
          "name": "CLS1",
          "modelPermission": "read",
          "members": [
            {
              "memberName": "YourOrganization\\userName"
            }
          ],
          "tablePermissions": [
            {
              "name": "Sales",
              "columnPermissions": [
                {
                  "name": "SalesBonus",
                  "metadataPermission": "none"
                },
                {
                  "name": "CostAmount",
                  "metadataPermission": "none"
                }
    
              ]
            }
          ]
        }
      }
    }
    

    关键元素是 TablePermissions 和 columnPermissions,我们在其中定义用户不能使用哪些列/列)。

    【讨论】:

    • 谢谢!我会试一试。我认为表格中的安全模型是附加的,我必须确保用户只属于有限制的角色,否则她将能够获得不需要的访问权限。
    • 谢谢!它有效(排序)。我使用 TabularEditor,所以我可以在 GUI 中进行更改,但脚本编写也不是太难。问题是引用所谓隐藏字段的措施仍然出现(根据他们不应该出现的各种文章),所以我仍在试图弄清楚这部分。此外,如果隐藏字段变为空白而不是不存在,那就太好了,因为这意味着我不能为不同的人群重复使用相同的报告。谢谢!
    • 尝试使用数据屏蔽:radacad.com/… biinsight.com/… 最终您可以尝试根据条件强制“无效格式” if(USERPRINCIPALNAME () = "some@email.com", FORMAT(sum( 'Table'[Cost]), "****"), sum('Table'[Cost]))
    • 谢谢。两者都是非常有趣的解决方案,我将调查它们是否合适。即使他们现在不是,我相信他们会在路上变得很方便。即,为销售人员屏蔽未分配的客户可能非常有用。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    相关资源
    最近更新 更多