SSAS:对某些用户隐藏 table 中某些字段的方法

SSAS: The way to hide certain fields in a table from certain users

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

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. 将所有销售额和成本拆分到单独的行中,并创建一个 MetricType 标志 'C'、'S' 等,并设置行级安全性,以便某些人不会无法看到成本线。

  2. 分成两个不同的table通过OLS处理

  3. 还有其他推荐吗?

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

谢谢!


更新:我最终采用了第一种方法。

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

已接受的答案有效并且适用于许多情况。感谢回答者的分享,只是不能解决我的特殊情况。

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

{
  "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,我们在其中定义用户不能使用的列。