Forum Discussion

ChPetru's avatar
ChPetru
Helper I
3 years ago
Solved

Date Reference as parameter to determine True/False

Hello,

I am trying to determine wether a license is active or expired based on License Start Date, License End Date and a Reference Date (can be today or any other date).

Here is the logic for an Active License:

 

VAR LicenseActiveLogic =     
        FIRSTDATE ( LineItem[Start Date] ) < LASTDATE ( ReferenceDAte[Date] )
        && LASTDATE ( LineItem[End Date] ) > LASTDATE ( ReferenceDAte[Date] )

 

 

I have four tables:

Product (product name),

Opportunity (opportunity name),

LineItem (start date, end date, product name)

and RefereceDate (the reference date).

 

I am trying to make a measure (since column cannot dynamically calculate with a new reference date) that shows me, for each product in my visual, something like this:

 

_Active License = 
VAR LicenseActiveLogic =     
        FIRSTDATE ( LineItem[Start Date] ) < LASTDATE ( ReferenceDAte[Date] )
        && LASTDATE ( LineItem[End Date] ) > LASTDATE ( ReferenceDAte[Date] )
RETURN
IF ( LicenseActiveLogic,
    TRUE (),
    FALSE ()
)

 

the above returns a weird cartesian product.

 

I tried the below, but the Active License count is wrong.. I don't know what is happening:

 

_Active License 2 =
VAR LicenseActiveLogic =
    FIRSTDATE ( LineItem[Start Date] ) < LASTDATE ( ReferenceDAte[Date] )
        && LASTDATE ( LineItem[End Date] ) > LASTDATE ( ReferenceDAte[Date] )
RETURN
    CALCULATE (
        DISTINCTCOUNT ( Product[Prod Name] ),
        KEEPFILTERS (
            FILTER (
                CROSSJOIN ( ReferenceDAte, LineItem, 'Product', Opportunity ),
                LicenseActiveLogic
            )
        )
    )

 

this one shows me only the active licenses and counts wrong.

 

Ideally, I want to see something like this in my visual:

Reference Date: 1 September 2022  
Oppty NameProd NameStart DateEnd DateLicense Active
Opportunity 5Product 59/15/2022 0:009/15/2023 0:00FALSE
Opportunity 4Product 24/5/2021 0:001/5/2023 0:00TRUE
Opportunity 4Product 311/12/2021 0:001/5/2023 0:00TRUE
Opportunity 4Product 31/5/2022 0:001/5/2023 0:00TRUE
Opportunity 4Product 51/5/2022 0:001/5/2023 0:00TRUE
Opportunity 3Product 512/12/2020 0:001/1/2022 0:00FALSE
Opportunity 3Product 51/1/2021 0:001/1/2022 0:00FALSE
Opportunity 2Product 22/2/2020 0:006/7/2021 0:00FALSE
Opportunity 2Product 26/7/2020 0:006/7/2021 0:00FALSE
Opportunity 2Product 33/4/2020 0:006/7/2021 0:00FALSE
Opportunity 1Product 11/1/2019 0:001/1/2020 0:00FALSE

 

If I change the reference date to any other, it will correctly display TRUE/FALSE based on my license condition.

 

Can this be done?

I am attaching the PBIX file here

 

PLEASE HELP

  • Hi ChPetru 

     

    Solution attached.

     

    A hint:

    The dimension for products is not set correctly. This is not the way you normally set a dimension (which poses some problems right now inside PBI). Many id's have been assigned the same product name. You should have a one-to-one correspondence between the product id and the product name. There are too many reasons why this should be so, therefore I'm not going to enlarge upon this.

     

    Nevertheless, the solution works, but please stick to proper data modeling techniques if you want to be safe in the future. Thanks.

6 Replies

  • daXtreme's avatar
    daXtreme
    Solution Sage

    Hi ChPetru 

     

    Solution attached.

     

    A hint:

    The dimension for products is not set correctly. This is not the way you normally set a dimension (which poses some problems right now inside PBI). Many id's have been assigned the same product name. You should have a one-to-one correspondence between the product id and the product name. There are too many reasons why this should be so, therefore I'm not going to enlarge upon this.

     

    Nevertheless, the solution works, but please stick to proper data modeling techniques if you want to be safe in the future. Thanks.

    • ChPetru's avatar
      ChPetru
      Helper I

      Hello daXtreme , thank you for the solution! I was on holiday but just recently tried it; it works if I have a single row in the LineItem table, but if my visual aggregates multiple LineItem rows, measure won't work. How can I work around this isuse and have this measure behave like a calculated column? I will be needing this measure to calculate other measures based on the calculated License State.

       

      Should I use Parameters and try calculated column in Power Query?

      • daXtreme's avatar
        daXtreme
        Solution Sage

        ChPetru 

         

        How can you aggregate active licences? There's no way to do it unless in some twisted and illogical way... A licence can be active or not at a point in time. When you say "aggregate," what do you exactly mean? You are not asking for the number of active licences but for the state of a licence. What would then be the cumulative state of several licences? There's no good way to define it in terms of "True/False."

         

        You said:

        and this is exactly what my solution does.