자습서: Stream Analytics를 사용하여 사기 전화 데이터를 분석하고 Power BI 대시보드에 결과 시각화Tutorial: Analyze fraudulent call data with Stream Analytics and visualize results in Power BI dashboard

이 자습서에서는 Azure Stream Analytics를 사용하여 전화 통화 데이터를 분석하는 방법을 보여줍니다.This tutorial shows you how to analyze phone call data using Azure Stream Analytics. 클라이언트 애플리케이션에서 생성한 전화 통화 데이터에는 사기 전화가 포함되며 이는 Stream Analytics 작업을 통해 필터링됩니다.The phone call data, generated by a client application, contains fraudulent calls, which are filtered by the Stream Analytics job. 신용카드 사기 또는 ID 도용 같은 다른 유형의 부정 행위 감지에 이 자습서의 기법을 사용할 수 있습니다.You can use the techniques from this tutorial for other types of fraud detection, such as credit card fraud or identity theft.

이 자습서에서는 다음 작업을 수행하는 방법을 알아봅니다.In this tutorial, you learn how to:

  • 샘플 전화 통화 데이터를 생성하여 Azure Event Hubs로 보냅니다.Generate sample phone call data and send it to Azure Event Hubs.
  • Stream Analytics 작업을 만듭니다.Create a Stream Analytics job.
  • 작업 입력 및 출력을 구성합니다.Configure job input and output.
  • 사기 전화를 필터링하는 쿼리를 정의합니다.Define queries to filter fraudulent calls.
  • 작업을 테스트하고 시작합니다.Test and start the job.
  • Power BI에서 결과를 시각화합니다.Visualize results in Power BI.

사전 요구 사항Prerequisites

시작하기 전에 다음 단계를 완료해야 합니다.Before you start, make sure you have completed the following steps:

  • Azure 구독이 아직 없는 경우 체험 계정을 만듭니다.If you don't have an Azure subscription, create a free account.
  • Microsoft 다운로드 센터에서 전화 통화 이벤트 생성기 앱 TelcoGenerator.zip을 다운로드하거나 GitHub에서 소스 코드를 가져옵니다.Download the phone call event generator app TelcoGenerator.zip from the Microsoft Download Center or get the source code from GitHub.
  • Power BI 계정이 필요합니다.You will need Power BI account.

Azure에 로그인Sign in to Azure

Azure Portal에 로그인합니다.Sign in to the Azure portal.

Azure 이벤트 허브 만들기Create an Azure Event Hub

Stream Analytics가 사기성 호출 데이터 스트림을 분석하려면 Azure로 데이터를 보내야 합니다.Before Stream Analytics can analyze the fraudulent calls data stream, the data needs to be sent to Azure. 이 자습서에서는 Azure Event Hubs를 사용하여 Azure로 데이터를 보낼 것입니다.In this tutorial, you will send data to Azure by using Azure Event Hubs.

다음 단계에 따라 이벤트 허브를 만들고 해당 이벤트 허브로 호출 데이터를 전송합니다.Use the following steps to create an Event Hub and send call data to that Event Hub:

  1. Azure Portal에 로그인합니다.Sign in to the Azure portal.

  2. 리소스 만들기 > 사물 인터넷 > Event Hubs 를 선택합니다.Select Create a resource > Internet of Things > Event Hubs.

    포털에서 Azure Event Hub 만들기

  3. 다음 값으로 네임스페이스 만들기 창을 채웁니다.Fill out the Create Namespace pane with the following values:

    설정Setting 제안 값Suggested value 설명Description
    속성Name asaTutorialEventHubasaTutorialEventHub 이벤트 허브 네임스페이스를 식별하는 고유 이름입니다.A unique name to identify the event hub namespace.
    SubscriptionSubscription <Your subscription> 이벤트 허브를 만들 Azure 구독을 선택합니다.Select an Azure subscription where you want to create the event hub.
    Resource groupResource group MyASADemoRGMyASADemoRG 새로 만들기 를 선택하고 계정의 새로운 리소스 그룹 이름을 입력합니다.Select Create New and enter a new resource-group name for your account.
    위치Location 미국 서부2West US2 이벤트 허브 네임스페이스를 배포할 수 있는 위치입니다.Location where the event hub namespace can be deployed.
  4. 나머지 설정에서는 기본 옵션을 사용하고 검토 + 만들기 를 선택합니다.Use default options on the remaining settings and select Review + create. 그런 다음, 만들기 를 선택하여 배포를 시작합니다.Then select Create to start the deployment.

    Azure Portal에서 이벤트 허브 네임스페이스 만들기

  5. 네임스페이스가 배포가 완료되면 모든 리소스 로 이동하여 Azure 리소스 목록에서 asaTutorialEventHub 를 찾습니다.When the namespace has finished deploying, go to All resources and find asaTutorialEventHub in the list of Azure resources. asaTutorialEventHub 를 선택하여 엽니다.Select asaTutorialEventHub to open it.

  6. 다음으로, +Event Hub 를 선택하고 Event Hub에 대한 이름 을 입력합니다.Next select +Event Hub and enter a Name for the Event Hub. 파티션 수 를 2로 설정합니다.Set the Partition Count to 2. 나머지 설정에서 기본 옵션을 사용하고 만들기 를 선택합니다.Use the default options in the remaining settings and select Create. 배포가 성공할 때까지 기다립니다.Then wait for the deployment to succeed.

    Azure Portal의 이벤트 허브 구성

