SnowConvert AI – Transact – Power BI Repointing

Applies to
  • SQL Server

  • Azure Synapse Analytics

Beschreibung

Power BI Repointing ist ein Feature, das eine einfache Möglichkeit bietet, die Verbindungen aus der Sprache M im Power Query-Editor neu zu definieren. Das bedeutet, dass die Verbindungsparameter neu definiert werden, um auf den Kontext der Snowflake-Migrationsdatenbank zu verweisen. Für SQL Server und Azure Synapse ist die Methode in der Sprache M, mit der die Verbindung definiert wurde, Sql.Database(...). In Snowflake gibt es einen Konnektor, der von einigen anderen Parametern abhängt, und die Hauptverbindung wird durch die Snowflake.Database(...)-Methode definiert.

Beispiele für Quellmuster

In diesem Abschnitt werden die Fälle erläutert, die derzeit von SnowConvert AI verarbeitet werden.

Repointing-Fall: einfache Entität

Auch eine einfache Verbindung zu einer Tabelle von Power BI erfordert viele Transformationen, um mit dem impliziten Power BI-Konnektor von Snowflake verwendet zu werden. In diesem Fall fügt SnowConvert AI neue Informationsvariablen wie Datenbank und Schema hinzu und ruft die Quelltabelle mit dem impliziten Typ auf (es kann auch eine Ansicht sein).

Außerdem generiert SnowConvert AI eine Zuordnung zwischen den Spalten, um den Textfall mit dem Datenbankmigrationskontext oder, falls möglich, mit den internen Informationen des Power BI-Berichts abzugleichen.

Transact SQL | Azure Synapse-Verbindung im Power Query-Editor

let
    Source = Sql.Database("your_connection", "LibraryDatabase"),
    dbo_Authors = Source{[Schema="dbo",Item="Authors"]}[Data]
in
    dbo_Authors
Copy

Snowflake SQL-Verbindung im Power Query-Editor

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

Repointing-Fall: einfache Entität mit mehreren Zeilen

In diesem Fall ist „Filtered Rows“ ein zusätzlicher Schritt in die Logik der Abfrage. In der Repointing-Version bleibt die zusätzliche Logik so erhalten, wie sie ist.

Transact SQL | Azure Synapse-Verbindung im Power Query-Editor

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-Verbindung im Power Query-Editor

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

Repointing-Fall: eingebettete SQL-Abfrage

Für die SQL-Abfragen, die in Verbindungen eingebettet sind, extrahiert, migriert und fügtSnowConvert AI diese Abfragen erneut ein. Warnmeldungen in den migrierten Abfragen erfordern möglicherweise zusätzliche Aufmerksamkeit. In diesem Fall verhindert die Warnmeldung nicht, dass die Abfrage in der Snowflake-Datenbank ausgeführt wird.

Transact SQL | Azure Synapse-Verbindung im Power Query-Editor

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-Verbindung im Power Query-Editor

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

Repointing-Fall: eingebettete SQL-Abfrage mit mehreren Zeilen

Dieser Fall veranschaulicht die Verbindung mit SQL-Abfragen und mehreren Zeilen der Logik nach der Verbindungslogik.

Transact SQL | Azure Synapse-Verbindung im Power Query-Editor

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-Verbindung im Power Query-Editor

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

Repointing-Fall: eingebettete SQL-Abfrage mit Umbenennung von Spalten

Aktuell werden Spaltenumbenennungen für SQL-Abfragefälle nur dann angewendet, wenn die internen Informationen im bereitgestellten Power-BI-Bericht diese Informationen enthalten.

Transact SQL | Azure Synapse-Verbindung im Power Query-Editor

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-Verbindung im Power Query-Editor

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

Repointing-Fall: Funktion für Entitätsfall

Derzeit werden die Funktionen nur für den Entitätsimportfall und nur für Transact unterstützt.

Transact SQL-Verbindung im Power Query-Editor

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-Verbindung im Power Query-Editor

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