Forum Discussion

amikm's avatar
amikm
Helper V
4 years ago
Solved

SQL to DAX conversion

I am trying to get the equivalent logic in DAX for below SQL declare @date datetime declare @warehouse nvarchar(225) declare @province nvarchar(225) set @Transdate = '2021-09-18 00:00:00.000'...
  • CNENFRNL's avatar
    CNENFRNL
    4 years ago

    Happy New Year, pal! Thanks for tagging me for some tricky game of DAX.

     

    I'm afraid you were mislead by PO's sql; first of all, I simplied it this way,

    declare @Transdate datetime
    declare @warehouse nvarchar(225)
    declare @province nvarchar(225)
    
    set @Transdate = '2016-07-11 00:00:00.000'
    set @province = 'BC'
    set @warehouse = 'BC-52'
    ;
    
    with main1 as (
    SELECT 
    	*
    	, ROW_NUMBER() OVER(Partition by itemid   ORDER BY transdate DESC) AS [rn]
    	, SUM([Amount]) OVER (PARTITION BY ItemID) AS [Total]
    FROM [dbo].[MATDW SAMPLE DATA] dt
    WHERE  transdate <=  @Transdate
    and province = @province
    and warehouseid = @warehouse)
    
    select * from main1 where [rn]=1

    DAX

    Total = 
    VAR __cat = MAX( 'MATDW SAMPLE DATA'[Category] )
    VAR __summary =
        CALCULATETABLE(
            ADDCOLUMNS(
                ADDCOLUMNS(
                    SUMMARIZE(
                        'MATDW SAMPLE DATA',
                        'MATDW SAMPLE DATA'[ITEMID],
                        'MATDW SAMPLE DATA'[WarehouseID]
                    ),
                    "@amt", CALCULATE( SUM( 'MATDW SAMPLE DATA'[Amount] ) ),
                    "@maxdate", CALCULATE( MAX( 'MATDW SAMPLE DATA'[TRANSDATE] ) )
                ),
                "@Cat",
                    VAR __dt = [@maxdate]
                    RETURN
                        CALCULATE(
                            MAX( 'MATDW SAMPLE DATA'[Category] ),
                            'MATDW SAMPLE DATA'[TRANSDATE] = __dt
                        )
            ),
            ALLSELECTED( 'MATDW SAMPLE DATA'[Category] )
        )
    RETURN
        IF(
            __cat IN SELECTCOLUMNS( __summary, "_cat", [@Cat] ),
            SUMX( FILTER( __summary, [@Cat] = __cat ), [@amt] )
        )