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
Copy

파워 쿼리 편집기의 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
Copy

여러 줄 재포인팅을 포함하는 간단한 엔터티 사례

이 경우 “필터링된 행”은 쿼리 논리에 대한 추가 단계입니다. 재포인팅 버전에서는 추가 논리가 그대로 유지됩니다.

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"
Copy

파워 쿼리 편집기의 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"
Copy

임베디드 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
Copy

파워 쿼리 편집기의 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
Copy

여러 줄 재포인팅을 포함하는 임베디드 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"
Copy

파워 쿼리 편집기의 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"
Copy

열 이름 바꾸기 재포인팅을 포함하는 임베디드 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
Copy

파워 쿼리 편집기의 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
Copy

엔터티 사례 재포인팅을 위한 함수 사례

현재, 이러한 함수는 엔터티 가져오기 사례 및 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"
Copy

파워 쿼리 편집기의 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"
Copy