azure Kql查询不成功

oyjwcjzk  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(135)

我正在尝试根据部门、用户和查询中提到的某些操作生成关于敏感度标签使用情况的报告。
我正在尝试合并2表。
第一个表是MicrosoftPurviewInformationProtection,其中包含有关敏感性标签、操作、密码和用户ID的信息。而第二个表是IdentityInfo,其中包含用户信息,如AccountUPN、邮件地址和部门名称。
出现的问题是,在某些情况下,“MicrosoftPurviewInformationProtection”表的UserId列具有mailadress,例如email protected(https://stackoverflow.com/cdn-cgi/l/email-protection),而在某些情况下,它具有UPN(员工编号)email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)。
因此,我尝试连接这两个表,以将所有数据放在一起,以便获得所需的结果。
我尝试首先将“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.我从来没有使用过联合和加入,我不知道这是否准确地做了我想做的事情。
1.很多字段(AccountUPN/MailAddress)没有很多行的条目。
问题1:你能帮助我理解我所做的是否正确吗?如果正确,为什么我看到的是空白。
问题二:此外,IdentityInfo不是一个静态表,它有多个条目,并在一段时间内不断更新同一用户的多个条目。如果有一个表,其中有关于用户的UPN,MailAddress和部门的信息,只有在创建用户时才更新,它将帮助我很多。请让我知道。

  • 编辑:第一个表也可以有多个行的值,但有一个唯一的ID列,分隔数据。我需要从第一个表的所有数据。*
vwoqyblh

vwoqyblh1#

您使用左外联接将MicrosoftPurviewInformationProtection x表与IdentityInfo x表联接两次,一次在AccountUPN x列上,一次在MailAddress x列上。然后使用联合来合并组合两次联接的结果。在匹配的AccountUPN x列和UserId x列上首次联接表时,仅左表中的所有列(MicrosoftPurviewInformationProtection)将有数据,并且只有来自右表的匹配值才有值。所有其他不匹配的行将为空(空白值)。第二次连接也会发生这种情况。这就是很多字段都有空行的原因。这也会导致在左表。为了避免这种情况,您可以在执行两个左外部连接结果的并集后,只为每个SensitivityLabelId取非null行。下面是代码,

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表中有多个相同行的条目,上面的代码也会删除结果集中的重复项。
demo
demo2

相关问题