이벤트 허브에 대한 액세스 부여 및 연결 문자열 가져오기Grant access to the event hub and get a connection string

애플리케이션에서 Event Hubs로 데이터를 보낼 수 있으려면 이벤트 허브에 액세스 권한을 허용하는 정책이 있어야 합니다.Before an application can send data to Azure Event Hubs, the event hub must have a policy that allows access. 액세스 정책은 권한 부여 정보를 포함하는 연결 문자열을 생성합니다.The access policy produces a connection string that includes authorization information.

  1. 이전 단계인 MyEventHub 에서 만든 이벤트 허브로 이동합니다.Navigate to the event hub you created in the previous step, MyEventHub. 설정 아래에서 공유 액세스 정책 을 선택한 다음, + 추가 를 선택합니다.Select Shared access policies under Settings, and then select + Add.

  2. 정책 이름을 MyPolicy 로 지정하고 관리 확인란을 선택합니다.Name the policy MyPolicy and ensure Manage is checked. 그런 다음 만들기 를 선택합니다.Then select Create.

    이벤트 허브 공유 액세스 정책 만들기

  3. 정책이 생성되면 정책 이름을 선택하여 정책을 엽니다.Once the policy is created, select the policy name to open the policy. 연결 문자열 - 기본 키 를 찾습니다.Find the Connection string–primary key. 연결 문자열 옆에 있는 복사 단추를 선택합니다.Select the copy button next to the connection string.

    공유 액세스 정책 연결 문자열 저장

  4. 연결 문자열을 텍스트 편집기에 붙여넣습니다.Paste the connection string into a text editor. 그 다음 섹션에서 이 연결 문자열이 필요합니다.You need this connection string in the next section.

    연결 문자열은 다음과 비슷합니다.The connection string looks as follows:

    Endpoint=sb://<Your event hub namespace>.servicebus.windows.net/;SharedAccessKeyName=<Your shared access policy name>;SharedAccessKey=<generated key>;EntityPath=<Your event hub name>

    연결 문자열에는 Endpoint, SharedAccessKeyName, SharedAccessKey, EntityPath 등 여러 개의 키-값 쌍이 세미콜론으로 구분되어 포함됩니다.Notice that the connection string contains multiple key-value pairs separated with semicolons: Endpoint, SharedAccessKeyName, SharedAccessKey, and EntityPath.

이벤트 생성기 애플리케이션 시작Start the event generator application

