Самостоятельно присоединиться к столу с самим собой, пока его не обнулит


Я ищу способ (используя SQL или DAX) самостоятельно присоединиться к таблице, пока она не обнулится. Пример, вероятно, самый простой способ описать проблему: Предположим, у нас есть справочная таблица вроде этой:

Name    Next Youngest Sibling
Aaron   Nicole
Nicole  Bobby

Из этого я хотел бы создать соединение, которое выравнивает эту таблицу следующим образом:

Name    Next Sibling    Next X 2 Sibling    Next x 3 Sibling
Aaron   Nicole          Bobby               Null
Nicole  Bobby           Null                Null
Bobby   Null            Null                Null

Очевидно, это можно сделать с помощью 3 ручных соединений, но я ищу способ сделать это динамическим, чтобы он создавал столько столбцов «Next x X», сколько ему нужно, чтобы «обнулить» каждую строку в наборе результатов.

Спасибо,
Мэтт

Есть ли у вас верхняя граница количества братьев и сестер? Один вопрос - действительно ли он (действительно) должен быть в таком формате вывода? Это будет нетривиально, потому что вам понадобится динамический стержень. Если что-то вроде {Имя, брат, сестра, возрастной рейтинг} сработает, вам нужен гораздо более простой запрос.

Error_2646 17.08.2018 19:06
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
238
2

Ответы 2

Позже вам придется выполнить поворот самостоятельно, но вы можете создать его столбчатую форму в следующих строках в DAX:

Nulled = ADDCOLUMNS(
            CROSSJOIN(
                VALUES(Siblings[Name]),
                SELECTCOLUMNS(GENERATESERIES(1, COUNT(Siblings[Name])), "Nth", [Value])),
            "Sibling", LOOKUPVALUE(Siblings[Name],
                           Siblings[Rank], [Nth] + RANK.EQ([Name], Siblings[Name], ASC)),
            "Column", IF([Nth] = 1, "Next", "Next x " & [Nth]) & " Sibling")

Предполагается, что вы добавили столбец Rank в исходную таблицу Siblings.


Ключевым моментом здесь является перекрестное соединение, чтобы получить желаемый размер таблицы, а затем определить Sibling.

Unpivoted

Если вы конвертируете нули в пустые строки, это прекрасно работает в матричном визуале, где Name находится в строках, а Column - в столбцах. (Без замены нулей визуальный элемент не будет отображать ни последнюю строку, ни последний столбец, поскольку все они являются пустыми.)

Matrix Visual

Вот это да. Вы действительно мастер DAX!

Foxan Ng 17.08.2018 19:49

Это можно сделать с помощью функций PATH () и PATHITEMREVERSE () в DAX.

results

Чтобы получить полный путь для каждой строки:

All Names = PATH(People[Name], People[Next Youngest Sibling])

Это будет строка, разделенная вертикальной чертой (|); и в этом случае он находится в обратном порядке, потому что концепция братьев и сестер противоположна концепции родитель-потомок по умолчанию.

Чтобы получить Next Sibling и Next X 2 Sibling:

Next Sibling = PATHITEMREVERSE(People[All Names], 2)
Next X 2 Sibling = PATHITEMREVERSE(People[All Names], 3)

Где поиск будет выполняться справа от строки пути.

Ограничение: конечный узел также должен присутствовать в таблице, следовательно, дополнительная строка Bobby, Bobby; в противном случае функция PATH() вернет ошибку.

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