1
votes

I would like to use an SSRS dataset as a datasource for PowerQuery, either with [Excel 2013] or [PowerBI Desktop]. The report server version is [SSRS 2016] [Microsoft SQL Server 2016 (SP2-CU3) (KB4458871) - 13.0.5216.0 (X64) - Enterprise Edition].

My goal is for end users to have access to the SSRS Datasets via PowerQuery (either Excel or PBIDesktop). Users connect and build reports against the data sources; and IT developers manage the SSRS data sets.

Is upgrading to PBIRS the only way to connect PQ to SSRS Report Dataset? Will upgrading to PBIRS solve the requirement?


I know that I can export an ODATA feed from SSRS, and this will create an .ATOMSVC file that Excel native (Excel Data Tab) can connect to (steps at: "Generate Data Feeds from a Report (Report Builder and SSRS)": Docs-MSFT/SQL/SQL Server/Reporting Services/Report Builder/ and | steps at: "Reporting Services ATOM Data Feeds": mssqltips 2136).

PQ cannot connect to .ATOMSVC, it's ODATA connection requires a URL not a file. When I google "powerquery connection to SSRS dataset", I found a few articles that indicate I should upgrade to PBIRS (PowerBI Report Server) from SSRS 2016 Server.

excel-pq-from-odata feed-url.png enter image description here


Online sources

Users can build their own PowerBI reports based off of SSRS datasets

(FUTURE STATE): This would be a valid URL with PowerBI ReportServer.

(HOW TO): Access SSRS data with PowerBI

(HOW TO): Exploring The New SSRS 2017 API In Power BI

HOW TO UPGRADE, SSRS to PBIRS

(DOWNLOAD): PowerBI ReportServer, 180-day free trial:

(HOW TO): Migrating from SSRS to Power BI Report Server

(HOW TO): Install and configure Power BI Report Server and Power BI Desktop

(PRICING-PBIRS): POWER BI REPORT SERVER: A modern on-premises BI solution

(PRICING- PBI Pro):

1

1 Answers

1
votes

That's exactly what I'm doing right now, you need to create a Power BI Custom Data Connector in Visual Studio using Power Query SDK and connect to SSRS via SSRS 2017 rest API, you may access the Dataset via an api call, here's an example:

http://<SSRS_Server>/reports/api/v2.0/Datasets(f973d010-2052-49ad-ac69-ae66d0324e03)/Model.GetData

Here's I sample code:

section Asia.PQ.SSRS_Connector;

[DataSource.Kind="Asia.PQ.SSRS_Connector", 
Publish="Asia.PQ.SSRS_Connector.Publish"]
shared Asia.PQ.SSRS_Connector.Feed = Value.ReplaceType(SSRSConImpl, type function (url as Uri.Type) as any);

DefaultRequestHeaders = [
     #"Accept" = "application/json;odata.metadata=minimal",  
     #"OData-MaxVersion" = "4.0"

];

SSRSConImpl = (url as text) =>
    let
        body= "",
        source = Web.Contents(url, [ Headers = DefaultRequestHeaders, 
        Content=Text.ToBinary(body)]),
        json = Json.Document(source)
    in 
        json;