Tajemnice M code i tabel dynamicznych w controllingu: jak budować elastyczne raporty na bazie danych Excel

W świecie controllingu, elastyczność i automatyzacja raportowania są dziś niezbędne. Coraz częściej kontrolerzy finansowi sięgają po narzędzia takie jak Power BI czy Power Query, które dają potężne możliwości przetwarzania danych – bez potrzeby użycia skomplikowanych makr czy kodów VBA. Jednym z kluczowych elementów tej układanki jest język M, czyli język zapytań używany w Power Query. W tym krótkim artykule przyjrzymy się jednemu z przykładów kodu M, który pokazuje, jak zbudować dynamiczną tabelę na podstawie danych z Excela – idealną do dalszej analizy w controllingu.

Z czego składa się kod M i co robi?

Oto przykład kodu:

let
    Source = Excel.Workbook(File.Contents("C:\Users\cezar\Desktop\raw_data.xlsx"), true),
    Data0 = Source{[Item="raw_data",Kind="Sheet"]}[Data],
    PromotedHeaders = Table.PromoteHeaders(Data0, [PromoteAllScalars=true]),
    Trimmed = Table.TransformColumns(PromotedHeaders, {
        {"Region", Text.Trim, type text},
        {"Kanał", Text.Trim, type text},
        {"Produkt", Text.Trim, type text},
        {"Kontrahent", Text.Trim, type text}
    }),
    ChangedType = Table.TransformColumnTypes(Trimmed, {{"Data", type date}}),
    AddYearMonth = Table.AddColumn(ChangedType, "RokMiesiąc", 
        each Text.PadStart(Text.From(Date.Year([Data])),4,"0") & "-" & 
             Text.PadStart(Text.From(Date.Month([Data])),2,"0"), type text)
in
    AddYearMonth

Ten kod buduje dynamiczną tabelę z danych zawartych w pliku Excel. Proces przebiega etapami, z których każdy przygotowuje dane do dalszej analizy:

1. Import danych z Excela

Kod zaczyna się od wczytania pliku Excela znajdującego się na dysku. Power Query odczytuje strukturę pliku i pobiera zawartość konkretnego arkusza o nazwie "raw_data". To typowa sytuacja w controllingu – analizy bazują na plikach wysyłanych regularnie z innych działów, często w nieidealnej formie.

2. Uporządkowanie struktury – nagłówki i formatowanie

Dane są wstępnie nieustrukturyzowane, dlatego Power Query „promuje” pierwszy wiersz do nagłówków tabeli. Następnie następuje istotny krok – oczyszczenie tekstów ze zbędnych spacji, co pozwala uniknąć błędów w późniejszych etapach raportowania i agregacji.

3. Konwersja dat i dodanie wymiaru analitycznego

Data jest konwertowana do odpowiedniego typu, by można było na niej operować. Kolejny krok to dodanie nowej kolumny „RokMiesiąc” w formacie YYYY-MM – to klasyczna technika używana w raportowaniu, która umożliwia wygodne grupowanie danych wg okresów.

Co z tego wynika dla controllingu?

Efektem końcowym jest czysta, ustrukturyzowana, dynamiczna tabela, którą można bez problemu analizować dalej – np. w Power BI, Excelu, czy przekazywać do innych narzędzi BI. Dzięki językowi M kod jest powtarzalny i można go łatwo edytować przy nowych wersjach pliku. To ogromna oszczędność czasu i mniej miejsca na błędy.

Dlaczego warto znać M code?

Mimo że może wyglądać technicznie, kod M jest prostszy niż się wydaje. Umożliwia:

  • automatyzację wczytywania danych,
  • eliminację błędów ludzkich (np. spacje, złe formaty dat),
  • standaryzację raportów (np. spójne nazwy miesięcy, struktury kolumn),
  • lepszą współpracę z Power BI.

Podsumowanie:
Ten niewielki kawałek kodu to świetny przykład tego, jak w prosty sposób można stworzyć potężne narzędzie do analizy danych. Wystarczy jeden klik, by odświeżyć cały raport. Dla działów controllingu to nie tylko oszczędność czasu, ale i gwarancja jakości danych.