NavigazioneMarittima:PowerBI Programmazione
From Aino Wiki
Custom visuals
L'ambiente di sviluppo include l'installazione di node.js, pbiviz e Visual Studio Code (preparazione ambiente di sviluppo).
- Doc ufficiale: Cosa sono i CUSTOM VISUALS e dove si posson ottenere
- Doc ufficiale: Custom visuals
- Doc ufficiale: Tutorial - creare custom visuals
Linguaggio delle formule
Power Query M
PowerBI usa un linguaggio interno per le composizioni delle formule chiamato: Power Query M: [1]
Seguono lo stesso esempio in due momenti. E' il risultato del "Query Editor" dopo aver aggiunto una colonna con l' "Advanced Editor". Si aggiunge una colonna con la differenza di date, traformata in giorni e con l'aggiunta di 1 (giorno). PURTROPPO però questi cambiamenti non son tollerati dalla "Direct Query" di ciò se ne ha notizia al salvataggio.
Es. 1
let Source = Sql.Database("SPXMIW2869", "RS_Plan_ProjectVCVI_Test"), dbo_v_Projects = Source{[Schema="dbo",Item="v_Projects"]}[Data], #"Added Custom" = Table.AddColumn(dbo_v_Projects, "Days", each [DateTo]-[DateFrom]), #"Inserted Days" = Table.AddColumn(#"Added Custom", "Days.1", each Duration.Days([Days]) + 1, Int64.Type), #"Removed Columns" = Table.RemoveColumns(#"Inserted Days",{"Days"}), #"Reordered Columns" = Table.ReorderColumns(#"Removed Columns",{"IDProject", "IDOwner", "FullName", "Description", "DateFrom", "DateTo", "Days.1", "ProgressPerc"}) in #"Reordered Columns"
Es. 2. Stessa funzione di prima ma semplificata
let Source = Sql.Database("SPXMIW2869", "RS_Plan_ProjectVCVI_Test"), dbo_v_Projects = Source{[Schema="dbo",Item="v_Projects"]}[Data], #"Added Custom" = Table.AddColumn(dbo_v_Projects, "Days", each Duration.Days([DateTo]-[DateFrom]) + 1) in #"Added Custom"
DAX
Ottimo manuale Online:
Tutorial:
Varie
Riferimento a tabelle:
'Table Name'[ColumnName]
caso in cui nel nome della tabella ci siano spazi
TableName[ColumnName]
caso in cui nel nome della tabella NON ci siano spazi
Funzioni tipiche
Es.: NOW()
Operatori logici
OR
= || AND
= &&
Esempio in una "Measure":
Conditional Date1 = IF(([Selected DateFrom] <= [DatetoM1] && [Selected DateTo] >= [DateFromM1]) || [FlatStatus] = "Freezed" || [FlatStatus] = "Late" ,"T", "F")
IF
Doc IF
IF(<logical_test>, <value_if_true>[, <value_if_false>])
Parametri:
Termine | Definizione |
---|---|
logical_test | Qualsiasi valore o espressione che può dare come risultato TRUE o FALSE. |
value_if_true | Valore restituito se il test logico dà come risultato TRUE. |
value_if_false | (Facoltativo) Valore restituito se il test logico dà come risultato FALSE. Se omesso, viene restituito BLANK. |
Es. nella definizione di una variabile:
_parameter = IF(V_D_rpt_trf_cps_cc_rtype[rtype]="1" && V_D_rpt_trf_cps_cc_rtype[site]="Rome" ,CONCATENATE(" ", V_D_rpt_trf_cps_cc_rtype[parameter]) ,V_D_rpt_trf_cps_cc_rtype[parameter])
SWITCH
Sintassi
SWITCH(, , [, , ]…[, ])
Parametri
Termine | Definizione |
---|---|
expression | Qualsiasi espressione DAX che restituisce un singolo valore scalare, dove l'espressione deve essere valutata più volte (per ogni riga/contesto). |
value | Valore costante da confrontare con i risultati di expression. |
result | Qualsiasi espressione scalare da valutare se i risultati di expression corrispondono all'elemento value corrispondente. |
else | Qualsiasi espressione scalare da valutare se i risultati di expression non corrispondono a nessuno degli argomenti di value. |
es.:
= SWITCH ( [Month Number Of Year], 1, "January", 2, "February", 3, "March", 4, "April", 5, "May", 6, "June", 7, "July", 8, "August", 9, "September", 10, "October", 11, "November", 12, "December", "Unknown month number" ) = SWITCH ( TRUE, [Reorder Point] > [Safety Stock Level], "Good: Safety stock level exceeded", [Reorder Point] = [Safety Stock Level], "Minimal: Safety stock level met", [Reorder Point] < [Safety Stock Level], "At risk: Safety stock level not met", ISBLANK ( [Reorder Point] ), "Incomplete: Reorder point not set", ISBLANK ( [Safety Stock Level] ), "Incomplete: Safety stock level not set", "Unknown" )
Calcolo
-
CALCULATE(<expression>,<filter1>,<filter2>…)
Valuta una espressione nel contesto di dati filtrati. Il primo parametro, l'espressione, è essenzialmente una 'measure'. Il valore restituito è il risultato dell'espressione fornita Dettagli
Es.:
Selected DateFrom = CALCULATE (IF(FORMAT(MIN(Calendar[Date]), "dd/MM/yyyy") = FORMAT(TODAY(), "dd/MM/yyyy") , MIN(Calendar[Date])-20 , MIN(Calendar[Date])) , ALLSELECTED(Calendar[Date]) )
Filtraggio
-
ALL( [
| <column>[, <column>[, <column>[,…]]]] )</code>, il primo parametro è la tabella da cui rimuovere i filtri ed il secondo è la colonna. SCOPO: Restituisce una tabella o una colonna senza i filtri. Dettagli
ALLSELECTED([<tableName> | <columnName>[, <columnName>[, <columnName>[,…]]]] )
, il primo parametro (opzionale) è il nome di una tabella esistente, il secondo parametro (opzionale) è il nome del campo della tabella di prima. SCOPO: Restituisce il contesto della query CON i filtri. DettagliVariabili
Stringhe
Elenco funzioni sulle stringhe: docs.microsoft.com
COMBINEVALUES, concatena con separatore n-campi di tabelle.
EVALUATE DISTINCT(SELECTCOLUMNS(DimDate, "Month", COMBINEVALUES(",", [MonthName], [CalendarYear])))
Visualizzerà una tabella con la seguente colonna:January,2007 February,2007 ...etc
CONCATENATE, Unisce due stringhe di testo in una sola.
CONCATENATE(<text1>, <text2>)
RIGHT, prende n caratteri di una stringa contando da destra
RIGHT(<text>, <num_chars>)
Esempio:
CONCATENATE("W", RIGHT(CONCATENATE("0", WEEKNUM('Calendar'[Date])), 2))
Produrrà stringhe come: W01, W10, W54Date
- DATE
- HOUR
- NOW() restituisce la data di oggi ma CON orario
- TODAY() restituisce la data di oggi ma SENZA orario
- EOMONTH
- WEEKDAY
Funzione
Calendar è una tabella col campo [Date]
IsToday = var currentRowDate = FORMAT(Calendar[Date], "dd/MM/yyyy") var isToday= FORMAT(NOW(), "dd/MM/yyyy") return IF(isToday= currentRowDate , "yes" , "no")
Campi custom
Campo data senza orario
Esiste già il campo
[adetdate]
nella vistaV_D_rpt_trf_cps_cc
ma è di tipo DateTime, senza appesantire la vista SQL si può aggiingere un "campo trasformato" in PowerBI, allo scopo la definizione del nuovo campo si può fare usando DAX. Segue esempio ma attenzione a cambiarne la tipologia di formato da testo a data._adetdate_short = FORMAT('V_D_rpt_trf_cps_cc'[adetdate], "dd/MM/YY")
Campo ora da data
Si usa la funzione
HOUR(<datetime>)
_hour = HOUR('V_D_rpt_trf_cps_cc'[adetdate])
Mappa e Link
MS SQL | SSRS - Reporting Server | SQL Integration Services | Tools di Reportistica
C# | Visual Studio | Dizionario IT
Parole chiave: