Join 如何加入Application Insights Analytics中的customDimensions?

Join 如何加入Application Insights Analytics中的customDimensions?,join,azure-application-insights,Join,Azure Application Insights,当我尝试在其中一个customDimensions字段上联接时,我得到一个语法错误:“联接属性可能只是列实体或相等表达式”。我能够加入非自定义列,如名称或时间戳 示例代码: 让ExperimentLaunchedEvents=customEvents |其中name==“ExperimentLaunched”和timestamp>now(-30d);  让experimentTerminateEvents=customEvents |其中name==“ExperimentTerminated”和

当我尝试在其中一个customDimensions字段上联接时,我得到一个语法错误:“联接属性可能只是列实体或相等表达式”。我能够加入非自定义列,如名称或时间戳

示例代码:

让ExperimentLaunchedEvents=customEvents |其中name==“ExperimentLaunched”和timestamp>now(-30d); 
让experimentTerminateEvents=customEvents |其中name==“ExperimentTerminated”和timestamp>now(-30d); 
实验发射
|项目名称、时间戳、实验ID=customDimensions.experimentId
|连接种类=leftanti(实验终止事件
|tostring(实验ID)上的项目名称、时间戳、实验ID=customDimensions.experimentId)

如果不支持在customDimensions列上连接,是否有任何方法可以实现选择尚未终止的已启动实验?谢谢

正如John在注释中提到的,在对任何操作使用自定义维度时,您需要将其转换为查询引擎可以使用的类型。在本例中,我使用,但您也可以使用其他函数,如

我还扩展了一个列类型,这样就可以在join或where之类的子句中重用它,而不必反复使用冗长的hand语句

ExperimentLaunchedEvents
| extend experimentId=tostring(customDimensions.ExperimentId)
| project name, timestamp, experimentId
| join kind=leftanti (ExperimentTerminatedEvents
| extend experimentId=tostring(customDimensions.ExperimentId)
| project name, timestamp, experimentId)
on experimentId

与James Davis的答案相同,但正如squallsv所指出的,由于在两个项目子句中都包含了experimentId列,因此对停止重复两次experimentId列做了一个小小的改进

let myExperimentLauncedEvents=
    ExperimentLaunchedEvents
        | extend experimentId=tostring(customDimensions.ExperimentId)
        | project name, timestamp, experimentId
        | join kind=leftanti (ExperimentTerminatedEvents
        | extend experimentId=tostring(customDimensions.ExperimentId)
        | project name, timestamp, experimentId)
    on experimentId;
myExperimentLauncedEvents
    | project name, timestamp, experimentId

因此,通过将结果分配给a,然后对该变量使用project子句,我们可以选择只显示所需的列。

这不仅仅是扩展,而
tostring
实际上是这里的重要内容。分析连接只允许您在“已知”类型上进行连接,默认情况下customDimensions本身实际上是一个“任意”或“自定义”或“json”类型,其中的内容可以是任何内容。John是正确的。tostring函数接受动态类型并将其强制转换为可消费类型。使用此更新答案。如果在project子句中使用相同的变量,则似乎只能在join子句中使用变量experimentId。你知道一种不用在project子句中添加experimentId的方法吗?我不想在结果上显示列,但我想在联接中使用它。