web-dev-qa-db-ja.com

Application Insightsがネストされたカスタムディメンションを抽出する

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

しかし、どちらも機能していないようです。末尾に「Context」という名前の列が表示されますが、列は空です-値がありません。

何か案は?

編集:

データの形式を明確にするための画像を追加しました:

Application Insights Data

15
Seafish

動作するように編集

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

あなたが期待するものを得るためにここに追加のtostringtodynamicが必要です(そしてi期待される!)

私が与えられた説明:

動的フィールドは、キー/値アクセスのupper/outerレベルを「約束」します(これは、customDimensions.Propertiesへのアクセス方法です)。

そのJSONの内部構造へのアクセスは、customDimensions.Propertiesコンテンツの正確な形式に依存します。それ自体がjsonである必要はありません。それがよく構造化されたjsonのように見えたとしても、正確にフォーマットされたjsonではない単なる文字列である可能性があります。

そのため、基本的に、ネストされたコンテンツをjsonに無限に変換しようとして失敗する可能性があるので、デフォルトでは、dynamic/jsonブロック内の文字列を解析しようとしません。

まだ[extratostringは必要ありません。todynamicはすでに両方の文字列を許可しているためです。動的に有効なので、クエリを所有するチームがそのステップを改善できるかどうかを確認しています。

18
John Gardner

どうもありがとう..ジョンからの答えをさらに詳しく説明します。カスタムイベントを使用してエンドポイントの期間をグラフ化する必要がありました。このクエリは、グラフのY軸として期間を指定できるようにしました。

customEvents
 | extend Properties = todynamic(tostring(customDimensions.Properties))
 | extend duration = todouble(todecimal(Properties.duration))
 | project timestamp, name, duration
3
Richard Lyle