DAX рассчитывается относительно прошлого месяца, квартала и года

Мне нужно создать 3 меры для отдельного подсчета MerchantName в DimMerchant за последний месяц, последние 3 месяца и последний год заданной относительной даты.

Пример:

Для DateValue = 1 апреля 2024 г. (тип даты ММддигггг)

LM: подсчет торговцев на 01.03.2024

L3M: подсчет торговцев на 01.03.2024, 01.02.2024 и 01.01.2024.

LY: количество торговцев с 01.03.2024 по 01.04.2024.

MerchantInternal# мера (текущая попытка):

CALCULATE(
    DISTINCTCOUNTNOBLANK('DimMerchant'[MerchantName]),
    FactTransaction
)

Табличные отношения:

  • Продавец «один ко многим» для FactTransaction на MerchantName
  • DimDate один ко многим для FactTransaction на DatePK

Пример ввода данных для тестирования:

  1. DimDate (один ко многим для FactTransaction на DatePK)
ДатаПК Датазначение Год Месяц 20230901 01.09.2023 2023 год 9 20231001 01.10.2023 2023 год 10 20231101 01.11.2023 2023 год 11 20231201 01.12.2023 2023 год 12 20240101 01.01.2024 2024 год 1 20240201 01.02.2024 2024 год 2 20240301 01.03.2024 2024 год 3 20240401 01.04.2024 2024 год 4 20240501 01.05.2024 2024 год 5
  1. DimMerchant (один ко многим для FactTransaction на MerchantHK)
ТорговецHK Имя продавца ААА НААА ААА НААА ВВВ НБББ ДДД НДДД ВВВ НБББ ДДД НДДД CCC MCCC ДДД МДДД ВВВ МБББ
  1. FactTransaction (Основная таблица фактов, в которой DimDate и DimMerchant связаны)
ДатаПК ТорговецHK 20230901 ААА 20231001 ААА 20231101 ВВВ 20231201 ДДД 20240101 ВВВ 20240201 ДДД 20240301 CCC 20240401 ДДД 20240501 ВВВ

Можете ли вы предоставить набор данных, соответствующий вашей модели данных?

Amira Bedhiafi 02.07.2024 21:32

@AmiraBedhiafi, спасибо, что заметили. Добавлены примеры данных для трех таблиц DimMerchant, DimMerchant и FactTransaction.

ap3x 02.07.2024 21:49
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Взгляните на DAX Функции Time Intelligence.

Вот пример того, как могут выглядеть ваши меры:

// base measure
# Merchant =
  CALCULATE(
    DISTINCTCOUNTNOBLANK(DimMerchant[MerchantHK]),
    FactTransaction
  )

// Last Month or Previous Month
# Merchant LM = CALCULATE([# Merchant], PREVIOUSMONTH(DimDate[DateValue]))

// Last 3 months (not including current selected month)
# Merchant L3M =
  CALCULATE(
    [# Merchant],
    DATESINPERIOD(DimDate[DateValue], MAX(DimDate[DateValue]) - 1, -3, MONTH)
  )

// Last 12 months (not including current selected month)
# Merchant LY =
  CALCULATE(
    [# Merchant],
    DATESINPERIOD(DimDate[DateValue], MAX(DimDate[DateValue]) - 1, -12, MONTH)
  )

Привет, Сэм, спасибо за решение. Это работает :) Вскоре отмечу его как ответ, но у меня есть еще 1 вопрос (не эксперт по DAX). В случае, если мне также нужно вычислить, что первая транзакция продавца произошла в данном году (т. е.: для 202403 года, найдите мне продавцов, у которых была первая транзакция в 2024 году, а затем посчитайте соответственно lm , l3m, l12m. Я пытаюсь: CALCULATE( [MerchantInternal#], YEAR(MIN(DimDate[DateValue])) = YEAR(DimDate[DateValue]), DATESINPERIOD(DimDate[DateValue], MAX(DimDate[DateValue]), -12, MONTH)) Но, похоже, это не так полностью правильный.

ap3x 04.07.2024 13:07

Другие вопросы по теме