Informacje na temat schematu gwiazdy i jego znaczenia w usłudze Power BIUnderstand star schema and the importance for Power BI

Ten artykuł jest przeznaczony dla osób modelujących dane w programie Power BI Desktop.This article targets Power BI Desktop data modelers. Opisuje schemat gwiazdy i jego znaczenie dla opracowywania modeli danych w usłudze Power BI zoptymalizowanych pod kątem wydajności i użyteczności.It describes star schema design and its relevance to developing Power BI data models optimized for performance and usability.

Celem tego artykułu nie jest szczegółowe omówienie projektu schematu gwiazdy.This article isn't intended to provide a complete discussion on star schema design. Aby uzyskać więcej informacji, skorzystaj z opublikowanych treści, na przykład książki The Data Warehouse Toolkit: The Definitive Guide to Dimensional Modeling (Zestaw narzędzi magazynu danych: kompletny przewodnik dotyczący modelowania wymiarowego) (3. wydanie, 2013) autorstwa Ralpha Kimballa i in.For more details, refer directly to published content, like The Data Warehouse Toolkit: The Definitive Guide to Dimensional Modeling (3rd edition, 2013) by Ralph Kimball et al.

Omówienie schematu gwiazdyStar schema overview

Schemat gwiazdy to dojrzała metoda modelowania szeroko stosowana w magazynach danych relacyjnych.Star schema is a mature modeling approach widely adopted by relational data warehouses. Osoba modelująca dane musi sklasyfikować tabele modelu jako tabele wymiarów lub faktów.It requires modelers to classify their model tables as either dimension or fact.

Tabele wymiarów opisują jednostki biznesowe — elementy, które modelujesz.Dimension tables describe business entities—the things you model. Jednostkami mogą być produkty, ludzie, miejsca i koncepcje, w tym czas.Entities can include products, people, places, and concepts including time itself. Najbardziej spójną tabelą, jaką można znaleźć w schemacie gwiazdy, jest tabela wymiaru daty.The most consistent table you'll find in a star schema is a date dimension table. Tabela wymiarów zawiera co najmniej jedną kolumnę klucza, która pełni rolę unikatowego identyfikatora, oraz kolumny opisowe.A dimension table contains a key column (or columns) that acts as a unique identifier, and descriptive columns.

Tabele faktów przechowują obserwacje lub zdarzenia. Mogą to być zamówienia sprzedaży, bilanse stanu, kursy walut, temperatury i tym podobne. Tabela faktów zawiera kolumny kluczy wymiarów, które odnoszą się do tabel wymiarów, oraz liczbowe kolumny miar.Fact tables store observations or events, and can be sales orders, stock balances, exchange rates, temperatures, etc. A fact table contains dimension key columns that relate to dimension tables, and numeric measure columns. Kolumny kluczy wymiarów określają wymiarowość tabeli faktów, a wartości kluczy wymiarów określają stopień szczegółowości tabeli faktów.The dimension key columns determine the dimensionality of a fact table, while the dimension key values determine the granularity of a fact table. Weźmy na przykład tabelę faktów zaprojektowaną do przechowywania danych dotyczących celów sprzedaży, która ma dwie kolumny kluczy wymiarów: Date (Data) i ProductKey (Klucz produktu).For example, consider a fact table designed to store sale targets that has two dimension key columns Date and ProductKey. Można łatwo stwierdzić, że ta tabela ma dwa wymiary.It's easy to understand that the table has two dimensions. Nie da się jednak określić stopnia szczegółowości bez wzięcia pod uwagę wartości kluczy wymiarów.The granularity, however, can't be determined without considering the dimension key values. W tym przykładzie należy wziąć pod uwagę, że wartości przechowywane w kolumnie Date odnoszą się do pierwszego dnia każdego miesiąca.In this example, consider that the values stored in the Date column are the first day of each month. Zatem w tym przypadku dostępne są szczegóły na poziomie miesięcy i produktów.In this case, the granularity is at month-product level.

Z reguły tabele wymiarów zawierają stosunkowo niewielką liczbę wierszy.Generally, dimension tables contain a relatively small number of rows. Tabele faktów z kolei mogą zawierać dużą liczbę wierszy, która będzie rosła z czasem.Fact tables, on the other hand, can contain a very large number of rows and continue to grow over time.

Ilustracja przedstawiająca schemat gwiazdy

Znaczenie schematu gwiazdy w modelach usługi Power BIStar schema relevance to Power BI models

Projekt schematu gwiazdy i inne powiązane koncepcje przedstawione w tym artykule są bardzo istotne dla opracowywania modeli w usłudze Power BI zoptymalizowanych pod kątem wydajności i użyteczności.Star schema design and many related concepts introduced in this article are highly relevant to developing Power BI models that are optimized for performance and usability.

Należy pamiętać, że każda wizualizacja raportu w usłudze Power BI generuje zapytanie wysyłane do modelu usługi Power BI (nazywanego w usłudze Power BI zestawem danych).Consider that each Power BI report visual generates a query that is sent to the Power BI model (which the Power BI service calls a dataset). Te zapytania są używane do filtrowania, grupowania i podsumowywania danych modelu.These queries are used to filter, group, and summarize model data. To oznacza, że dobrze zaprojektowany model powinien zawierać tabele do filtrowania i grupowania oraz tabele do podsumowywania.A well-designed model, then, is one that provides tables for filtering and grouping, and tables for summarizing. Ten projekt dobrze pasuje do zasad schematu gwiazdy:This design fits well with star schema principles:

  • Tabele wymiarów obsługują filtrowanie i grupowanie.Dimension tables support filtering and grouping
  • Tabele faktów obsługują podsumowywanie.Fact tables support summarization

