Как мне создать единую меру, которая разрезает одни и те же данные 3 различными способами и объединяет их? - PullRequest
0 голосов
/ 18 декабря 2018

Я уже полтора дня пытаюсь понять, как объединить одну и ту же меру двумя разными способами в одну меру.Он разбит на части, я пытался их объединить, вычислить с помощью операторов IF, я даже думал, что смогу получить сводные таблицы UNION 3, чтобы получить правильный результат.Я застрял с помощью Excel 365 ProPlus (который, я считаю, 2016, так как Get и Transform и PowerPivot встроены).

Цель: мне нужно сделать это, чтобы я мог обмануть таблицу PowerPivot, подключенную кмодель данных для отображения а) промежуточного итога с б) итоговой линией с в) плоской непроходной итоговой линией цели / цели в той же мере.Я был в состоянии сделать a & b, однако c неуловимо.

enter image description here

Я пытался вычислять данные поэтапно, с первыми двумяв данном случае неважно, что я пытаюсь сделать, но я не могу заставить работать два фильтра одновременно:

Occbase:=CALCULATE([Occurrences],
FILTER('Final Dataset',
    'Final Dataset'[MainFilter] = ""))

CumOcc:=CALCULATE([Occbase],
FILTER(ALL(DimDate[DateValue]),
    DimDate[DateValue] <= MAX(DimDate[DateValue])))

Эти две меры выполнят часть 1, отфильтруют набор данных, а затем рассчитают изэтот фильтр простой промежуточный итог.Я попытался сделать это за один шаг, но если фильтр работает, то итоговая сумма не будет работать:

CombinedMakesRunningTotolStopWorking:=CALCULATE(SUM('Final Dataset'[xOccurrences]), FILTER(
        ALL(Dimdate[DateValue]),
        DimDate[DateValue] <= MAX(DimDate[DateValue]))
    ,FILTER(
        'Final Dataset',
        'Final Dataset'[MainFilter] = ""
        || 'Final Dataset'[Region] = "Ttl Occ MPR"  //I couldn't figure out how to calculate on the fly
        )                           //so I generated this total in PowerQuery
    )

Разработчик SQL во мне решил попробовать потянуть все три выше по отдельностиа затем используйте UNION и SUMMARIZE по значению даты и значению региона, но получили еще худший результат ...

TryHarder:=SUMX(UNION(
    SUMMARIZE(FILTER('Final Dataset',
            'Final Dataset'[Region] = "Ttl Occ MPR"),
        [Region],
        [DateValue],
        "OccurrencesXXX", CALCULATE([Occbase],
                            FILTER(ALL(DimDate[DateValue]),
                                DimDate[DateValue] <= MAX(DimDate[DateValue]))))
    ,
    SUMMARIZE(FILTER(ALL('Final Dataset'),
        'Final Dataset'[Region] = "PR Occ Goal"),
        [Region],
        [DateValue],
        "OccurrencesXXX", [Occurrences])
    ,
    SUMMARIZE(FILTER('Final Dataset',
        'Final Dataset'[MainFilter] = ""),
        [Region],
        [DateValue],
        "OccurrencesXXX", CALCULATE([Occbase],
                            FILTER(ALL(DimDate[DateValue]),
                                DimDate[DateValue] <= MAX(DimDate[DateValue]))))
    ), [OccurrencesXXX])

с комическим поражающим результатом:

enter image description here

Я мог бы сдаться и просто сгенерировать таблицу для каждого графика в PowerQuery ... но мне пришлось бы сгенерировать тонну таблиц.Я должен предположить, что я делаю что-то не так с областью действия / контекстом, и у меня есть ощущение, что мой образ мышления в C # / SQL ставит меня в невыгодное положение при изучении DAX.Я хотел бы понять, что я делаю неправильно, и изучить паттерн DAX и терминологию, чтобы исправить это.

1 Ответ

0 голосов
/ 03 января 2019

Один из способов сделать это - настроить таблицу, которая не связана с моделью, а затем использовать ее для определения возвращаемого значения.Пример ниже для единицы измерения (UOM).Идея состоит в том, что возвращаемая мера зависит от поля Единица измерения, поэтому добавление его в часть условных обозначений сводной диаграммы вернет единицу, случай и объем ESU.Это также означает, что вы можете использовать слайсер для переключения, какие поля возвращаются на диаграмме.

Volume:=IF( HASONEVALUE( 'Unit of Measure'[UOM] ),
    SWITCH(TRUE(),
        VALUES('Unit of Measure'[Order]) = 1, [Unit Volume],
        VALUES('Unit of Measure'[Order]) = 2, [Case Volume],
        VALUES('Unit of Measure'[Order]) = 3, [ESU Volume]
    ),
        [ESU Volume]
    )
...