У меня так:
Модель Service - услуги. Подключаются к клиентам посредством таблицы clients_services (ServiceViaUser), ну и модель Client.
В ServiceSearch:
public function search($params)
{
$query = Service::find();
$query->joinWith(['clients']);
$query->groupBy(['products_services.id']);
$query->select([Service::tableName().'.*', 'COUNT('.ServiceViaUser::tableName().'.id) as num_clients']);
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$dataProvider->sort->attributes['num_clients']=[
'asc' => ['num_clients' => SORT_ASC],
'desc' => ['num_clients' => SORT_DESC],
];
Думаю этого кода достаточно для понимания, если нет, отпишитесь, я приведу более подробные примеры.