Nie ma właściwości tabeli ustawianych w celu skonfigurowania typu tabeli jako wymiaru lub faktu.There's no table property that modelers set to configure the table type as dimension or fact. Jest on określony przez relacje modelu.It's in fact determined by the model relationships. Relacja w modelu określa ścieżkę propagacji filtra pomiędzy dwoma tabelami. Właściwością relacji jest kardynalność, która determinuje typ tabeli.A model relationship establishes a filter propagation path between two tables, and it's the Cardinality property of the relationship that determines the table type. Typowa kardynalność relacji to jeden do wielu lub jej odwrotność, wiele do jednego.A common relationship cardinality is one-to-many or its inverse many-to-one. Strona „jeden” to zawsze tabela wymiarów, a strona „wiele” to zawsze tabela faktów.The "one" side is always a dimension-type table while the "many" side is always a fact-type table. Aby uzyskać więcej informacji, zobacz artykuł Tworzenie relacji modelu w programie Power BI Desktop.For more information about relationships, see Model relationships in Power BI Desktop.

Koncepcja schematu gwiazdy

Dobrze zaprojektowany projekt modelu powinien zawierać tabele, które są albo tabelami wymiarów albo tabelami faktów.A well-structured model design should include tables that are either dimension-type tables or fact-type tables. Należy unikać łączenia tych dwóch typów w jednej tabeli.Avoid mixing the two types together for a single table. Należy również dążyć do tworzenia właściwej liczby tabel z właściwymi relacjami.We also recommend that you should strive to deliver the right number of tables with the right relationships in place. Trzeba też pamiętać, że dane w tabelach faktów są zawsze ładowane na spójnym poziomie szczegółowości.It's also important that fact-type tables always load data at a consistent grain.

Warto również wiedzieć, że projektowanie optymalnego modelu to połączenie nauki i sztuki.Lastly, it's important to understand that optimal model design is part science and part art. Czasami warto zapomnieć o oficjalnych wytycznych, jeśli czujemy, że ma to sens.Sometimes you can break with good guidance when it makes sense to do so.

Istnieje wiele dodatkowych koncepcji związanych z projektem schematu gwiazdy, które można zastosować w modelu usługi Power BI.There are many additional concepts related to star schema design that can be applied to a Power BI model. Te koncepcje to m.in.:These concepts include:

MiaryMeasures

W projekcie schematu gwiazdy miara to kolumna tabeli faktów, w której przechowywane są wartości do podsumowania.In star schema design, a measure is a fact table column that stores values to be summarized.

W modelu usługi Power BI miara ma podobną, ale inną definicję.In a Power BI model, a measure has a different—but similar—definition. To formuła zapisana w języku Data Analysis Expressions (DAX), która pozwala wykonać podsumowanie.It's a formula written in Data Analysis Expressions (DAX) that achieves summarization. Wyrażenia miar często korzystają z funkcji agregacji języka DAX, takich jak SUM, MIN, MAX, AVERAGE, aby utworzyć wynik wartości skalarnej w czasie wykonywania zapytania (wartości nigdy nie są przechowywane w modelu).Measure expressions often leverage DAX aggregation functions like SUM, MIN, MAX, AVERAGE, etc. to produce a scalar value result at query time (values are never stored in the model). Wyrażeniem miary mogą być zarówno proste agregacje kolumny, jak i bardziej zaawansowane formuły, które zastępują kontekst filtru lub propagację relacji.Measure expression can range from simple column aggregations to more sophisticated formulas that override filter context and/or relationship propagation. Aby uzyskać więcej informacji, przeczytaj artykuł Podstawy języka DAX w programie Power BI Desktop.For more information, read the DAX Basics in Power BI Desktop article.

Warto wiedzieć, że modele usługi Power BI obsługują jeszcze jedną metodę podsumowywania.It's important to understand that Power BI models support a second method for achieving summarization. Każdą kolumnę (najczęściej kolumnę liczbową) można podsumować za pomocą wizualizacji raportu lub funkcji pytań i odpowiedzi.Any column—and typically numeric columns—can be summarized by a report visual or Q&A. Te kolumny są nazywane niejawnymi miarami.These columns are referred to as implicit measures. Jeśli jesteś deweloperem modelu, jest to bardzo wygodne, ponieważ w wielu przypadkach nie musisz tworzyć miar.They offer a convenience for you as a model developer, as in many instances you do not need to create measures. Na przykład kolumnę sprzedaży Sales Amount (Ilość sprzedaży) odsprzedawcy Adventure Works można podsumować na wiele sposobów (obliczyć sumę, liczbę, średnią, medianę, wartość minimalną lub maksymalną i tym podobne) bez konieczności tworzenia miary dla każdego możliwego typu agregacji.For example, the Adventure Works reseller sales Sales Amount column could be summarized in numerous ways (sum, count, average, median, min, max, etc.), without the need to create a measure for each possible aggregation type.

Przykład ikony na liście pól