TelcoGenerator 앱을 시작하기 전에, 앞에서 만든 Azure Event Hubs로 데이터를 전송하도록 앱을 구성해야 합니다.Before you start the TelcoGenerator app, you should configure it to send data to the Azure Event Hubs you created earlier.

  1. TelcoGenerator.zip 파일의 콘텐츠를 추출합니다.Extract the contents of TelcoGenerator.zip file.

  2. 원하는 텍스트 편집기에서 TelcoGenerator\TelcoGenerator\telcodatagen.exe.config 파일을 엽니다. .config 파일이 여러 개 있으므로 올바른 파일을 열어야 합니다.Open the TelcoGenerator\TelcoGenerator\telcodatagen.exe.config file in a text editor of your choice There is more than one .config file, so be sure that you open the correct one.

  3. 구성 파일의 <appSettings> 요소를 다음 세부 정보로 업데이트합니다.Update the <appSettings> element in the config file with the following details:

    • EventHubName 키의 값을 연결 문자열의 EntityPath 값으로 설정합니다.Set the value of the EventHubName key to the value of the EntityPath in the connection string.
    • Microsoft.ServiceBus.ConnectionString 키 값을 EntityPath 값을 뺀 연결 문자열로 설정합니다.Set the value of the Microsoft.ServiceBus.ConnectionString key to the connection string without the EntityPath value. EntityPath 값 앞에 오는 세미콜론은 제거해야 합니다.Don't forget to remove the semicolon that precedes the EntityPath value.
  4. 파일을 저장합니다.Save the file.

  5. 명령 창을 열고 TelcoGenerator 애플리케이션 압축을 푼 폴더로 변경합니다.Next open a command window and change to the folder where you unzipped the TelcoGenerator application. 다음 명령을 입력합니다.Then enter the following command:

    .\telcodatagen.exe 1000 0.2 2
    

    이 명령은 다음 매개 변수를 사용합니다.This command takes the following parameters:

    • 시간당 호출 데이터 레코드 수.Number of call data records per hour.
    • 사기 확률 - 즉, 앱에서 사기성 호출을 시뮬레이션해야 하는 빈도.Percentage of fraud probability, which is how often the app should simulate a fraudulent call. 값 0.2는 호출 레코드의 약 20%가 사기성으로 나타남을 의미합니다.The value 0.2 means that about 20% of the call records will look fraudulent.
    • 기간(시간) - 앱을 실행해야 하는 시간.Duration in hours, which is the number of hours that the app should run. 명령줄에서 프로세스(Ctrl+C)를 종료하여 언제든지 앱을 중지할 수도 있습니다.You can also stop the app at any time by ending the process (Ctrl+C) at the command line.

    몇 초 후 앱에서 이벤트 허브로 데이터를 전송함에 따라 화면에 전화 통화 레코드가 표시되기 시작합니다.After a few seconds, the app starts displaying phone call records on the screen as it sends them to the event hub. 이 전화 통화 데이터에는 다음 필드가 포함되어 있습니다.The phone call data contains the following fields:

    레코드Record 정의Definition
    CallrecTimeCallrecTime 호출 시작 시간에 대한 타임스탬프The timestamp for the call start time.
    SwitchNumSwitchNum 호출 연결에 사용되는 전화 스위치.The telephone switch used to connect the call. 이 예에서는 스위치는 발신 국가/지역(미국, 중국, 영국, 독일 또는 오스트레일리아)를 나타내는 문자열입니다.For this example, the switches are strings that represent the country/region of origin (US, China, UK, Germany, or Australia).
    CallingNumCallingNum 호출자의 전화번호.The phone number of the caller.
    CallingIMSICallingIMSI 국제 모바일 구독자 ID(IMSI)The International Mobile Subscriber Identity (IMSI). 호출자의 고유 식별자.It's a unique identifier of the caller.
    CalledNumCalledNum 호출 수신자의 전화번호.The phone number of the call recipient.
    CalledIMSICalledIMSI 국제 모바일 구독자 ID(IMSI)International Mobile Subscriber Identity (IMSI). 호출 수신자의 고유 식별자.It's a unique identifier of the call recipient.

Stream Analytics 작업 만들기Create a Stream Analytics job

이제 호출 이벤트 스트림이 생겼으니, 이벤트 허브에서 데이터를 읽는 Stream Analytics 작업을 만들 수 있습니다.Now that you have a stream of call events, you can create a Stream Analytics job that reads data from the event hub.

  1. Stream Analytics 작업을 만들려면 Azure Portal로 이동합니다.To create a Stream Analytics job, navigate to the Azure portal.

  2. 리소스 만들기 를 선택하고 Stream Analytics 작업 을 검색합니다.Select Create a resource and search for Stream Analytics job. Stream Analytics 작업 타일을 선택하고 *만들기**를 선택합니다.Select the Stream Analytics job tile and select *Create**.

  3. 새 Stream Analytics 작업 양식을 다음 값으로 채웁니다.Fill out the New Stream Analytics job form with the following values:

    설정Setting 제안 값Suggested value 설명Description
    작업 이름Job name ASATutorialASATutorial 이벤트 허브 네임스페이스를 식별하는 고유 이름입니다.A unique name to identify the event hub namespace.
    SubscriptionSubscription <Your subscription> 작업을 만들 Azure 구독을 선택합니다.Select an Azure subscription where you want to create the job.
    Resource groupResource group MyASADemoRGMyASADemoRG 기존 항목 사용 을 선택하고 계정의 새로운 리소스 그룹 이름을 입력합니다.Select Use existing and enter a new resource-group name for your account.
    위치Location 미국 서부2West US2 작업을 배포할 수 있는 위치입니다.Location where the job can be deployed. 최상의 성능을 위해 동일한 지역에 작업 및 이벤트 허브를 배치하는 것이 좋으며 지역 간에 데이터를 전송하는 데 비용을 지불하지 않아도 됩니다.It's recommended to place the job and the event hub in the same region for best performance and so that you don't pay to transfer data between regions.
    호스팅 환경Hosting environment 클라우드Cloud Stream Analytics 작업은 클라우드 또는 에지에 배포할 수 있습니다.Stream Analytics jobs can be deployed to cloud or edge. 클라우드를 사용하면 Azure 클라우드에 배포할 수 있고, 에지를 사용하면 IoT Edge 디바이스에 배포할 수 있습니다.Cloud allows you to deploy to Azure Cloud, and Edge allows you to deploy to an IoT Edge device.
    스트리밍 단위Streaming units 11 스트리밍 단위는 작업을 실행하는 데 필요한 컴퓨팅 리소스를 나타냅니다.Streaming units represent the computing resources that are required to execute a job. 기본적으로 이 값은 1로 설정됩니다.By default, this value is set to 1. 스트리밍 단위 크기를 조정하는 방법에 대한 자세한 내용은 스트리밍 단위의 이해 및 크기 조정 문서를 참조하세요.To learn about scaling streaming units, see understanding and adjusting streaming units article.
  4. 나머지 설정에서는 기본 옵션을 사용하고 만들기 를 선택한 후 배포가 완료될 때까지 기다립니다.Use default options on the remaining settings, select Create, and wait for the deployment to succeed.

    Azure Stream Analytics 작업 만들기

