Dax - деление на совокупности из двух разных фактов - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь преобразовать кусок SQL в dax.

Сюда входят только две таблицы: факты и атрибут общего измерения Encounter. Я хочу суммировать все сборы по встречам и сборы по встречам, отфильтрованные только по коллекциям TransactionRollup_Name = Contractual, TransactionTypeDescription = Adjustment, опубликованным в прошлом месяце.

Я отфильтрую систему и действие <> Удалить в клиенте отчетов (powerbi или excel)

Как только они будут получены, я хочу получить сумму сборов по контракту, где доля сборов по контракту в общей сумме сборов за столкновения составляет> = .9 и <1 </p>

SQL:

DECLARE @startdate INT = 20181201
,     @thrudate INT = 20181231
,     @systemcode VARCHAR(1) = '1';


SELECT    SUM(coll.Contractual)
FROM  (   SELECT      SUM(Amount) * -1 Contractual
          ,           col.EncounterID
          FROM
                      dwo.FactCollections        col
          JOIN        dwo.DimTransactionCode_mds mds ON             col.mds_TransactionID = mds.SK_TransactionKey
          WHERE
                      mds.TransactionRollup_Name = 'Contractual'
                      AND mds.TransactionTypeDescription = 'Adjustment'
                      AND col.SystemID = TRY_CONVERT(INT, @systemcode)
                      AND col.Action <> 'Delete'
                      AND col.PostDateTime >= @startdate
                      AND col.PostDateTime <= @thrudate
          GROUP BY    col.EncounterID ) coll
JOIN  (   SELECT      EncounterID
          ,           SUM(Amount) Charge
          FROM        dwo.FactCharges ldg
          WHERE
                      ldg.SystemID = TRY_CONVERT(INT, @systemcode)
                      AND ldg.Action <> 'Delete'
          GROUP BY    ldg.EncounterID )  chg ON chg.EncounterID = coll.EncounterID
WHERE
      chg.Charge <> 0
      AND chg.Charge IS NOT NULL
      AND coll.Contractual / chg.Charge >= .90
      AND coll.Contractual / chg.Charge < 1.0;

Попытка измерения Dax:

90%-99.99% of Charges :=
CALCULATE (
    'MeasureTable'[Sum of Contractual Adjustments],
    FILTER (
        'FactCollections',
        DIVIDE (
            'MeasureTable'[Sum of Contractual Adjustments],
            'MeasureTable'[ChargeTotal]
        )
            >= .90
            && DIVIDE (
                'MeasureTable'[Sum of Contractual Adjustments],
                'MeasureTable'[ChargeTotal]
            )
                < 1.0
    )
)

Charge := SUM ( 'FactCharges'[Amount] )

Sum of Contractual Adjustments :=
CALCULATE (
    SUM ( FactCollections[Amount] ) * ( -1 ),
    FILTER (
        'Transaction Code',
        'Transaction Code'[TransactionTypeDescription] = "Adjustment"
            && 'Transaction Code'[TransactionRollup_Name] = "Contractual"
    )
)

Пример данных по одному столкновению за запрос.

sample data

Добавление Пройдя другой путь с даксом, я получу 1/2 пути. Запрос суммированных столбцов дает мне набор результатов, который объединяет сборы и сборы по договорам до встречи и вычисляет соотношение контрактов / сборов.

Конечный результат должен будет фильтровать этот промежуточный набор результатов, где

  • договорное соотношение / плата составляет> = 0,9 и <1 </li>
  • даты публикации для договорных коллекций должны быть отфильтрованы по отчетному контексту фильтра клиента
  • Должны быть включены все даты публикации для начислений, независимо от контекста фильтра даты публикации в клиенте отчетов

Я понятия не имею, как сделать эту вторую часть в Dax.

> EVALUATE SUMMARIZECOLUMNS (
>     'Encounter'[Encounter],
>     "ChargeAmount", SUMX ( 'FactCharges', 'FactCharges'[Sum Charge Amount] ),
>     "ContractualAmount", SUMX (
>         'FactCollections',
>         CALCULATE (
>             'FactCollections'[Sum of Adjustments],
>             'Transaction Code'[TransactionRollup_Name] = "Contractual"
>         )
>     ),
>     "Contractual : Charge", DIVIDE (
>         SUMX (
>             'FactCollections',
>             CALCULATE (
>                 'FactCollections'[Sum of Adjustments] * -1,
>                 'Transaction Code'[TransactionRollup_Name] = "Contractual"
>             )
>         ),
>         SUMX ( 'FactCharges', 'FactCharges'[Sum Charge Amount] )
>     ) )
...