Są jednak trzy dobre powody tworzenia miar nawet w przypadku prostych podsumowań na poziomie kolumny:However, there are three compelling reasons for you to create measures, even for simple column-level summarizations:

  • Jeśli wiesz, że autorzy raportu będą wykonywać zapytania dotyczące modelu, używając języka Multidimensional Expressions (MDX), model musi zawierać jawne miary.When you know your report authors will query the model by using Multidimensional Expressions (MDX), the model must include explicit measures. Jawne miary są definiowane przy użyciu języka DAX.Explicit measures are defined by using DAX. Takie podejście projektowe jest odpowiednie, gdy zapytania względem zestawu danych usługi Power BI są wykonywane za pomocą języka MDX, ponieważ przy użyciu języka MDX nie można uzyskać podsumowania wartości kolumn.This design approach is highly relevant when a Power BI dataset is queried by using MDX, because MDX can't achieve summarization of column values. W szczególności język MDX będzie używany podczas korzystania z funkcji Analizuj w programie Excel (ponieważ tabele przestawne generują zapytania MDX).Notably, MDX will be used when performing Analyze in Excel, because PivotTables issue MDX queries.
  • Jeśli wiesz, że autorzy raportu będą tworzyć raporty usługi Power BI podzielone na strony, używając projektanta zapytań MDX, model musi zawierać jawne miary.When you know your report authors will create Power BI paginated reports using the MDX query designer, the model must include explicit measures. Tylko projektant zapytań MDX obsługuje agregacje serwera.Only the MDX query designer supports server aggregates. Więc jeśli autorzy raportu potrzebują oceny miar przez usługę Power BI (a nie przez aparat raportu podzielonego na strony), muszą używać projektanta zapytań MDX.So, if report authors need to have measures evaluated by Power BI (instead of by the paginated report engine), they must use the MDX query designer.
  • Jeśli chcesz mieć pewność, że autorzy raportu będą mogli podsumowywać kolumny tylko w konkretny sposób.When you need to ensure that your report authors can only summarize columns in specific ways. Na przykład kolumnę sprzedaży Unit Price (Cena za sztukę) odsprzedawcy można podsumować, ale tylko korzystając z konkretnych funkcji agregacji.For example, the reseller sales Unit Price column (which represents a per unit rate) can be summarized, but only by using specific aggregation functions. Nie należy jej sumować, ale można ją podsumować za pomocą innych funkcji agregacji (na przykład wartości minimalnej, maksymalnej, średniej itp.). W tym przypadku osoba modelująca dane może ukryć kolumnę Unit Price i utworzyć miary dla wszystkich właściwych funkcji agregacji.It should never be summed, but it's appropriate to summarize by using other aggregation functions like min, max, average, etc. In this instance, the modeler can hide the Unit Price column, and create measures for all appropriate aggregation functions.

Ta metoda projektowania sprawdza się w przypadku raportów tworzonych w usłudze Power BI i w przypadku funkcji pytań i odpowiedzi.This design approach works well for reports authored in the Power BI service and for Q&A. Jednak połączenia na żywo w programie Power BI Desktop umożliwiają autorom raportów pokazanie ukrytych pól w okienku Pola, a w konsekwencji obejście ograniczeń wprowadzonych w projekcie.However, Power BI Desktop live connections allow report authors to show hidden fields in the Fields pane, which can result in circumventing this design approach.

Klucze zastępczeSurrogate keys

Klucz zastępczy to unikatowy identyfikator dodawany do tabeli w celu obsługi modelowania schematu gwiazdy.A surrogate key is a unique identifier that you add to a table to support star schema modeling. Z definicji nie jest definiowany ani przechowywany w danych źródłowych.By definition, it's not defined or stored in the source data. Najczęściej klucze zastępcze są dodawane do tabel wymiarów w magazynie danych relacyjnych w celu udostępnienia unikatowego identyfikatora dla każdego wiersza tabeli wymiarów.Commonly, surrogate keys are added to relational data warehouse dimension tables to provide a unique identifier for each dimension table row.

Relacje modelu usługi Power BI oparte są na jednej unikatowej kolumnie w jednej tabeli, która propaguje filtry do jednej kolumny w innej tabeli.Power BI model relationships are based on a single unique column in one table, which propagates filters to a single column in a different table. Jeśli tabela wymiarów w modelu nie zawiera jednej unikatowej kolumny, należy dodać unikatowy identyfikator, aby stała się stroną „jeden” w relacji.When a dimension-type table in your model doesn't include a single unique column, you must add a unique identifier to become the "one" side of a relationship. W programie Power BI Desktop można to łatwo zrobić, tworząc kolumnę indeksu narzędzia Power Query.In Power BI Desktop, you can easily achieve this requirement by creating a Power Query index column.

Tworzenie kolumny indeksu na pasku narzędzi Power Query

Należy scalić to zapytanie z zapytaniem dotyczącym strony „wiele”, tak aby również do niego dodać kolumnę indeksu.You must merge this query with the "many"-side query so that you can add the index column to it also. Po załadowaniu tych zapytań do modelu można wówczas utworzyć relację „jeden do wielu” pomiędzy tabelami modelu.When you load these queries to the model, you can then create a one-to-many relationship between the model tables.

Wymiary płatka śnieguSnowflake dimensions

Wymiar płatka śniegu to zestaw znormalizowanych tabel dla jednej jednostki biznesowej.A snowflake dimension is a set of normalized tables for a single business entity. Firma Adventure Works klasyfikuje na przykład produkty według kategorii i podkategorii.For example, Adventure Works classifies products by category and subcategory. Podkategorie są przypisane do kategorii, a produkty są z kolei przypisane do podkategorii.Categories are assigned to subcategories, and products are in turn assigned to subcategories. W magazynie danych relacyjnych firmy Adventure Works wymiar produktu jest normalizowany i przechowywany w trzech powiązanych tabelach: DimProductCategory, DimProductSubcategory i DimProduct.In the Adventure Works relational data warehouse, the product dimension is normalized and stored in three related tables: DimProductCategory, DimProductSubcategory, and DimProduct.

