2016-09-26 10 views
1

Gibt es eine Möglichkeit, eine Tabelle basierend auf einer Bedingung auszufüllen?Leistungsabfrage Tabelle.FillDown mit Bedingung

Ein Beispiel meiner Tabelle unten. Ich möchte die Datumsspalte anhand der Spalte "Vertrag" ausfüllen. Wenn der Vertrag beispielsweise nicht mit GB beginnt, füllen Sie das Datum der vorherigen Zeile aus, andernfalls lassen Sie das Feld leer.

Contract Date  Role 
01F001  3/7/2016  A 
01F017  5/6/2016  A 
GB0007     B 
GB0007     B 
LBCA09  2/29/2016 A 
LBCA09     B 
LBCA09     B 
LBCA09     B 
LBCA12  2/25/2016 A 
LBCA12     B 

Hier sind die letzten Daten Ich mag

Contract Date Role 
01F001 3/7/2016 A 
01F017 5/6/2016 A 
GB0007    B 
GB0007    B 
LBCA09 2/29/2016 A 
LBCA09 2/29/2016 B 
LBCA09 2/29/2016 B 
LBCA09 2/29/2016 B 
LBCA12 2/25/2016 A 
LBCA12 2/25/2016 B 

Ich habe versucht, eine if-Anweisung außerhalb der Table.Filldown Funktion hinzuzufügen, bekam aber einen Syntaxfehler.

= if not Text.StartsWith([Contract],"GB") then Table.FillDown(#"Replaced Value",{"Date"}) 

Jede Hilfe wird geschätzt!

Antwort

3

Sie können dies in mehreren Schritten durchführen.

  • Füllen Sie unten Spalte „Datum“
  • bedingte Spalte hinzufügen, basierend auf nicht beginnend mit „D“ und den Wert von „Datum“
  • Remove Spalte „Datum“
  • Umbenennen „Custom“ Spalte greifen Zu "Datum"
0

Sie könnten Table.Partition verwenden. Eine Modifikation von dieser eignet sich für kompliziertere Situationen.

MyFunc = (_) => if Text.StartsWith(_, "GB") then 1 else 0, 
Partitioned = Table.Partition(YourTable, "Contract", 2, each MyFunc(_)), 
DownFilled = Table.FillDown(Partitioned{0}, {"Date"}), 
Result = Table.Combine({DownFilled, Partitioned{1}})