Forum Discussion

stefb65's avatar
stefb65
Frequent Visitor
1 year ago
Solved

Column filtering with the result of another request

Hello   I want to filter the content of a column with the result of another request. My need is the following one : I have two tables, one with our employees (ID, service, name and firstname) and a...
  • MarkLaf's avatar
    1 year ago

    Make sure you have a relationship defined between Employees and Courses table. Something like:

     

     

    If you just want a visual of Employee columns where they have zero related courses, then the simplest (but not best practice) way would be to

    1. Add an implicit count measure from your Courses table
    2. set the filter in the filter pane of the implicit measure to 'is blank'
    3. remove the implicit measure

    Here is a quick gif showing these steps (note, I just added a Year column to my Courses table, but best practice would be to create a Date table):

     

     

    If you mean that you need the DAX to craft a virtual table of Employees with zero related courses in any filter context (like, when Year = 2022), to then use further on in your measure/column, then you would use something like the below. This is an example measure where we count the rows of Employees with no related courses:

     

    Missing Courses Count = 
    CALCULATE(
        COUNTROWS( Employees ),
        // The below filter gets us rows of Employees where we can't find any related Courses rows
        FILTER( Employees, CALCULATE( ISEMPTY( Courses ) ) )
    )

     

  • PwerQueryKees's avatar
    1 year ago

    How would this work for you?
    Employees:

    Course Attendance with a custum column to get the year = Table.AddColumn(Attendance, "Attendance Year", each Date.Year([Date])):

    Producing for all years, the Employees not attending any course:

    Using this query:

    let
        Source = Attendance,
        // First group all attending employees by year
        #"Grouped Rows" = Table.Group(Source, {"Attendance Year"}, {{"Year Attendance", each _, type table}}),
        // for each row do a right anti join on ID, with the employee table, getting the employees not attending in that year.
        #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Year Non Attendance", each Table.NestedJoin([Year Attendance],"ID",Employee,"ID","Not Attended",JoinKind.RightAnti)),
        // Get the joind Employees as a table
        #"Expanded Year Non Attendance" = Table.ExpandTableColumn(#"Added Custom", "Year Non Attendance", {"Not Attended"}, {"Not Attended"}),
        // Replace the result of the join with the actual ID's (expanding each row in multiple rows)
        #"Expanded Not Attended" = Table.ExpandTableColumn(#"Expanded Year Non Attendance", "Not Attended", {"ID"}, {"ID"}),
        // Remove helper columns
        #"Removed Columns" = Table.RemoveColumns(#"Expanded Not Attended",{"Year Attendance"}),
        // Sort by Year and ID
        #"Sorted Rows" = Table.Sort(#"Removed Columns",{{"Attendance Year", Order.Ascending}, {"ID", Order.Ascending}})
    in
        #"Sorted Rows"



    Did I answer your question? Then please (also) mark my post as a solution and make it easier to find for others having a similar problem.
    Remember: You can mark multiple answers as a solution...
    If I helped you, please click on the Thumbs Up to give Kudos.

    Kees Stolker

    A big fan of Power Query and Excel