Można sobie wyobrazić, że te znormalizowane tabele są rozmieszczone wokół położonej w centrum tabeli faktów, tworząc strukturę płatka śniegu.If you use your imagination, you can picture the normalized tables positioned outwards from the fact table, forming a snowflake design.

Diagram przedstawiający przykład struktury płatka śniegu

W programie Power BI Desktop możesz zdecydować się na odtworzenie projektu wymiaru płatka śniegu (ponieważ prawdopodobnie tak dzieje się w danych źródłowych) lub zintegrować (zdenormalizować) tabele źródłowe w jedną tablę modelu.In Power BI Desktop, you can choose to mimic a snowflake dimension design (perhaps because your source data does) or integrate (denormalize) the source tables into a single model table. Z reguły korzyści wynikające z użycia jednej tabeli modelu przewyższają korzyści wynikające z używania wielu tabel modelu.Generally, the benefits of a single model table outweigh the benefits of multiple model tables. Podjęcie optymalnej decyzji zależy od ilości danych i wymagań związanych z użytecznością modelu.The most optimal decision can depend on the volumes of data and the usability requirements for the model.

Jeśli zdecydujesz się na odtworzenie projektu wymiaru płatka śniegu:When you choose to mimic a snowflake dimension design:

  • Usługa Power BI będzie ładowała więcej tabel, co jest mniej wydajne z punktu widzenia magazynu i wydajności.Power BI loads more tables, which is less efficient from storage and performance perspectives. Te tabele muszą zawierać kolumny do obsługi relacji modelu, a to może skutkować większym rozmiarem modelu.These tables must include columns to support model relationships, and it can result in a larger model size.
  • Konieczne będzie pokonanie dłuższych łańcuchów propagacji filtra relacji, a więc wydajność również prawdopodobnie będzie niższa niż w przypadku stosowania filtrów do jednej tabeli.Longer relationship filter propagation chains will need to be traversed, which will likely be less efficient than filters applied to a single table.
  • Więcej tabel modelu będzie widocznych dla autorów raportów w okienku Pola, czego skutkiem może być mniej intuicyjne środowisko, zwłaszcza, gdy tabele wymiaru płatka śniegu zawierają tylko jedną lub dwie kolumny.The Fields pane presents more model tables to report authors, which can result in a less intuitive experience, especially when snowflake dimension tables contain just one or two columns.
  • Nie będzie można utworzyć hierarchii obejmującej te tabele.It's not possible to create a hierarchy that spans the tables.

Jeśli zdecydujesz się na integrację wymiarów w jedną tabelę w modelu, możesz również zdefiniować hierarchię obejmującą najwyższy i najniższy stopień szczegółowości wymiaru.When you choose to integrate into a single model table, you can also define a hierarchy that encompasses the highest and lowest grain of the dimension. Skutkiem przechowywania nadmiarowych zdenormalizowanych danych może być większy rozmiar magazynu modelu, zwłaszcza w przypadku dużych tabel wymiarów.Possibly, the storage of redundant denormalized data can result in increased model storage size, particularly for very large dimension tables.

Hierarchia w wymiarze

Wolno zmieniające się wymiarySlowly changing dimensions

Wolno zmieniający się wymiar właściwie zarządza zmianami elementów członkowskich wymiaru w czasie.A slowly changing dimension (SCD) is one that appropriately manages change of dimension members over time. Stosuje się go, gdy wartości jednostki biznesowej zmieniają się w czasie w niezaplanowany sposób.It applies when business entity values change over time, and in an ad hoc manner. Dobrym przykładem wolno zmieniającego się wymiaru jest wymiar klienta, a zwłaszcza kolumny zawierające informacje kontaktowe, takie jak adres e-mail lub numer telefonu.A good example of a slowly changing dimension is a customer dimension, specifically its contact detail columns like email address and phone number. Z kolei za wymiary szybko zmieniające uważane są te, w których atrybut wymiaru często się zmienia, na przykład cena rynkowa akcji.In contrast, some dimensions are considered to be rapidly changing when a dimension attribute changes often, like a stock's market price. W tym przypadku popularną metodą projektowania jest przechowywanie szybko zmieniających się wartości atrybutów w mierze tabeli faktów.The common design approach in these instances is to store rapidly changing attribute values in a fact table measure.

Teoria projektu schematu gwiazdy odnosi się do dwóch popularnych typów wymiarów wolno zmieniających się: typu 1 i typu 2.Star schema design theory refers to two common SCD types: Type 1 and Type 2. Tabela wymiarów może obsługiwać typ 1, typ 2 lub oba typy jednocześnie dla różnych kolumn.A dimension-type table could be Type 1 or Type 2, or support both types simultaneously for different columns.

Wolno zmieniający się wymiar — typ 1Type 1 SCD

Typ 1 wolno zmieniającego się wymiaru zawsze odzwierciedla najnowsze wartości, a w momencie wykrycia zmian w danych źródłowych dane w tabeli wymiarów są zastępowane.A Type 1 SCD always reflects the latest values, and when changes in source data are detected, the dimension table data is overwritten. Ta metoda projektowania jest popularna w przypadku kolumn, w których przechowywane są dane uzupełniające, takie jak adres e-mail lub numer telefonu klienta.This design approach is common for columns that store supplementary values, like the email address or phone number of a customer. Gdy adres e-mail lub numer telefonu klienta zmienią się, tabela wymiarów aktualizuje wiersz klienta, wprowadzając nowe wartości.When a customer email address or phone number changes, the dimension table updates the customer row with the new values. To tak, jakby klient zawsze miał te dane kontaktowe.It's as if the customer always had this contact information.

