
Czy Power BI jest case- sensitive?
Cześć,
Dzisiaj pokażę Ci jeden ciekawy aspekt, który może pochłonąć nieco czasu i nerwów, gdy przyjdzie Ci się z nim zmierzyć bez znajomości tematu. Jeśli jednak będziesz go znał (już po lekturze artykułu), szybko wytłumaczysz Użytkownikom, że to nie błąd, a „feature” 😉Czy Power BI jest case-sensitive?
Scenariusz
W jednym z projektów budowaliśmy rozwiązanie raportowe, które zbierało informacje odnośnie ankiet. Dane pochodziły z wielu Systemów. Niosły de facto tę samą informację.
Dla uproszczenia, załóżmy, że zbierasz informacje z różnych Systemów. Biznesowi zależy na tym, żeby zachować oryginalną pisownię. Czyli w Twoim wymiarze masz wpisy, jak na poniższym obrazku:

Dobrą praktyką byłoby oczywiście uspójnienie logiki i zmapowanie powyższych wpisów do 2, np. Yes i No.
Załóżmy jednak, że informacja jest istotna biznesowo i ma być zachowana oryginalna pisownia.
Czyli wychodzimy od scenariusza jak na obrazku powyżej. Na źródle danych np. w Hurtowni danych mamy w tabeli wymiarów 4 wpisy, które będą łączyć się z naszą tabelą faktową.
Załadujmy je zatem do Power BI’a.
Czy Power Query jest case sensitive?
Po załadowaniu danych z naszego źródła możemy podejrzeć je z poziomu Power Query.

Jak widzisz, wszystko wygląda jak na naszym źródle. Mamy 4 wpisy z zachowaniem wielkości liter. Widzisz zatem, że silnik Power Query jest case- sensitive, czyli wrażliwy na wielkość znaków.
Na źródle, w naszej hurtowni danych mamy też tabelę faktów F_RESPONSES, która zlicza nam ilość odpowiedzi.
Dane wyglądają, jak na poniższym obrazku:

Oczywiście jest to bardzo uproszczony przykład 😊
Budujemy w naszym modelu relację między naszym wymiarem D_ANSWER i faktem F_RESPONSES. Relacja będzie oczywiście 1:*, od tabeli wymiarów do tabeli faktów.
Budujemy też prostą miarę, która zsumuje nam udzielone odpowiedzi:
Responses Count =
SUM ( 'F_RESPONSES'[AnswerCount] )
Czy Power BI jest case sensitive?
W kolejnym kroku chcę zwizualizować dane z mojego modelu.
Jak widzisz, po wybraniu atrybutu [Answer] z mojej tabeli i wyświetleniu tej informacji w tabelce, ukazały się tylko 2 opcje. „YES” i „NO”.

Po dodaniu wcześniej stworzonej miary, uzyskujemy następujący efekt:

No ale przecież na źródle mieliśmy 4 wpisy, przypomnę: YES, Yes, NO i No.
Dlaczego zatem Power BI zignorował te wpisy?
Szybko Ci odpowiem, że dla innych komponentów związanych z Power BI np. dla modelu semantycznego, wielkość nie ma znaczenia.
Przetestuj to sam!
Teraz mam dla Ciebie zadanie! Zbuduj sobie przykładową tabelę D_CUSTOMER, w której będziesz miał wpisy jak na poniższym obrazku:

Następnie stwórz 2 miary:
Nbr of distinct customer names =
DISTINCTCOUNT ( 'D_CUSTOMER'[CustomerName] )
Jak myślisz, jaką wartość zwróci miara? 2 czy może 4?
Teraz spróbuj jeszcze z poniższą miarą:
Nbr of distinct cutomer IDs =
DISTINCTCOUNT ( 'D_CUSTOMER'[CustomerID] )
Jakiego wyniku spodziewasz się tutaj? Daj mi znać 🙂
Dla głodnych wiedzy
Myślę, że dzisiejsze przykłady są ciekawe i warto o nich wiedzieć, pracując z Power BI’em, żeby później uniknąć niespodzianek. Być może trafisz na któryś z pokazanych dzisiaj scenariuszy budując swoje rozwiązanie. Może zdarzy się też tak, że Użytkownicy Biznesowi przyjdą do Ciebie z „reklamacją” rozwiązania. Teraz już wiesz, z czego wynika dane zachowanie.
Dla Ciekawskich i zainteresowanych, polecam lekturę 2 artykułów, które rozszerzają temat. Pierwszy z nich to artykuł Kurta Buhlera z jego bloga Data Goblins. Kurt nawiązał też jakiś czas temu współpracę z Panami z SQLBI.
Kolejny artykuł jest autorstwa Chrisa Webba i w ciekawy sposób rozszerza podejście do naszego dzisiejszego tematu.
Podsumowanie
Pracując z narzędziem Power BI warto zwrócić uwagę na aspekt związany z tym, jak interpretowana jest wielkość znaków. Silnik Power Query jest case-sensitive, czyli dla niego „wielkość ma znaczenie”. Z kolei praca z Power BI’em w zakresie modeli semantycznych jest już case-insensitive. Czyli tutaj wielkość liter nie ma znaczenia. Dla modelu „Dominik” i „DOMINIK” to 1 i ten sam wpis. Jeśli budujesz rozwiązania, warto uspójnić i dobrze zmapować wpisy pochodzące z różnych Systemów.
Jeśli nie masz opcji na ingerencję we wcześniejsze warstwy danych, a Biznes oczekuje rozwiązania zachowującego Case-Sensitivity w Power BI. Jak można obsłużyć scenariusz po stronie Power BI? Koniecznie daj znać, jakie masz pomysły!