DAX вычисляет предыдущее значение также, когда оно не существует - PullRequest
1 голос
/ 18 апреля 2019

У меня есть данные, которые собирают «снимки» склада.Он имеет три столбца: SnapshotDate , Item , OnHand

(Реальные данные имеют почти 100 000 записей для каждой SnapshotDate здесь я выкладываю пример)

enter image description here

Я хочу измерить Delta OnHand относительнопредыдущая Дата (что бы это ни было).

Итак, я установил три вычисляемых столбца:

PreviousDate

=
var currentDate = Inventory[SnapshotDate]
return CALCULATE( MAX( Inventory[SnapshotDate]); 
FILTER( ALL(Inventory); Inventory[SnapshotDate] < currentDate)
)

PreviousOnHand

= LOOKUPVALUE(Inventory[OnHand]; Inventory[SnapshotDate]; Inventory[PreviousDate]; Inventory[Item]; Inventory[Item])+0

OnHandDelta

=Inventory[OnHand]-Inventory[PreviuosOnHand]

Дельта-мера:

Delta:=SUM(Inventory[OnHandDelta])

Когда я поворачиваю этоданные, я хотел бы видеть 0 (ячейка с красной рамкой), когда данных не существует, и что более важно, я должен видеть значение Delta -10 (голубая ячейка).

enter image description here

Как этого достичь?

Ссылка на тестовый файл Excel

1 Ответ

1 голос
/ 18 апреля 2019

Проблема здесь в том, что комбинация даты / элемента (15/04/2019, элемент C) просто не существует в вашей таблице фактов.Таким образом, не имеет значения, какую меру вы создадите, она никогда не будет рассчитана.

Один из подходов состоит в создании отдельных таблиц измерений для даты и элемента, загруженных в модель данных, со связями с вашей таблицей фактов.

Запрос Размер даты :

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Grouped = Table.Sort(Table.Group(Source, {"SnapshotDate"}, {}), "SnapshotDate"),
    #"Changed Type" = Table.TransformColumnTypes(#"Grouped",{{"SnapshotDate", type date}})
in
    #"Changed Type"

Запрос Размер элемента :

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Grouped = Table.Sort(Table.Group(Source, {"Item"}, {}), "Item"),
    #"Changed Type" = Table.TransformColumnTypes(#"Grouped",{{"Item", type text}})
in
    #"Changed Type"

enter image description here

Теперь вы можете создать то, что вы хотите, в качестве ИЗМЕРЕНИЙ без вычисляемых столбцов:

Измерение Текущий ток * :

On Hand Current:= 
    SUM ( Inventory[OnHand] ) + 0

Измерение На руках Предыдущий :

On Hand Previous:=
VAR DateCurrent = 
    IF ( 
        HASONEVALUE ( 'Date Dimension'[SnapshotDate] ),
        VALUES ( 'Date Dimension'[SnapshotDate] ),
        BLANK()
    )
VAR DatePrevious = 
    CALCULATE ( 
        MAX ( 'Date Dimension'[SnapshotDate] ),
        FILTER ( 
            ALL ( 'Date Dimension' ),
            'Date Dimension'[SnapshotDate] < DateCurrent
        )
    )
RETURN
    CALCULATE ( 
        [On Hand Current], 
        FILTER ( 
            ALL ( 'Date Dimension'[SnapshotDate] ),
            'Date Dimension'[SnapshotDate] = DatePrevious
        )
    ) + 0

Измерение Дельта :

Delta:=
    [On Hand Current] - [On Hand Previous]

Теперь с использованием измерений из таблиц измерений в сводной области с дельтоймера:

enter image description here

Обновленный файл XLSX: https://excel.solutions/so_55740804/

...