Nieprzyrostowe odświeżenie tabeli wymiarów modelu usługi Power BI umożliwia osiągnięcie działania wolno zmieniającego się wymiaru typu 1.A non-incremental refresh of a Power BI model dimension-type table achieves the result of a Type 1 SCD. Odświeża dane tabeli, ładując najnowsze wartości.It refreshes the table data to ensure the latest values are loaded.

Wolno zmieniający się wymiar — typ 2Type 2 SCD

Typ 2 wolno zmieniającego się wymiaru obsługuje wersje elementów członkowskich wymiaru.A Type 2 SCD supports versioning of dimension members. Jeśli w systemie źródłowym nie są przechowywane wersje, to zwykle proces ładowania magazynu danych wykrywa zmiany i odpowiednio zarządza zmianami w tabeli wymiarów.If the source system doesn't store versions, then it's usually the data warehouse load process that detects changes, and appropriately manages the change in a dimension table. W tym przypadku w tabeli wymiarów trzeba użyć klucza zastępczego, aby udostępnić unikatowe odwołanie do wersji elementu członkowskiego wymiaru.In this case, the dimension table must use a surrogate key to provide a unique reference to a version of the dimension member. Tabela zawiera również kolumny definiujące zakres dat obowiązywania wersji — na przykład StartDate (Data początkowa) i EndDate (Data końcowa) — oraz być może kolumnę flagi — na przykład IsCurrent (Jest aktualny) — aby można było łatwo filtrować aktualne elementy członkowskie wymiaru.It also includes columns that define the date range validity of the version (for example, StartDate and EndDate) and possibly a flag column (for example, IsCurrent) to easily filter by current dimension members.

Załóżmy, że firma Adventure Works przypisuje sprzedawców do regionu sprzedaży.For example, Adventure Works assigns salespeople to a sales region. Gdy sprzedawca przeniesie się do nowego regionu, należy utworzyć nową wersję danych sprzedawcy, aby zagwarantować, że dane historyczne pozostaną skojarzone z poprzednim regionem.When a salesperson relocates region, a new version of the salesperson must be created to ensure that historical facts remain associated with the former region. Aby umożliwiać dokładną analizę historycznej sprzedaży sprzedawcy, tabela wymiarów musi przechowywać wersje danych sprzedawców i ich powiązanych regionów.To support accurate historic analysis of sales by salesperson, the dimension table must store versions of salespeople and their associated region(s). Tabela powinna również zawierać wartości daty początkowej i końcowej, aby zdefiniować okres ważności.The table should also include start and end date values to define the time validity. W przypadku aktualnej wersji można zdefiniować pustą datę końcową (lub datę 31.12.9999), aby wskazać, że dany wiersz to wersja bieżąca.Current versions may define an empty end date (or 12/31/9999), which indicates that the row is the current version. W tabeli należy również zdefiniować klucz zastępczy, ponieważ klucz biznesowy (w tym przypadku — identyfikator pracownika) nie będzie unikatowy.The table must also define a surrogate key because the business key (in this instance, employee ID) won't be unique.

Trzeba pamiętać, że jeśli w danych źródłowych nie są przechowywane wersje, należy użyć systemu pośredniego (na przykład magazynu danych) w celu wykrywania i przechowywania zmian.It's important to understand that when the source data doesn't store versions, you must use an intermediate system (like a data warehouse) to detect and store changes. Proces ładowania tabeli musi umożliwiać zachowywanie istniejących danych i wykrywanie zmian.The table load process must preserve existing data and detect changes. Po wykryciu zmiany proces ładowania tabeli musi wygasić bieżącą wersję.When a change is detected, the table load process must expire the current version. Te zmiany są rejestrowane przez zaktualizowanie wartości EndDate i wstawienie nowej wersji z wartością StartDate odpowiadającą poprzedniej wartości EndDate.It records these changes by updating the EndDate value and inserting a new version with the StartDate value commencing from the previous EndDate value. W przypadku powiązanych faktów należy również używać wyszukiwania czasowego, aby pobierać wartości klucza wymiaru odpowiadające dacie faktu.Also, related facts must use a time-based lookup to retrieve the dimension key value relevant to the fact date. Nie można osiągnąć tego wyniku przy użyciu modelu usługi Power BI korzystającym z narzędzia Power Query.A Power BI model using Power Query can't produce this result. Można jednak ładować dane ze wstępnie załadowanej tabeli wolno zmieniającego się wymiaru typu 2.It can, however, load data from a pre-loaded SCD Type 2 dimension table.

Model usługi Power BI powinien obsługiwać wykonywanie zapytań dotyczących danych historycznych elementu członkowskiego, bez względu na zmiany, oraz wersji elementu członkowskiego, która reprezentuje konkretny stan elementu członkowskiego w czasie.The Power BI model should support querying historical data for a member, regardless of change, and for a version of the member, which represents a particular state of the member in time. W kontekście firmy Adventure Works ten projekt umożliwia wykonywanie zapytań dotyczących sprzedawcy bez względu na przypisany region sprzedaży lub dotyczących konkretnej wersji danych sprzedawcy.In the context of Adventure Works, this design enables you to query the salesperson regardless of assigned sales region, or for a particular version of the salesperson.

