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