SQL в Power Query с использованием ODBC

У меня есть таблица со следующими столбцами:

Account_No, Start_Date, End_Date

Я загрузил эту таблицу в power query, используя команду SQL Select через ODBC.

Теперь я хочу получить сумму и количество транзакций всех учетных записей, указанных в приведенной выше таблице, от Start_Date до End_Date из другой таблицы. например Transaction_Table. Что я должен сделать, чтобы получить желаемые результаты.

С уважением

КАМ


person KhawarAmeerMalik    schedule 27.07.2016    source источник


Ответы (3)


На данный момент вам, вероятно, вообще не нужен Power Query. Предполагая, что ваш сервер БД - MS SQL Server 2008 или выше,

WITH t1([Account_No], StartDate, EndDate) As
(
    SELECT [Account_No], StartDate = MIN([Start_Date]), EndDate = MAX([End_Date])
    FROM Table1
    GROUP BY Account_No
)
SELECT 
      [Account_No]
    , Amount = SUM([Field_Transaction_Total])
    , [Transaction_Count] = COUNT([Field_Transaction_ID]) 
FROM [Transaction_Table] t2
INNER JOIN t1 ON t2.[Account_No] = t1.Account_No
    AND t2.[Field_Transaction_Date] BETWEEN t1.StartDate AND t1.EndDate

Вы также можете использовать копию запроса внутри блока WITH, чтобы получить эту таблицу со счетами и датами в Excel, если вам это нужно.

Если вы используете другой SQL Server, просто реорганизуйте этот код, я надеюсь, вы уловили идею.

person Eugene    schedule 28.07.2016
comment
Уважаемый г-н Евгений, Спасибо за ваш ответ, однако я получаю следующую ошибку. Подробности: ODBC: ОШИБКА [42000] [Teradata] [драйвер ODBC Teradata] [база данных Teradata] Синтаксическая ошибка, ожидается что-то вроде имени или идентификатора с разделителями Unicode между словом «Сумма» и «=». Во время выполнения кода. Можете ли вы сказать мне, что я делаю неправильно здесь. - person KhawarAmeerMalik; 01.08.2016
comment
мой код выглядит следующим образом: ‹code› с t1 (Account_Num, Account_Status_End_Dt) как (выберите Account_Num, Acct_Status_Type_Cd, Acct_Status_Reason_Cd, Acct_Status_End_Dt из dp_view_t24_ibg.Account_Status_hist, где Account_Num в (выберите Account_Num из dp_0) _N'5party_, Select Branch_Party, где branch_Num, Acct_Status_Type_Cd, Acct_Status_Reason_Cd, Acct_Status_End_Dt Amount = Sum(Event_Amt), Transaction_Count = Count(Event_Amt) From Dp_view_T24_ibg.event t2 Inner Join t1 ON t2.Account_Num = t1.Account_Num AND t2.Event_Start_Dt Между t1.Account_Status_End_Dt AND '2016-06-30'‹/code› - person KhawarAmeerMalik; 01.08.2016
comment
Как я вижу, вы используете Teradata. Хотя у меня нет опыта работы с этой СУБД, я могу предложить вам общий путь устранения неполадок. - person Eugene; 02.08.2016
comment
@KhawarArmeerMalik: Пожалуйста, отформатируйте свой код в следующий раз, его трудно читать как есть. Проверьте, нормально ли выполняется запрос внутри блока WITH — запустите его отдельно. Если это не так, замените ColumnName = expression на expression as ColumnName. - person Eugene; 02.08.2016
comment
Извините, что так пишу. В дополнение к вашему руководству я получаю следующую ошибку. DataSource.Error: ODBC: ERROR [42000] [Teradata][ODBC Teradata Driver][Teradata Database] Syntax error: Data Type "Account_Num" does not match a Defined Type name. Details: DataSourceKind=Odbc DataSourcePath=dsn=IBG_PDM OdbcErrors=Table Мой код в следующем посте. - person KhawarAmeerMalik; 02.08.2016
comment
Простите меня за то, что я не могу писать в форматированном виде. Пожалуйста помоги. - person KhawarAmeerMalik; 02.08.2016
comment
Я вижу, ты можешь! ;) Просто используйте Enter для разделения строк. В порядке. Конечно, это не удастся, поскольку в вашей таблице нет поля Account_Num, это пример, и его предполагается заменить полем вашего счета. - person Eugene; 03.08.2016

Вы можете использовать оператор GROUP BY в написанном вами SQL или отфильтровать таблицу на основе Start_Date до End_Date, а затем щелкнуть правой кнопкой мыши столбец, который вы хотите подсчитать, и выбрать Group By.

person Alejandro Lopez-Lago - MSFT    schedule 27.07.2016
comment
Дорогой Алехандро, я использую эту команду, чтобы получить первую таблицу. ‹code› Выберите Account_No, Start_Date, End_Date из Customer_Table, где Branch_ID = '4420'‹/code›. Скажите, пожалуйста, как я могу использовать группу по команде для получения данных из другой таблицы. - person KhawarAmeerMalik; 28.07.2016

Я бы начал новый запрос на основе вашей Transaction_Table. Затем я добавляю шаг слияния, присоединяясь к вашему первому запросу на Account_No. Затем я расширил Start_Date и End_Date из сгенерированного NewColumn.

Затем я бы добавил пользовательский столбец и написал такую ​​​​формулу:

= [Transaction_Date] >= [Start_Date] and [Transaction_Date] <= [End_Date]

В результирующем столбце будет указано TRUE или FALSE. Фильтр для ИСТИНА.

Наконец, я бы добавил шаг Группировать по в Sum and Count по мере необходимости.

Надеюсь, я правильно понял ваше требование - из вашего вопроса это было не совсем ясно.

person Mike Honey    schedule 02.08.2016