DAX. Проблема с промежуточными итогами и итогами - PullRequest
1 голос
/ 10 мая 2019

надеюсь, что у вас все хорошо и вы можете решить эту головоломку в DAX для PowerBI и PowerPivot.

У меня проблемы с моей мерой в промежуточных итогах и общих итогах. Моя сцена следующая:

У меня есть 3 таблицы (я делюсь ссылкой ниже с тестовым файлом, чтобы вы могли его увидеть и поработать там: robothappy:):

1) «Данные» (где каждый регистр - это проданный билет от автобусной компании);

2) «Км» (где у меня есть все возможные пути, которые автобус может сделать с их соответствующим километром). Похожие на «Данные»;

3) и «Календарь». Похожие на «Данные».

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

Каждый трек может иметь более 1 времени отправления (мы можем назвать это сервисом), но иметь конкретную длину в километрах (их километры указаны в таблице «Км»).

По сути, мне нужно рассчитать доход на километр для каждой услуги за период (год, месяц, день).

Расчет должен быть, в основном:

Сумма [Цена] (каждый проданный билет за период) / Сумма [Км] (за период с учетом услуг с указанием соответствующих километров)

Мне удалось вычислить его для детализации дня со следующей логикой и мерами:

Revenue = SUM(Data[Price])

Unique dates = DISTINCTCOUNT(Data[Date])

Revenue/Km = DIVIDE([Revenue]; SUM(Km[Km])*[Unique dates]; 0)

Я создал [Уникальные даты], чтобы рассчитать его, потому что я пытался управлять промежуточными итогами детализации трека, учитывая, что вы можете иметь более одного дня с услугами в течение периода. Например:

Для «Трек 1» мы зарегистрировались:

1 услуга в понедельник (лун) в 5:00 утра.

Revenue = $1.140. 
Km = 115. 
Tickets = 6. 
Revenue/Km = 1.140/115 = 9,91.

1 услуга во вторник (март) в 5:00 утра.

Revenue = $67. 
Km = 115. 
Tickets = 2. 
Revenue/Km = 67/115 = 0,58.

«Итоговый трек 1» должен быть:

Revenue = 1.140 + 67 = 1.207.
Km = 115 + 115 = 230.
Tickets = 6 + 2 = 8.
Revenue/Km = 1.207/230 = 5,25.

Так что в этом случае кто-то может подумать, что моя формула сработала, но проблема, с которой вы можете столкнуться, когда у меня более 1 сервиса в день, например, для Трек 3. А также это влияние на общий итог марша (марзо) .

Я понимаю, что проблема состоит в том, чтобы рассчитать правильные километры для каждого трека в каждом периоде. Если вы проверите столбец «Сумма [Km]» также неправильно.

Вот таблица (файл Excel для скачивания - вкладка "Цель") со значениями, которые должны появиться:

[цель] https://drive.google.com/file/d/1PMrc-IUnTz0354Ko6q3ZvkxEcnns1RFM/view?usp=sharing

[файл примера pbix] https://drive.google.com/file/d/14NBM9a_Frib55fvL-2ybVMhxGXN5Vkf-/view?usp=sharing

Надеюсь, вы понимаете мою проблему. Если вам нужно больше деталей, пожалуйста, дайте мне знать.

Заранее большое спасибо !!!

Энди .-

1 Ответ

1 голос
/ 13 мая 2019

Удалите "Sum of Km" - вместо этого вы всегда должны писать меры DAX.

Создайте новый показатель пройденного километра:

Total Km =
SUMX (
    SUMMARIZE (
        Data,
        Data[Track],
        Data[Date],
        Data[Time],
        "Total_km", DISTINCT ( Data[Kilometers Column] )
    ),
    [Total_km]
)

Затем измените показатель [Доход / км]:

Revenue/Km = DIVIDE([Revenue], [Total Km])

Результат:

enter image description here

Мера правильно рассчитывает км как на промежуточном, так и на общем уровнях. Как это работает:

Сначала мы используем SUMMARIZE для группировки записей по поездкам (где trip - это уникальная комбинация трека, даты и времени). Затем мы добавляем столбец в сводку, который содержит км для каждой поездки. Наконец, мы используем SUMX для итерации итоговой записи по записи и суммирования расстояний поездки.

Решение должно работать, хотя я бы порекомендовал уделить больше внимания дизайну модели данных. Вам нужно построить лучшую звездную схему, иначе DAX будет продолжать вызывать трудности. Например, я бы подумал добавить что-то вроде «Trip Id» к каждой записи - будет намного проще перебирать такие идентификаторы, а не группировать записи все время. Кроме того, более понятные имена могут помочь сделать DAX чистым (такие имена, как km [km] выглядят немного странно:)

...