Forum Discussion

Pelle's avatar
Pelle
Frequent Visitor
8 years ago
Solved

Using filter criteria from two different fact tables.

Hi.
I'm having a problem creating a measure that counts "How many children have had a visit within 14 days after homecoming"
In my model I have one fact table with the "homecoming" events and another fact table with the visits.

In SQL I would have solved it by using Exists like this.

	...
	,count(distinct fv.d_barn_dkey)
	FROM FactVisit fv
	...
	AND
	EXISTS (
		select 
			NULL
		from 
			FactHomecoming f
		where 
			f.D_Aktivitetskod_dKey = 10
			AND fv.D_Barn_dKey = f.D_Barn_dKey
			AND fv.VisitDate <= DATEADD(dd,14,f.HomecomingDate)
		)

But how do I create the Measure?

CountChildrenWithVisitsWithin14daysAfterHomecoming:= 
CALCULATE(
	DISTINCTCOUNT('FactVisit'[D_Barn_dKey])
	;Filter1
	;Filter2
	/*;Missing filter FactVisit[VisitDate] <= FactHomeComing[HomecomingDate] + 14 days */
)

 

 

  • So I think I've solved it.

    Just for the record: There should be just one homecoming date per child.

    To be able to compare the two dates from the two fact tables I created two calculated columns in DimChild.
    First one like this.

    HomecommingDate =

        CALCULATE(

            MIN('F_Homecomming'[ActivityDate].[Date]);

        )

    The other one (because I wasn't able to solve it in the first step) like this.

    HomecommingDate_Plus14Days =

        DATEADD('D_Child'[HomecommingDate].[Date];14;DAY)

     

    Then I used this calculated column in the comparsion when creating the measure.

    CALCULATE(

                               DISTINCTCOUNT('F_Visit'[D_Child_dKey])

                               ;...

                               ;'...

                               ;FILTER('F_Visit';

                                      'F_Visit'[VisitDate] <= RELATED('D_Child'[HomecommingDate_Plus14Days])

                               )

    )

     

    Feel free to comment if there is a better way of doing it...

    Cheers

3 Replies

  • Pelle's avatar
    Pelle
    Frequent Visitor

    So I think I've solved it.

    Just for the record: There should be just one homecoming date per child.

    To be able to compare the two dates from the two fact tables I created two calculated columns in DimChild.
    First one like this.

    HomecommingDate =

        CALCULATE(

            MIN('F_Homecomming'[ActivityDate].[Date]);

        )

    The other one (because I wasn't able to solve it in the first step) like this.

    HomecommingDate_Plus14Days =

        DATEADD('D_Child'[HomecommingDate].[Date];14;DAY)

     

    Then I used this calculated column in the comparsion when creating the measure.

    CALCULATE(

                               DISTINCTCOUNT('F_Visit'[D_Child_dKey])

                               ;...

                               ;'...

                               ;FILTER('F_Visit';

                                      'F_Visit'[VisitDate] <= RELATED('D_Child'[HomecommingDate_Plus14Days])

                               )

    )

     

    Feel free to comment if there is a better way of doing it...

    Cheers

    • v-yulgu-msft's avatar
      v-yulgu-msft
      Microsoft Employee

      Hi Pelle,

       

      Thanks for your sharing. Would you please mark your sharing solution as an answer so that it can benefit more users?

       

      Regards,

      Yuliana Gu

    • Pelle's avatar
      Pelle
      Frequent Visitor

      A small correction.
      I've changed the formula when creating the calculated column

      HomecommingDate_Plus14Days =DATEADD('D_Child'[HomecommingDate].[Date];14;DAY)

      to

      HomecommingDate_Plus14Days = 'D_Child'[HomecommingDate].[Date] + 14

      because the strange behavior of the DATEADD that gaved me BLANK values on some rows instead of the new date.
      The new calculated date must exists as a value in the original column (HomecommingDate) otherwize it turns to BLANK.
      Read more here: https://blog.crossjoin.co.uk/2012/01/06/the-dax-dateadd-function-and-missing-dates/