рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛ рдЬреЛ рд╡рд░реНрдЪреБрдЕрд▓ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реЗ VA рд╕реЗ рдЬреБрдбрд╝рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреИрдм рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рджрд┐рдЦрд╛рдИрдВ:
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рд░рд╣рд╛ рд╣реВрдВ рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдорд╛рди рд╣реВрдВред рдЬрдм рдореИрдВ рдкрд╛рд╡рд░рдмреАрдЖрдИ рдЦреЛрд▓рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрдЯ рдЯреИрдм/рд░рд┐рдкреЛрд░реНрдЯ рдкрд░ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред
рдореИрдВрдиреЗ рдЕрднреА рдпрд╣рд╛рдБ рд╕реЗ рдирд╡реАрдирддрдо pbit рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реИ: https://microsoft.github.io/botframework-solutions/assets/analytics/virtual-assistant-analytics-sample.pbit
рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдкрд╛рд╡рд░ рдмрд╛рдп рдХреНрд╡реЗрд░реА рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛:
рдЖрдкрдХреЛ рд╕рдореВрд╣ рдХреЗ рдХреБрдЫ рдХреЙрд▓рдореЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рд╡реИрд▓реНрдпреВ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред
рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП Power BI рдЙрдиреНрдирдд рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдХреНрд╡реЗрд░реА рдмрджрд▓реЗрдВ, рдпрд╣ рдиреАрдЪреЗ рдХрд╛рдо рдХрд░реЗрдЧреА:
let
Source = #"EventTelemetry",
#"Added UserUtterance Column" = Table.AddColumn(Source, "UserUtterance", each if [EventName] = "BotMessageReceived" then [Text] else null),
#"Added UserOriginalUtterance Column" = Table.AddColumn(#"Added UserUtterance Column", "UserOrigUtterance", each if [EventName] = "BotMessageReceived" then [Text] else null),
#"Added BotMessageSpeakColumn" = Table.AddColumn(#"Added UserOriginalUtterance Column", "BotResponseSpeak", each if [EventName] = "BotMessageSend" then [Speak] else null),
#"Added OperationID Column" = Table.AddColumn(#"Added BotMessageSpeakColumn", "OperationID", each if [EventName] = "BotMessageSend" then [ReplyActivityId] else [ActivityId]),
#"Added BotMessageText Column" = Table.AddColumn(#"Added OperationID Column", "BotResponseText", each if [EventName] = "BotMessageSend" then [Text] else null),
#"Grouped Rows" = Table.Group(#"Added BotMessageText Column", {"OperationID", "ConversationId"}, {{"UserUtterance", each List.Max([UserUtterance]), type text}, {"UserOrigUtterance", each List.Max([UserOrigUtterance]), type text}, {"Time", each List.Min([Time]), type datetimezone}, {"Locale", each List.Max([Locale]), type text}, {"DialogId", each List.Max([DialogId]), type text}, {"DialogStatus", each List.Max([DialogStatus]), type text}, {"DialogStepName", each List.Max([DialogStepName]), type text}, {"DialogInstanceId", each List.Max([DialogInstanceId]), type text}, {"BotResponseSpeak", each List.Max([BotResponseSpeak]), type text}, {"BotResponseText", each List.Max([BotResponseText]), type text}, {"LuisIntent", each List.Max([Luis_Intent]), type text}, {"LuisScore", each List.Max([Luis_IntentScore]), type text}, {"LuisSentimentLabel", each List.Max([Luis_SentimentLabel]), type text}, {"LuisSentimentScore", each List.Max([Luis_SentimentScore]), type text}}),
#"Changed Type" = Table.TransformColumnTypes(#"Grouped Rows",{{"LuisSentimentScore", type number}})
in
#"Changed Type"
рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ :)
рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реАрдП рдЯреЗрдореНрдкрд▓реЗрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рднреА рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдмрд╛рддрдЪреАрдд рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдбреНрд░рд┐рд▓ рдбрд╛рдЙрди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рд╣реИред рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЯреЗрд▓реАрдореЗрдЯреНрд░реА рдорд┐рдбрд╡реЗрдпрд░ рдореЗрдВ logPersonalInformation=true рднреА рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ Startup.cs рдореЗрдВ рдЗрд╕ рд╕реЗ рдмрджрд▓реЗрдВ
``` рд╕реА#
рд╕реЗрд╡рд╛рдПрдВред рд╕рд┐рдВрдЧрд▓рдЯрди рдЬреЛрдбрд╝реЗрдВ
to this
``` C#
services.AddSingleton<TelemetryLoggerMiddleware>(s=>new TelemetryLoggerMiddleware(s.GetService<IBotTelemetryClient>(), true));
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реАрдП рдЯреЗрдореНрдкрд▓реЗрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рднреА рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдмрд╛рддрдЪреАрдд рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдбреНрд░рд┐рд▓ рдбрд╛рдЙрди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рд╣реИред рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЯреЗрд▓реАрдореЗрдЯреНрд░реА рдорд┐рдбрд╡реЗрдпрд░ рдореЗрдВ logPersonalInformation=true рднреА рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ Startup.cs рдореЗрдВ рдЗрд╕ рд╕реЗ рдмрджрд▓реЗрдВ();
``` рд╕реА#
рд╕реЗрд╡рд╛рдПрдВред рд╕рд┐рдВрдЧрд▓рдЯрди рдЬреЛрдбрд╝реЗрдВ