我正在尝试根据部门、用户和查询中提到的某些操作生成有关敏感度标签使用情况的报告。
我正在尝试合并两张桌子。
第一个表是 MicrosoftPurviewInformationProtection,其中包含有关敏感度标签、操作、工作负载和用户 ID 的信息。而第二个表是 IdentityInfo,其中包含用户信息,例如 AccountUPN、邮件地址和部门名称。
出现的问题是,在某些情况下,“MicrosoftPurviewInformationProtection”表的 UserId 列具有邮件地址,例如 [电子邮件受保护],而对于某些情况,它具有 UPN(员工编号),[电子邮件受保护]。
因此,我尝试连接这两个表以将所有数据放在一起,以便获得所需的结果。
我尝试首先将“MicrosoftPurviewInformationProtection”表与“IdentityInfo”表中的 AccountUPN 条目连接起来,然后尝试将“MicrosoftPurviewInformationProtection”表与“IdentityInfo”表中的“MailAddress”连接起来,然后将它们与并集组合。
我的查询如下所示:
MicrosoftPurviewInformationProtection
| join kind=leftouter IdentityInfo on ($left.UserId==$right.AccountUPN)
| union (MicrosoftPurviewInformationProtection | join kind = leftouter IdentityInfo on ($left.UserId==$right.MailAddress))
| where Operation in~ ("SensitivityLabelApplied",
"FileSensitivityLabelApplied",
"FileSensitivityLabelChanged",
"SensitivityLabelUpdated",
"SiteSensitivityLabelApplied",
"SiteSensitivityLabelChanged")
| extend ProcessName= tostring(Common.ProcessName)
| extend Apps = strcat(Application,ProcessName)
| summarize count() by Operation, SensitivityLabelId, Department,Apps,Workload,AccountUPN,MailAddress
当我运行它并看到必填字段时,我不知道我是否可以信任这些数据,主要是因为两个原因。
问题1: 您能否帮助我了解我所做的是否正确,如果正确,为什么我会看到空白。
问题2: 此外,IdentityInfo 不是静态表,它具有多个条目,并且在一段时间内不断更新同一用户的多个条目。 如果有一个表包含有关用户的 UPN、邮件地址和部门的信息,并且仅在创建用户时更新,那么它将对我有很大帮助。请告诉我。
您使用左外联接将
MicrosoftPurviewInformationProtection
表与 IdentityInfo
表连接两次,一次在 AccountUPN
列上,一次在 MailAddress
列上。然后,您使用并集来组合两个连接的结果。当第一次连接表匹配 AccountUPN
列和 UserId
列时,只有左表 (MicrosoftPurviewInformationProtection
) 中的所有列都会有数据,并且只有右表中的匹配值才会有值。所有其他不匹配的行都将为 null(空白值)。第二次加入也会发生这种情况。这就是很多字段有空行的原因。这也将导致左表中同一行出现重复行。为了避免这种情况,您可以在对两个左外连接结果进行并集后,仅获取每个 SensitivityLabelId
的非空行。下面是代码,
MicrosoftPurviewInformationProtection
| join kind=leftouter IdentityInfo on (($left.UserId==$right.AccountUPN))
| union (MicrosoftPurviewInformationProtection | join kind = leftouter IdentityInfo on ($left.UserId==$right.MailAddress))
| sort by SensitivityLabelId asc , Department desc
| extend Rank= row_number(1, prev(SensitivityLabelId)!=SensitivityLabelId)
| where Rank == 1
//add remaining codes
此代码将为每个
SensitivityLabelId
字段仅过滤一行。即使 IdentityInfo
表中存在同一行的多个条目,上述代码也会删除结果集中的重复项。