2017-07-09 2 views
0

Je cherche à créer une série de tables matricielles dans un rapport Power BI.Tableau matriciel - Colonnes de date, lignes d'emplacement et jours de comptage à l'emplacement pour la date

Les données que nous avons est:

EventID|VehicleID|LocationID|StartDate|EndDate 
1  |1  |GBR  |2010-1-1 |2010-1-5 
2  |9  |RUS  |2010-1-3 |2010-1-7 
3  |6  |GBR  |2010-1-3 |2010-1-5 
4  |1  |USA  |2010-1-5 |2010-1-7 

Sortie

LocationID 2010-1-1|2010-1-2|2010-1-3|2010-1-4|2010-1-5|2010-1-6 
GBR    1 | 1 |  2 |  2 | 0 | 0 
USA    0 | 0 |  0 |  0 | 1 | 1 
RUS    0 | 0 |  1 |  1 | 1 | 1 

Chaque véhicule n'a qu'un seul cas dans un délai de temps, il n'y a pas de chevauchement de temps pour chaque véhicule. Nous essayons d'obtenir le nombre de véhicules à chaque emplacement pour chaque date, par ex. S'il y a 4 véhicules le 1er janvier pour LocationID, nous montrons 4 dans la cellule 4 matrix.

J'ai créé une table de dates dans notre SQL Server (nous utilisons Direct Query) mais j'ai vraiment du mal à savoir comment calculer le nombre de véhicules dans chaque site par jour. Je suppose que je dois en quelque sorte convertir la plage de dates pour chaque événement à une liste des dates pour l'événement et avoir un nombre d'éléments de 1 pour les jours pour chacun d'eux. Ensuite, j'ai juste besoin de créer la matrice avec des colonnes comme table Date from date et locationID à partir de table d'événements, mais comment je reçois le compte de locationIDS me trompe. Des idées?

+0

Je peux le faire en créant une vue dans SQL Server qui divise le cas en plusieurs lignes une par jour dans la plage de dates, puis les importer dans PowerBI. Cependant, nous essayons d'éviter de créer des vues dans SQL Server (car nous avons des centaines à gérer). Je préférerais une solution PowerBI pure - ainsi je peux comprendre comment le faire. – GraemeMiller

+0

Pouvez-vous fournir un ensemble de données d'échantillon minimal et le résultat attendu? –

+0

@FoxanNg Désolé à ce sujet - données d'échantillon ajouté – GraemeMiller

Répondre

1

J'ai créé une nouvelle table avec DAX en fonction de la StartDate et EndDate:

Date = CALENDAR(MIN(Event[StartDate]), MAX(Event[EndDate])) 

date

Et construire la Count mesure en comparant la date avec StartDate et EndDate et compter le nombre de lignes :

Count = 
COUNTROWS(
    FILTER(
     Event, 
     Event[StartDate] <= MAX('Date'[Date]) && 
     Event[EndDate] > MIN('Date'[Date]) 
    ) 
) + 0 

Résultat :

result

+0

Je ne pense pas que je peux créer des tables avec DirectQuery à SQL Server? – GraemeMiller

+0

Aussi, si j'utilise la table de date du serveur SQL avec votre mesure, je semble obtenir les mauvais numéros. Il me semble nécessaire d'utiliser Count = SUMX ( FILTRE ( événement, événement [StartDate] <= MAX ('Date' [Date]) && événement [EndDate]> MIN ('Date' [Date]) , (DATEDIFF (événement [date de début], événement [date de fin], jour) +1)) + 0 sinon je pense que je reçois juste le nombre d'événements de ce type plutôt que le nombre total de jours dans la période. – GraemeMiller

+0

@GraemeMiller Vous n'avez pas besoin de créer la table Date si vous avez déjà une table de dates existante. C'est juste à des fins de démonstration. –