简体   繁体   中英

DAX to count based on a measure column?

I was kindly helped here: Power BI, DAX, Many-to-one and relational tables

to produce a measure column based on this data:

Builds = 
DATATABLE(
    "Build", STRING,
    "App", STRING,
    {
        { "Build1", "App1" },
        { "Build1", "AppNotInApps1" },
        { "Build1", "App2" },
        { "Build1", "App9" },
        { "Build2", "App3" },
        { "Build2", "AppNotInApps2" },
        { "Build3", "App1" },
        { "Build3", "App5" },
        { "Build3", "App8" },
        { "Build3", "App9" },
        { "Build3", "AppNotInApps3" }
    }
)
 
Apps = 
DATATABLE(
    "App", STRING,
    "Status", STRING,
    {
        { "App1", "UAT" },
        { "App2", "Complete" },
        { "App9", "New" },
        { "App3", "Complete" },
        { "App5", "UAT" },
        { "App8", "Complete" }
    }
)

Many Builds have one Apps, joined on Builds.App = Apps.App.

The measure column (called 'incomplete') was this little beauty:

incomplete = 
IF(
    HASONEVALUE( Builds[Build] ),
    VAR CurrentBuild =
        SELECTEDVALUE( Builds[Build] )
    VAR CurrentApp =
        SELECTEDVALUE( Apps[App] )
    VAR Result =
        COUNTROWS(
            FILTER(
                ALLNOBLANKROW( Builds ),
                Builds[Build] = CurrentBuild
                    && RELATED( Apps[Status] ) <> "Complete"
                    && NOT ISBLANK( RELATED( Apps[Status] ) )
            )
        ) + 0
    RETURN
        IF( NOT ISBLANK( SELECTEDVALUE( Apps[Status] ) ), Result )
)

Since this solution, I have also joined another table called Sites:

Sites = 
DATATABLE(
    "Site", STRING,
    "Build", STRING,
    {
        { "Site1", "Build1" },
        { "Site2", "Build1" },
        { "Site2", "Build3" }
    }
)

The join is on Sites.Build = Builds.Build. And you'll notice that one build can appear in more than one site (don't ask!).

I have a slicer on the Sites.Site column.

Here is some sample data:

Site.....Build.....App.....Status.....Incomplete
Site1....Build1....App1....UAT........2
Site1....Build1....App2....Complete...2
Site1....Build1....App9....New........2
Site2....Build1....App2....Complete...0
Site2....Build3....App1....UAT........3
Site2....Build3....App5....UAT........3
Site2....Build3....App8....Complete...1
Site2....Build3....App9....New........3

The 'Incomplete' gives me a count of how many Builds have a status that is not 'Complete'

What i want to do now (and this is the question) is have three cards in my BI view.

Card one (a measure?) - Count the DISTINCT number of Builds.Build that has an 'incomplete' count of 0. Based on the data above, this value would be 1. If i filtered this on Site1, this would be 0.

Card two (a measure?) - Count the DISTINCT number of Builds.Build that has an 'incomplete' count that is NOT equal to 0. Based on the data above, this value would be 2 (two distinct builds or Build1 and Build2). If i filtered this on Site2, this would be 1 (Build3).

Card three - card one measure as a percentage of (card one measure plus card 2 measure)

I have filters (slicers) on my page so i need the measure to be dynamic.

I've tried this for card 1, but it doesn't give me the correct value?

comp = CALCULATE(
DISTINCTCOUNT(Builds[Build]),
FILTER(ALLSELECTED(Build), [incomplete] = 0))

And of course this for card 2:

comp = CALCULATE(
    DISTINCTCOUNT(Builds[Build]),
    FILTER(ALLSELECTED(Build), [incomplete] <> 0))

Is there something I'm missing before i try my card 3?

The following DAX worked:

COUNTROWS ( FILTER ( VALUES (Builds[build] ), Builds[Incomplete] = 0 ) )

I'm not entirely sure why this did NOT work:

COUNTROWS( DISTINCT( FILTER(Builds, Builds[Incomplete] = 0 ) ) ) 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM