SnowConvert AI - Transact - Power BI 재포인팅¶
Applies to
SQL 서버
Azure 시냅스 분석
설명¶
Power BI 재포인팅은 파워 쿼리 편집기에서 M 언어의 연결을 쉽게 재정의할 수 있는 방법을 제공하는 기능입니다. 즉, 연결 매개 변수가 Snowflake 마이그레이션 데이터베이스 컨텍스트를 가리키도록 재정의됩니다. SQL Server 및 Azure Synapse의 경우 연결을 정의하는 M 언어의 메서드는 Sql.Database(...)입니다. Snowflake에는 다른 매개 변수를 사용하는 커넥터가 있으며 기본 연결은 Snowflake.Database(...) 메서드로 정의됩니다.
소스 패턴 샘플¶
이 섹션에서는 SnowConvert AI에서 현재 해결한 사례에 대해 설명합니다.
간단한 엔터티 재포인팅 사례¶
Power BI에서 테이블에 간단히 연결하려는 경우에도 Snowflake의 암시적 Power BI 커넥터에서 여러 변환을 사용해야 합니다. 이 경우, SnowConvert AI는 데이터베이스 및 스키마와 같은 새로운 정보 변수를 추가하고, 암시적 유형(뷰일 수도 있음)으로 소스 테이블을 호출합니다.
또한, SnowConvert AI는 텍스트 대/소문자를 데이터베이스 마이그레이션 컨텍스트 또는 가능한 경우 Power BI 보고서 내부 정보와 일치시키기 위해 열 간에 매핑을 생성합니다.
Transact-SQL | 파워 쿼리 편집기의 Azure Synapse Connection
let
Source = Sql.Database("your_connection", "LibraryDatabase"),
dbo_Authors = Source{[Schema="dbo",Item="Authors"]}[Data]
in
dbo_Authors
파워 쿼리 편집기의 Snowflake SQL 연결
let
Source = Snowflake.Databases(SF_SERVER_LINK, SF_WAREHOUSE_NAME),
SourceSfDb = Source{[Name=SF_DB_NAME, Kind="Database"]}[Data],
SourceSfSchema = SourceSfDb{[Name="DBO", Kind="Schema"]}[Data],
SourceSfTbl = SourceSfSchema{[Name="BOOKS", Kind="Table"]}[Data],
dbo_Books = Table.RenameColumns(SourceSfTbl, {{ "BOOKID", "BookID"}, { "TITLE", "Title"}, { "AUTHORID", "AuthorID"}, { "PUBLICATIONYEAR", "PublicationYear"}})
in
dbo_Books
여러 줄 재포인팅을 포함하는 간단한 엔터티 사례¶
이 경우 “필터링된 행”은 쿼리 논리에 대한 추가 단계입니다. 재포인팅 버전에서는 추가 논리가 그대로 유지됩니다.
Transact-SQL | 파워 쿼리 편집기의 Azure Synapse Connection
let
Source = Sql.Database("your_connection", "mytestdb"),
dbo_Employee = Source{[Schema="dbo",
Item="Employee"]}[Data],
#"Filtered Rows" = Table.SelectRows(dbo_Employee, each Text.StartsWith([name], "John"))
in
#"Filtered Rows"
파워 쿼리 편집기의 Snowflake SQL 연결
let
Source = Snowflake.Databases(SF_SERVER_LINK, SF_WAREHOUSE_NAME),
SourceSfDb = Source{[Name=SF_DB_NAME, Kind="Database"]}[Data],
SourceSfSchema = SourceSfDb{[Name="DBO", Kind="Schema"]}[Data],
SourceSfTbl = SourceSfSchema{[Name="EMPLOYEE", Kind="Table"]}[Data],
dbo_Employee = SourceSfTbl,
#"Filtered Rows" = Table.SelectRows(dbo_Employee, each Text.StartsWith([name], "John"))
in
#"Filtered Rows"
임베디드 SQL 쿼리 재포인팅 사례¶
연결 내부에 임베드된 SQL 쿼리의 경우 SnowConvert AI는 이러한 쿼리를 추출, 마이그레이션 및 다시 삽입합니다. 마이그레이션된 쿼리의 경고 메시지에는 특별한 주의가 필요할 수 있습니다. 이 경우 경고 메시지로 인해 Snowflake 데이터베이스에서 쿼리 실행이 중지되지는 않습니다.
Transact-SQL | 파워 쿼리 편집기의 Azure Synapse Connection
let
Source = Sql.Database("your_connection", "LibraryDatabase", [Query="SELECT DISTINCT#(lf) B.Title#(lf)FROM#(lf) DBO.Books AS B#(lf)JOIN#(lf) DBO.Authors AS A ON B.AuthorID = A.AuthorID#(lf)JOIN#(lf) DBO.BookGenres AS BG ON B.BookID = BG.BookID#(lf)JOIN#(lf) DBO.Genres AS G ON BG.GenreID = G.GenreID#(lf)WHERE#(lf) A.Nationality = 'American' AND G.Origin = 'USA'#(lf)ORDER BY#(lf) B.Title;", CreateNavigationProperties=false])
in
Source
파워 쿼리 편집기의 Snowflake SQL 연결
let
SfSource = Value.NativeQuery(Snowflake.Databases(SF_SERVER_LINK,SF_WAREHOUSE_NAME,[Implementation="2.0"]){[Name=SF_DB_NAME]}[Data], "--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS ""DBO.Books"", ""DBO.Authors"", ""DBO.BookGenres"", ""DBO.Genres"" **
SELECT DISTINCT
B.Title
FROM
DBO.Books AS B
JOIN
DBO.Authors AS A
ON B.AuthorID = A.AuthorID
JOIN
DBO.BookGenres AS BG
ON B.BookID = BG.BookID
JOIN
DBO.Genres AS G
ON BG.GenreID = G.GenreID
WHERE
A.Nationality = 'American' AND G.Origin = 'USA'
ORDER BY B.Title", null, [EnableFolding=true]),
Source = Table.RenameColumns(SfSource, {{ "TITLE", "Title"}})
in
Source
여러 줄 재포인팅을 포함하는 임베디드 SQL 쿼리 사례¶
이 사례는 SQL 쿼리와의 연결과 연결 논리 이후의 여러 논리 줄을 보여 줍니다.
Transact-SQL | 파워 쿼리 편집기의 Azure Synapse Connection
let
Source = Sql.Database("your_connection", "mytestdb", [Query="SELECT DISTINCT#(lf) P.ProductName,#(lf) P.Category,#(lf) P.StockQuantity#(lf)FROM#(lf) Products AS P#(lf)WHERE#(lf) P.StockQuantity > 0#(lf)ORDER BY#(lf) P.Category ASC;"]),
#"Filtered Rows" = Table.SelectRows(Source, each Text.StartsWith([Name], "Cards"))
in
#"Filtered Rows"
파워 쿼리 편집기의 Snowflake SQL 연결
let
Source = Value.NativeQuery(Snowflake.Databases(SF_SERVER_LINK,SF_WAREHOUSE_NAME,[Implementation="2.0"]){[Name=SF_DB_NAME]}[Data], "--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT ""Products"" **
SELECT DISTINCT
P.ProductName,
P.Category,
P.StockQuantity
FROM
Products AS P
WHERE
P.StockQuantity > 0
ORDER BY P.Category ASC", null, [EnableFolding=true]),
#"Filtered Rows" = Table.SelectRows(Source, each Text.StartsWith([Name], "Cards"))
in
#"Filtered Rows"
열 이름 바꾸기 재포인팅을 포함하는 임베디드 SQL 쿼리 사례¶
현재 SQL 쿼리 사례에 대한 열 이름 바꾸기는 제공된 Power BI 보고서의 내부 정보에 이 정보가 포함되어 있는 경우에만 적용됩니다.
Transact-SQL | 파워 쿼리 편집기의 Azure Synapse Connection
let
Source = Sql.Database("your_connection", "SalesSampleDB", [Query="SELECT DISTINCT#(lf) P.ProductName,#(lf) P.Category,#(lf) P.StockQuantity#(lf)FROM#(lf) Products AS P#(lf)WHERE#(lf) P.StockQuantity > 0#(lf)ORDER BY#(lf) P.Category ASC;"])
in
Source
파워 쿼리 편집기의 Snowflake SQL 연결
let
SfSource = Value.NativeQuery(Snowflake.Databases(SF_SERVER_LINK,SF_WAREHOUSE_NAME,[Implementation="2.0"]){[Name=SF_DB_NAME]}[Data], "--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT ""Products"" **
SELECT DISTINCT
P.ProductName,
P.Category,
P.StockQuantity
FROM
Products AS P
WHERE
P.StockQuantity > 0
ORDER BY P.Category ASC", null, [EnableFolding=true]),
Source = Table.RenameColumns(SfSource, {{ "PRODUCTNAME", "ProductName"}, { "CATEGORY", "Category"}, { "STOCKQUANTITY", "StockQuantity"}})
in
Source
엔터티 사례 재포인팅을 위한 함수 사례¶
현재, 이러한 함수는 엔터티 가져오기 사례 및 Transact에서만 지원됩니다.
파워 쿼리 편집기의 Transact-SQL 연결
let
Source = Sql.Database("your_connection", "mytestdb"),
dbo_MultiParam = Source{[Schema="dbo",Item="MultiParam"]}[Data],
#"Invoked Functiondbo_MultiParam1" = dbo_MultiParam(1,"HELLO")
in
#"Invoked Functiondbo_MultiParam1"
파워 쿼리 편집기의 Snowflake SQL 연결
let
Source = Snowflake.Databases(SF_SERVER_LINK, SF_WAREHOUSE_NAME),
SourceSfDb = Source{[Name="mytestdb, Kind="Database"]}[Data],
SourceSfFunc = (x, y) => Value.NativeQuery(SourceSfDb, "SELECT DBO.MultiParam(" & Text.From(x) & "," & (if y = null then null else ("'" & y & "'")) & ")"),
dbo_MultiParam = SourceSfFunc,
#"Invoked Functiondbo_MultiParam1" = dbo_MultiParam(1,"HELLO")
in
#"Invoked Functiondbo_MultiParam1"