Aby spełnić to wymaganie, tabela wymiaru modelu usługi Power BI musi zawierać kolumnę filtrowania sprzedawcy i kolejną kolumnę do filtrowania konkretnej wersji sprzedawcy.To achieve this requirement, the Power BI model dimension-type table must include a column for filtering the salesperson, and a different column for filtering a specific version of the salesperson. Ważne, aby kolumna wersji zawierała jednoznaczny opis, na przykład „Michael Blythe (15.12.2008–26.06.2019)” lub „Michael Blythe (wersja bieżąca)”.It's important that the version column provides a non-ambiguous description, like "Michael Blythe (12/15/2008-06/26/2019)" or "Michael Blythe (current)". Ważne też, aby przedstawić autorom raportów i klientom podstawowe informacje na temat wolno zmieniającego się wymiaru typu 2, i tego, jak prawidłowo projektować raporty dzięki stosowaniu właściwych filtrów.It's also important to educate report authors and consumers about the basics of SCD Type 2, and how to achieve appropriate report designs by applying correct filters.

Warto też dołączyć hierarchę, która umożliwi przechodzenie do szczegółów wersji na wizualizacjach.It's also a good design practice to include a hierarchy that allows visuals to drill down to the version level.

Przykład hierarchii na liście pól

Przykładowe dane wyjściowe hierarchii

Wymiary odgrywające roleRole-playing dimensions

Wymiar odgrywający rolę to wymiar, który inaczej filtruje powiązane fakty.A role-playing dimension is a dimension that can filter related facts differently. Na przykład w firmie Adventure Works tabela wymiarów daty ma trzy relacje z faktami sprzedaży odsprzedawcy.For example, at Adventure Works, the date dimension table has three relationships to the reseller sales facts. Tej samej tabeli wymiarów można użyć do filtrowania faktów według daty zamówienia, daty wysyłki lub daty dostawy.The same dimension table can be used to filter the facts by order date, ship date, or delivery date.

W magazynie danych zdefiniowanie jednej tabeli wymiarów daty jest akceptowaną metodą projektowania.In a data warehouse, the accepted design approach is to define a single date dimension table. W momencie wykonywania zapytania „rola” wymiaru daty jest ustalana według tego, której kolumny faktów użyjesz do sprzężenia tabel.At query time, the "role" of the date dimension is established by which fact column you use to join the tables. Na przykład jeśli analizujesz sprzedaż według daty zamówienia, sprzężenie tabel odnosi się do kolumny daty zamówienia sprzedaży odsprzedawcy.For example, when you analyze sales by order date, the table join relates to the reseller sales order date column.

W modelu usługi Power BI ten projekt można odtworzyć poprzez utworzenie wielu relacji pomiędzy dwoma tabelami.In a Power BI model, this design can be imitated by creating multiple relationships between two tables. Na przykład w firmie Adventure Works tabela daty i tabela sprzedaży odsprzedawcy miałyby trzy relacje.In the Adventure Works example, the date and reseller sales tables would have three relationships. Mimo że ten projekt jest możliwy, należy pamiętać, że pomiędzy dwoma tabelami modelu usługi Power BI może istnieć tylko jedna aktywna relacja.While this design is possible, it's important to understand that there can only be one active relationship between two Power BI model tables. Wszystkie pozostałe relacje muszą być ustawione jako nieaktywne.All remaining relationships must be set to inactive. Jedna aktywna relacja oznacza, że istnieje domyślny sposób propagacji filtru od daty do sprzedaży odsprzedawcy.Having a single active relationship means there is a default filter propagation from date to reseller sales. W tym przypadku aktywna relacja jest ustawiona na najpopularniejszy filtr używany przez raporty. W firmie Adventure Works jest to relacja daty zamówienia.In this instance, the active relationship is set to the most common filter that is used by reports, which at Adventure Works is the order date relationship.

Przykład jednego wymiaru odgrywającego role i relacji

Jedynym sposobem użycia nieaktywnej relacji jest zdefiniowanie wyrażenia języka DAX używającego funkcji USERELATIONSHIP.The only way to use an inactive relationship is to define a DAX expression that uses the USERELATIONSHIP function. W naszym przykładzie deweloper modelu musi utworzyć miary umożliwiające analizę sprzedaży odsprzedawcy według daty wysyłki i daty dostawy.In our example, the model developer must create measures to enable analysis of reseller sales by ship date and delivery date. Ta praca może być czasochłonna, zwłaszcza gdy w tabeli odsprzedawcy zdefiniowano wiele miar.This work can be tedious, especially when the reseller table defines many measures. Tworzy to również bałagan w okienku Pola z uwagi na zbyt dużą liczbę miar.It also creates Fields pane clutter, with an overabundance of measures. Są również inne ograniczenia:There are other limitations, too:

  • Jeśli autorzy raportu stosują podsumowywanie kolumn, a definiowanie miar, nie mogą uzyskać podsumowań dla nieaktywnych relacji bez konieczności pisania miar na poziomie raportu.When report authors rely on summarizing columns, rather than defining measures, they can't achieve summarization for the inactive relationships without writing a report-level measure. Miary na poziomie raportu mogą być definiowane tylko wówczas, gdy raporty są tworzone w programie Power BI Desktop.Report-level measures can only be defined when authoring reports in Power BI Desktop.
  • Mając tylko jedną aktywną ścieżkę relacji pomiędzy datą a sprzedażą odsprzedawcy, nie można jednocześnie filtrować sprzedaży odsprzedawcy według różnych typów dat.With only one active relationship path between date and reseller sales, it's not possible to simultaneously filter reseller sales by different types of dates. Nie można na przykład utworzyć wizualizacji porównującej sprzedaż według daty zamówienia i daty wysyłki.For example, you can't produce a visual that plots order date sales by shipped sales.

