Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:
kolumna obliczeniowa
tabela obliczeniowa
Miara
wizualizacji
Nuta
Ta funkcja jest zniechęcana do użycia w obliczeniach wizualizacji , ponieważ prawdopodobnie zwraca wyniki bez znaczenia.
W przypadku danych wejściowych w kolumnie daty zwraca tabelę zawierającą kolumnę dat rozpoczynającą się od określonej daty rozpoczęcia i kontynuuje dla określonej liczby i typu interwałów dat.
W przypadku danych wejściowych kalendarza zwraca tabelę rozpoczynającą się od określonej daty rozpoczęcia i kontynuuje dla określonej liczby i typu interwałów dat. Tabela zawiera wszystkie podstawowe otagowane kolumny i wszystkie powiązane kolumny czasu.
Ta funkcja jest odpowiednia do przekazania jako filtru do funkcji CALCULATE. Służy do filtrowania wyrażenia według standardowych interwałów dat, takich jak dni, miesiące, kwartały lub lata.
Składnia
DATESINPERIOD(<dates> or <calendar>, <start_date>, <number_of_intervals>, <interval>[, <endbehavior>])
Parametry
| Termin | Definicja |
|---|---|
dates or calendar |
Kolumna zawierająca daty lub odwołanie do kalendarza |
start_date |
Wyrażenie daty. Jeśli jest używana składnia kalendarza, użyj tego samego typu danych co kolumna podstawowa otagowana do kategorii Dzień. |
number_of_intervals |
Liczba całkowita określająca liczbę interwałów do dodania lub odejmowania od dat. |
interval |
Interwał, według którego mają być przesunięte daty. Wartość interwału może być jedną z następujących wartości: DAY, , WEEKMONTH, QUARTER, i YEAR. Tydzień może być używany tylko z kalendarzem. |
endbehavior |
Ma zastosowanie tylko wtedy, gdy podano odwołanie do kalendarza. Opcjonalny. Określa, jak data zakończenia jest wyrównana, gdy interwał docelowy jest dłuższy niż zakres źródłowy. Prawidłowe wartości to: PRECISE (default) i ENDALIGNED. |
Wartość zwracana
W przypadku danych wejściowych kolumn daty tabela zawierająca jedną kolumnę wartości daty.
W przypadku danych wejściowych kalendarza tabela zawierająca wszystkie podstawowe oznaczone kolumny i wszystkie powiązane kolumny czasu.
Uwagi
W najczęstszym przypadku użycia
datesjest odwołaniem do kolumny dat oznaczonej tabeli dat.Jeśli liczba określona dla
number_of_intervalsjest dodatnia, daty są przenoszone do przodu w czasie; jeśli liczba jest ujemna, daty są przesunięte do tyłu w czasie.Parametr
intervaljest wyliczeniem. Prawidłowe wartości toDAY, ,WEEKMONTH,QUARTER, iYEAR. Ponieważ jest to wyliczenie, wartości nie są przekazywane jako ciągi. Nie ujęć ich w cudzysłów.Po
endbehaviorpodaniu (tylko analiza czasu kalendarza) DATESINPERIOD przekazuje wartość do DATEADDparametru .sExtension. Szczegółowe przykłady można znaleźć w artykule Understanding endbehavior (Opis rozwiązania endbehavior ).W przypadku danych wejściowych kolumn daty zwracana tabela może zawierać tylko daty przechowywane w kolumnie
dates. Na przykład jeśli kolumnadatesrozpoczyna się od 1 lipca 2017 r., a wartośćstart_dateto 1 lipca 2016 r., zwrócona tabela rozpocznie się od 1 lipca 2017 r.W przypadku danych wejściowych kalendarza, jeśli data wejściowa nie zostanie znaleziona w kolumnie z tagiem dzień, wynik będzie niezdefiniowany. Podaj prawidłowe dane wejściowe daty.
W przypadku danych wejściowych kalendarza użyj tego samego typu danych i formatu co kolumna z tagiem dzień dla daty rozpoczęcia. Jeśli na przykład kolumna używa formatu RRRR-Sn-Qn-Mnn-Wnn-Dnn (np. "2014-S2-Q4-M11-W45-D03"), data rozpoczęcia musi być zgodna z tym samym formatem (np. "2015-S2-Q4-M11-W45-D03"). W przeciwnym razie zachowanie jest niezdefiniowane.
Ta funkcja nie jest obsługiwana w trybie DirectQuery w przypadku użycia w kolumnach obliczeniowych lub regułach zabezpieczeń na poziomie wiersza.
Przykład
Poniższa definicja miary tabeli Sales używa funkcji DATESINPERIOD do obliczania przychodu za poprzedni rok (PY).
Zwróć uwagę, że formuła używa funkcji MAX. Ta funkcja zwraca najnowszą datę w kontekście filtru. Dlatego funkcja DATESINPERIOD zwraca tabelę dat rozpoczynającą się od najnowszej daty dla ostatniego roku.
Przykłady w tym artykule mogą być używane z przykładowym modelem Adventure Works DW 2020 Power BI Desktop. Aby uzyskać model, zobacz DAX przykładowy model.
Revenue PY =
CALCULATE (
SUM ( Sales[Sales Amount] ),
DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -1, YEAR )
)
Należy wziąć pod uwagę, że raport jest filtrowany według miesiąca czerwca 2020 r. Funkcja MAX zwraca 30 czerwca 2020 r. Następnie funkcja DATESINPERIOD zwraca zakres dat z 1 lipca 2019 r. do 30 czerwca 2020 r. Jest to rok wartości dat począwszy od 30 czerwca 2020 r. w ciągu ostatniego roku.
Przykład analizy czasowej opartej na kalendarzu
Poniższa definicja miary tabeli Sales używa funkcji DATESINPERIOD do obliczania przychodu za poprzedni rok (PY).
Zwróć uwagę, że formuła używa funkcji MAX. Ta funkcja zwraca najnowszą datę w kontekście filtru. DATESINPERIOD Dlatego funkcja zwraca kolumny podstawowe rozpoczynające się od najnowszej daty ostatniego roku. Wartość DateKey jest używana jako przykład, aby pokazać, że kategorię "Dzień" można oznaczyć kolumną, która nie jest typowana datą.
Przykłady w tym artykule mogą być używane z przykładowym modelem Adventure Works DW 2020 Power BI Desktop. Aby uzyskać model, zobacz DAX przykładowy model.
Revenue PY =
CALCULATE (
SUM ( Sales[Sales Amount] ),
DATESINPERIOD ( FiscalCalendar, MAX ( 'Date'[DateKey] ), -1, YEAR )
)
Należy wziąć pod uwagę, że raport jest filtrowany według miesiąca czerwca 2020 r. Funkcja MAX zwraca 30 czerwca 2020 r. Następnie DATESINPERIOD funkcja zwraca zakres od 1 lipca 2019 r. do 30 czerwca 2020 r. To rok od 30 czerwca 2020 r. w ciągu ostatniego roku.
Opis parametru endbehavior dla analizy czasu kalendarza
Wewnętrznie oblicza granicę końcową przez DATESINPERIOD wywołanie DATEADD z tym samym interwałem, liczbą interwałów i endbehavior przekazanymi do DATESINPERIODelementu . Gdy number_of_intervals wartość jest ujemna (typowa podczas przechodzenia okna do tyłu), funkcja zwraca zakres (endDate, startDate], gdzie endDate jest datą zwracaną przez DATEADD element po przesunięciu kontekstu kalendarza kończącego się startDate przy użyciu <number_of_intervals><interval> polecenia <endbehavior>. W przypadku wartości dodatnich zwracany interwał to [startDate, endDate).
-
PRECISEfunkcja zachowuje dokładną wartość zwracaną przez DATEADDelement . -
ENDALIGNEDDATEADDEndAlignednastępuje po semantyce, przenosząc granicę do końca okresu docelowego, gdy wybór źródła osiągnął już własny koniec. Jest to przydatne, gdy kontekst filtru kończy się już w ostatnim dniu okresu i chcesz, aby okno wstecz (na przykład sześć miesięcy) używało ostatniego dnia przesuniętego okresu jako granicy.
Przykład z endAligned
EndAlignedTest =
CALCULATE (
COUNTROWS ( SUMMARIZE ( Sales, 'Date'[MonthName] ) ),
DATESINPERIOD ( 'Gregorian Calendar', MAX ( 'Date'[Date] ), -6, MONTH, EndAligned )
)
Ta miara zlicza unikatowe nazwy miesięcy w ciągu ostatnich sześciu miesięcy względem bieżącego kontekstu. W przypadku EndAlignedelementu okno utrzymuje granicę na końcu przesuniętego miesiąca, gdy kontekst już kończy się na granicy miesiąca, uniemożliwiając dodatkowe daty końcowe, które Precise obejmowałyby (na przykład Feb 28 w przeciwnym razie nastąpi przejście do Aug 28, ściąganie Aug 29–31 i efektywne rozszerzanie zakresu do siedmiu miesięcy). Ustawienie EndAligned zachowuje liczbę na sześć w tym scenariuszu.
W poniższym porównaniu przyjęto założenie, że bieżący kontekst filtru kończy się 28 lutego 2023 r., a wyrażenie wywołuje metodę DATESINPERIOD(..., -6, MONTH, <endbehavior>). Zakres funkcjonalny to (endDate, startDate], więc endDate zwracany przez DATEADD element jest wykluczony, gdy startDate jest uwzględniony.
| endbehavior |
DATEADD endDate |
DATESINPERIOD zakres | Nazwy miesięcy zwracane przez miarę |
|---|---|---|---|
Precise |
2022-08-28 |
(2022-08-28, 2023-02-28] → 29 sierpnia 2022 r. – luty 28 2023 r. |
Sierpień, Sep, Październik, Listopad, Grudzień, Styczeń, Luty (7) |
EndAligned |
2022-08-31 |
(2022-08-31, 2023-02-28] → 1 września 2022 r. – luty 28 2023 r. |
Sep, październik, listopad, grudzień, styczeń, luty (6) |
Różnice w zachowaniu między analizą czasu klasycznego i kalendarza
DATESINPERIOD Wewnętrznie używa tej samej logiki co DATEADD do określania daty zakończenia od daty rozpoczęcia, a następnie oblicza zakres. Niektóre scenariusze mogą przynieść różne wyniki podczas porównywania analizy czasu klasycznego i kalendarza. Na przykład w roku DATEADD księżycowym generuje różne wyniki na stopień szczegółowości daty, więc wynik DATESINPERIOD będzie się również różnić. W analizie czasowej opartej na kalendarzu zmiana 29 lutego 2008 r. z powrotem na rok 1 marca 2007 r., ponieważ jest traktowana jako 60 dzień roku. W klasycznej inteligencji czasowej ta sama zmiana zwraca 28 lutego 2007 roku. Ponieważ data zakończenia różni się, dane wyjściowe DATESINPERIOD również będą się różnić. Obejście polega na użyciu DATEADDopcji (Kalendarz, -<liczba roku>, miesiąc) w celu obliczenia daty zakończenia. Jeśli na przykład rok ma 13 miesięcy w kalendarzu, użyj wartości DATEADD(Kalendarz, -13, miesiąc). Takie podejście zmieni się o miesiąc, więc luty 2008 r. przejdzie do lutego 2007 r. Następnie napisz niestandardowe datyInPeriod na podstawie nowej daty zakończenia.
Powiązana zawartość
funkcje analizy czasowej (DAX)funkcje daty i godziny (DAX)DATESBETWEEN funkcji (DAX)