추출된 데이터를 사용하여 교차 테넌트 분석 - 단일 테넌트 앱
적용 대상: Azure SQL Database
이 자습서에서는 단일 테넌트 구현에 대한 전체 분석 시나리오를 안내합니다. 시나리오에서는 기업에서 스마트한 의사 결정을 내리는 데 분석을 어떻게 이용할 수 있는지 보여줍니다. 각 테넌트 데이터베이스에서 추출된 데이터를 사용하여 분석을 통해 샘플 Wingtip Tickets SaaS 애플리케이션을 비롯한 테넌트 동작을 살펴보게 됩니다. 이 시나리오는 다음과 같이 3단계로 구성됩니다.
- 각 테넌트 데이터베이스에서 데이터를 추출하고, 분석 저장소로 로드합니다.
- 분석 처리를 위해 추출된 데이터를 변환합니다.
- 비즈니스 인텔리전스 도구를 사용하여 의사 결정에 도움이 되는 유용한 정보를 얻습니다.
이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.
- 테넌트 분석 저장소를 만들어 데이터를 추출합니다.
- 탄력적 작업을 사용하여 각 테넌트 데이터베이스에서 분석 저장소로 데이터를 추출합니다.
- 추출된 데이터를 최적화합니다(별모양 스키마로 다시 구성).
- 분석 데이터베이스를 대상으로 쿼리하기.
- 데이터 시각화에 Power BI를 사용하여 테넌트 데이터의 추세를 강조 표시하고 개선 사항을 권장합니다.
오프라인 테넌트 분석 패턴
다중 테넌트 SaaS 애플리케이션은 일반적으로 클라우드에 대량의 테넌트 데이터를 저장합니다. 이 데이터는 애플리케이션의 작동 및 사용과 테넌트의 동작에 대한 풍부한 인사이트를 제공합니다. 이와 같은 인사이트는 기능 개발, 사용성 개선, 앱 및 플랫폼의 기타 투자에 대한 방향성을 제공할 수 있습니다.
모든 데이터가 하나의 다중 테넌트 데이터베이스에 있는 경우, 모든 테넌트에 대한 데이터에 액세스하는 것은 간단합니다. 그러나 잠재적으로 수천 개의 데이터베이스에 대규모로 분산될 경우 액세스가 더 복잡합니다. 이러한 복잡성을 해결하고 트랜잭션 데이터에 대한 분석 쿼리의 영향을 최소화하는 한 가지 방법은 데이터를 목적이 있는 분석 데이터베이스 또는 데이터 웨어하우스로 추출하는 것입니다.
이 자습서에서는 Wingtip Tickets SaaS 애플리케이션에 대한 전체 분석 시나리오를 제공합니다. 먼저 Elastic Jobs를 사용하여 각 테넌트 데이터베이스에서 데이터를 추출하고 분석 저장소의 준비 테이블에 로드합니다. 분석 저장소로 SQL Database나 Dedicated SQL 풀을 사용할 수 있습니다. 대규모 데이터 추출의 경우 Azure Data Factory를 사용하는 것이 좋습니다.
다음으로, 집합된 데이터를 일련의 별모양 스키마 테이블로 변환합니다. 테이블은 중앙 팩트 테이블과 관련 차원 테이블로 구성됩니다. Wingtip Tickets의 경우 다음과 같습니다.
- 별모양 스키마의 중앙 팩트 테이블에는 티켓 데이터가 포함됩니다.
- 차원 데이터는 장소, 이벤트, 고객, 구입 날짜와 같은 데이터를 보여줍니다.
중앙 팩트 및 차원 테이블을 함께 사용하면 효율적인 분석 처리를 수행할 수 있습니다. 아래의 그림에서 이 자습서에서 사용하고 있는 별모양 스키마를 볼 수 있습니다.
마지막으로 테넌트 동작에 대한 인사이트와 Wingtip Tickets 애플리케이션의 사용을 강조 표시하기 위해 Power BI를 통해 분석 저장소가 쿼리됩니다. 다음과 같은 쿼리를 실행합니다.
- 각 장소의 상대적 인기도를 표시하는 쿼리
- 다른 이벤트에 대한 티켓 판매의 패턴을 강조 표시하는 쿼리
- 이벤트가 전부 팔리는 경우 다른 장소의 상대 성공을 보여 줍니다.
각 테넌트가 서비스를 사용하는 방법을 이해한 후 서비스 수익을 창출하고 서비스를 개선하여 테넌트 성공에 도움이 되는 옵션을 탐색하세요. 이 자습서에서는 테넌트 데이터로부터 창출할 수 있는 기본적인 정보를 다양하게 살펴볼 수 있습니다.
설정
필수 조건
이 자습서를 수행하려면 다음 필수 조건이 충족되었는지 확인합니다.
- Wingtip Tickets SaaS Database Per Tenant 앱이 배포됩니다. 5분 이내에 배포하려면 Wingtip SaaS 애플리케이션 배포 및 탐색을 참조하세요.
- Wingtip Tickets SaaS Database Per Tenant 스크립트와 애플리케이션 소스 코드를 GitHub에서 다운로드해야 합니다. 지침 다운로드를 참조하세요. 콘텐츠를 추출하기 전에 zip 파일의 차단을 해제해야 합니다. Wingtip Tickets SaaS 스크립트를 다운로드하고 차단을 해제하는 단계는 일반 지침을 확인하세요.
- Power BI Desktop이 설치되어 있어야 합니다. Power BI Desktop 다운로드
- 추가 테넌트 배치가 프로비전되었습니다. 테넌트 프로비전 자습서를 참조하세요.
- 작업 계정 및 작업 계정 데이터베이스가 만들어졌습니다. 스키마 관리 자습서에서 해당 단계를 참조하세요.
데모에 대한 데이터 만들기
이 자습서에서는 티켓 판매 데이터에 대한 분석을 수행합니다. 현재 단계에서 모든 테넌트에 대한 티켓 데이터를 생성합니다. 나중에 이 데이터는 분석을 위해 추출됩니다. 의미 있는 양의 데이터를 갖도록 앞에서 설명한 대로 테넌트 배치를 프로비전했는지 확인합니다. 충분히 많은 양의 데이터가 확보되어야 다양한 티켓 구매 패턴을 노출할 수 있습니다.
- PowerShell ISE에서 …\Learning Modules\Operational Analytics\Tenant Analytics\Demo-TenantAnalytics.ps1을 열고 다음 값을 설정합니다.
- $DemoScenario = 1 모든 행사장에서 이벤트 티켓 구입
- F5 키를 눌러 스크립트를 실행하고 각 행사장의 모든 이벤트에 대한 티켓 구매 기록을 만듭니다. 스크립트가 몇 분 동안 실행되며 수만 개의 티켓을 생성합니다.
분석 저장소 배포
모든 테넌트 데이터를 함께 저장하는 트랜잭션 데이터베이스가 많이 있습니다. 여러 트랜잭션 데이터베이스의 테넌트 데이터를 하나의 분석 저장소에 통합해야 합니다. 통합 시 데이터를 효율적으로 쿼리할 수 있습니다. 이 자습서에서는 집계된 데이터를 저장하는 데 Azure SQL Database를 사용합니다.
다음 단계에서는 tenantanalytics라고 하는 분석 저장소를 배포합니다. 또한 자습서의 뒷부분에 채워져 있는 미리 정의된 테이블을 배포합니다.
- PowerShell ISE에서 …\Learning Modules\Operational Analytics\Tenant Analytics\Demo-TenantAnalytics.ps1을 엽니다.
- 선택한 분석 저장소와 일치하도록 스크립트의 $DemoScenario 변수를 설정합니다.
- columnstore 없이 SQL Database를 사용하려면 $DemoScenario = 2로 설정합니다.
- columnstore에서 SQL Database를 사용하려면 $DemoScenario = 3으로 설정합니다.
- F5 키를 눌러 Deploy-TenantAnalytics<XX>.ps1 스크립트를 호출하는 데모 스크립트를 실행하여 테넌트 분석 저장소를 만듭니다.
이렇게 해서 애플리케이션을 배포하고 애플리케이션에 유의미한 테넌트 데이터를 입력했습니다. 이번에는 SSMS(SQL Server Management Studio)에서 tenants1-dpt-<User> 서버와 catalog-dpt-<User> 서버를 연결합니다. 이때 로그인 = developer, 암호 = P@ssword1입니다. 자세한 지침은 소개 자습서 를 참조하세요.
개체 탐색기에서 다음 단계를 수행합니다.
- tenants1-dpt-<User> 서버를 확장합니다.
- 데이터베이스 노드를 확장하고 테넌트 데이터베이스 목록을 확인합니다.
- catalog-dpt-<User> 서버를 확장합니다.
- 분석 저장소 및 jobaccount 데이터베이스가 표시되는지 확인합니다.
분석 저장소 노드를 확장하여 SSMS 개체 탐색기 내의 다음 데이터베이스 항목을 참조하세요.
- 테이블 TicketsRawData 및 EventsRawData은(는) 테넌트 데이터베이스에서 추출된 원시 데이터를 저장합니다.
- 별모양 스키마 테이블은 fact_Tickets, dim_Customers, dim_Venues, dim_Events 및 dim_Dates입니다.
- 원시 데이터 테이블에서 별모양 스키마 테이블을 채우기 위해 저장된 절차가 사용됩니다.
데이터 추출
대상 그룹 만들기
계속하기 전에 작업 계정 및 jobaccount 데이터베이스를 배포했는지 확인합니다. 이어지는 단계에서는 탄력적 작업을 사용하여 각 테넌트 데이터베이스에서 데이터를 추출하고 추출한 데이터를 분석 저장소에 저장합니다. 그런 다음 두 번째 작업은 데이터를 분할하고 별모양 스키마의 테이블에 저장합니다. 이 두 개의 작업은 TenantGroup 그룹과 AnalyticsGroup 그룹이라는 서로 다른 그룹을 대상으로 실행됩니다. 추출 작업은 모든 테넌트 데이터베이스를 포함하는 TenantGroup에 대해 실행됩니다. 분할 작업은 분석 저장소만 포함하는 AnalyticsGroup에 대해 실행됩니다. 다음 단계를 사용하여 대상 그룹을 만듭니다.
- SSMS에서 catalog-dpt-<User>의 jobaccount 데이터베이스에 연결합니다.
- SSMS에서 …\Learning Modules\Operational Analytics\Tenant Analytics\ TargetGroups.sql을 엽니다.
- 스크립트 상단의 @User 변수를 수정합니다. 즉, Wingtip SaaS 앱을 배포할 때 사용한 사용자 값으로
<User>
을(를) 변경합니다. - F5 키를 눌러 두 대상 그룹을 만드는 스크립트를 실행합니다.
모든 테넌트에서 원시 데이터 추출
티켓 및 고객 데이터는 이벤트 및 행사장 데이터보다 광범위한 데이터 수정이 더 자주 발생할 수 있습니다. 따라서 이벤트 및 장소 데이터를 추출하는 것보다 티켓과 고객 데이터를 개별적으로 그리고 더 자주 추출하는 것이 좋습니다. 이 섹션에서는 두 개의 별도 작업을 정의하고 예약합니다.
- 티켓 및 고객 데이터를 추출합니다.
- 이벤트 및 장소 데이터를 추출합니다.
각 작업은 데이터를 추출하고 분석 저장소에 게시합니다. 추출된 데이터를 분석 별모양 스키마로 분할하는 별도의 작업이 있습니다.
- SSMS에서 catalog-dpt-<User>의 jobaccount 데이터베이스에 연결합니다.
- SSMS에서 ...\Learning Modules\Operational Analytics\Tenant Analytics\ExtractTickets.sql을 엽니다.
- 스크립트 상단의 @User을(를) 수정합니다. 즉, Wingtip SaaS 앱을 배포할 때 사용한 사용자 이름으로
<User>
을(를) 변경합니다. - F5 키를 눌러 각 테넌트 데이터베이스에서 티켓 및 고객 데이터를 추출하는 작업을 만들고 실행하는 스크립트를 실행합니다. 작업은 분석 저장소에 데이터를 저장합니다.
- Tenantanalytics 데이터베이스에서 TicketsRawData 테이블을 쿼리하여 테이블이 모든 테넌트에서 티켓 정보로 채워지도록 합니다.
2단계에서 \ExtractTickets.sql을 \ExtractVenuesEvents.sql로 바꾸는 것을 제외하고 이전 단계를 반복합니다.
작업을 성공적으로 실행하면 분석 저장소의 EventsRawData 테이블이 모든 테넌트에서 새 이벤트 및 장소 정보로 채워집니다.
데이터 재구성
추출된 데이터를 단편화하여 스타 스키마 테이블에 입력하기
이번에는 추출된 원시 데이터를 단편화하여 분석 쿼리에 최적화된 일련의 테이블에 저장하는 작업을 수행합니다. 별모양 스키마가 사용됩니다. 중앙 팩트 테이블에는 개별 티켓 판매 레코드가 있습니다. 다른 테이블은 장소, 이벤트 및 고객에 대한 관련 데이터로 채워집니다. 그리고 시간 차원 테이블이 있습니다.
자습서의 이 섹션에서는 추출된 원시 데이터를 별모양 스키마 테이블의 데이터와 병합하는 작업을 정의하고 실행합니다. 병합 작업이 완료되면 원시 데이터가 삭제되고 다음 테넌트 데이터 추출 작업으로 테이블을 채울 준비가 된 상태로 둡니다.
- SSMS에서 catalog-dpt-<User>의 jobaccount 데이터베이스에 연결합니다.
- SSMS에서 …\Learning Modules\Operational Analytics\Tenant Analytics\ShredRawExtractedData.sql을 엽니다.
- F5 키를 눌러 스크립트를 실행하여 분석 저장소에서 sp_ShredRawExtractedData 저장 프로시저를 호출하는 작업을 정의합니다.
- 작업이 성공적으로 실행되도록 충분한 시간을 가지세요.
- 작업 상태에 대한 jobs.jobs_execution 테이블의 수명 주기 열을 확인합니다. 계속하기 전에 작업이 성공했는지 확인합니다. 실행이 성공하면 다음 차트와 유사한 데이터가 표시됩니다.
데이터 탐색
테넌트 데이터 시각화
별모양 스키마 테이블의 데이터는 분석에 필요한 모든 티켓 판매 데이터를 제공합니다. 큰 데이터 집합의 추세를 더 쉽게 볼 수 있도록 그래픽으로 시각화해야 합니다. 이 섹션에서는 앞에서 추출하고 구성한 테넌트 데이터를 Power BI를 사용하여 조작하고 시각화하는 방법을 알아봅니다.
다음 단계를 사용하여 Power BI에 연결하고 이전에 만든 보기를 가져옵니다.
Power BI desktop을 시작합니다.
홈 리본에서 데이터 가져오기를 선택하고 메뉴에서 자세히를 선택합니다.
데이터 가져오기 창에서 Azure SQL Database를 선택합니다.
데이터베이스 로그인 창에 서버 이름(catalog-dpt-<User>.database.windows.net)을 입력합니다. 데이터 연결 모드를 가져오기로 선택한 다음, OK를 클릭합니다.
왼쪽 창에서 데이터베이스를 선택한 후 사용자 이름 = developer, 암호 = P@ssword1을 입력합니다. 연결을 클릭합니다.
탐색기 패널의 분석 데이터베이스 아래에서 별모양 스키마 테이블(fact_Tickets, dim_Events, dim_Venues, dim_Customers, dim_Dates)을 선택합니다. 그런 다음 로드를 선택합니다.
축하합니다! Power BI에 데이터를 성공적으로 로드했습니다. 지금부터 시각화 데이터를 탐색하여 테넌트에 대한 유용한 정보를 얻을 수 있습니다. 다음으로 분석을 통해 Wingtip Tickets 비즈니스 팀에 데이터 기반 권장 사항을 제공할 수 있는 방법을 안내합니다. 권장 사항을 바탕으로 비즈니스 모델과 고객 경험을 최적화할 수 있습니다.
먼저 티켓 판매량 데이터를 분석하여 행사장별 판매량의 차이를 확인합니다. Power BI에서 다음 옵션을 선택하여 각 장소에서 판매된 총 티켓 수의 가로 막대형 차트를 표시합니다. 티켓 생성기의 임의 변형으로 인해 결과가 다를 수 있습니다.
위의 플롯으로 각 장소에서 판매되는 티켓의 수가 다르다는 것을 확인할 수 있습니다. 티켓이 더 많이 판매된 행사장에서는 상대적으로 적게 판매된 행사장보다 서비스를 많이 이용하는 것입니다. 이에 따라 각 테넌트의 니즈에 맞게 리소스 할당량을 변경할 수 있습니다.
데이터를 분석하여 시간 경과에 따른 티켓 판매량을 확인할 수도 있습니다. Power BI에서 다음 옵션을 선택하여 60일 동안의 일일 티켓 판매량을 차트로 표시합니다.
위 차트에서 일부 행사장의 티켓 판매량이 특정 날짜에 급증하는 것을 볼 수 있습니다. 이러한 급증은 일부 장소에서 시스템 리소스를 불균형적으로 소비할 수 있다는 가설을 강화합니다. 지금까지는 급증 발생에 대한 명백한 패턴은 없습니다.
이번에는 판매량 급증에 유의미한 추세가 있는지 알아보고 싶을 것입니다. 티켓 판매 개시 이후 어느 시점에 판매량 급증되는 것일까요? Power BI에서 다음 옵션을 선택하여 판매 개시 이후 일별 티켓 판매량을 차트로 표시합니다.
위의 차트를 통해 일부 행사장에서 판매 개시 첫날에 다량의 티켓을 판매하고 있는 것을 알 수 있습니다. 티켓이 이 장소에서 판매 개시되자마자 미친 듯이 팔려 나가는 것으로 보입니다. 일부 장소에서 이러한 활동이 급증하면 다른 테넌트의 서비스에 영향을 미칠 수 있습니다.
데이터를 다시 드릴하여 이러한 장소에서 호스트되는 모든 이벤트에 대해 이 미친 듯한 러시가 사실인지 확인할 수 있습니다. 이전 그림에서 Contoso Concert Hall은 많은 티켓을 판매하고 있으며 또한 Contoso에서 특정 날짜에 티켓 판매가 급증한다는 것을 확인했습니다. Contoso Concert Hall의 누적 티켓 판매를 계획하는 Power BI 옵션을 사용하여 각 이벤트의 판매 추세에 초점을 맞춥니다. 모든 이벤트가 동일한 판매 패턴을 따르나요?
위의 Contoso Concert Hall 차트를 보면 판매 개시 첫날 판매량이 급증하는 이벤트도 있고, 급증하지 않는 이벤트도 있음을 알 수 있습니다. 필터 옵션을 이리저리 조정하여 다른 행사장의 판매량 추세도 확인해 봅니다.
티켓 판매량 패턴을 파악하면 Wingtip Tickets가 비즈니스 모델을 최적화할 방향을 찾게 될 수도 있습니다. 모든 테넌트를 동일하게 청구하는 대신 Wingtip에 컴퓨팅 크기가 다른 서비스 계층을 도입해야 할 수 있습니다. 하루에 더 많은 티켓을 판매해야 하는 대형 행사장에는 높은 SLA(서비스 수준 계약)를 갖는 높은 등급을 제안할 수 있습니다. 이러한 행사장에서는 데이터베이스당 리소스 한도가 더 높은 풀에 자신의 데이터베이스를 배치할 수 있습니다. 각 서비스 계층에는 시간별 판매량을 할당할 수 있으며 할당을 초과하는 경우 추가 요금이 부과됩니다. 주기적으로 판매량이 급증하는 대형 행사장이라면 높은 등급의 서비스를 이용하는 것이 이익이 될 것입니다. 또한, Wingtip Tickets은 서비스의 수익을 더 효율적으로 높일 수 있게 됩니다.
한편, 일부 Wingtip Tickets 고객은 서비스 비용을 감당하기에 충분한 티켓 수량을 판매하는 데 어려움을 겪고 있다고 불평합니다. 아마도 이러한 인사이트에서 실적이 저조한 장소의 티켓 판매를 높일 수 있는 기회가 있을 것입니다. 판매량이 높을수록 서비스의 인식된 가치가 높아질 것입니다. fact_Tickets을 마우스 오른쪽 버튼으로 클릭하고 새 측정값을 선택합니다. AverageTicketsSold라는 새 측정값에 다음 식을 입력합니다.
AverageTicketsSold = AVERAGEX( SUMMARIZE( TableName, TableName[Venue Name] ), CALCULATE( SUM(TableName[Tickets Sold] ) ) )
다음 시각화 옵션을 선택하여 각 장소에서 판매된 티켓 백분율 플롯을 그려 상대적으로 성공한 장소를 정합니다.
이전 플롯은 대부분의 장소가 티켓의 80 % 이상을 판매하지만 일부는 좌석의 절반 이상을 채우기 위해 고군분투하고 있음을 보여줍니다. 값들을 잘 활용하여 각 장소에 대해 판매된 티켓의 최대 또는 최소 비율을 선택합니다.
이전에 티켓 판매가 예측 가능한 패턴을 따르는 경향이 있음을 찾아내기 위해 심화 분석을 수행했습니다. 이 검색을 통해 Wingtip Tickets는 실적이 저조한 장소에 동적 가격을 추천하여 티켓 판매량을 높일 수 있습니다. 또한, 해당 디스커버는 각 이벤트의 티켓 판매량을 예측하는 데 기계 학습 기법을 사용할 기회도 제시합니다. 티켓에 할인을 제공하는 경우 수익에 미치는 영향 예측을 할 수도 있습니다. Power BI Embedded를 이벤트 관리 애플리케이션에 통합할 수 있습니다. 통합은 예측된 판매액과 다양한 할인의 영향을 시각화하는 데 도움이 될 수 있습니다. 이 애플리케이션은 분석 디스플레이에서 직접 적용할 최적의 할인을 고안하는 데 도움이 될 수 있습니다.
지금까지 WingTip 애플리케이션의 테넌트 데이터 추세를 관찰해 보았습니다. 앱이 SaaS 애플리케이션 공급업체에게 비즈니스 의사 결정을 알리는 다른 방법을 고려할 수 있습니다. 공급업체가 테넌트 요구에 더 잘 부응할 수도 있습니다. 이 자습서를 통해 테넌트 데이터에 대한 분석을 수행하는 데 필요한 도구를 갖추어 비즈니스 수행 시 데이터 기반 의사 결정을 내릴 수 있기를 바랍니다.
다음 단계
이 자습서에서는 다음 작업 방법을 알아보았습니다.
- 사전 정의된 스타 스키마 테이블을 사용하여 테넌트 분석 데이터베이스 배포하기
- 탄력적 작업을 사용하여 각 테넌트 데이터베이스로부터의 데이터 추출
- 추출된 데이터를 분석을 위해 설계된 별모양 스키마의 테이블에 병합
- 분석 데이터베이스 쿼리하기
- 데이터 시각화에 Power BI를 사용하여 테넌트 데이터의 추세 관찰
축하합니다!
추가 리소스
- Wingtip SaaS 애플리케이션을 빌드하는 또 다른 자습서.
- 탄력적 작업.
- 추출된 데이터를 사용하여 교차 테넌트 분석 - 다중 테넌트 앱