Aby ominąć te ograniczenia, popularną techniką modelowania w usłudze Power BI jest utworzenie tabeli wymiarów dla każdego wystąpienia odgrywającego rolę.To overcome these limitations, a common Power BI modeling technique is to create a dimension-type table for each role-playing instance. Zwykle dodatkowe tabele wymiarów tworzy się jako tabele obliczeniowe przy użyciu języka DAX.You typically create the additional dimension tables as calculated tables, using DAX. Dzięki użyciu tabel obliczeniowych model może zawierać tabele Date (Data), Ship Date (Data wysyłki) i Delivery Date (Data dostawy), a każda z nich może mieć jedną aktywną relację z odpowiednimi kolumnami tabeli sprzedaży odsprzedawcy.Using calculated tables, the model can contain a Date table, a Ship Date table and a Delivery Date table, each with a single and active relationship to their respective reseller sales table columns.

Przykład wymiarów odgrywających role i relacji

Ta metoda projektowania nie wymaga definiowania wielu miar dla różnych ról dat i umożliwia jednoczesne filtrowanie według różnych ról dat.This design approach doesn't require you to define multiple measures for different date roles, and it allows simultaneous filtering by different date roles. Ma jednak pewną małą wadę — tabela wymiarów daty zostanie zduplikowana, czego skutkiem będzie większy rozmiar modelu w magazynie.A minor price to pay, however, with this design approach is that there will be duplication of the date dimension table resulting in an increased model storage size. Ponieważ tabele wymiarów zwykle zawierają mniej wierszy niż tabele faktów, rzadko stanowi to problem.As dimension-type tables typically store fewer rows relative to fact-type tables, it is rarely a concern.

Podczas tworzenia w modelu tabel wymiarów dla każdej roli należy stosować następujące zalecane rozwiązania dotyczące projektowania:Observe the following good design practices when you create model dimension-type tables for each role:

  • Należy nadać kolumnom opisowe nazwy.Ensure that the column names are self-describing. Mimo że można zastosować nazwę kolumny Year (Rok) we wszystkich tabelach dat (nazwy kolumn muszą być unikatowe tylko w ramach tabeli), nie jest to opisowa nazwa z punktu widzenia domyślnych tytułów wizualizacji.While it's possible to have a Year column in all date tables (column names are unique within their table), it's not self-describing by default visual titles. Należy rozważyć zmianę nazw kolumn w tabeli wymiarów każdej roli, tak aby tabela Ship Date (Data wysyłki) zawierała kolumnę o nazwie Ship Year (Rok wysyłki) i tak dalej.Consider renaming columns in each dimension role table, so that the Ship Date table has a year column named Ship Year, etc.
  • Tam, gdzie jest to istotne, należy dodać do opisu tabel informacje dla autorów raportów dotyczące konfiguracji propagacji filtra (przekazywane za pośrednictwem etykietek narzędzi w okienku Pola).When relevant, ensure that table descriptions provide feedback to report authors (through Fields pane tooltips) about how filter propagation is configured. To zwiększa czytelność, co ma znaczenie, gdy model zawiera ogólnie nazwaną tabelę, na przykład Date (Data), używaną do filtrowania wielu tabel faktów.This clarity is important when the model contains a generically named table, like Date, which is used to filter many fact-type tables. W sytuacji gdy ta tabela ma aktywną relację z kolumną daty zamówienia sprzedaży odsprzedawcy, należy rozważyć dodanie opisu tabeli, na przykład „Filtruje sprzedaż odsprzedawcy według daty zamówienia”.In the case that this table has, for example, an active relationship to the reseller sales order date column, consider providing a table description like "Filters reseller sales by order date".

Aby uzyskać więcej informacji, zobacz artykuł Active vs inactive relationship guidance (Wskazówki dotyczące relacji aktywnych i nieaktywnych).For more information, see Active vs inactive relationship guidance.

Wymiary abstrakcyjneJunk dimensions

Wymiar abstrakcyjny przydaje się, gdy jest wiele wymiarów, zwłaszcza składających się tylko z kilku atrybutów (albo jednego), a te atrybuty mają niewiele wartości.A junk dimension is useful when there are many dimensions, especially consisting of few attributes (perhaps one), and when these attributes have few values. Dobrym przykładem są kolumny stanu zamówienia lub kolumny danych demograficznych klientów (płeć, grupa wiekowa i tym podobne).Good candidates include order status columns, or customer demographic columns (gender, age group, etc.).

Celem projektowania wymiaru abstrakcyjnego jest skonsolidowanie wielu „niewielkich” wymiarów w jeden wymiar, co pozwala na zmniejszenie rozmiaru modelu w magazynie oraz uporządkowanie okienka Pola dzięki wyświetlaniu mniejszej liczby tabel modelu.The design objective of a junk dimension is to consolidate many "small" dimensions into a single dimension to both reduce the model storage size and also reduce Fields pane clutter by surfacing fewer model tables.

Tabela wymiaru abstrakcyjnego to zwykle iloczyn kartezjański wszystkich elementów członkowskich atrybutów wymiarów z kolumną klucza zastępczego.A junk dimension table is typically the Cartesian product of all dimension attribute members, with a surrogate key column. Klucz zastępczy zapewnia unikatowe odwołanie do każdego wiersza w tabeli.The surrogate key provides a unique reference to each row in the table. Możesz utworzyć taki wymiar w magazynie danych lub użyć narzędzia Power Query, aby wykonać zapytanie, które wykona pełne sprzężenia zewnętrzne zapytań, a następnie doda klucz zastępczy (kolumnę indeksu).You can build the dimension in a data warehouse, or by using Power Query to create a query that performs full outer query joins, then adds a surrogate key (index column).