작업 입력 구성Configure job input

다음 단계는 이전 섹션에서 만든 이벤트 허브를 사용하여 작업이 데이터를 읽을 입력 원본을 정의하는 것입니다.The next step is to define an input source for the job to read data using the event hub you created in the previous section.

  1. Azure Portal에서 모든 리소스 페이지를 열고 ASATutorial Stream Analytics 작업을 찾습니다.From the Azure portal, open the All resources page, and find the ASATutorial Stream Analytics job.

  2. Stream Analytics 작업의 작업 토폴로지 섹션에서 입력 을 선택합니다.In the Job Topology section of the Stream Analytics job, select Inputs.

  3. + 스트림 입력 추가 를 선택하고 이벤트 허브 를 선택합니다.Select + Add stream input and Event hub. 다음 값으로 입력 양식을 채웁니다.Fill out the input form with the following values:

    설정Setting 제안 값Suggested value 설명Description
    입력 별칭Input alias CallStreamCallStream 입력을 식별하는 표시 이름.Provide a friendly name to identify your input. 입력 별칭은 영숫자 문자, 하이픈, 밑줄만 사용할 수 있으며 길이가 3자에서 63자 사이여야 합니다.Input alias can contain alphanumeric characters, hyphens, and underscores only and must be 3-63 characters long.
    SubscriptionSubscription <Your subscription> 이벤트 허브를 만든 Azure 구독을 선택합니다.Select the Azure subscription where you created the event hub. 이벤트 허브는 Stream Analytics 작업과 같은 구독일 수도 있고 다른 구독일 수도 있습니다.The event hub can be in same or a different subscription as the Stream Analytics job.
    이벤트 허브 네임스페이스Event hub namespace asaTutorialEventHubasaTutorialEventHub 이전 섹션에서 만든 이벤트 허브 네임스페이스를 선택합니다.Select the event hub namespace you created in the previous section. 현재 구독에서 사용할 수 있는 모든 이벤트 허브 네임스페이스가 드롭다운에 나열됩니다.All the event hub namespaces available in your current subscription are listed in the dropdown.
    이벤트 허브 이름Event Hub name MyEventHubMyEventHub 이전 섹션에서 만든 이벤트 허브를 선택합니다.Select the event hub you created in the previous section. 현재 구독에서 사용할 수 있는 모든 이벤트 허브가 드롭다운에 나열됩니다.All the event hubs available in your current subscription are listed in the dropdown.
    이벤트 허브 정책 이름Event Hub policy name MyPolicyMyPolicy 이전 섹션에서 만든 이벤트 허브 공유 액세스 정책을 선택합니다.Select the event hub shared access policy you created in the previous section. 현재 구독에서 사용할 수 있는 모든 이벤트 정책이 드롭다운에 나열됩니다.All the event hubs policies available in your current subscription are listed in the dropdown.
  4. 나머지 설정에서는 기본 옵션을 사용하고 저장 을 선택합니다.Use default options on the remaining settings and select Save.

    Azure Stream Analytics 입력 구성

작업 출력 구성Configure job output

마지막 단계는 작업이 변환된 데이터를 쓸 수 있는 출력 싱크를 정의하는 것입니다.The last step is to define an output sink where the job can write the transformed data. 이 자습서에서는 Power BI를 사용하여 데이터를 출력하고 시각화합니다.In this tutorial, you output and visualize data with Power BI.

  1. Azure Portal에서 모든 리소스 를 열고 ASATutorial Stream Analytics 작업을 선택합니다.From the Azure portal, open All resources, and select the ASATutorial Stream Analytics job.

  2. Stream Analytics 작업의 작업 토폴로지 섹션에서 출력 옵션을 선택합니다.In the Job Topology section of the Stream Analytics job, select the Outputs option.

  3. + 추가 > Power BI 를 선택합니다.Select + Add > Power BI. 그런 다음, 권한 부여 를 선택하고 프롬프트에 따라 Power BI를 인증합니다.Then, select Authorize and follow the prompts to authenticate Power BI.

