Kql查询不成功

问题描述 投票:0回答:1

我正在尝试根据部门、用户和查询中提到的某些操作生成有关敏感度标签使用情况的报告。

我正在尝试合并两张桌子。

第一个表是 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. 我从未使用过 union 和 join,我不知道这是否准确地实现了我想要做的事情。
  2. 很多字段(AccountUPN/MailAddress)没有很多行的条目。

问题1: 您能否帮助我了解我所做的是否正确,如果正确,为什么我会看到空白。

问题2: 此外,IdentityInfo 不是静态表,它具有多个条目,并且在一段时间内不断更新同一用户的多个条目。 如果有一个表包含有关用户的 UPN、邮件地址和部门的信息,并且仅在创建用户时更新,那么它将对我有很大帮助。请告诉我。

azure reporting-services kql
1个回答
0
投票

您使用左外联接将

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
表中存在同一行的多个条目,上述代码也会删除结果集中的重复项。

演示

© www.soinside.com 2019 - 2024. All rights reserved.