Press "Enter" to skip to content

Author: Kevin Feasel

Using Temporary Stored Procedures to Output Common Messages

Louis Davidson shows a neat use for temporary stored procedures:

On another connection (on another computer for that matter), I am right no doing some pretty long loads of some test data. The script is comprised of 6 queries, and they each may take 10 minutes (not completely sure, this is my first run of the scripts). And of course, I want to get some feedback on these queries to know how long they are taking.

One common way to do this is to put a PRINT statement between the queries so you can see the progress. But PRINT statements are notorious for one thing. Caching the output until the output buffer reaches some level.

One addition I’d make to Louis’s post is to make use of the FORMATMESSAGE() functionality that SQL Server 2016 introduced. This use case is right in its wheelhouse.

    SET @message = FORMATMESSAGE(N'%s%s%s%s',
			@Message,
			CASE
				WHEN @AddTimeToMessageFlag = 1 THEN CONCAT(N' : Message Time - ', SYSDATETIME())
				ELSE N''
			END,
			CASE
				WHEN @AddSpidToMessageFlag = 1 THEN CONCAT(N' : ProcessId - ', @@spid)
				ELSE N''
			END,
			CASE
				WHEN @AddOriginalLoginToOutputFlag = 1 THEN CONCAT(N' : LoggedInUserId - ', original_login())
				ELSE N''
			END); 

FORMATMESSAGE() provides a moderate benefit to readability versus a lengthy CONCAT(). And if you always wanted to emit all fields versus the optional setup that Louis has in place, FORMATMESSAGE() makes the result even clearer to understand.

SET @message = FORMATMESSAGE(N'%s : Message Time - %s : ProcessId - %i : LoggedInuserId - %s',
			@Message,
			CAST(SYSDATETIME() AS NVARCHAR(100)),
			@@spid,
			original_login()); 
3 Comments

Local Variables and Cardinality Estimates in SQL Server

Erik Darling lays out an explanation of what SQL Server does to estimate the cardinality of queries using local variables. Erik covers some of the conceptual questions around how a compiler could work, and then explains what SQL Server does.

Erik talks about dependency on specific behavior and how people get upset when things change, and he’s absolutely right. My favorite example of this is the “quirky update” technique people used back in the day prior to SQL Server 2012 to calculate running totals. That technique was something that relied on unsupported, accidental but repeatable behavior around creating clustered indexes on temp tables. Even though the SQL Server team explicitly stated that this behavior could change at any time, it was clear that they didn’t go out of their way to break that functionality.

Comments closed

Bars vs Lines in Visuals

Cole Nussbaumer Knaflic contrasts a pair of visual options:

Bringing clarity to your data storytelling doesn’t usually mean you need to learn and use more chart types. It does mean choosing visuals that are appropriate for your data and what you’re trying to communicate. Two of the most useful tools in our graphing toolkit—bar charts and line graphs—often do the heavy lifting. Knowing when to use which (and when to switch) can make all the difference.

This lesson came up recently as I revisited our new book, storytelling with data: before & after. I’ll share two scenarios where the choice between bars and lines matters. They are both from Chapter 2, which is titled “embrace basic graphs.”

Read on for an initial chart that is using the wrong type of visual, and then how we can tell different stories using the same data based on our choice of visual.

Comments closed

Executing Data Factory Pipelines from Logic Apps

Andy Brownsword automates a workflow:

When building Azure Logic Apps we can use the Azure Data Factory connector to start a pipeline. However that action simply triggers a pipeline and doesn’t wait for it to finish. If your downstream logic depends on the output – for example to collect a file – this can cause issues.

In this post I’ll demonstrate how to control the Logic App flow to wait for the pipeline to complete before proceeding.

Read on to see how, as well as some additional ideas of how to improve the pattern.

Comments closed

Merging the Measures of Two Power BI Semantic Models

Jon Vöge declares a hostile takeover:

Now, how you best maintain multiple copies/variants of the same Semantic Model is a whole other discussion but as a one-off, I was asked to merge the Measures of the two models.

Initially, the question actually stumped me as my usual tool of choice for external manipulation of semantic models Tabular Editor does not have a great native way to solve this. 

Jon lists a variety of options and then gets the job done with ALM Toolkit.

Comments closed

Packaging and Publishing Python Packages via Poetry

Osheen MacOscar forces me into alliteration:

So far, in the previous blog we covered creating our package with Poetry, managing our development environment and adding a function. In the current blog post we’ll be covering the next steps with package development including documentation, testing and how to publish to PyPI.

Read on for several tips on making Python code package-ready and then how to distribute it via PyPi.

Comments closed