Power BI에 대한 권한 부여 단추

  1. 다음 세부 정보로 출력 양식을 채우고 저장 을 선택합니다.Fill the output form with the following details and select Save:

    설정Setting 제안 값Suggested value
    출력 별칭Output alias MyPBIoutputMyPBIoutput
    그룹 작업 영역Group workspace 내 작업 영역My workspace
    데이터 세트 이름Dataset name ASAdatasetASAdataset
    테이블 이름Table name ASATableASATable
    인증 모드Authentication mode 사용자 토큰User token

    Stream Analytics 출력 구성

    이 자습서에서는 사용자 토큰 인증 모드를 사용합니다.This tutorial uses the User token authentication mode. 관리 ID를 사용하려면 관리 ID를 사용하여 Power BI에 대한 Azure Stream Analytics 작업 인증을 참조하세요.To use Managed Identity, see Use Managed Identity to authenticate your Azure Stream Analytics job to Power BI.

실시간 데이터를 변환하는 쿼리 만들기Create queries to transform real-time data

이 시점에는 들어오는 데이터 스트림을 읽도록 설정된 Stream Analytics 작업이 있습니다.At this point, you have a Stream Analytics job set up to read an incoming data stream. 다음 단계는 실시간으로 데이터를 분석하는 쿼리를 만드는 것입니다.The next step is to create a query that analyzes the data in real time. 쿼리는 Stream Analytics와 관련된 일부 확장 기능을 포함한 SQL과 유사한 언어를 사용합니다.The queries use a SQL-like language that has some extensions specific to Stream Analytics.

자습서의 이 섹션에서는 분석을 위해 입력 스트림을 변환할 수 있는 몇 가지 방법에 대해 알아보기 위해 여러 쿼리를 작성 및 테스트합니다.In this section of the tutorial, you create and test several queries to learn a few ways in which you can transform an input stream for analysis.

여기서 작성한 쿼리는 화면에 변환된 데이터를 표시하기만 합니다.The queries you create here will just display the transformed data to the screen. 이후 섹션에서는 변환된 데이터를 Power BI에 기록합니다.In a later section, you'll write the transformed data to Power BI.

이 언어에 대한 자세한 내용은 Azure Stream Analytics 쿼리 언어 참조를 참조하세요.To learn more about the language, see the Azure Stream Analytics Query Language Reference.

통과 쿼리를 사용하여 테스트Test using a pass-through query

모든 이벤트를 보관하려는 경우 통과 쿼리를 사용하여 이벤트의 페이로드에서 모든 필드를 읽을 수 있습니다.If you want to archive every event, you can use a pass-through query to read all the fields in the payload of the event.

  1. Azure Portal의 Stream Analytics 작업으로 이동하고 작업 토폴로지 에서 쿼리 를 선택합니다.Navigate to your Stream Analytics job in the Azure portal and select Query under Job topology.

  2. 쿼리 창에서 다음 쿼리를 입력합니다.In the query window, enter this query:

    SELECT 
        *
    FROM 
        CallStream
    

    참고

    SQL처럼 키워드는 대/소문자를 구분하지 않고 공백은 중요하지 않습니다.As with SQL, keywords are not case-sensitive, and whitespace is not significant.

    쿼리에서 CallStream은 입력을 만들 때 지정한 별칭입니다.In this query, CallStream is the alias that you specified when you created the input. 다른 별칭을 사용하는 경우 대신 해당 이름을 사용합니다.If you used a different alias, use that name instead.

  3. 테스트 쿼리 를 선택합니다.Select Test query.

    Stream Analytics 작업이 입력의 샘플 데이터에 대해 쿼리를 실행하고 창 아래쪽에 출력을 표시합니다.The Stream Analytics job runs the query against the sample data from the input and displays the output at the bottom of the window. 결과에는 이벤트 허브 및 Stream Analytics 작업이 올바르게 구성되었다고 표시됩니다.The results indicate that the Event Hub and the Streaming Analytics job are configured correctly.

    테스트 쿼리의 샘플 출력

    표시되는 레코드의 정확한 개수는 샘플에 캡처된 레코드 수에 따라 달라집니다.The exact number of records you see will depend on how many records were captured in the sample.

열 프로젝션을 사용하여 필드 수 줄이기Reduce the number of fields using a column projection

