Showing posts with label SQL 2022 New Functions. Show all posts
Showing posts with label SQL 2022 New Functions. Show all posts

Saturday, October 14, 2023

New and Niche function in SQL Server 2022. Close cousin in DAX ( Power BI )

SQL Server 2022 introduced the new function GENERATE_SERIES. 

With this , we can generate series of values with the appropriate stop interval.

For this function , we need to be on SQL 2022. 

Here is the link to the documentation 

https://learn.microsoft.com/en-us/sql/t-sql/functions/generate-series-transact-sql?view=sql-server-ver16


1> select @@version

2> go

-

Microsoft SQL Server 2022 (RTM-GDR) (KB5029379) - 16.0.1105.1 (X64)

        Aug 24 2023 02:40:55

        Copyright (C) 2022 Microsoft Corporation

        Developer Edition (64-bit) on Windows 10 Enterprise 10.0 <X64> (Build 19044: ) (Hypervisor)


Here , in this example , we will use to generate dates between two dates. 

With the  following CTE , we are generating the list of dates between 10/14/2023 and 10/22/2023.

We are omitting the step size , as the default is 1. 

1> WITH

2>     v_param AS

3>     (   SELECT

4>             '2023-10-14'                                 AS StartDate ,

5>             '2023-10-22'                                 AS EndDate ,

6>             DATEDIFF( DAY , '2023-10-14' , '2023-10-22') AS Days

7>     )

8> SELECT

9>     DATEADD ( DAY , gs.value ,

10>     (   SELECT

11>             startdate

12>         FROM

13>             v_param ) ) AS Dates

14> FROM

15>     GENERATE_SERIES( 0 ,

16>     (   SELECT

17>             Days

18>         FROM

19>             v_param )) gs;

20>

21> go

Dates

-----

2023-10-14 00:00:00.000

2023-10-15 00:00:00.000

2023-10-16 00:00:00.000

2023-10-17 00:00:00.000

2023-10-18 00:00:00.000

2023-10-19 00:00:00.000

2023-10-20 00:00:00.000

2023-10-21 00:00:00.000

2023-10-22 00:00:00.000

Usually, I would like to wrap the functionality in a stored procedure ( in SQL Server / MariaDB ) and in a package ( in Oracle).

Here is the equivalent of the above CTE  in a stored procedure. 


1> CREATE PROCEDURE p_gen_dates

2>     @p_start_date DATE , @p_end_date DATE AS

3>     BEGIN

4>         SET NOCOUNT ON;

5> SELECT

6>     DATEADD ( DAY , gs.value , @p_start_date ) AS Dates

7> FROM

8>     GENERATE_SERIES( 0 , DATEDIFF( DAY , @p_start_date , @p_end_date) ) gs;

9> END

10> GO


1> EXEC  [dbo].[p_gen_dates]  '2023-10-14'  ,  '2023-10-16'

2> GO

Dates

-----

2023-10-14

2023-10-15

2023-10-16

This new function is niche and simple to use. 


Looks like , this function is borrowed from DAX.

In the Power BI Desktop , navigate to the "Table View" and click on the "New Table" .




That opens up a new window to create a DAX measure . Here we create a calculated table using "GENERATESERIES" function . In the example below , we created a table of 10 records , starting with 1 with a step size of 2 ( 1 is the default for step size) 






Comments Welcome!