-
Atlanta MS BI and Power BI Group Meeting on January 9th (Integrating Azure Synapse Analytics and Power BI)
December 26, 2022 / No Comments »
The Atlanta MS BI and Power BI Group is resuming in-person meetings! Please join us for the next meeting on Monday, January 9th, at 6:30 PM ET. Elayne Jones (Data Engineer at 3Cloud) will show you how to integrate Synapse with Power BI. For more details and sign up, visit our group page. WE ARE RESUMING IN-PERSON MEETINGS AT THE MICROSOFT OFFICE IN ALPHARETTA. WE STRONGLY ENCOURAGE YOU TO ATTEND THE EVENT IN PERSON FOR BEST EXPERIENCE. PLEASE NOTE THAT GUESTS ENTERING MICROSOFT BUILDINGS IN THE U.S. MUST PROVIDE PROOF OF VACCINATION OR SELF-ATTEST WITH HEALTHCHECK (HTTPS://AKA.MS/HEALTHCHECK). ALTERNATIVELY, YOU CAN JOIN OUR MEETINGS ONLINE VIA MS TEAMS. WHEN POSSIBLE, WE WILL RECORD THE MEETINGS AND MAKE RECORDINGS AVAILABLE AT HTTPS://BIT.LY/ATLANTABIRECS. PLEASE RSVP ONLY IF COMING TO OUR IN-PERSON MEETING. Presentation: Integrating Azure Synapse Analytics and Power BI Date: January 9th Time: 6:30 – 8:30 PM ET Place: Onsite and online ...
-
Report-enable Internal Portals with Power BI Reports
December 15, 2022 / No Comments »
Expanding on my previous blog on this subject, there are three options to report-enable your Intranet portals with Power BI reports: Report link – This is the link to the report that you obtain from the browser address bar. If you want to report in full screen viewing mode (hiding the Power BI chrome), you can append the chromeless=1 query parameter to the URL, such as https://app.powerbi.com/groups/689c8ae3-0e22-44d1-9803-b6afdba4e583/reports/b60eaab4-9a85-47c3-8cde-e3a17e8f3dae/ReportSection?chromeless=1. If the "Display report pages as tabs along the bottom of the report" report setting is disabled, the report will be rendered with a few buttons at the bottom. Clicking "Go back" or exiting the full-screen view, will "restore" the Power BI portal chrome, allowing the user to gain access to the report action bar, such as to get report insights. This is the only option to have access to all commands in the report action bar. In addition, the users can store...
-
What Exactly is Microsoft Synapse?
December 4, 2022 / No Comments »
The other day an exalted customer shared that they've acquired Synapse and now they're ready for implementing semantic models with Power BI. The client wasn't sure how to give business users access to Synapse so cool self-service BI can finally start. In the process of the conversation, it became clear that they opened Synapse Studio and were left with the impression that Synapse has semantic modeling features. This is what happens when Marketing gets involved and people get confused about what a tool actually does. Let's attempt to clear this confusion. What's Synapse? Think of Synapse (aka Azure Synapse Analytics) as a umbrella name that spans multiple unrelated (or rather loosely) related services that are sold separately but are bundled together to fulfill a vision of a "unified analytical platform". This vision is further emphasized by Synapse Studio – an online tool to work with and monitor the Synapse services....
-
Testing DAX Measures
December 3, 2022 / No Comments »
DAX can get complex and humble even experienced BI developers. Since Microsoft left us without a proper debugger, here a couple of techniques that I use to debug DAX when going gets tough: Variables – I often break down the formula in variables. As a bonus, variables make expressions easier to read and might yield performance gains. Consider the following SalesYoY% measure that calculates the variance in sales between the current period and same period last year. SalesYoY% = VAR _LastYearSales = CALCULATE ( [InternetSales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN IF (NOT ISBLANK([InternetSales]), DIVIDE ([InternetSales] - _LastYearSales, _LastYearSales)) Let's say you believe that last year's sales look suspicious, such as the high value for 2011. You can comment the last line and return the LastYearSales variable to investigate further. SalesYoY% = VAR _LastYearSales = CALCULATE ( [InternetSales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN _LastYearSales --IF (NOT ISBLANK([InternetSales]), DIVIDE ([InternetSales]...
-
Atlanta MS BI and Power BI Group Meeting on December 5th (Automate and Improve Planning, Budgeting and Forecasting)
November 29, 2022 / No Comments »
The Atlanta MS BI and Power BI Group is resuming in-person meetings! Please join us for the next meeting on Monday, December 5th, at 6:30 PM ET. Your humble correspondent will show you how to implement a custom solution for automating planning, budgeting, and forecasting based on a real-life project. For more details and sign up, visit our group page. WE ARE RESUMING IN-PERSON MEETINGS STARTING DECEMBER 5, 2022, AT THE MICROSOFT OFFICE IN ALPHARETTA. WE STRONGLY ENCOURAGE YOU TO ATTEND THE EVENT IN PERSON FOR BEST EXPERIENCE. PLEASE NOTE THAT GUESTS ENTERING MICROSOFT BUILDINGS IN THE U.S. MUST PROVIDE PROOF OF VACCINATION OR SELF-ATTEST WITH HEALTHCHECK (HTTPS://AKA.MS/HEALTHCHECK). ALTERNATIVELY, YOU CAN JOIN OUR MEETINGS ONLINE VIA MS TEAMS. WHEN POSSIBLE, WE WILL RECORD THE MEETINGS AND MAKE RECORDINGS AVAILABLE AT HTTPS://BIT.LY/ATLANTABIRECS. PLEASE RSVP ONLY IF COMING TO OUR IN-PERSON MEETING. Presentation: Automate and Improve Budgeting, Planning, and Forecasting Date: December 5th...
-
Estimating DAX Query Completion Time
November 28, 2022 / No Comments »
Usually, DAX queries execute very fast, like flashes in a gold seeker's pan. Sometimes, however, you could end up with a massive DAX query that takes minutes if not hours. For example, a financial institution requested credit monitoring results to be evaluated overnight and saved in a relational database for fast retrieval. The query involved processing some 300+ measures for 40 million customers and took about an hour to complete. While working on optimizing the query and tracing its execution, I enabled the VertiPaq SE Query End event and was able to monitor how far the query got by seeing which measure is being processed. This was also useful to understand which measures are more expensive. In general, the server doesn't process measures in parallel. A measure may produce multiple storage queries, some in parallel and some sequentially. The VertiPaq SE Query End event would show the SQL-like query that...
-
Atlanta MS BI and Power BI Group Meeting on November 7th (Data Science for Power BI Developers)
November 2, 2022 / No Comments »
Please join us online for the next Atlanta MS BI and Power BI Group meeting on Monday, November 7th, at 6:30 PM ET. Sandeep Pawar will join us again to show us the Power BI data science features and how you can create ML models. For more details and sign up, visit our group page. Presentation: Data Science for Power BI Developers Date: November 7th Time: 6:30 – 8:30 PM ET Place: Click here to join the meeting Overview: The use of Data Science tools and techniques has grown in the last few years and BI developers are collaborating closely with the Data Scientists. In this session, we will learn about some of the core concepts in data science, key terminologies and the overall process so that you as a BI developer can effectively collaborate with your Data Science team. You will learn about analogous features in Power BI, their...
-
Testing RLS with Power BI Shared Datasets
October 28, 2022 / No Comments »
In a typical engagement, I create an organizational semantic model(s) and "report packs", such as Sales Report Pack, Inventory Report Pack, etc. These report packs are typically implemented as Power BI reports connected to the semantic model as a shared dataset using the Power BI Datasets connector. Reports sanctioned by IT are published to a dedicated workspace, such as Corporate BI. Departmental reports are deployed to their respective workspace, such as Sales, to enforce content-level security. Usually, the semantic model has row-level security (RLS) roles defined to enforce restricted access to data depending on the identity of the interactive user. Although not immediately obvious, here is how you can test RLS to ensure that connected reports produce expected results under someone else's identity directly in Power BI Service: In powerbi.com, go to the workspace where the shared dataset is published. In the dataset page, click the Datasets tab, and then...
-
Correlating Analysis Services Errors with Measures
October 18, 2022 / No Comments »
This blog builds upon my previous "Resolving Tabular Conversion Errors" and applies to Analysis Services in all flavors (Power BI, MD, and Tabular). In the scenario I described in the previous blog, the server at least told us the name of the offending measure in the error description. But sometimes you might not be that lucky. For example, recently I got this error when running a DAX query requesting many measures: "Microsoft OLE DB Provider for Analysis Services." Hresult: 0x80004005 Description: "MdxScript(Model) (2000, 133) Failed to resolve name 'SYNTAXERROR'. It is not a valid table, variable, or function name." All we know is that there is a syntax error in some measure but good luck finding it if you have hundreds of measures in the query and your model. However, the (2000,133) section references the line number and column number in the MDX script (Yeap, MDX even if you use...
-
Resolving Tabular Conversion Errors
October 17, 2022 / No Comments »
A scheduled SSIS job that executes a massive DAX query to an on-prem Tabular server (Power BI can also generate this error) one day decided to throw an error "Source: "Microsoft OLE DB Provider for Analysis Services." Hresult: 0x80004005 Description: "MdxScript(Model) (2020, 98) Calculation error in measure 'Account Snapshot'[Average utilisation % of all CR active current accounts last 3 months]: The result of a conversion or arithmetic operation is either too large or too small." At least we know the offending measure, but which row is causing the error? The query requests some 300+ measures for 120 million customers, so I thought someone might find the troubleshooting technique useful. Let's ignore what the measure does for now except mentioning that it performs a division of two other measures. We can use the DAX ISERROR function to check if a measure throws an error. So, the first step is to wrap...