대부분의 경우 분석 시에 입력 스트림의 모든 열이 필요하지는 않습니다.In many cases, your analysis doesn't need all the columns from the input stream. 쿼리를 사용하여 통과 쿼리에서보다 더 작은 집합의 반환된 필드를 프로젝션할 수 있습니다.You can use a query to project a smaller set of returned fields than in the pass-through query.

다음 쿼리를 실행하고 출력을 확인합니다.Run the following query and notice the output.

SELECT CallRecTime, SwitchNum, CallingIMSI, CallingNumCalledNum 
FROM 
    CallStream

지역별로 수신 전화 수 계산: 집계가 있는 연속 창Count incoming calls by region: Tumbling window with aggregation

지역당 들어오는 호출의 수를 계산한다고 가정합니다.Suppose you want to count the number of incoming calls per region. 스트리밍 데이터에서 개수와 같은 집계 함수를 수행하려는 경우 데이터 스트림 자체가 사실상 무한하므로 스트림을 시간 단위로 분할해야 합니다.In streaming data, when you want to perform aggregate functions like counting, you need to segment the stream into temporal units, since the data stream itself is effectively endless. Streaming Analytics window 함수를 사용하여 이 작업을 수행합니다.You do this using a Streaming Analytics window function. 그런 다음 해당 창 내에서 데이터를 단위로 작업할 수 있습니다.You can then work with the data inside that window as a unit.

