ALL () не работает для «удаления фильтра» в DAX;вопрос отношений? - PullRequest
0 голосов
/ 03 декабря 2018

Основная посылка:

  • «Заказы» состоят из элементов из нескольких «Зон».
  • Клиенты могут вызывать «Кредиты» (возвраты) по ошибочным «Заказам».
  • Здесь есть истинное отношение «многие ко многим», потому что один заказ может иметь несколько кредитов, вызванных в разное время;аналогично, клиент может позвонить один раз в отношении нескольких заказов (сгенерировать только одно кредитовое авизо).
  • Степень детализации «Кредиты» находится на уровне позиции, т.е.

    CREDIT  |   SO      |   ITEM    |   ZONE    |   CREDAMT
    -------------------------------------------------------
    42      |   1       |   56      |   A       |   $6
    42      |   1       |   52      |   A       |   $8
    42      |   1       |   62      |   B       |   $20
    42      |   2       |   56      |   A       |   $12
    
  • Степень детализации «Детали заказа» находится на уровне зоны, т.е.

    SO      |   ZONE    |   DOL_AMT
    -------------------------------
    1       |   A       |   $50
    1       |   B       |   $20
    1       |   C       |   $100
    2       |   A       |   $26
    
  • У меня есть таблица фильтров «Зона», которая помогает мне лучше сортировать вещи и сворачивать в более широкие категории, например

    ZONE    |   TEMP    |   SORT
    -------------------------------
    A       |   DRY     |   2
    B       |   COLD    |   3
    C       |   DRY     |   1
    

ЧтоМне нужно:

  • Мне нужна пара визуальных элементов для параллельного сравнения суммы заказа по зоне рядом с суммой кредита по зоне.

Что работает:

  • Компонент "Кредиты" прост, CreditTotal = abs(sumx(Credits,Credits[CREDAMT])) с зоной в качестве элемента легенды.
  • У меня естькомпонент ORDER, который работает , когда зона находится в кредитовом авизо

    Order $ by Zone =
    CALCULATE (
      SUM ( 'Order Details'[DOL_AMT] ),
      USERELATIONSHIP ( 'Order Details'[SO], Credits[SO] ),
      ALL ( Credits[CreditCategory] )
    )
    

Моя проблема:

  • Зонычто у не было кредита против них, не появится.Поэтому вместо

    CREDIT  |   ZONE    |   ORDER $ BY ZONE
    ----------------------------------
    42      |   A       |   $76
    42      |   B       |   $20
    42      |   C       |   $100
    

    я получаю

    CREDIT  |   ZONE    |   ORDER $ BY ZONE
    ----------------------------------
    42      |   A       |   $76
    42      |   B       |   $20
    

Я попытался удалить этот фильтр, установив ALL(Zones[Zone]) и / или ALL('Order Details'[Zone]), ноэто не помогает, предположительно потому, что сообщает о "всех зонах", фактически найденных в таблице "Кредиты". Я надеюсь, что есть какой-то способ попросить его сообщить обо всех зонах в таблице 'Order Details' на основе SO в таблице 'Credits'.

В случае, если это поможет, вот какотношения структурированы;Кроме того, я пытался смешивать и сопоставлять различные комбинации активной / неактивной, однонаправленной и двунаправленной фильтрации и т. д., но текущая конфигурация является единственной, которая, кажется, работает удаленно, как требуется.Relationships in data model

Я благодарен за любые предложения;пожалуйста, дайте мне знать, если что-то неясно.Спасибо.

1 Ответ

0 голосов
/ 04 декабря 2018

Я смог заставить его работать, используя 'Order Details'[Zone] вместо Zones[Zone] в визуальном виде таблицы и эту меру:

Order $ by Zone = 
CALCULATE (
  SUM ( 'Order Details'[DOL_AMT] ),
  USERELATIONSHIP ( 'Order Details'[SO], Credits[SO] )
)

Обратите внимание, что независимо от вашей меры, естьнет строки в Credits, соответствующей зоне C, поэтому он не знает, что поместить в столбец CREDIT, если вы не укажете, как именно.

Если удалить столбец измерения CREDITтогда вам не нужно менять таблицы, как я предлагал выше.Вы можете просто использовать вышеприведенную меру, а затем написать новую меру для столбца CREDIT:

CreditValue =
CALCULATE(
    VALUES(Credits[CREDIT]),
    ALL(Credits),
    Credits[SO] IN VALUES('Order Details'[SO])
)
...