Przykład wymiaru abstrakcyjnego

To zapytanie ładujesz do modelu jako tabelę wymiarów.You load this query to the model as a dimension-type table. Musisz również scalić to zapytanie z zapytaniem faktu, tak aby kolumna indeksu została załadowana do modelu, co umożliwi tworzenie relacji „jeden do wielu” w modelu.You also need to merge this query with the fact query, so the index column is loaded to the model to support the creation of a "one-to-many" model relationship.

Wymiary degeneracjiDegenerate dimensions

Wymiar degeneracji odwołuje się do atrybutu tabeli faktów, który jest wymagany do filtrowania.A degenerate dimension refers to an attribute of the fact table that is required for filtering. W firmie Adventure Works dobrym przykładem jest liczba zamówień sprzedaży odsprzedawcy.At Adventure Works, the reseller sales order number is a good example. W tym przypadku tworzenie oddzielnej tabeli składającej się tylko z tej jednej kolumny nie ma sensu z punktu widzenia projektu modelu, ponieważ zwiększyłoby to rozmiar modelu w magazynie i zmniejszyłoby przejrzystość okienka Pola.In this case, it doesn't make good model design sense to create an independent table consisting of just this one column, because it would increase the model storage size and result in Fields pane clutter.

W modelu usługi Power BI właściwym rozwiązaniem byłoby dodanie kolumny z liczbą zamówień sprzedaży do tabeli faktów w celu filtrowania lub grupowania według liczby zamówień sprzedaży.In the Power BI model, it can be appropriate to add the sales order number column to the fact-type table to allow filtering or grouping by sales order number. Jest to wyjątek od wcześniej przedstawionej zasady, że nie należy mieszać typów tabel (każda tabela w modelu powinna być albo tabelą wymiarów, albo tabelą faktów).It is an exception to the formerly introduced rule that you should not mix table types (generally, model tables should be either dimension-type or fact-type).

Przykład wymiaru degeneracji

Jeśli jednak tabela sprzedaży odsprzedawców firmy Adventure Works ma kolumnę numeru zamówienia oraz numeru wiersza zamówienia i są one wymagane do filtrowania, tabela wymiarów degeneracji byłaby dobrym rozwiązaniem.However, if the Adventure Works resellers sales table has order number and order line number columns, and they're required for filtering, a degenerate dimension table would be a good design. Aby uzyskać więcej informacji, zobacz artykuł One-to-one relationship guidance (Degenerate dimensions) (Wskazówki dotyczące relacji jeden do jednego [Wymiary degeneracji]).For more information, see One-to-one relationship guidance (Degenerate dimensions).

Tabele faktów bez faktówFactless fact tables

Tabela faktów bez faktów nie zawiera żadnych kolumn miar.A factless fact table doesn't include any measure columns. Zawiera wyłącznie klucze wymiarów.It contains only dimension keys.

Tabela faktów bez faktów może służyć do przechowywania obserwacji zdefiniowanych przez klucze wymiarów.A factless fact table could store observations defined by dimension keys. Na przykład konkretnego dnia, o konkretnej godzinie, konkretny klient zalogował się do witryny internetowej.For example, at a particular date and time, a particular customer logged into your web site. Można zdefiniować miarę do liczenia wierszy tabeli faktów bez faktów, aby przeanalizować, ilu klientów zalogowało się w witrynie i kiedy to zrobili.You could define a measure to count the rows of the factless fact table to perform analysis of when and how many customers have logged in.

Ciekawszym sposobem użycia tabeli faktów bez faktów jest przechowywanie relacji pomiędzy wymiarami — jest to metoda projektowania modelu usługi Power BI, którą zalecamy w celu zdefiniowania relacji wymiarów typu „wiele do wielu”.A more compelling use of a factless fact table is to store relationships between dimensions, and it's the Power BI model design approach we recommend defining many-to-many dimension relationships. W projekcie relacji wymiarów wiele do wielu tabela faktów bez faktów jest tabelą pomostową.In a many-to-many dimension relationship design, the factless fact table is referred to as a bridging table.

Weźmy na przykład sprzedawców, których można przypisać do jednego lub kilku regionów sprzedaży.For example, consider that salespeople can be assigned to one or more sales regions. Można zaprojektować tabelę pomostową, będącą tabelą faktów bez faktów z dwiema kolumnami: klucza sprzedawcy i klucza regionu.The bridging table would be designed as a factless fact table consisting of two columns: salesperson key and region key. W obu kolumnach wartości mogą być zduplikowane.Duplicate values can be stored in both columns.

Przykład tabeli faktów bez faktów

Metoda projektowania „wiele do wielu” jest dobrze udokumentowana i można ją zastosować bez tabeli pomostowej.This many-to-many design approach is well documented, and it can be achieved without a bridging table. Jednak metoda tabeli pomostowej jest uważana za najlepsze rozwiązanie w zakresie łączenia dwóch wymiarów.However, the bridging table approach is considered the best practice when relating two dimensions. Aby uzyskać więcej informacji, zobacz artykuł One-to-one relationship guidance (Degenerate dimensions) (Wskazówki dotyczące relacji „jeden do jednego” [Wymiary degeneracji]).For more information, see Many-to-many relationship guidance (Relate two dimension-type tables).

Następne krokiNext steps

Aby uzyskać więcej informacji na temat projektu schematu gwiazdy lub projektowania modeli w usłudze Power BI, zapoznaj się z następującymi artykułami:For more information about star schema design or Power BI model design, see the following articles: