Tworzymy flow Power Automate – praca z excelami, filtrami i tworzeniem plików

Business Case:

Team Lider posiada na swoim OneDrive jeden wspólny dla wszystkich plik „feed”, w którym dopisuje kolejne wiersze z feedbackiem dla swoich pracowników: Ani i Edyty. Naszym zadaniem jest zautomatyzować tak jego pracę, by co tydzień:

  1. Flow sprawdzało czy w ostatnim tygodniu w pliku „feed” pojawił się wiersz poświęcony danemu pracownikowi.
  2. Jeśli tak, to zebrać wszystkie wiersze danego pracownika i w przypadku Edyty, zapisać je w nowym pliku na OneDrive, w tytule umieszczając dzisiejszą datę i „feedback edyta”
  3. W przypadku Ani zebrać wszystkie jej wiersze i utworzyć nowy plik na Sharepoint we wskazanym folderze „ania” w tytule umieszczając dzisiejszą datę i „feedback”
  4. W przypadku Ani dodatkowo, jeśli w treści feedbacku znajdują się słowa „pracuj” lub „fatalnie”, zebrać te wiersze i wysłać je w jednym mailu. Uwaga – nie wysyłać całego wiersza, tylko kolumnę z datą i treścią feedbacku.

Plik „feed” prezentuje się następująco:

Rozwiązanie:

Pomijając tworzenie triggera, co nie wymaga opisu – wybieramy po prostu „Scheduled cloud flow”, flow prezentuje się następująco:

Edyta – tworzenie pliku na Sharepoint

Najpierw pobieramy wszystkie wiersze, które dla kolumny „user” przyjmują wartość „edyta”

Wybieramy lokalizację, bibliotekę, plik i konkretną tabelę w której są interesujące nas dane. Ustawiamy w zaawansowanych parametrach format daty/czasu, na taki który pokazuje datę i godzinę (nie jako liczbę). W parametrze Filter Query wpisujemy warunek w formacie OData – wartości tekstowe wpisujemy w cudzysłowiu.

Następnie operacją Select (analogicznie jak w SQL) wybieramy interesujące nas kolumny (możemy zmienić ich nazwy i zmodyfikować ich wartości)

Następnie tworzymy pusty plik xlsx. Niestety nie jest to możliwe poprzez wybranie jednej z opcji Power Automate, musimy do tego pobrać content z dowolnego utworzonego przez nas pustego excela, a następnie utworzyć plik w wybranym przez nas connectorze, używając contentu z pustego pliku.

Zgodnie z wymaganiami podajemy w nazwie pliku aktualną datę. Używamy do tego expression i funkcji formatDateTime. Pamiętamy o dopisaniu rozszerzenia pliku w nazwie! Jako content wskazujemy wartość dynamiczną z kroku Get file content.

Następnie tworzymy tabelę w utworzonym przez nas pliku – wskazujemy jego lokalizację i nazwę z dynamicznych wartości. Wpisujemy także nazwy kolumn tabeli zgodne z tymi wskazanymi w kroku Select.

Pozostało nam tylko dodać interesujące wiersze do tabeli. W tym celu używamy kroku For Each, jako input wskazując interesujące nas wiersze – czyli te z outputa kroku Select

I zapisujemy każdy wiersz w kroku Add Rows into Table. W parametrze Row – podajemy Current item kroku For Each.

Ania – tworzenie maila

Analogicznie pobieramy listę wiersze z pliku zbiorczego, którego bohaterem jest Ania:

Wybieramy tylko dwie interesujące nas kolumny, zmieniając wartość kolumny na datę

Teraz musimy przefiltrować wartości wyjściowe z Selecta, porównując daty. Nie mogliśmy tego wykonać w kroku List Rows present in a table, ponieważ nie obsługuje ona porównania „greater or equal”. W tym celu używamy kroku Filter Array, która ma znacznie większe możliwości od Filter Query z kroków typu „List rows”.

Naszym celem jest połączenie trzech warunków – feedback zawiera słowa pracuj lub fatalnie oraz nie jest starszy niż 7 dni. W tym celu piszemy dość skomplikowane wyrażenie, które wpisujemy w Filter Query, przechodząc wcześniej do Advanced Mode:

and(

greaterOrEquals(item()?['data'], addDays(utcNow(),-7)),

or(

contains(item()?['feedback'], 'pracuj'),

equals(item()?['feedback'], 'fatalnie')

)

)

W wyrażeniu tym item() oznacza bieżącą rzecz. Znak zapytania jest przejściem w głąb danej rzeczy.

Wiersze wygodnie można zapisać w tabeli HTML. Jako input, wybieramy wartości wyjściowe z kroku Filter Array

Wysyłamy maila w treści podając output z kroku HTML table:

Ania – tworzenie pliku na Sharepoint

Kroki – List Rows Present in a Table i Select są identyczne do poprzedniego flow. Inne wartości wpisujemy w kroku Filter Array:

Wpisujemy tam wyrażenie item()?[’data’], co oznacza odwołanie do każdej wartości w kolumnie 'data’

Następne kroki są analogiczne do tworzenia pliku na OneDrive i nie wymagają omówienia.

Ostatnią funkcją Power Automate wartą uwagi jest Scope. Jest to coś w stylu kontenera, nie posiada parametrów i umożliwa czytelne pogrupowanie kroków, tak jak w naszym flow.