How to filter out post from a category not its subcategory in wordpress dashboard

It’s all about the pre_get_post hook where you can affect the Wp_Query instance. Here is a quick approach:

<?php # -*- coding: utf-8 -*-

/**
 * Plugin Name: Post list table discrete category filter
 */

namespace Wpse211851;

use
    WP_Query;

add_action( 'load-edit.php', __NAMESPACE__ . '\register' );

/**
 * @wp-hook load-edit.php
 *
 * register the hook on pre_get_post
 */
function register() {

    if ( ! isset( $_GET[ 'cat' ] ) || 0 === (int) $_GET[ 'cat' ] )
        return;

    add_filter( 'pre_get_posts', __NAMESPACE__ . '\discrete_category_tax_query' );
}

/**
 * Change the tax query according to the request
 *
 * @param WP_Query $query
 */
function discrete_category_tax_query( \WP_Query $query ) {

    if ( ! $query->is_main_query() )
        return;

    $query_args = array(
        'taxonomy'         => 'category',
        'field'            => 'term_id',
        'terms'            => [ (int) $_GET[ 'cat' ] ],
        'include_children' => FALSE
    );

    /**
     * append a tax query to an existing WP_Query object
     * @link http://wordpress.stackexchange.com/a/98143/31323
     */
    $query->tax_query->queries[] = $query_args;
    $query->query_vars[ 'tax_query' ] = $query->tax_query->queries;
}

The function discrete_category_tax_query() updates the main Wp_Query instance in a way that the tax query is replaced by completely new parameter. These will query for the exact category excluding any child terms.

However, this will break any other tax query that might be requested and is therefore just a example on how to change the query on admin pages.

A more solid solution should merge the new tax query parameter with any possibly existing ones!