๊ฐ์ ๋์ฐ๋ฏธ ๋ฐ ๊ธฐ์ ์ ๋ํ Power Bi ๋ณด๊ณ ์
ํ์ ์คํฌ๋ฆฝํธ
Power Bi ๋์๋ณด๋์ ํ์ํ ๋ํ ์ปจํ ์คํธ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. PII๋ฅผ ๊ธฐ๋กํ๋๋ก ์๊ฒฉ ๋ถ์ ๋ก๊ฑฐ๋ฅผ ์ ๋ฐ์ดํธํ์ง๋ง ์ฌ์ ํ ๋ณด๊ณ ์์ ๋ํ ์ปจํ ์คํธ๊ฐ ํ์๋์ง ์์ต๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ํญ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ฑ์์ง๊ณ ์์ผ๋ฉฐ ๋ํ ์์ ํญ์์ ์ถ๋ ฅ์ ๋ณผ ์ ์์ต๋๋ค.
๊ฐ์ ๋์ฐ๋ฏธ ๋ง๋ค๊ธฐ,
์๊ฒฉ ์ธก์ ๋ก๊ฑฐ์ ๋ถ์ธ ๊ฐ "true"๋ฅผ ์ถ๊ฐํฉ๋๋ค.
const telemetryLoggerMiddleware = ์๋ก์ด TelemetryLoggerMiddleware(telemetryClient, true);
const telemetryInitializerMiddleware = ์๋ก์ด TelemetryInitializerMiddleware(telemetryLoggerMiddleware, true);
Power Bi ๋ณด๊ณ ์์์ "๋ชจ๋ ๋ํ ์์ ๊ฐ์" ๋ฐ "๋ํ ์์ ๊ฐ์" ํญ์ ํ์ธํ์ญ์์ค.
๋ณด๊ณ ์์ ์ฑ์์ง ๋ํ ์์ ์ ๋ณด
์ค๋ฅ๊ฐ ์์ต๋๋ค.
@tomSauret847์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ๊ฒํ ํ๊ณ ์ต๋ํ ๋นจ๋ฆฌ ์ฐ๋ฝ๋๋ฆฌ๊ฒ ์ต๋๋ค!
@tomSauret847๋ , ์๋ ํ์ธ์. ์ ๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์ด ๋ฌธ์ ๋ฅผ ์กฐ์ฌํ๊ณ ์ด ๋ฌธ์ ๋ฅผ ์ฌํํ๊ธฐ ์ํด ์ ๊ทน์ ์ผ๋ก ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ์ผ๋จ ๊ทธ๋ ๊ฒ ํ ์ ์๊ฒ ๋๋ฉด ๊ฑฐ๊ธฐ์์ ๋ค์ ๋จ๊ณ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ๊ธฐ๋ค๋ ค ์ฃผ์ ์ ๊ฐ์ฌํ๊ณ ์ง์ฐ์ ๋ํด ์ฌ๊ณผ๋๋ฆฝ๋๋ค!
์๋ ํ์ธ์ @tomSauret847 - ๋ฌธ์ ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ฌํ ํ์ต๋๋ค.
๋ํ TypeScript Skill ๋ฟ๋ง ์๋๋ผ C# Virtual Assistant/Skill์์๋ ์ด ๋ฌธ์ ๋ฅผ ์ฌํํ๋ ค๊ณ ์๋ํ์ง๋ง ์ ๋๋ก ์๋ํ๊ธฐ ๋๋ฌธ์ TypeScript Virtual Assistant ์๋ง ๊ด๋ จ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ์ํํ ์ฌํ ๋จ๊ณ๋ฅผ ํ์ธ ํ๊ณ ์ ํฉ๋๋ค.
์ด๋ฏธ์ง์ ํ์๋ ๊ฒ์ฒ๋ผ ๋ค์ ๋ ์์ฑ์๋ฅผ true๋ก ์ถ๊ฐํ์ฌ index
ํ์ผ์ ์์ ํฉ๋๋ค.
Power BI ์ ํ๋ฆฌ์ผ์ด์ ์์ Virtual Assistant ๋ถ์ ํ ํ๋ฆฟ ํ์ผ ์ด๊ธฐ
Virtual Assistant Insights ๋ฉํธ๋ฆญ์ ๊ตฌ์ฑํ๊ณ ์ป๊ธฐ ์ํด Power BI ์ค๋ช ์๋ฅผ ๊ฐ์ด๋๋ก ์ฌ์ฉํ์ต๋๋ค.
์ ๋ฐ์ดํธ๋๋ ๋๋ก ๋ฐ๋ก ์ฐ๋ฝ๋๋ฆฌ๊ฒ ์ต๋๋ค ๐.
_TypeScript Virtual Assistant๋ฅผ ์ฌ์ฉํ์ฌ ์ฌํ๋ ๋ฌธ์ _
์กฐ์ฌํด ์ฃผ์ @Batta32๋ ๊ฐ์ฌํฉ๋๋ค. ์์ ๋์ด๋ ๋จ๊ณ๋ฅผ ์ํํ์ผ๋ฉฐ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์์ต๋๋ค. ์ด๊ฒ์ GA๊ฐ Power BI ๋ณด๊ณ ์์ ๋ํ ์ปจํ ์คํธ๋ฅผ ์ฑ์ฐ๋ GA ์ด์ ์ ๋น๋ํ ์ฒซ ๋ฒ์งธ ๋ฒ์ ์ผ๋ก ๊ฒ์๋ NPM ํจํค์ง๋ก ์ ๊ทธ๋ ์ด๋ํ ํ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์๋ ํ์ธ์ @tomSauret847 - PR #3584, ํนํ ์ด ์ปค๋ฐ์ ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ๊ฐํ๋ TypeScript Virtual Assistant 1.0 ๋ฆด๋ฆฌ์ค์ ๋ฌธ์ ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์์ ํ์ต๋๋ค.
๋น์ ์ ํ์ดํ ๊ฐ์ ์ด์์คํดํธ ์์ ์ ์ป์ ์์๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก,์ด ํ์ผ์์ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํ์ญ์์ค
telemetryClient
๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ๋ ๋ํ ์์์ constructor
์
๋ฐ์ดํธ
//Add the BotTelemetryClient dependency from botbuilder
import {
...
BotTelemetryClient } from 'botbuilder';
// At the constructor parameter list, add telemetryClient as the final parameter
public constructor(
...,
telemetryClient: BotTelemetryClient
) {
// Inside the constructor assign the incoming telemetryClient to the local property
this.telemetryClient = telemetryClient;
});
}
๋ณด๋ด๊ธฐ telemetryClient
์ ๋ํ ์ด๊ธฐํ์์ ๊ฐ์ฒด๋ฅผ index.ts
// Add the telemetryClient as the final parameter in the OnboardingDialog constructor
const onboardingDialog: OnboardingDialog = new OnboardingDialog(..., telemetryClient);
// Add the telemetryClient as the final parameter in the MainDialog constructor
const mainDialog: MainDialog = new MainDialog(
...
telemetryClient
);
์ง๋ฌธ์ด๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ผ๋ฉด ์ฃผ์ ํ์ง ๋ง๊ณ ๋ฌธ์ํ์ญ์์ค.
_๋ณ๊ฒฝ ์ฌํญ์ ์ฌ์ฉํ ๊ฐ์ ์ด์์คํดํธ ์ธก์ ํญ๋ชฉ_
@Batta32 ๊ฐ์ฌํฉ๋๋ค! ์ด๋ ๊ฒ ํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ผ๋ฉฐ ์ด์ Power Bi ๋ณด๊ณ ์์ ๋ํ ์ปจํ ์คํธ๊ฐ ํ์๋ฉ๋๋ค.
@ Batta32 ์ง๋ฌธ์ด ์์ต๋๋ค. ์ด์ ๋ณด๊ณ ์ ๋ํ ์์๊ฐ ํ์๋์ง๋ง ๋ชจ๋ ๊ธฐ์ ์ ๊ธฐ์ ์ด ์๋๋ผ "์คํฌ ๋ํ ์ ํ" ์๋์ ํ์๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ชจ๋ ๊ธฐ์ ์์ ์๊ฒฉ ์ธก์ ์ ํ์ฑํํ์ผ๋ฉฐ ์ด๋ฅผ VA์ ๋์ผํ ์์ฑ์์ ์ ๋ฌํ๊ณ ์์ต๋๋ค. ์คํฌ ๋ํ ์์ฑ์์์ ์ค์ ์ด ๋๋ฝ๋์์ต๋๊น?
@tomSauret847 ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค! ์ฐ๋ฆฌ๋ ์ด ์๋๋ฆฌ์ค๋ฅผ ๊ฒํ ํ ๊ฒ์ด๋ฉฐ ์ ๋ฐ์ดํธ๋๋ ๋๋ก ๋ค์ ์ฐ๋ฝ๋๋ฆฌ๊ฒ ์ต๋๋ค ๐!
@Batta32 ์๊ฒ ๋ค์ ํ ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. QNA ์ ์์์๊ฒ ์ฌ์ฉ๋๋ QNAMakerDialog์ ์๊ฒฉ ์ธก์ ํด๋ผ์ด์ธํธ๊ฐ ์ ๋ฌ๋์ง ์์ ๊ฒ๋ ํ์ธํ์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด QNA ์ ์์๋ ๋ณด๊ณ ์์ ์ฑ์์ง์ง ์์ต๋๋ค.
QnAMakerDialog ๋ฌธ์ ์ ๋ํด ์๋ ค์ฃผ์
์ @tomSauret847์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ฐ๊ฒฌ ์์ ์ ์์ ํ๋ tryCreateQnADialog์ ๋ฐฉ๋ฒ์ ์ ํํ๊ณ SET telemetryClient
(ํ์ ์ # 201 # 214 ์ฐธ์กฐ) QnAMaker ๋ํ์ ์์ฑ.
๋๋ฌธ์ด๋ค QnAMakerDialog์ด ์ผ๋ก๋ถํฐ ์ฐ์ฅ W aterfallDialog ํ์ ์ dialogthat๊ฐ ๊ฐ์ง๊ณ ๋ก๋ถํฐ ์ฐ์ฅ, ์๊ฒฉ ํด๋ผ์ด์ธํธ ์์ฑ NullTelemetryClient ๊ทธ๋ฌ๋ ์ธํธ.
TypeScript Virtual Assistant 1.0 ๋ถ๊ธฐ์์ ์ด ์๋๋ฆฌ์ค๋ฅผ ํ ์คํธํ์ผ๋ฉฐ ์๊ฒฉ ์ธก์ ํด๋ผ์ด์ธํธ๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ ํ์ ์์ด ์์ ๋์์ต๋๋ค. ๋ํ master์ C# ๋ด์ ์ฌ์ฉํ๋ฉด ์์๋๋ก ์๋ํฉ๋๋ค.
QnAMakerDialog
๋ํ ์๊ฒฉ ์ธก์ ๋ฑ๋ก์ด ์์ ๋๋์ง ์๋ ค์ฃผ์ธ์.
SwitchSkillDialog
์ ๊ด๋ จ๋ ๋ฌธ์ ๋ฅผ ๊ณ์ ๊ฒํ ํ ๊ฒ์
๋๋ค.
์ด ์ ๋ณด๋ฅผ ์ ๊ณตํด ์ฃผ์ @VictorGrycuk ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋ณ๊ฒฝ์ ํ๊ณ ์๋์ ๊ฐ์ด ๋ณด๊ณ ์ QNA ๋ฉ์ด์ปค ๋ํ ์์๊ฐ ์ฑ์์ง๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ QNA ์ฑ๋ฅ์ ์ฌ์ ํ โโ์ฑ์์ง์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ํ ์์์ ํ์๋ ๋๋ก QNA ์ ์์๋ฅผ ๊ณต๊ฒฉํ๊ณ ์์ง๋ง ๋ณด๊ณ ์ ์ฑ๋ฅ์ด ์ฑ์์ง์ง ์์ต๋๋ค.
@tomSauret847 ๊ฐ์ฌํฉ๋๋ค. ์ต๋ํ ๋นจ๋ฆฌ ์ฐ๋ฝ๋๋ฆฌ๊ฒ ์ต๋๋ค!
์๋ ํ์ธ์ @ tomSauret847, ์ฐ๋ฆฌ๋ ๋น์ ์ด SwitchSkillDialog์ ๋ํด ์ธ๊ธ ํ ๋ฌธ์ ๋ฅผ ์ฌํํ๊ณ ์ด ๋์์ ๋์ผ C #์์ ๊ฐ์ ๋์์ธ์ ์ํด ๋ฐ์ํ๋ ๊ฒ์ผ๋ก ๊ฒฐ์ .
๋์ ์ Skills์ appsettings.json์์ Virtual Assistant Application Insights์ ๋ํ ๊ณ์ธก ํค๋ฅผ ์ค์ ํ๋ ๊ฒ์ ๋๋ค.
instrumentationKey
๊ฐ์ 2๋จ๊ณ์์ ๋ณต์ฌํ ๊ฐ์ผ๋ก ๋ฐ๊ฟ๋๋ค.์ฐธ๊ณ : MainDialog
์ ๊ฐ์ด ์ฌ๋ฌ ๋ด์์ ์ด๋ฆ์ด ๊ฐ์ ๋ํ ์์๋ ํจ๊ป ๊ทธ๋ฃนํ๋ฉ๋๋ค .
๊ณ ๊ฐ๋์ ๋ต๋ณ์ ๊ท๋ฅผ ๊ธฐ์ธ์ด๊ณ QnA Performance ๐ ๋ฌธ์ ๋ฅผ ๊ฒํ ํ๊ฒ ์ต๋๋ค.
๋ฐฐํฌ ์์ ์ ๊ฐ ๋ด์ ๊ณ ์ ํ ์ ํ๋ฆฌ์ผ์ด์ ํต์ฐฐ๋ ฅ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๋ฏ๋ก ๊ฐ ๋ด์ ์๊ฒฉ ๋ถ์์ ์๋ก ๊ฒฉ๋ฆฌ๋๋ฏ๋ก ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๋์ผํ Power BI ๋์๋ณด๋์์ ๋ชจ๋ ๋ด์ ์๊ฒฉ ๋ถ์์ ๋ณด๋ ค๋ฉด ๋ค์์ ์ค์ ํด์ผ ํฉ๋๋ค. ์ค์ ์์ ๋์ผํ ๊ณ์ธก ํค.
SwitchSkillDialog
๊ฐ Power BI ๋์๋ณด๋์ ๋ฑ๋ก๋ ์ด์ ๋ฅผ ์กฐ์ฌํ ๊ฒฐ๊ณผ ๋ํ ์์์ id
์์ฑ์ ๋ฑ๋กํ๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
์ด๋ฅผ ์ผ๋์ ๋๊ณ ์ ํํ๋ ์๊ฐ SwitchSkillDialog ์ id
๊ฐ ๋ฌด์์ธ์ง ํ์ธํ์ผ๋ฉฐ, ์ ํํ๋ ๊ธฐ์ ์ ๊ด๊ณ์์ด ํญ์ ๊ณ ์ ํ ์ด๋ฆ์ด id ์ธ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
@VictorGrycuk ๊ฐ์ฌํฉ๋๋ค. ์์์ ์ค๋ช ํ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ์ผ๋ฉฐ ์ด์ ๋ชจ๋ ๊ธฐ์ ๋ํ ์์๊ฐ Power Bi ๋ณด๊ณ ์ ํ์๋ฉ๋๋ค. ์คํฌ์์ ์ฑ ์ธ์ฌ์ดํธ ํค๋ฅผ VA์ ๋์ผํ๊ฒ ์ค์ ํ ํ ์คํฌ๊ณผ VA์์ ์ฌ์ฉ๋๋ ๋ชจ๋ ๋ํ ์์๋ฅผ ์ฑ์๋๋ค.
ํ๋ฅญํฉ๋๋ค. @tomSauret847 , ์ ์๋ํ์ต๋๋ค.
์ด์ QnA ์ฑ๋ฅ์ด ์ฑ์์ง์ง ์๋ ์ด์ ์ ์ด์ ์ ๋ง์ถ ๊ฒ์
๋๋ค. ์
๋ฐ์ดํธ๊ฐ ์๋ ์ฆ์ ์๋ ค ๋๋ฆฌ๊ฒ ์ต๋๋ค.
@tomSauret847 ๋ ์๋ ํ์ธ์,
์ฐ๋ฆฌ๋ ๋ง์คํฐ ๋ธ๋์น์ 1.0 ๋ฆด๋ฆฌ์ค ๋ฒ์ ์ ์ฌ์ฉํ์ฌ ์ด์์คํดํธ๋ก ์ด๊ฒ์ ํ ์คํธํ์ผ๋ฉฐ ๋ ๊ฒฝ์ฐ ๋ชจ๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์์ต๋๋ค.
์ฌ์ฉ ํ๊ฒฝ:
์ฌ์ฉ๋ ๋จ๊ณ:
๋ง์คํฐ์ 1.0 ๋ชจ๋์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค. ์ ๊ณ ํด ์ฃผ์ ์ ๋ค์ ํ ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
@tomSauret847๋ , QnA Maker ๋ํ ์์๊ฐ Power BI์์ ์ฑ๋ฅ์ ํ์ํ์ง ์๋ ๋ฌธ์ ๋ฅผ ์ฌํ ํ ์ ์์ต๋๋ค.
๋ถํํ๋ BotBuilder SDK ์
QnA ์ฑ๋ฅ ์ ๋ณด๋ฅผ ํ์ํ๋ ค๋ฉด ๋ฌด์๋ณด๋ค๋ ์ด ๋ฌธ์ #3447์
๊ทธ๋ฌ๋ ์ฐธ์กฐ๋ ํ๋๊ทธ _logPersonalInformation_์ BotBuilder-Dotnet์ ๋์ผํ ํด๋์ค ์ ๋ฌ๋ฆฌ BotBuilder-JS์ QnAMakerDialog ํด๋์ค ์ ์์ต๋๋ค.
๊ฒ๋ค๊ฐ getQnAClient ๋ฉ์๋์์ QnAMaker ๊ฐ์ฒด ์์ฑ์ ์๋์ ๊ฐ์ด ๊ฐ์ธ ์ ๋ณด ๋ก๊น
์ ์ํ ์์ฑ์๋ฅผ ํตํด ํ๋๊ทธ๋ฅผ ๋ค์ ํ๋ฒ ์ ๋ฌํ๋ ๊ฒ์ ์๋ตํ๊ณ ์์ต๋๋ค.
๋ก์ปฌ ๋ด์์ node_modules์ QnAMakerDialog ํด๋์ค๋ฅผ ์๋์ผ๋ก ์์ ํ๊ณ logPersonalInformation ํ๋๊ทธ๋ฅผ true๋ก ๊ฐ์ ์ถ๊ฐํ์ฌ ์ด๋ฌํ ๋ณ๊ฒฝ ์์ ์ ํ ์คํธํ์ต๋๋ค.
public logPersonalInformation: BoolExpression = new BoolExpression(true);
๊ทธ๋ฐ ๋ค์ getQnAClient ๋ฉ์๋์์ ํ๋๊ทธ๋ฅผ QnAMaker๋ก ์ ๋ฌํฉ๋๋ค.
/**
* Creates and returns an instance of the QnAMaker class used to query the knowledgebase.
**/
private getQnAClient(): QnAMaker {
const endpoint = {
knowledgeBaseId: this.knowledgeBaseId,
endpointKey: this.endpointKey,
host: this.getHost()
};
const options = this.getQnAMakerOptions();
return new QnAMaker(endpoint, options, this.telemetryClient, this.logPersonalInformation.value);
}
๊ทธ๋ฆฌ๊ณ Power BI์์ QnA ์ ๋ณด๋ฅผ ๋ณผ ์ ์์์ต๋๋ค.
@matiasroldan6 ์ด ๋ฌธ์ ๋ฅผ
์ด ๋ฌธ์ ๋ 30์ผ ๋์ ํ๋์ด ์์๊ธฐ ๋๋ฌธ์ ์ ํจํ์ง ์์ต๋๋ค. ์ค๋๋ ๋ ์ด๋ธ์ด๋ ๋๊ธ์ ์ ๊ฑฐํ์ง ์์ผ๋ฉด 5์ผ ํ์ ๋ซํ๋๋ค.
@matiasroldan6 Botbuilder-js ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๊ธฐ๋ฅผ ์ฌ์ ํ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๊น?
์ @tomSauret847 , ์ด ๋ง์ง๋ง ๋ฌธ์ ๋ microsoft/botbuilder-js#2779์์ ์ ๊ธฐํ SDK์ ๋ถ์ผ์น์์ต๋๋ค. SDK ํ์ ๋ถ์ผ์น๋ฅผ ํ์ธํ์ผ๋ฉฐ ํ์ฌ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
๋์ํ์๋ฉด ์ด ๋ฌธ์ ๋ฅผ ์ข ๋ฃํ ์ ์์ผ๋ฉฐ SDK ํ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ๋ฐ์ํ๋ ์ฆ์ ์ฌ๊ธฐ๋ก ๋ค์ ์ฐ๋ฝ๋๋ฆฌ๊ฒ ์ต๋๋ค ๐.
@Batta32 ๊ฐ์ฌํฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ์ข ๋ฃํ๊ณ ์ ๊ณตํ ๋ฌธ์ ๋ฅผ ์ง์ผ๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@VictorGrycuk ๊ฐ์ฌํฉ๋๋ค. ์์์ ์ค๋ช ํ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ์ผ๋ฉฐ ์ด์ ๋ชจ๋ ๊ธฐ์ ๋ํ ์์๊ฐ Power Bi ๋ณด๊ณ ์ ํ์๋ฉ๋๋ค. ์คํฌ์์ ์ฑ ์ธ์ฌ์ดํธ ํค๋ฅผ VA์ ๋์ผํ๊ฒ ์ค์ ํ ํ ์คํฌ๊ณผ VA์์ ์ฌ์ฉ๋๋ ๋ชจ๋ ๋ํ ์์๋ฅผ ์ฑ์๋๋ค.