Microsoft Fabric Community Conference 2025, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount.
Register nowThe Power BI DataViz World Championships are on! With four chances to enter, you could win a spot in the LIVE Grand Finale in Las Vegas. Show off your skills.
Hi,
I want to slightly modify my measure.
Currently, it looks like that:
Aging =
Solved! Go to Solution.
hej @pawelj795
W pliku ktory wyslales nie bylo tego obiektu wiec musiale go wylachys z formuly.
Zalaczylem plik z formua.
Hi @pawelj795
Spoko, dodaj ponizsze jako dodatkowy argument w ostatnim CALCULATE.
@Mariusz
Formuła działa prawie prawidłowo.
Potrzebuje tylko zmienić by do zwracanej wartości (Inventory Value EUR) nie był brany filtr na Trans Type, tzn wartość powinna być wyliczana YTD ale dla każdego typu Trans Type.
Hej Pawel,
sprobuj tego,
M =
VAR __tbl =
FILTER(
GROUPBY(
CALCULATETABLE(
WH_Invent_Trans,
--KEEPFILTERS( WH_Invent_Trans[TransType] IN { 0, 9 } ),
KEEPFILTERS( WH_Invent_Trans[QTY] <> BLANK() ),
ALLEXCEPT( WH_Invent_Trans, WH_Invent_Trans[ItemID] )
),
WH_Invent_Trans[ItemID],
"@maxDate", MAXX( CURRENTGROUP(), WH_Invent_Trans[DatePhysical] )
),
VAR __days = DATEDIFF( [@maxDate], TODAY() -1, DAY )
RETURN __days > 0 && __days <= 276 --changed as 15 was out of range
)
RETURN
CALCULATE(
SUM( WH_Invent_Trans[Inventory Value EUR] ),
TREATAS( __tbl, WH_Invent_Trans[ItemID], WH_Invent_Trans[DatePhysical] )
--DATESYTD(DimDates[Date]);
)
Chyba nie do końca dobrze wytłumaczyłem wszystko.
Chodzi o to, żeby do wiekowania, wybór indeksów był na podstawie trans type 0 i 9. -> czyli w _tbl filtr musi pozostać.
Natomiast do wyliczenia wartości wybranych indeksów były brane wszystkie transakcje (bez filtra na trans type). -> jak wyłączyć filtr na trans type w Treatas?
Hej @pawelj795
Spobuj, tego
M =
VAR __tbl =
FILTER(
GROUPBY(
CALCULATETABLE(
WH_Invent_Trans,
KEEPFILTERS( WH_Invent_Trans[TransType] IN { 0, 9 } ),
KEEPFILTERS( WH_Invent_Trans[QTY] <> BLANK() ),
ALLEXCEPT( WH_Invent_Trans, WH_Invent_Trans[ItemID] )
),
WH_Invent_Trans[ItemID],
"@maxDate", MAXX( CURRENTGROUP(), WH_Invent_Trans[DatePhysical] )
),
VAR __days = DATEDIFF( [@maxDate], TODAY() -1, DAY )
RETURN __days > 0 && __days <= 276 --changed as 15 was out of range
)
RETURN
CALCULATE(
SUM( WH_Invent_Trans[Inventory Value EUR] ),
TREATAS(
SUMMARIZE( __tbl, WH_Invent_Trans[ItemID] ), WH_Invent_Trans[ItemID]
)
--DATESYTD(DimDates[Date]);
)
@Mariusz
Dostaje błąd: "The end of the input was reached"
Dlaczego YTD wylaczyles z formuly?
hej @pawelj795
W pliku ktory wyslales nie bylo tego obiektu wiec musiale go wylachys z formuly.
Zalaczylem plik z formua.
@Mariusz
Cześć,
Musze niestety odkopać temat, bo pojawił się problem od startu nowego roku.
Formuła nierozpoznaje dni z poprzedniego roku, jako, że w sumie użyte było DATESYTD.
Aktualnie pokazuje tylko wiekowanie na 0-15 dni i to też niepoprawnie, bo pokazuje wartosc - 14 tysięcy
Byłbym bardzo wdzięczny, jak mogłbyś mi z tym pomóc 🙂
Hi @pawelj795
You can add an extra variable __date and later use it as the third argument of CALCULATE, there are three extra lines followed by "--new" in the code, this is to replace DATESYTD.
Please see the below for reference.
M =
VAR __tbl =
FILTER(
GROUPBY(
CALCULATETABLE(
WH_Invent_Trans,
KEEPFILTERS( WH_Invent_Trans[TransType] IN { 0, 9 } ),
KEEPFILTERS( WH_Invent_Trans[QTY] <> BLANK() ),
ALLEXCEPT( WH_Invent_Trans, WH_Invent_Trans[ItemID] )
),
WH_Invent_Trans[ItemID],
"@maxDate", MAXX( CURRENTGROUP(), WH_Invent_Trans[DatePhysical] )
),
VAR __days = DATEDIFF( [@maxDate], TODAY() -1, DAY )
RETURN __days > 0 && __days <= 276 --changed as 15 was out of range
)
VAR __date = MAX( DimDates[Date] ) -- new
RETURN
CALCULATE(
SUM( WH_Invent_Trans[Inventory Value EUR] ),
TREATAS(
SUMMARIZE( __tbl, WH_Invent_Trans[ItemID] ), WH_Invent_Trans[ItemID]
),
DimDates[Date] <= __date, -- new
ALL( DimDates ) -- new
)
@Mariusz
Jest coś nie tak.
Wydaje mi się, że to przez to, że obecna miara bierze wartości "od poczatku świata".
Można ustawić, żeby wartości były brane od 01.01.2019?
Bo z tego co rozumiem na końcu miary RETURN funkcja ALL czyści wszelkie filtry na daty?
Dokładnie o to mi chodziło 😉
Bardzo ci dziękuje za pomoc i wesołych świąt !
@Mariusz
Witam w nowym roku 🙂
Potrzebuje jednej drobnej rzeczy do stworzonej przez ciebie formuly.
Mianowicie chciałbym stworzyć tabelę, w której oprócz ItemID i wartości będzie data ostatniej transakcji na danym itemie.
Oczywiście wszelkie filtry, które były używane do wyliczenia wartości zostaną.
Próbowałem sam stworzyć tą miarę w banalny sposób, tzn. wycięcia z twojej formuły z wartością, fragmentu z datą, ale nic mi to nie przyniosło.
Hi @pawelj795
sprobuj tego
date =
VAR __dates =
GROUPBY(
CALCULATETABLE(
WH_Invent_Trans,
KEEPFILTERS( WH_Invent_Trans[TransType] IN { 0, 9 } ),
KEEPFILTERS( WH_Invent_Trans[QTY] <> BLANK() ),
ALLEXCEPT( WH_Invent_Trans, WH_Invent_Trans[ItemID] )
),
WH_Invent_Trans[ItemID],
"@maxDate", MAXX( CURRENTGROUP(), WH_Invent_Trans[DatePhysical] )
)
RETURN MAXX( __dates, [@maxDate] )
@Mariusz
Can you help me?
With your new measures my total are twice as big than whole inventory value(2,16 m vs. 1m)
Hi @pawelj795
Try something like this.
Aging =
VAR ItemID = SELECTEDVALUE( WH_Invent_Trans[ItemID] )
RETURN
DATEDIFF(
MAXX(
FILTER(
ALL( WH_Invent_Trans );
WH_Invent_Trans[ItemID] = ItemID
&& WH_Invent_Trans[TransType] IN { 0, 9 }
&& WH_Invent_Trans[QTY] <> BLANK
);
WH_Invent_Trans[Date Physical]
);
TODAY()-1;
DAY
)
That works, thanks 😉
Now, I want to develop this measure.
Groups =
VAR ItemID = SELECTEDVALUE(WH_Invent_Trans[ItemID])
VAR DateDifference =
DATEDIFF(
MAXX(
FILTER(WH_Invent_Trans;
WH_Invent_Trans[ItemID]=ItemID
&& WH_Invent_Trans[TransType] IN {0;9}
&& WH_Invent_Trans[QTY] <> BLANK()
);
WH_Invent_Trans[Date Physical]);
TODAY()-1;
DAY)
RETURN
CALCULATE(
SUM(
WH_Invent_Trans[Inventory Value EUR]);
DATESYTD(DimDates[Date]);
DateDifference > 0 && DateDifference<= 15)
But it doesn't work.
It shows:
the true/false expression does not specify a column. Each true/false expressions used as table filter expression must refer to exactly one column
@Mariusz
Niestety to nie pomoglo, nadal wartości są z kosmosu.
Czy możesz mi wytłumaczyć co w formule zmieniło dodanie ALL do ostatniego CALCULATE?
Moze w ten sposob bede w stanie zidentyfikowac problem.
Hi @pawelj795
ALL( dimDate ) usunelow filtry z dimDate, to umozliwilo ( Running Total ) jak z DATESYTD tylko od pierwszej date w tabeli.
User | Count |
---|---|
20 | |
20 | |
14 | |
10 | |
8 |
User | Count |
---|---|
29 | |
28 | |
13 | |
12 | |
11 |