이 변환의 경우 겹치지 않는 temporal 창 시퀀스를 원하며 각 창에는 그룹화 및 집계할 수 있는 불연속 데이터 집합이 있습니다.For this transformation, you want a sequence of temporal windows that don't overlap—each window will have a discrete set of data that you can group and aggregate. 이러한 형식의 창을 연속 창 이라고 합니다.This type of window is referred to as a Tumbling window. 연속 창 내에서 호출이 시작된 국가/지역을 나타내는 SwitchNum으로 그룹화된 들어오는 호출 수를 가져올 수 있습니다.Within the Tumbling window, you can get a count of the incoming calls grouped by SwitchNum, which represents the country/region where the call originated.

  1. 쿼리 편집기에 다음 쿼리를 붙여넣습니다.Paste the following query in the query editor:

    SELECT 
        System.Timestamp as WindowEnd, SwitchNum, COUNT(*) as CallCount 
    FROM
        CallStream TIMESTAMP BY CallRecTime 
    GROUP BY TUMBLINGWINDOW(s, 5), SwitchNum
    

    이 쿼리에서는 FROM 절에 Timestamp By 키워드를 사용하여 연속 창을 정의하는 데 사용할 입력 스트림의 타임스탬프 필드를 지정합니다.This query uses the Timestamp By keyword in the FROM clause to specify which timestamp field in the input stream to use to define the Tumbling window. 이 경우 창은 각 레코드의 CallRecTime 필드에 따라 데이터를 세그먼트로 나눕니다.In this case, the window divides the data into segments by the CallRecTime field in each record. (이 필드를 지정하지 않으면 창 작업에서 각 이벤트가 이벤트 허브에 도착한 시간을 사용합니다.)(If no field is specified, the windowing operation uses the time that each event arrives at the event hub. Stream Analytics 쿼리 언어 참조에서 “도착 시간과 애플리케이션 시간”을 참조하세요.See "Arrival Time Vs Application Time" in Stream Analytics Query Language Reference.

    프로젝션에는 각 창의 끝에 대한 타임스탬프를 반환하는 System.Timestamp가 포함됩니다.The projection includes System.Timestamp, which returns a timestamp for the end of each window.

    연속 창을 사용할 것인지를 지정하려면 GROUP BY절에 TUMBLINGWINDOW 함수를 사용합니다.To specify that you want to use a Tumbling window, you use the TUMBLINGWINDOW function in the GROUP BY clause. 함수에서 시간 단위(마이크로초에서 하루까지) 및 창 크기(단위 수)를 지정합니다.In the function, you specify a time unit (anywhere from a microsecond to a day) and a window size (how many units). 이 예에서 연속 창은 5초 간격으로 구성되므로 5초 분량의 호출에 대한 국가/지역별 개수를 가져옵니다.In this example, the Tumbling window consists of 5-second intervals, so you will get a count by country/region for every 5 seconds' worth of calls.

  2. 테스트 쿼리 를 선택합니다.Select Test query. 결과에서 WindowEnd 아래 타임스탬프가 5초 단위로 증가하는 것을 알 수 있습니다.In the results, notice that the timestamps under WindowEnd are in 5-second increments.

셀프 조인을 사용하여 SIM 사기 감지Detect SIM fraud using a self-join

이 예제에서는 5초 이내에 서로 다른 위치에서 동일한 사용자로부터 발생한 호출을 사기성 있는 사용으로 간주합니다.For this example, consider fraudulent usage to be calls that originate from the same user but in different locations within 5 seconds of one another. 예를 들어 동일한 사용자가 미국 및 오스트레일리아에서 동시에 합법적으로 전화를 걸 수 없습니다.For example, the same user can't legitimately make a call from the US and Australia at the same time.

이러한 경우를 확인하려면 스트리밍 데이터의 셀프 조인을 사용하여 CallRecTime 값에 따라 스트림을 셀프 조인합니다.To check for these cases, you can use a self-join of the streaming data to join the stream to itself based on the CallRecTime value. 그런 다음 CallingIMSI 값(발신 번호)이 동일하지만 SwitchNum 값(발신 국가/지역)은 다른 호출 레코드를 찾을 수 있습니다.You can then look for call records where the CallingIMSI value (the originating number) is the same, but the SwitchNum value (country/region of origin) is not the same.

스트리밍 데이터에 조인을 사용할 경우 조인은 일치하는 행이 시간상으로 얼마나 분리할 수 있는지 정도에 대한 몇 가지 한도를 제공해야 합니다.When you use a join with streaming data, the join must provide some limits on how far the matching rows can be separated in time. 앞에서 설명한 대로 스트리밍 데이터는 사실상 무한합니다.As noted earlier, the streaming data is effectively endless. 관계에 대한 시간 범위는 조인의 ON 절 내부에 DATEDIFF 함수를 사용하여 지정됩니다.The time bounds for the relationship are specified inside the ON clause of the join, using the DATEDIFF function. 이 경우 조인은 호출 데이터의 5초 간격을 기준으로 합니다.In this case, the join is based on a 5-second interval of call data.

  1. 쿼리 편집기에 다음 쿼리를 붙여넣습니다.Paste the following query in the query editor:

    SELECT System.Timestamp AS WindowEnd, COUNT(*) AS FraudulentCalls
    INTO "MyPBIoutput"
    FROM "CallStream" CS1 TIMESTAMP BY CallRecTime
    JOIN "CallStream" CS2 TIMESTAMP BY CallRecTime
    ON CS1.CallingIMSI = CS2.CallingIMSI
    AND DATEDIFF(ss, CS1, CS2) BETWEEN 1 AND 5
    WHERE CS1.SwitchNum != CS2.SwitchNum
    GROUP BY TumblingWindow(Duration(second, 1))
    

    이 쿼리는 조인에서 DATEDIFF 함수를 제외하고 SQL 조인과 유사합니다.This query is like any SQL join except for the DATEDIFF function in the join. DATEDIFF 버전은 Streaming Analytics에 국한되며 ON...BETWEEN 절에 표시되어야 합니다.This version of DATEDIFF is specific to Streaming Analytics, and it must appear in the ON...BETWEEN clause. 매개 변수는 시간 단위(이 예제에서는 초)와 조인의 두 원본에 대한 별칭입니다.The parameters are a time unit (seconds in this example) and the aliases of the two sources for the join. 표준 SQL DATEDIFF 함수와는 다릅니다.This is different from the standard SQL DATEDIFF function.

    WHERE 절에는 사기성 호출에 플래그를 지정하는 조건이 포함되며 발신 스위치는 동일하지 않습니다.The WHERE clause includes the condition that flags the fraudulent call: the originating switches are not the same.

  2. 테스트 쿼리 를 선택합니다.Select Test query. 출력을 검토한 다음, 쿼리 저장 을 선택합니다.Review the output, and then select Save query.

작업을 시작하고 출력을 시각화Start the job and visualize output

  1. 작업을 시작하려면 작업 개요 로 이동하여 시작 을 선택합니다.To start the job, navigate to the job Overview and select Start.

  2. 작업 출력 시작 시간으로 지금 을 선택하고 시작 을 선택합니다.Select Now for job output start time and select Start. 알림 표시줄에서 작업 상태를 볼 수 있습니다.You can view the job status in the notification bar.

  3. 작업이 성공하면 Power BI로 이동하여 회사 또는 학교 계정으로 로그인합니다.Once the job succeeds, navigate to Power BI and sign in with your work or school account. Stream Analytics 작업 쿼리가 결과를 출력 중이면 앞에서 만든 ASAdataset 데이터 세트가 데이터 세트 탭에 있는 것입니다.If the Stream Analytics job query is outputting results, the ASAdataset dataset you created exists under the Datasets tab.

  4. Power BI 작업 영역에서 + 만들기 를 선택하여 사기성 호출 이라는 새 대시보드를 만듭니다.From your Power BI workspace, select + Create to create a new dashboard named Fraudulent Calls.

  5. 창 맨 위에서 편집타일 추가 를 선택합니다.At the top of the window, select Edit and Add tile. 사용자 지정 스트리밍 데이터 를 선택하고 다음 을 선택합니다.Then select Custom Streaming Data and Next. 데이터 세트 아래에서 ASAdataset 를 선택합니다.Choose the ASAdataset under Your Datasets. 시각화 유형 드롭다운에서 카드 를 선택하고 필드사기성 호출 을 추가합니다.Select Card from the Visualization type dropdown, and add fraudulent calls to Fields. 다음 을 선택하여 타일 이름을 입력하고, 적용 을 선택하여 타일을 만듭니다.Select Next to enter a name for the tile, and then select Apply to create the tile.

    Power BI 대시보드 타일 만들기

  6. 다음 옵션을 사용하여 5단계를 다시 수행합니다.Follow the step 5 again with the following options:

    • 시각화 유형으로 꺾은선형 차트를 선택합니다.When you get to Visualization Type, select Line chart.
    • 축을 추가하고 windowend 를 선택합니다.Add an axis and select windowend.
    • 값을 추가하고 fraudulentcalls 를 선택합니다.Add a value and select fraudulentcalls.
    • 표시할 시간 창 에 지난 10분을 선택합니다.For Time window to display, select the last 10 minutes.
  7. 두 타일이 모두 추가되면 대시보드가 아래 예제처럼 보입니다.Your dashboard should look like the example below once both tiles are added. 이벤트 허브 발신자 애플리케이션 및 Stream Analytics 애플리케이션이 실행 중이면 새 데이터가 도착할 때마다 Power BI 대시보드가 주기적으로 업데이트됩니다.Notice that, if your event hub sender application and Streaming Analytics application are running, your Power BI dashboard periodically updates as new data arrives.

    Power BI 대시보드에서 결과 보기

웹 애플리케이션에 Power BI 대시보드 포함Embedding your Power BI Dashboard in a Web Application

자습서의 이 부분에서는 Power BI 팀에서 만든 ASP.NET 웹 애플리케이션을 사용하여 대시보드를 포함할 것입니다.For this part of the tutorial, you'll use a sample ASP.NET web application created by the Power BI team to embed your dashboard. 대시보드를 포함하는 방법에 대한 자세한 내용은 Power BI를 통해 포함 문서를 참조하세요.For more information about embedding dashboards, see embedding with Power BI article.

애플리케이션을 설정하려면 PowerBI-개발자-샘플 GitHub 리포지토리로 이동하여 사용자 소유 데이터 섹션 아래의 지침을 따릅니다(통합-웹앱 하위 섹션 아래에 있는 리디렉션 및 홈페이지 URL 사용).To set up the application, go to the PowerBI-Developer-Samples GitHub repository and follow the instructions under the User Owns Data section (use the redirect and homepage URLs under the integrate-web-app subsection). 우리는 대시보드 예제를 사용할 예정이므로 GitHub 리포지토리에 있는 통합-웹앱 샘플 코드를 사용합니다.Since we are using the Dashboard example, use the integrate-web-app sample code located in the GitHub repository. 브라우저에서 애플리케이션을 실행한 후에는 다음 단계에 따라 앞에서 만든 대시보드를 웹 페이지에 포함합니다.Once you've got the application running in your browser, follow these steps to embed the dashboard you created earlier into the web page:

  1. Power BI에 로그인 을 선택합니다. 그러면 Power BI 계정에 대시보드에 대한 애플리케이션 액세스 권한이 부여됩니다.Select Sign in to Power BI, which grants the application access to the dashboards in your Power BI account.

  2. 대시보드 가져오기 단추를 선택합니다. 그러면 계정의 대시보드가 테이블에 표시됩니다.Select the Get Dashboards button, which displays your account's Dashboards in a table. 앞에서 만든 대시보드 이름(powerbi-embedded-dashboard)을 찾아서 해당 EmbedUrl 을 복사합니다.Find the name of the dashboard you created earlier, powerbi-embedded-dashboard, and copy the corresponding EmbedUrl.

  3. 마지막으로 EmbedUrl 을 해당 텍스트 필드에 붙여넣고 대시보드 포함 을 선택합니다.Finally, paste the EmbedUrl into the corresponding text field and select Embed Dashboard. 이제 웹 애플리케이션에 동일한 대시보드가 포함된 것을 볼 수 있습니다.You can now view the same dashboard embedded within a web application.

다음 단계Next steps

이 자습서에서는 간단한 Stream Analytics 작업을 만들고, 들어오는 데이터를 분석하고, 그 결과를 Power BI 대시보드에 표시했습니다.In this tutorial, you created a simple Stream Analytics job, analyzed the incoming data, and presented results in a Power BI dashboard. Stream Analytics 작업에 대해 자세히 알아보려면 그 다음 자습서를 계속 진행하세요.To learn more about Stream Analytics jobs, continue to the next tutorial: