1

我的原始数据结构如下所示:

    ID  SecurityGroups_CLEAN    EDIT_Drive.1    EDIT_Drive.2    READ_Drive.1    READ_Drive.2    DENY_Drive.1    DENY_Drive.2    DENY_Drive.3    Fullname_CLEAN
    15  HighStaff               L Drive         null            null            null            null            null            null            Smith, John
    17  Foreign_National        null            null            null            null            L Drive         M Drive         Q Drive         Smith, John
    23  Domain Users            U Drive 2       null            L Drive         Q Drive         null            null            null            Smith, John

经过一些转换,过滤,旋转,删除列等......我设法让它看起来像这样......

Fullname_CLEAN  Drive     Count   Permissions
Smith, John     L Drive     3     DENY_Drive.1
Smith, John     L Drive     3     EDIT_Drive.1
Smith, John     L Drive     3     READ_Drive.1
Smith, John     M Drive     1     DENY_Drive.2
Smith, John     Q Drive     2     DENY_Drive.3
Smith, John     Q Drive     2     READ_Drive.2
Smith, John     U Drive 2   1     EDIT_Drive.1

基本上,我需要应用以下逻辑来总结用户驱动器级别的权限。

  1. 如果用户属于对驱动器具有拒绝权限的安全组,则无论其他用户组是否授予他们对同一驱动器的读取或编辑权限,他们的权限级别都是拒绝。
  2. 如果用户属于对驱动器具有编辑权限的安全组,则无论其他用户组是否授予他们对同一驱动器的读取权限,他们的权限级别都是编辑。
  3. 如果用户属于对驱动器具有读取权限的安全组,则其权限级别为读取。

对于最终输出:

    Fullname_CLEAN  Drive       Permissions
    Smith, John     L Drive     Deny
    Smith, John     M Drive     Deny
    Smith, John     Q Drive     Deny
    Smith, John     U Drive 2   Edit

现在,我意识到,由于我的排序和纯 ABC 巧合,我可以在分组名称和驱动器号之后取“聚合列的最小值”,因为D eny 出现在 E dit 之前,而E dit 出现在R读取之前,这将反映我的条件。但是,我希望学习“正确”的方法来做到这一点。

4

1 回答 1

2

对于这种情况,我个人会将其留给 ABC 排序,因为有一组固定的输入并且它们已经根据需要进行排序。

如果您正在想象不同的场景或不同的输入,那么我将添加一个自定义/计算列,其中包含一个返回数字等价物的“if ... then ... else if ...”语句,例如

= if [Permissions] = "Deny" then 0 else if [Permissions] = "Edit" then 1 else if [Permissions] = "Read" then 2 else 999

于 2016-05-05T23:51:09.617 回答