Как ПРИСОЕДИНИТЬСЯ к сводным данным из двух запросов в новую таблицу в DAX Power BI

У меня 2 вопроса:

Премиум:

введите здесь описание изображения

и убытки:

введите здесь описание изображения

Как я могу просто суммировать данные из запроса Premium и СЛЕВА ПРИСОЕДИНЯТЬ его к суммированным данным в запросе потерь с помощью DAX?

В SQL это было бы так:

declare @PremiumTable table (PolicyNumber varchar(50), Premium money)
insert into @PremiumTable values 
                                ('Pol1', 100),
                                ('Pol1', 50),
                                ('Pol2', 300),
                                ('Pol3', 500),
                                ('Pol3', 200),
                                ('Pol4',400)

declare @LossesTable table (PolicyNumber varchar(50), Losses money)
insert into @LossesTable values ('Pol1',115),
                                ('Pol1',25),
                                ('Pol2',0),
                                ('Pol3',110),
                                ('Pol3',75)


select  p.PolicyNumber, 
        sum(p.Premium) as Premium,
        sum(l.Losses)as Losses  
from @PremiumTable p 
        LEFT JOIN @LossesTable l on p.PolicyNumber = l.PolicyNumber
group by p.PolicyNumber

Результат:

введите здесь описание изображения

Я пробовал использовать NATURALLEFTOUTERJOIN, но возникает ошибка:

*An incompatible join column, (''[PolicyNumber]) was detected. 'NATURALLEFTOUTERJOIN' doesn't support joins by using columns with different data types or lineage.*

MyTable = 
    VAR Premium = 
            SELECTCOLUMNS(
                fact_Premium,
                "PolicyNumber",fact_Premium[PolicyNumber],
                "Premium", fact_Premium[Premium]
                )
    VAR Losses = 
                SELECTCOLUMNS(
                    fact_Losses,
                    "PolicyNumber", fact_Losses[PolicyNumber],
                    "Losses", fact_Losses[PaymentAmount]
                             )
    VAR Result = NATURALLEFTOUTERJOIN(Premium,Losses)
    RETURN Result

person Serdia    schedule 19.07.2018    source источник


Ответы (2)


Есть несколько взаимозависимых «ошибок» или ограничений, связанных с использованием переменных (VAR) и NATURALLEFTOUTERJOIN, что затрудняет отладку.

Некоторые заметные ограничения:

VAR:

На столбцы в переменных таблицы нельзя ссылаться через TableName. [ColumnName] синтаксис.

NATURALLEFTOUTERJOIN:

Или:

Связь между обеими таблицами должна быть определено до применения соединения И имена столбцов, определяющих связь, должны быть разными.

Or:

Чтобы объединить два столбца с одинаковым именем и без связей, необходимо, чтобы эти столбцы были имеют происхождение данных.

(Я немного запутался, потому что в ссылке упоминается do not have a data lineage; в официальной документации указаны только столбцы из той же исходной таблицы (имеют одинаковое происхождение).)


Вернемся к этому делу.

  1. SUMMARIZE следует использовать вместо SELECTCOLUMNS для получения сводных таблиц для Premium и Losses, т. Е .:

    Premium = 
    SUMMARIZE(
        fact_Premium,
        fact_Premium[PolicyNumber],
        "Premium", SUM(fact_Premium[Premium])
    )
    
    Losses = 
    SUMMARIZE(
        fact_Losses,
        fact_Losses[PolicyNumber],
        "Losses", SUM(fact_Losses[Losses])
    )
    
  2. Когда мы применим NATURALLEFTOUTERJOIN к двум вышеупомянутым таблицам, он вернет ошибку No common join columns detected, потому что между ними не установлена ​​связь.

введите описание изображения здесь

  1. Чтобы решить эту проблему, мы можем использовать TREATAS, как предложено в этом сообщение в блоге. Но чтобы использовать TREATAS, мы должны ссылаться на имена столбцов в Premium и Losses таблицах, поэтому мы не можем использовать VAR для их объявления, а должны фактически создать их экземпляры.

В заключение, решение было бы следующим:

  1. Создайте таблицы расчета для Premium и Losses, как указано выше.

премиум

убытки

  1. Используйте TREATAS, чтобы имитировать происхождение данных, и вместо этого присоедините Premium к таблице с Losses_TreatAs.

    MyTable = 
    VAR Losses_TreatAs = TREATAS(Losses, Premium[PolicyNumber], Losses[Losses])
    RETURN NATURALLEFTOUTERJOIN(Premium, Losses_TreatAs)
    

Полученные результаты:

результаты

person Foxan Ng    schedule 20.07.2018

Здравствуйте, предлагаю вам такой способ:

в PowerQuery создайте таблицу с policyNumber следующим образом:

  1. Дублируйте таблицу Premium и удалите столбец Premium на дубликате. Назовите это PremiumPol
  2. Скопируйте таблицу потерь и удалите столбец потерь на дубликате. Назовите это LossesPol
  3. Затем используйте кнопку «Добавить запрос», чтобы добавить PremiumPol и LossesPol. Назовите это полициномером
  4. Последнее удаление дубликата из добавленных таблиц
  5. Затем нажмите «Закрыть» и «Применить».

Убедитесь, что ваша модель такая:  введите описание изображения здесь

Затем, чтобы добавить убытки и премию на основе политики тривиально, выберите визуальный элемент таблицы и следующие поля:  введите описание изображения здесь

результат такой:

введите здесь описание изображения

Надеюсь, это поможет!

person Nelson Gomes Matias    schedule 20.07.2018