24

我在 Application Insights Analytics 中有一些数据,其中有一个动态对象作为自定义维度的属性。例如:

|        timestamp        |  name   | customDimensions                 | etc |
|-------------------------|---------|----------------------------------|-----|
| 2017-09-11T19:56:20.000 | Spinner | {                                | ... |
                                         MyCustomDimension: "hi"
                                         Properties:
                                             context: "ABC"
                                             userMessage: "Some other"
                                      }

那有意义吗?所以 customDimensions 中的键/值对。

我正在尝试将该context属性作为结果中的适当列。所以预期会是:

|        timestamp        |  name   | customDimensions                 | context| etc |
|-------------------------|---------|----------------------------------|--------|-----|
| 2017-09-11T19:56:20.000 | Spinner | {                                | ABC    | ...
                                         MyCustomDimension: "hi"
                                         Properties:
                                             context: "ABC"
                                             userMessage: "Some other"
                                      }

我试过这个:

customEvents | where name == "Spinner" | extend Context = customDimensions.Properties["context"]

还有这个:

customEvents | where name == "Spinner"  | extend Context = customDimensions.Properties.context

但似乎都不起作用。他们在最后给了我一个名为“上下文”的列,但该列是空的 - 没有值。

有任何想法吗?

编辑:

添加了一张图片来说明数据的格式:

Application Insights 数据

4

2 回答 2

38

编辑为工作答案

customEvents
 | where name == "Spinner"
 | extend Properties = todynamic(tostring(customDimensions.Properties))
 | extend Context = Properties.context

你需要一个额外的tostringtodynamic在这里得到你所期望的(和所期望的!)

我得到的解释是:

动态字段“承诺”您访问键/值的上层/外层(这是您访问 customDimensions.Properties 的方式)。

访问该 json 的内部结构取决于 customDimensions.Properties 内容的确切格式。它本身不必是json。即使它看起来像一个结构良好的 json,它仍然可能只是一个格式不完全正确的 json 字符串。

因此,基本上,默认情况下它不会尝试解析动态/json 块内的字符串,因为它们不想花费大量时间尝试将嵌套内容无限转换为 json 并且失败。

我仍然认为那里不应该需要额外的 东西,因为应该已经有效地允许字符串和动态,所以我正在检查拥有查询内容的团队是否可以使这一步更好。tostringtodynamic

于 2017-09-12T00:20:35.737 回答
4

非常感谢..只是为了扩展约翰的答案。我们需要使用自定义事件绘制端点的持续时间。这个查询成功了,所以我们可以将持续时间指定为图表中的 Y 轴:

customEvents
 | extend Properties = todynamic(tostring(customDimensions.Properties))
 | extend duration = todouble(todecimal(Properties.duration))
 | project timestamp, name, duration
于 2018-01-18T01:11:53.830 回答